国家二级C语言机试(操作题)模拟试卷380(题后含答案及解析)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级C语言机试(操作题)模拟试卷380(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题
程序填空题
1.函数fun的功能是:逆置数组元素中的值。

例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。

形参n给出数组中数据的个数。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 void fun(int a[],int n)3 { int i,t;4 /**********found**********/5 for(2=0 ; i<__1__; i++)6 {7 t=a[i];8 /**********found**********/9 a[i]=a[n-1- __2__];10 /**********found**********/11 __3__=t;12 }13 }14 main( )15 {int b[9]={1,2,3,4,5,6,7,8,9},i ;16 printf(‘‘\nThe original data:\n’’);
17 for(i=0;i<9;i++)18 printf(‘‘%4 d’’,b[i]);19 printf(‘‘\n’’);20 fun(b,9);21 printf(‘‘\nThe data after invert:\n’’);22 for(2=0;i<9;i++)23 printf(‘‘%4d’’,b[i]);24 printf(‘‘\n’’);25 }
正确答案:(1)n/2 (2)i (3)a[n-i-1]
解析:函数fun的功能是将数组中的元素倒置。

第一空:由审题分析可知,总共交换n/2次,故循环的终止条件为i等于n/2,故第一空处应为“n /2”。

第二空:a[0]和a[n-1]交换,a[1]和a[n-2]交换…,因此a[i]和a[n-i-1]交换,故第二空处应为“i”。

第三空:“t=a[i];a[i]=a[n-1-i];”所以第三空处是把t值赋值a[n-1-i],故第三空处应为“a[n-1-i]”。

程序修改题
2.给定程序MODI1.C中函数fun的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)的值。

例如,当n为5时,函数值应为:10.407143。

f(x)函数定义如下:请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1 #include<stdio.h >2 #include<math.h>3 /**********found**********/4 f(double x)5 {6 if(x==0.0 ||x==2.0)7 return 0.0;8 else if(x<0.0)9 return(x-1)/(x-2);10 else11 return(x+1)/(x-2);12 }13 double fun(int n)14 { int i;double s=0.0,y;15 for (i= -n;i<=n;i++)16 { y=f(1.0*i);s+=y;)17 /**********found**********/18 return s19 }20 main( )21 {22 printf(‘‘%f\n’’,fun(5));23 } 正确答案:(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=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( )2 { 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);25 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构成四位数。

本题最多只考虑四位数。

相关文档
最新文档