国家二级C语言机试(操作题)模拟试卷364
程序填空题
1.人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #define N 8
3 typedef struct
4 { int num;
5 int year,month,day;
6 } STU;
7 int fun(STU *std, STU *k, int year)
8 { int i,n=0;
9 for(i=0;i<N;i++)
10 /**********found**********/
11 if(__1__==year)
12 /**********found**********/
13 k[n++]=__2__;
14 /**********found**********/
15 return( __3__);
16 }
17 main()
18 {STU std[N]={{1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};
19 STU k[N];int i,n,year;
20 printf(’’Enter a year : ’’);scanf(’’%d’’,&year);
21 n=fun(std,k,year);
22 if(n==0)
23 printf(’’\nNo petson was born\n%d\n’’,year);
24 else
25 { printf(’’\nThese persons were born\ n%d\n’’,year);
26 for(1=0; i<n;i++)
27 printf(’’%d %d-%d-%d\n’’, k[i].num,k[i].year,k[i].month,k[i].day);
28 }
29 }
(1)std[i].year (2)std[i] (3)n
解析:fun函数的功能是在结构体数组std中找出指定出生年份的人员将其数据放在形参k所指的数组中。
第一空:比较结构体的出生年份是否等于year,std是结构体指针,指向结构体数组的首地址,因此访问一个结构体的year成员是“std[i].year”,因此第一空处应为“if(std[i].year==year)”。
第二空:这里是将找到的数据放在形参k所指的数组中,k是指针变量,k指向结构体数组的首地址,std[i]是结构体的地址,因此等号左边也应该是地址,故第二空处应为“k[n++]=std[i];”。
第三空:fun函数的返回值是满足指定条件的人数n,故第三空处是“return(n);”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:计算
S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)的值。例如,当n为5时,函数值应为:10.407143。
f(x)函数定义如下:
(1)double f(double x) (2)return s;
解析:(1)第一个标识下f函数的定义缺少返回值类型,所以将“f(double x)”改为“double f(double x)”。
(2)第二个标识下返回语句没有分号结束。所以,第二个标识下“return s”应该改为“return s;”。
程序设计题
3.函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12时,调用该函数后,c=5142。
注意:部分源程序存在文件PROG1.c中。数据文件in.dat中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 void fun(int a,int b,long *c]
3 {
4
5 }
6 main()
7 { int a,b;long c;
8 void NONO();
9 printf(’’Input a,b:’’);
10 scanf(’’%d,%d’’,&a,&b);
11 fun(a,b,&c);
12 printf(’’The result is:%1d\n’’,c);
13 NONO();
14 }
15 void NONO()
16 {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
17 FILE *rf,*wf;
18 int i,a,b ; long c;
19 rf=fopen(’’in.dat’’,’’r’’);
20 wf=fopen(’’out.dat’’,’’w’’);
21 for(i=0 ; i<10;i++) {
22 fscanf(rf,’’%d,%d’’, &a, &b);
23 fun(a,b,&c);
24 fprintf(wf,’’a=%d,b=%d,c=%1d\n”,a,b,c);
25 }
26 fclose(rf);
27 fclose(wf);
28 }
*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字符,共3493字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载