题目所给代码
#include int fun(int x) { int n, s1, s2, s3, t; n=0; t=100; /found/ while(t<=1){ /found/ s1=t%10; s2=(2)%10; s3=t/100; /found/ if(s1+s2+s3==3) { printf(“%d “,t); n++; } t++; } return n; } main() { int x=-1; while(x<0) { printf(“Please input(x>0): “); scanf(”%d”,&x); } printf(”\nThe result is: %d\n”,fun(x)); }
题目要求
- 作为函数值返回。
- 例如,当x值为5时,100 ~ 999之间各位上数字之和为5的整数有: 104、113、 122、131、 140、 203、 212、 221、 230、 302、 311、 320、 401、 410、
- 500。共有15个。当x值为27时,各位数字之和为27的整数是: 999。 只有1个。
- 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
- 注意:源程序存放在考生文件夹下的BLANK1.C中。
- 不得增行或删行,也不得更改程序的结构!”
解析
这个程序由两个函数构成:fun 和 main。其中,main 函数用于接收用户输入的数字,然后调用 fun 函数,并输出 fun 函数的返回值。fun 函数的目的是找出所有满足条件的整数,并将其打印在屏幕上。为了在 fun 函数中实现这个目标,我们使用一个 while 循环来循环遍历从 100 到 999 的所有整数。在每次循环中,我们首先计算三个数字:个位数、十位数和百位数,并将它们相加。如果它们的和等于 x,那么我们就找到了一个符合条件的数字。在这种情况下,我们将打印这个数字,并将找到的数字的数量增加 1。最后,fun 函数返回找到的数字的总数。
逐一解析程序中缺少的部分。在程序中,我们需要在 while 循环的条件语句中填入一个表达式,以便循环可以在找到 999 以前进行。因为我们要遍历从 100 到 999 的所有数,所以条件应该是 t 小于等于 999。因此,我们需要在条件语句中填入 t<=999。
我们需要在计算十位数的表达式中填入正确的表达式。我们知道,十位数是通过对 t 取模得到的,然后将结果除以 10 取整,而不是通过对 t 除以 10 得到的。因此,我们应该在表达式中使用 t / 10 % 10,而不是 t / 10。
最后,因为程序中已经有一个变量 t,用于跟踪当前正在检查的数字,所以我们需要使用另一个变量来保存符合条件的数字的数量。因此,我们需要将 t 更改为 n。
程序
#include int fun(int x) { int n, s1, s2, s3, t; n = 0; t = 100; while(t <= 999) { // 将 __1__ 替换为 t <= 999 s1 = t % 10; s2 = (t / 10) % 10; // 将 __2__ 替换为 t / 10 % 10 s3 = t / 100; if(s1 + s2 + s3 == x) { printf("%d ", t); n++; } t++; } return n; } int main(void) { int x = -1; while (x < 0) { printf("Please input (x > 0): "); scanf("%d", &x); } printf("\nThe result is: %d\n", fun(x)); return 0; }