C#程序代码
C#程序代码
文章目录
- C#程序代码
- 一、倒序输出
- 二、大小写转换
- 三、计算1-50中是7的倍数的数值之和
- 四、判断是否为闰年
- 五、求1+2+3++100的和
- 六、求n!
- 七、输入三个整数,由大到小排列
- 八、求解一元二次方程
- 九、学生成绩转换
- 十、运输公司对用户计算运输费用。
- 十一、输出星星
- 十二、九九乘法口诀表
- 十三、输出菱形
- 十四、求最大公约数和最小公倍数
- 十五、输出所有的水仙花数
- 十六、判断是否是素数
- 十七、输出100-200之间的所有素数
一、倒序输出
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 和 scanf 函数int main()
{int number; // 存储用户输入的整数(会被修改)int digit; // 用于保存每次从 number 中取出的个位数字// 提示用户输入一个整数printf("请输入一个数:");// 读取用户输入的整数并存储到变量 number 中scanf("%d", &number);// 输出提示信息:即将开始倒序输出该数的每一位printf("倒序输出的值为:");// 方法一:使用 while 循环(推荐用于正数处理)/*while (number != 0) // 当 number 不为 0 时继续循环{digit = number % 10; // 取出当前 number 的个位数字printf("%d", digit); // 输出这个数字number = number / 10; // 去掉最后一位(整除10)}*/// 方法二:使用 do...while 循环/*do{digit = number % 10; // 取个位printf("%d", digit); // 输出number = number / 10; // 去掉个位} while (number != 0); // 条件判断在循环末尾执行*/// ⚠️ 注意:如果输入的是 0,do-while 至少执行一次 → 正确输出 "0"// 但 while 版本不会进入循环 → 需要特殊处理!// 方法三:使用 for 循环(当前启用版本)for (; number != 0; number /= 10){digit = number % 10; // 取出个位数字printf("%d", digit); // 立即输出// number /= 10 相当于 number = number / 10,在每次循环后自动执行}// 换行,使输出更清晰printf("\n");return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
二、大小写转换
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出头文件,用于使用 printf 和 scanf 函数int main()
{char ch; // 定义一个字符变量 ch,用于存储用户输入的单个字符// 提示用户输入一个字符printf("请输入一个字符:");// 读取用户输入的一个字符并存储到变量 ch 中// %c 格式符表示读取单个字符(包括空格、字母、符号等)scanf("%c", &ch);/* 方法一:使用条件运算符(三目运算符)实现大小写转换(已被注释)** 解释:* (ch >= 'A' && ch <= 'Z') ? (ch + 32) : ch;* 如果 ch 是大写字母(在 'A' 到 'Z' 范围内),则将其转换为小写(ASCII 加 32)* 否则保持不变** 示例:* 'A' + 32 = 'a'* 'B' + 32 = 'b'*//*ch = (ch >= 'A' && ch <= 'Z') ? (ch + 32) : ch;printf("%c\n", ch);*/// 方法二:使用 if-else 语句判断并处理(当前启用版本)if (ch >= 'A' && ch <= 'Z') {// 如果输入的字符是大写字母(ASCII 在 'A'~'Z' 范围内)// 将其转换为对应的小写字母:ASCII 码加 32// 因为大写和小写之间的 ASCII 差值为 32ch = ch + 32;// 输出转换后的小写字母printf("%c\n", ch);}else{// 如果不是大写字母(如小写字母、数字、标点符号、空格等)// 直接输出原始字符,不做任何修改printf("%c\n", ch);}return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
三、计算1-50中是7的倍数的数值之和
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 函数(本程序未使用 scanf)int main()
{int number; // 循环变量:用于遍历从 1 到 50 的每一个整数int sum = 0; // 累加器:用于保存所有 7 的倍数之和,初始化为 0// 输出提示信息printf("7的倍数有:");// 使用 for 循环遍历从 1 到 50(包含)的所有整数for (number = 1; number <= 50; number++){// 判断当前 number 是否能被 7 整除(即是否为 7 的倍数)if (number % 7 == 0){// 如果是 7 的倍数,则打印该数字,用制表符 \t 分隔,保持格式整齐printf("%d\t", number);// 将这个倍数加入到累加器 sum 中sum = sum + number;}// 如果不是 7 的倍数,则跳过,继续下一次循环}// 换行后输出所有符合条件的数字之和printf("\n和为:%d\n", sum);return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
四、判断是否为闰年
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 和 scanf 函数int main()
{int year; // 定义一个整型变量 year,用于存储用户输入的年份// 提示用户输入一个年份printf("请输入年份:");// 读取用户输入的整数并存储到变量 year 中scanf("%d", &year);// 判断是否为闰年的条件(根据公历规则):// 闰年规则:// 1. 能被 4 整除 且 不能被 100 整除 → 是闰年// 2. 或者:能被 400 整除 → 也是闰年if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){// 如果满足上述任一条件,则该年是闰年printf("%d是闰年\n", year);}else{// 不满足条件则为平年printf("%d是平年\n", year);}return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
五、求1+2+3++100的和
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等标准输入输出函数的安全警告#include <stdio.h> // 包含标准输入输出头文件,用于使用 printf 和 scanf 等函数int main()
{int i = 1; // 循环控制变量:表示当前累加的数字,从 1 开始int sum = 0; // 累加器:用于存储累加结果,初始值设为 0(因为加法单位元是 0)// 方法一:while 语句(已被注释)/*while (i <= 100) // 当 i 小于等于 100 时继续执行循环{sum = sum + i; // 将当前 i 的值加到 sum 上i = i + 1; // i 自增 1,进入下一个数}// 特点:先判断条件,再执行循环体。如果初始 i > 100,则一次都不执行。*/// 方法二:do...while 语句(已被注释)/*do{sum = sum + i; // 先执行一次累加操作i = i + 1; // i 自增}while (i <= 100); // 判断是否满足继续条件// 特点:先执行一次循环体,再判断条件。即使 i 初始大于 100 也会执行一次(可能导致错误)// 注意:若 i 初始为 1,则能正确计算 1~100 的和*/// 方法三:for 语句(当前启用版本)for (i = 1; i <= 100; i++) // for(初始化; 条件判断; 更新){sum = sum + i; // 每次将当前 i 加入总和// 第一次:sum=0+1=1;第二次:sum=1+2=3;……}// 循环结束后,sum 中保存的就是 1 到 100 的累加结果// 输出最终的求和结果printf("sum=%d\n", sum);return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
六、求n!
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 和 scanf 函数int main()
{int i = 1; // 循环变量:用于从 1 开始递增到 nint n; // 存储用户输入的整数 n,表示要求 n 的阶乘int s = 1; // 累乘器:用于保存阶乘结果,初始值设为 1(因为乘法单位元是 1)// 提示用户输入一个整数 nprintf("请输入N的值:");// 读取用户输入的整数并存储到变量 n 中scanf("%d", &n);// 方法一:while 语句(已被注释)/*while (i <= n) // 当 i 小于等于 n 时继续循环{s = s * i; // 将当前 i 值乘入累乘器 si = i + 1; // i 自增 1,准备下一次迭代}*/// 方法二:do...while 语句(已被注释)/*do{s = s * i; // 先执行一次乘法操作i = i + 1; // i 自增}while (i <= n); // 判断是否继续循环// 注意:这种方法在 n=0 时会出错,因为先执行再判断,导致多乘一次 i=1*/// 方法三:for 语句(当前启用版本)for (i = 1; i <= n; i++) // 初始化 i=1;当 i<=n 时执行循环体;每次循环后 i++{s = s * i; // 将当前 i 值乘入结果 s// 例如:第一次 s=1*1=1,第二次 s=1*2=2,第三次 s=2*3=6...}// 循环结束后,s 中保存的就是 n!// 输出最终的阶乘结果printf("s=%d\n", s);return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
七、输入三个整数,由大到小排列
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 的安全警告#include <stdio.h> // 包含标准输入输出头文件,用于使用 printf 和 scanf 函数int main()
{int x, y, z; // 定义三个整型变量,用于存储用户输入的三个正整数int temp; // 临时变量,用于交换两个数的值// 提示用户输入三个正整数,用空格分隔printf("请输入三个正整数:");// 读取用户输入的三个整数,格式为:数字 数字 数字(例如:5 3 8)scanf("%d %d %d", &x, &y, &z);// 第一次比较:确保 x 是 x 和 y 中较大的那个if (x < y){temp = x; // 将 x 的值保存到 tempx = y; // 把较大的 y 赋给 xy = temp; // 把原来的 x 值赋给 y// 结果:x >= y}// 第二次比较:确保 x 是 x 和 z 中较大的那个(即 x 成为三者中的最大值)if (x < z){temp = x; // 将 x 的值保存到 tempx = z; // 把较大的 z 赋给 xz = temp; // 把原来的 x 值赋给 z// 结果:x >= z,并结合前面逻辑 → x 是最大值}// 第三次比较:确保 y 是 y 和 z 中较大的那个(此时 x 已经是最大)// 所以只需对 y 和 z 排序,使得 y >= zif (y < z){temp = y; // 将 y 的值保存到 tempy = z; // 把较大的 z 赋给 yz = temp; // 把原来的 y 值赋给 z// 结果:y >= z}// 此时,x >= y >= z,三个数已按从大到小顺序排列printf("%d、%d、%d\n", x, y, z); // 输出排序后的结果,使用顿号分隔return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
八、求解一元二次方程
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{double a, b, c;double delta, root1, root2, realPart, imagPart;// 提示用户输入方程的系数printf("请输入一元二次方程 ax^2 + bx + c = 0 的系数 a, b, c:");scanf("%lf,%lf,%lf", &a, &b, &c);// 检查 a 是否为 0,如果为 0 则不是一元二次方程if(a==0){printf("当 a = 0 时,这不是一个一元二次方程。\n");return 1;}// 计算判别式delta = b * b - 4 * a * c;// 根据判别式的值进行不同情况的处理if(delta>0){// 有两个不相等的实数根root1 = (-b + sqrt(delta)) / (2 * a);root2 = (-b - sqrt(delta)) / (2 * a);printf("方程有两个不相等的实数根:\n");printf("x1 = %f\n", root1);printf("x2 = %f\n", root2);}else if(delta==0){// 有两个相等的实数根root1 = root2 = -b / (2 * a);printf("方程有两个相等的实数根:\n");printf("x1 = x2 = %f\n", root1);}else{// 没有实数根,有两个共轭复数根realPart = -b / (2 * a);imagPart = sqrt(-delta) / (2 * a);printf("方程没有实数根,有两个共轭复数根:\n");printf("x1 = %f + %fi\n", realPart, imagPart);printf("x2 = %f - %fi\n", realPart, imagPart);}return 0;
}
九、学生成绩转换
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 的安全警告#include <stdio.h> // 包含标准输入输出头文件,用于使用 printf 和 scanf 函数int main()
{// 方法一:使用 if-else 语句判断成绩等级(被注释掉)/*float score; // 定义浮点型变量 score,用于存储用户输入的成绩(可带小数)char grade; // 预留字符变量,可用于后续存储等级字母(本程序直接打印未使用)printf("请输入学生的成绩:"); // 提示用户输入成绩scanf("%f", &score); // 读取用户输入的浮点数成绩// 使用 if-else 多分支结构进行等级判断if (score >= 90){printf("等级:A"); // 成绩 >= 90 分 → A 等}else if (score >= 80){printf("等级:B"); // 80 <= 成绩 < 90 → B 等}else if (score >= 70){printf("等级:C"); // 70 <= 成绩 < 80 → C 等}else if (score >= 60){printf("等级:D"); // 60 <= 成绩 < 70 → D 等}else{printf("等级:E"); // 成绩 < 60 → E 等(不及格)}*/// 方法二:使用 switch 语句判断成绩等级(当前启用版本)int score; // 定义整型变量 score,只接受整数成绩(如 85、92)// 使用整型便于通过除以 10 来获取十位数作为 switch 判断依据printf("请输入学生的成绩:"); // 提示用户输入成绩scanf("%d", &score); // 读取一个整数成绩// 将成绩除以 10 取整,得到其“十位数”// 例如:95 / 10 = 9, 87 / 10 = 8, 100 / 10 = 10// 然后根据这个值进入不同的 case 分支switch (score / 10){case 10: // 当成绩为 100 时,100/10=10case 9: // 当成绩在 [90, 99] 时,score/10 = 9printf("等级:A"); break; // 跳出 switch,防止继续执行下一个 case(避免“穿透”)case 8: // [80, 89]printf("等级:B"); break;case 7: // [70, 79]printf("等级:C"); break;case 6: // [60, 69]printf("等级:D"); break;default: // 其他情况:包括 [0, 59] 和非法负数或超过 100 的值printf("等级:E"); // 统一归为 E 等(不及格)// 注意:这里没有 break,但由于是最后一个分支,不影响结果}return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
十、运输公司对用户计算运输费用。
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 对 scanf、printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 和 scanf 函数int main()
{int c; // 分段标识变量:用于表示距离 s 所处的区间段(每250km一段)float p, w, d, f, s; // p: 单价(每吨每千米的运费)// w: 重量(单位:吨)// s: 距离(单位:千米)// d: 折扣率(单位:%)// f: 最终总运费(单位:元)// 提示用户输入单价、重量和距离,并以逗号分隔三个浮点数printf("请输入单价、重量、距离:"); // 使用 scanf 读取用户输入的三个浮点数值// 输入格式必须为:单价,重量,距离(例如:3.5,4.0,600)scanf("%f,%f,%f", &p, &w, &s);// 根据距离 s 计算所属的折扣区间编号 c// 每 250km 为一个区间:[0,250) -> 0, [250,500) -> 1, ..., [2500,) -> 10+c = (int)(s / 250); // 使用 switch 语句根据 c 的值确定对应的折扣率 d(单位:%)switch (c){case 0: // 距离小于 250km:无折扣d = 0;break;case 1: // 距离在 [250, 500) km:2% 折扣d = 2;break;case 2:case 3: // 距离在 [500, 1000) km:5% 折扣d = 5;break;case 4:case 5:case 6:case 7: // 距离在 [1000, 2000) km:8% 折扣d = 8;break;case 8:case 9:case 10:case 11: // 距离在 [2000, 3000) km:10% 折扣d = 10;break;default: // 其他情况(即距离 >= 3000km):最大折扣 15%d = 15;break;}// 计算实际运费:// 原始费用 = 单价 * 重量 * 距离// 实际费用 = 原始费用 × (1 - 折扣率/100)// 例如:折扣 10%,则支付 90%f = p * w * s * (1 - d / 100.0);// 输出最终总费用,格式化为右对齐、占10个字符宽度、保留两位小数printf("总费用:%10.2f元\n", f);return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
十一、输出星星
#define _CRT_SECURE_NO_WARNINGS 1
// 宏定义:禁用 Visual Studio 编译器对标准输入输出函数(如 printf)的安全性警告#include <stdio.h>
// 包含标准输入输出头文件,以便使用 printf 函数进行屏幕输出int main()
{int i, j; // 定义两个整型变量:// i: 控制外层循环,表示当前是第几行// j: 控制内层循环,表示当前行要打印多少个星号// 外层 for 循环:控制打印的行数// i 从 1 开始,到 7 结束(共 7 行)for (i = 1; i <= 7; i++){// 内层 for 循环:控制每一行中星号的个数// j 从 0 开始,小于 i 时继续循环,因此每行打印 i 个星号// 例如:当 i=1 时,j=0 → 执行一次 → 打印 1 个 *// 当 i=2 时,j=0,1 → 执行两次 → 打印 2 个 *for (j = 0; j < i; j++){printf("*"); // 每次循环打印一个星号 '*'// 注意:这里没有换行,所有 '*' 在同一行连续输出}// 当前这一行星号打印完成后,换行// 进入下一次外层循环,打印下一行printf("\n");}return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
十二、九九乘法口诀表
#define _CRT_SECURE_NO_WARNINGS 1 // 禁用 Visual Studio 对 scanf、printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出头文件,用于使用 printf 函数int main()
{int i, j, score; // 定义三个整型变量:// i: 外层循环变量,表示乘法表中的第一个乘数(从 1 到 9)// j: 内层循环变量,表示第二个乘数(从 1 到 i)// score: 存储 i 和 j 相乘的结果// 外层循环:控制行数,i 从 1 到 9for (i = 1; i <= 9; i++){// 内层循环:控制每行中列的数量,j 从 1 到 i// 这样可以保证只打印下三角部分(即 j <= i)for (j = 1; j <= i; j++){score = i * j; // 计算当前两个数的乘积// 打印格式为 "i*j=score",并用制表符 \t 分隔,保持对齐printf("%d*%d=%d\t", i, j, score);}// 每完成一行后换行,进入下一行printf("\n");}return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
十三、输出菱形
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告
// 在学习阶段使用标准输入输出函数是安全且常见的做法#include <stdio.h> // 包含标准输入输出库,用于使用 printf 函数(本程序未使用 scanf)int main()
{int i, j, k; // 循环控制变量// i: 控制行数// j: 控制每行星号前的空格数量// k: 控制每行要打印的星号 '*' 的数量// *******************************// 第一部分:打印菱形的上半部分(包含中间最长一行)// 共 4 行,形成一个顶点在上的等腰三角形// *******************************for (i = 1; i <= 4; i++) // 控制行数:共 4 行(第1到第4行){// 第一个内层循环:打印每行前面的空格// 随着行数增加,空格减少for (j = 1; j <= 4 - i; j++){printf(" "); // 打印一个空格,用于居中对齐}// 第二个内层循环:打印星号 '*'// 星号数量为奇数序列:1, 3, 5, 7(对应 2*i - 1)for (k = 1; k <= 2 * i - 1; k++){printf("*"); // 打印一个星号}// 每行结束后换行printf("\n");}// *******************************// 第二部分:打印菱形的下半部分(不包含中间那一行)// 共 3 行,形成一个顶点在下的倒三角形// *******************************for (i = 1; i <= 3; i++) // 控制行数:共 3 行(第5到第7行){// 第一个内层循环:打印每行前面的空格// 随着行数增加,空格增多(与上半部对称)for (j = 1; j <= i; j++){printf(" "); // 打印空格,使图形保持居中}// 第二个内层循环:打印星号 '*'// 星号数量递减:5, 3, 1(公式为 7 - 2*i)// 当 i=1 → 7-2=5// i=2 → 7-4=3// i=3 → 7-6=1for (k = 1; k <= 7 - 2 * i; k++){printf("*"); // 打印星号}// 每行结束后换行printf("\n");}return 0; // 主函数正常结束,返回 0 表示程序执行成功
}
十四、求最大公约数和最小公倍数
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 和 scanf 函数int main()
{int m, n; // 存储用户输入的两个整数int i, j; // 辅助变量:i 用于保存 m*n(用于计算 LCM),j 用于存储余数int temp; // 临时变量,用于交换 m 和 n 的值// 提示用户输入两个整数 M 和 Nprintf("请输入M和N的值:");// 读取用户输入的两个整数,分别赋值给 m 和 nscanf("%d %d", &m, &n);// 确保 m >= n,方便后续进行辗转相除// 如果 n > m,则交换它们的值if (n > m){temp = n; // 将 n 的值暂存到 tempn = m; // 把 m 的值赋给 nm = temp; // 把原来 n 的值赋给 m// 经过这三步,实现了 m 和 n 的值交换}// 保存 m 和 n 的原始乘积,用于后续计算最小公倍数(LCM)// 因为公式是:LCM(m, n) = (m * n) / GCD(m, n)i = m * n;// 使用欧几里得算法(辗转相除法)求最大公约数(GCD)// 原理:gcd(a, b) = gcd(b, a mod b),直到 b 为 0while (n != 0) // 当 n 不等于 0 时继续循环{j = m % n; // 计算 m 除以 n 的余数,保存在 j 中m = n; // 将 n 的值赋给 m(被除数变成除数)n = j; // 将余数 j 赋给 n(除数变成余数)// 这样一轮后,进入下一次循环,继续求余}// 当 n 变成 0 时,循环结束,此时 m 就是原来的两个数的最大公约数// 输出结果printf("最大公约数是:%d\n", m); // 此时 m 就是 GCD// 利用公式:LCM = (原 m * 原 n) / GCD// 我们之前用 i = 原始 m * 原始 n 保存了乘积printf("最小公倍数是:%d\n", i / m); // LCM = (m*n) / GCDreturn 0; // 主函数正常结束,返回 0 表示程序执行成功
}
十五、输出所有的水仙花数
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告
// 在学习阶段使用这些标准输入输出函数是常见且安全的做法#include <stdio.h> // 包含标准输入输出库,用于使用 printf 函数int main() // 主函数:程序的入口点
{int i, j, k; // 分别表示三位数的百位、十位、个位数字int n; // 循环变量,用于遍历所有三位数(100 到 999)int z; // 存储各位数字立方和的结果// 输出提示信息,告诉用户接下来将显示水仙花数printf("水仙花数:");// 使用 for 循环遍历所有的三位整数(从 100 到 999)for (n = 100; n < 1000; n++){// 提取百位数字:整除 100 得到最高位// 例如:n = 153 → i = 153 / 100 = 1(整数除法自动舍去小数部分)i = n / 100;// 提取十位数字:// 先 n / 10 去掉个位 → 得到前两位(如 153 → 15)// 再 % 10 取余 → 得到个位即原来的十位(15 % 10 = 5)j = n / 10 % 10;// 提取个位数字:直接对 10 取余即可// 例如:153 % 10 = 3k = n % 10;// 计算三个数字的立方和// 即:百位^3 + 十位^3 + 个位^3z = i * i * i + j * j * j + k * k * k;// 判断当前数 n 是否等于其各位数字的立方和// 如果相等,则 n 是一个“水仙花数”if (n == z){// 输出这个水仙花数,并用制表符 \t 分隔,保持在同一行打印printf("%d\t", n);}}// 返回 0 表示程序正常结束return 0;
}
十六、判断是否是素数
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 的安全警告#include <stdio.h> // 包含标准输入输出库,用于使用 printf 和 scanf 函数int main()
{int n; // 存储用户输入的整数int i; // 循环变量,用于尝试从 2 到 n-1 的每一个可能的因数// 提示用户输入一个整数printf("请输入一个整数:");// 读取用户输入的整数,并存储到变量 n 中scanf("%d", &n);// 使用 for 循环从 2 开始遍历到 n-1(即所有可能的小于 n 的因数)// 目的是检查是否存在能整除 n 的数for (i = 2; i <= n - 1; i++){// 如果 n 能被 i 整除(余数为 0),说明 i 是 n 的一个因数if (n % i == 0){// 发现因数,立即跳出循环,不需要继续检查break;}}// 循环结束后判断:// 如果 i < n,说明在循环中找到了一个因数(执行了 break),所以不是素数// 如果 i >= n,说明没有找到任何因数(循环自然结束),因此是素数if (i < n){printf("%d不是素数。\n", n);}else{printf("%d是素数。\n", n);}// 返回 0 表示程序正常结束return 0;
}
十七、输出100-200之间的所有素数
#define _CRT_SECURE_NO_WARNINGS 1
// 禁用 Visual Studio 编译器对 scanf/printf 等函数的安全警告
// 在学习阶段使用这些标准输入输出函数是常见且可接受的做法#include <stdio.h> // 包含标准输入输出库,用于使用 printf 函数
#include <math.h> // 包含数学库,用于使用 sqrt() 函数(计算平方根)int main()
{int i; // 内层循环变量:用于尝试从 2 到 √n 的每一个可能的因数int k; // 存储 n 的平方根(整数部分),作为内层循环的上限int n; // 外层循环变量:表示当前正在判断的数字(从 101 到 199 的奇数)int m = 0; // 计数器:记录已找到的素数个数,用于控制每行输出 7 个数// 外层循环:遍历从 101 到 200 的所有**奇数**// 因为大于 2 的偶数一定不是素数,所以跳过偶数可以提高效率for (n = 101; n <= 200; n = n + 2) // 每次加 2,只检查奇数{// 计算当前数 n 的平方根,并赋值给 k// 因为判断一个数是否为素数时,只需检查是否存在小于等于 √n 的因数k = (int)sqrt(n); // 注意:sqrt 返回 double,需强制转换为 int// 内层循环:尝试用 i 从 2 到 k 去除 nfor (i = 2; i <= k; i++){if (n % i == 0) // 如果 n 能被 i 整除,说明 n 不是素数{break; // 提前退出内层循环,无需继续检查其他因子}}// 循环结束后判断:// 如果 i > k(即 i >= k+1),说明没有找到任何因数 → n 是素数if (i >= k + 1){printf("%d\t", n); // 输出该素数,用制表符分隔m = m + 1; // 素数计数器加一} // 控制格式输出:每输出 7 个素数就换一行// m % 7 == 0 表示当前已输出的素数个数是 7 的倍数if (m % 7 == 0){printf("\n"); // 换行,使输出更整齐美观}}// 返回 0 表示程序正常结束return 0;
}