全国计算机二级C语言 # 程序填空题:自加、自减和逗号运算符(1-14)
41)
给定程序中,函数 fun 的功能是:找出 100 至 x (x <999) 之间各位上的数字之和为 15 的所有整数,然后输出;符合条件的整数个数作为函数值返回。
例如,当 n 值为 500 时,各位数字之和为 15 的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有 26 个。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int fun(int x)
{ int n, s1, s2, s3, t;
/**********found**********/
n=__1__;
t=100;
/**********found**********/
while(t<=__2__)
{ s1=t%10; s2=(t/10)%10; s3=t/100;
if(s1+s2+s3==15)
{ printf(“%d “,t);
n++;
}
/**********found**********/
__3__;
}
return n;
}
main()
{ int x=-1;
while(x>999||x<0)
{ printf(“Please input(0<x<=999): “); scanf(“%d”,&x); }
printf(“\nThe result is: %d\n”,fun(x));
}
[codesyntax lang=”php”]
【微答案】 (1) 0 (2) X (3) t++ 【微分析】 填空 1: 变里 n 用于存放符合条件的整数的个数,应赋初值为 0。填空 2: 根据题目要求,确定循环变量 t 的取值范围 t <= xo 填空 3: 循环变量 t 自增 1 操作 o #include int fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=__1__; t=100; /**********found**********/ while(t<=__2__) { s1=t%10; s2=(t/10)%10; s3=t/100; if(s1+s2+s3==15) { printf("%d ",t); n++; } /**********found**********/ __3__; } return n; } main() { int x=-1; while(x>999||x<0) { printf("Please input(0<x<=999): ");="" scanf("%d",&x);="" }="" printf("\nthe="" result="" is:="" %d\n",fun(x));="" <="" pre="">[/codesyntax] </x<=999):>
41)
给定程序中,函数 fun 的功能是计算下式
例如,若形参 e 的值为 1 e-3, 函数的返回值 2.985678。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
double fun(double e)
{ int i; double s, x;
/**********found**********/
s=0; i=__1__;
x=1.0;
while(x>e){
/**********found**********/
__2__;
/**********found**********/
x=(2.0*i-1)/((__3__)*(2.0*i));
s=s+x;
}
return s;
}
main()
{ double e=1e-3;
printf(“\nThe result is: %f\n”,fun(e));
}
[codesyntax lang=”php”]
【微答案】 (1) 0 (2) i++或++i 或 i+=1 或 i=i+1 (3)2. 0*i 【微分析】 填空 1: 循环变里 1 从开始参加运算,但是在每次循环的开始都进行自加 1 操作,故 i 应赋初值为 0。填空 2: 循环变量 i 自增 1 运算。 填空 3: 根据公式确定表达式通项。注意 x 为 double 类型,故应将 i 变为 double 类型再进行运算。 #include double fun(double e) { int i; double s, x; /**********found**********/ s=0; i=0; x=1.0; while(x>e){ /**********found**********/ i++; /**********found**********/ x=(2.0*i-1)/((2.0*i)*(2.0*i)); s=s+x; } return s; } main() { double e=1e-3; printf("\nThe result is: %f\n",fun(e)); }
[/codesyntax]
(41)
给定程序中,函数 fun 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数)。作为函数值返回;并将大于平均值的数放在形参 y 所指数组中在主函数中输出。
例如,有 10 个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30. 500000。
主函数中输出:46 32 40 45 48。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double x[],double *y)
{ int i,j; double av;
/**********found**********/
av=__1__;
/**********found**********/
for(i=0; i<N; i++) av = av + __2__;
for(i=j=0; i<N; i++)
/**********found**********/
if(x[i]>av) y[__3__]= x[i];
y[j]=-1;
return av;
}
main()
{ int i; double x[N] = {46,30,32,40,6,17,45,15,48,26};
double y[N];
for(i=0; i<N; i++) printf(“%4.0f “,x[i]);
printf(“\n”);
printf(“\nThe average is: %f\n”,fun(x,y));
for(i=0; y[i]>=0; i++) printf(“%5.0f “,y[i]);
printf(“\n”);
}
[codesyntax lang=”php”]
【微答案】 (1)0.0 (2) x [i] /N (3) j++ 【微分析】 填空 1: 通过读上面的程序可以看出此空考的是给变重赋初值,av 代表的是平均值,因此 av 的初值应 该是 0.0。 填空2:通过for循环可知,此空代表求平均值,因此应该填写 x[i] /N。 填空 3: 先把大于平均值的数放在形参 y 所指数组中,然后使下标值加 1,因此此空应该填 j++. #include #include #define N 10 double fun(double x[],double *y) { int i,j; double av; /**********found**********/ av=0.0; /**********found**********/ for(i=0; i<n; i++)="" av="av" +="" x[i]="" n;="" for(i="j=0;" i<n;="" **********found**********="" if(x[i]="">av) y[j++]= x[i]; y[j]=-1; return av; } main() { int i; double x[N] = {46,30,32,40,6,17,45,15,48,26}; double y[N]; for(i=0; i<n; i++)="" printf("%4.0f="" ",x[i]);="" printf("\n");="" printf("\nthe="" average="" is:="" %f\n",fun(x,y));="" for(i="0;" y[i]="">=0; i++) printf("%5.0f ",y[i]); printf("\n"); } </n;></n;>
[/codesyntax]
41)
给定程序中,函数 fan 的功能是:计算形参 x 所指数组中 N 个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x 所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。
例如,有 10 个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30. 500000。
移动后的输出为:30 6 17 15 26 46 32 40 45 48
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double *x)
{ int i, j; double av, y[N];
av=0;
/**********found**********/
for(i=0; i<N; i++) av +=__1__;
for(i=j=0; i<N; i++)
if( x[i]<av ){
/**********found**********/
y[j]=x[i]; x[i]=-1; __2__;}
i=0;
while(i<N)
{ if( x[i]!= -1 ) y[j++]=x[i];
/**********found**********/
__3__;
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
main()
{ int i; double x[N];
for(i=0; i<N; i++){ x[i]=rand()%50; printf(“%4.0f “,x[i]);}
printf(“\n”);
printf(“\nThe average is: %f\n”,fun(x));
printf(“\nThe result :\n”,fun(x));
for(i=0; i<N; i++) printf(“%5.0f “,x[i]);
printf(“\n”);
}
[codesyntax lang=”php”]
【微答案】 (1) x [i] /N (2) j++或++j (3) i++或++i 【微分析] 填空1: av代表平均值,本题考查了怎样求平均值,因此本空应该填写 x[i] /N。 填空 2: 通过 for 循环和 if 判断找到 x (【】中比平均值小的数,并把这些值赋值给 v [j】,因此本空应该填写 j++或者++j。 填空 3: 通过 while 循环语句,把 x [i】中比平均值大的数放在数组 y 的后半部分,因此本空应该填写 i++ 或者++i。 #include #include #define N 10 double fun(double *x) { int i, j; double av, y[N]; av=0; /**********found**********/ for(i=0; i<n; i++)="" av="" +="x[i]/N;" for(i="j=0;" i<n;="" if(="" x[i]<av="" ){="" **********found**********="" y[j]="x[i];" x[i]="-1;j++;}" i="0;" while(i<n)="" {="" x[i]!="-1" )="" y[j++]="x[i];" i++;="" }="" i++)x[i]="y[i];" return="" av;="" main()="" int="" i;="" double="" x[n];="" i++){="" printf("%4.0f="" ",x[i]);}="" printf("\n");="" printf("\nthe="" average="" is:="" %f\n",fun(x));="" result="" :\n",fun(x));="" printf("%5.0f="" ",x[i]);="" <="" pre="">[/codesyntax]</n;>
41)
给定程序中,函数 fun 的功能是将 a 和 b 所指的两个字符串分别转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含 9 个以下数字字符。
例如,主函数中输入字符串:32486 和 12345,在主函数中输出的函数值为:44831.
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 9
long ctod( char *s )
{ long d=0;
while(*s)
if(isdigit( *s)) {
/**********found**********/
d=d*10+*s-__1__;
/**********found**********/
__2__; }
return d;
}
long fun( char *a, char *b )
{
/**********found**********/
return __3__;
}
main()
{ char s1[N],s2[N];
do
{ printf(“Input string s1 : “); gets(s1); }
while( strlen(s1)>N );
do
{ printf(“Input string s2 : “); gets(s2); }
while( strlen(s2)>N );
printf(“The result is: %ld\n”, fun(s1,s2) );
}
[codesyntax lang=”php”]
[微答案] (1)'0' (2)S++或++s (3)tod(a)+ctod(b) [微分析] 填空1: isdigt(*s)这 个函数表示检查*s是否是数字(0~9),d= d*10+ *s-?表示的是要把字符串分别|转换成面值相同的整数,因此本空应该填写0'。 填空2:由填空*s所代表的字符串中字符需要一个- 一个的字符进行转换成整数,因此此空应该填写S++或++S。 填空3:题目要求把转换后的字符进行相加后作为函数的返回值,因此本空应该填写ctod(a)+ ctod(b)。 #include #include #include #define N 9 long ctod( char *s ) { long d=0; while(*s) if(isdigit( *s)) { /**********found**********/ d=d*10+*s-'0'; /**********found**********/ s++; } return d; } long fun( char *a, char *b ) { /**********found**********/ return ctod(a)+ctod(b); } main() { char s1[N],s2[N]; do { printf("Input string s1 : "); gets(s1); } while( strlen(s1)>N ); do { printf("Input string s2 : "); gets(s2); } while( strlen(s2)>N ); printf("The result is: %ld\n", fun(s1,s2) ); }
[/codesyntax]