国家二级C语言机试(操作题)模拟试卷711
程序填空题
1.给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数:27638496,函数返回值为:26846。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 unsigned long fun(unsigned long n)
3 { unsigned long x=0,s,i;int t;
4 s=n;
5 /**********found**********/
6 i= __1__;
7 /**********found**********/
8 while(__2__)
9 { t=s%10;
10 if(t%2==0) {
11 /**********found**********/
12 x=x+t*i;i=__3__;
13 }
14 s=s/10;
15 }
16 return x;
17 }
18 main()
19 { unsigned long n=-1;
20 while(n>99999999 || n<0)
21 {printf(’’Please input(0<n<100000000):’’);scanf(’’%1d’’,&n);}
22 printf(’’\nThe result is:%1d\n’’,fun(n));
23 }
(1)1
(2)s
(3)i*10
解析:函数fun的功能是将形参n中,各位上为偶数的数取出,组成新数。
第一空:由“if(t%2==0){x=x+t*i;i=___3__;}\\
程序修改题
2.给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #define M 5
3 /**********found**********/
4 int fun(int n,int xx[][])
5 { int i,j,sum=0;
6 printf(’’\nThe%d x%d matrix:\n’’,M,M);
7 for(i=0; i<M;i++)
8 { for(j=0;j<M;j++)
9 /**********found**********/
10 printf(’’%f’’,xx[i][j]);
11 printf(’’\n’’);
12 }
13 for(i=0 ; i<n; i++)
14 sum+=xx[i][i]+xx{i][n+i-1];
15 return(sum);
16 }
17 main()
18 { int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
19 printf(’’\nThe sum of all elements on 2 diagnals is%d.’’,fun(M, aa));
20 }
(1)int fun(int n,int xx[][M])
(2)printf(’’%4d’’,xx[i][j]);
解析:函数的功能是求两条对角线上各元素之和。
(1)第一个标识下fun函数的定义中对于二维数组的定义在原题中并没有给出空间,所以将\\
程序设计题
3.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和首位上。
例如,当a=45,b=12。调用该函数后,c=4251。
注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 void fun(int a,int b,long *c)
3 {
4 }
5 void NONO()
6 {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
7 FILE *rf,*wf;
8 int i,a,b;long c;
9 rf=fopen(’’in.dat’’,’’r’’);
10 wf=fopen(’’out.dat’’,’’w’’);
11 for(i=0;i<10;i++) {
12 fscanf(rf,’’%d,%d’’,&a,&b);
13 fun(a,b,&c);
14 fprintf(wf, ’’a=%d,b=%d,c=%1d\n’’,a, b, c);
15 }
16 fclose(rf);
17 fclose(wf);
18 }
19 main()
20 { int a,b;long c;void NONO();
21 printf(’’Input a,b:’’);
22 scanf(’’%d%d’’,&a,&b);
23 fun(a,b,&c);
24 printf(’’The result is:%1d\n’’,c);
35 NONO();}
*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);
解析:(1)分解两位数的正整数n的个位和十位数,可用n%10和n/10实现。(2)设x0、x1、x2、x3为一位数,则x0、x1×10、x2×100、x3×1000,可以分别使x0、x1、X2、x3构成个、十、百、千带权数,而x0+x1×10+x2×100+x3×1000构成四位数。本题最多只考虑四位数。
本文档预览:3600字符,共3415字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载