编写输出1-100内模指定数余3的数的C程序及代码首行显示3的原因
C语言相关问题解答
1. 编写打印1-100中除以指定整数余3的数字的程序
要实现这个功能,我们得先让用户输入一个指定整数,然后遍历1到100的所有数字,判断每个数除以该整数的余数是否为3。这里有个关键细节要注意:余数必须小于除数,所以如果用户输入的整数≤3,根本不可能存在余数为3的数(比如输入2的话,余数只能是0或1),所以程序里最好加上输入校验,引导用户输入符合要求的数。
下面是完整的实现代码:
#include<stdio.h> int main() { int i, num; printf("请输入一个大于3的整数:"); // 输入校验:确保输入是有效整数且大于3 while (scanf("%d", &num) != 1 || num <= 3) { // 清除输入缓冲区里的无效字符,避免死循环 while (getchar() != '\n'); printf("输入无效,请重新输入一个大于3的整数:"); } printf("1到100中除以%d余数为3的数字有:\n", num); for (i = 1; i <= 100; i++) { if (i % num == 3) { printf("%d ", i); } } printf("\n"); return 0; }
代码说明:
- 用
while循环做输入校验,既确保用户输入的是合法整数,又保证数值大于3,避免出现没有符合条件数字的尴尬情况; - 遍历1到100的每个数字,用
i % num == 3判断是否符合要求,符合的话直接打印输出。
2. 解释给定代码运行时首行显示数字3的现象
先把你提供的代码贴出来方便分析:
#include<stdio.h> int main() { int i, num; printf("\nInput an integer:"); scanf("%d", &num); for (i = 0; i <= 100; i++) { if (i%num == 3) { printf("%d\n", i); } } return 0; }
出现首行打印3的核心原因是:当你输入的整数num大于3时,i=3会满足i%num ==3的判断条件。
在C语言的除法规则里,当被除数小于除数时,商为0,余数就等于被除数本身。举几个例子:
- 输入
num=4时,3%4 = 3(因为4×0=0,3-0=3); - 输入
num=7时,3%7=3,以此类推。
你的循环是从i=0开始遍历到100,当i=3时,只要num>3,就会触发if条件,打印出3,这就是首行显示3的原因。
还有一种特殊情况:如果scanf读取输入失败(比如你输入了字母直接回车),num作为未初始化的局部变量,栈上的初始值是随机的。如果这个随机值刚好大于3,同样会触发i=3时的条件,打印出3。
补充说明:以下情况不会出现首行打印3的现象:
- 当输入的
num=3时,i%3的余数只能是0、1、2,无法等于3; - 当输入的
num≤2时,余数的范围小于3,同样不可能满足i%num ==3的条件。
内容的提问来源于stack exchange,提问作者dev_cc
相关产品推荐
相关产品推荐

