首页 > 全部 > 二级C语言 > 国家二级C语言机试(操作题)模拟试卷341

国家二级C语言机试(操作题)模拟试卷341

本单篇文档共5261字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C语言 章节练习 906人下载
价格: 1.00 原价:¥9.60
收藏

国家二级C语言机试(操作题)模拟试卷341

程序填空题

1.给定程序中,函数fun的功能是:计算形参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中。

不得增行或删行,也不得更改程序的结构!

1 #include<stdlib.h>

2 #include<stdio.h>

3 #define N 10

4 double fun(double *x)

5 { int i,j;double av,y[N];

6 av=0;

7 /**********found**********/

8 for(i=0;i<N; i++) av+=__1__;

9 for(i=j=0; i<N;i++)

10 if(x[i]<av){

11 /**********found**********/

12 y[j]=x[i];x[i]=-1;_2__;}

13 i=0;

14 while(i<N)

15 { if(x[i]!=-1)y[j++]=x[i];

16 /**********found**********/

17 __3__;

18 }

19 for(i=0;i<N;i++)x[i]=y[i];

20 return av;

21 }

22 main()

23 { int i;double x[N];

24 for(i=0;i<N;i++){x[i]=rand()%50;printf(’’%4.of’’,x[i]);}

25 printf(’’\n’’);

26 printf(’’\nThe average is:%f\n’’,fun(x));

27 printf(’’\nThe result:\n’’,fun(x));

28 for(i=0 ; i<N;i++) printf(’’%5.of’’,x[i]);

29 printf(’’\n’’);}

(1)x[i]/N (2)j++或j=j+1 (3)i++或i=i+1

解析:第一空:“for(i=0;i<N;i++)av+=__1__;”在该循环的下一个循环内是逐个比较元素x[i]是否小于av,即该循环的功能是求出平均值。由“av=(x[0]+x[1]+…x[N-1])/N=x[0]/N+x[1]/N+…+x[N-1]/N”可知,第一空处应为“x[i]/N”。

第二空:“if(x[i]<av){y[j]=x[i];x[i]=-1;__2__;”如果x[i]小于平均值则将x[i]存储在y数组中,变量i是循环变量,变量j记录数组y的下标变化,下一次执行if内部语句时,y数组的下标应为下一个位置,故第二空处应为j加1,即第二空出为“j++”或“j=j+1”。

第三空:i为while循环的循环变量,第一次进入while的时候i为0,判断第一个元素x[0]是否是-1,第二次进入的时候判断第二个元素x[1]是否是-1,依此类推直到i=N退出循环,故第三处是变量i自增,即第三空处为“i++”或“i=i+1”。

程序修改题

2.给定程序MODI1.C中,函数fun的功能是判断整数n是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数。如果是完数,函数返回值为1,否则函数返回值为0。数组a中存放的是找到的因子,变量k中存放的是因子的个数。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

1 #include<stdio.h>

2 int fun(int n,int a[],int *k)

3 int m=0,i,t;

4 t=n;

5 /**********found**********/

6 for(i=0;i<n;i++)

7 if(n%i==0)

8 {a[m]=i;m++;t=t-i;)

9 /**********found**********/

10 k=m;

11 /**********found**********/

12 if(t=0)return 1;

13 else return 0;}

14 main()

15 { int n,a[10],flag,i,k;

16 printf(’’请输入一个整数: ’’);scanf(’’%d’’,&n);

17 flag=fun(n,a,&k);

18 if(flag)

19 {printf(’’%d是完数,其因子是:’’,n);

20 for(i=0;i<k;i++) printf(’’%d’’,a[i]);

21 printf(’’\n’’);}

22 else printf(’’%d不是完数.\n’’,n);

23 }

(1)for(i=0;i<n;i++)改为for(i=1;i<n;i++) (2)k=m;改为*k=m;(3)if(t=0)改为if(t==0)

解析:(1)第一个错误在fun()函数的for循环中,这里的循环的就是输入数字n的因式,很明显的一个问题就是循环的起始值有问题,这从i=0开始就违反了最基本的四则运算,0不可能是其他整数的因式,也没有意义。所以这里应该将“i=0”改为“i=1”。

(2)第二个错误在fun()函数中数字经过for循环过后,这里“k=m”,是为了得到“k”的值,也就是因子的个数。但是要注意的细节是在fun()函数中的参数是“*k”,也就是说k只是一个指针变量,而不是我们所需要的因子个数的变量,所以这里我们应该使用的是“*k”,即将“k=m”改为“*k=m”。

(3)第三个错误在fun函数第二个if条件语句中,这里“f(t=0)return 1;”的t是数字减掉因子和的值,也就是说只要是t等于0就代表输入的数字是一个完数,这里原本的意图就是在得到因子的和之后判断数字是否为完数。但是又有一个细节没有注意到的就是在if条件语句中,等于号应该是“==”,而不是普通的“=”,所以这里应该将“if(t=0)”改为“if(t==0”。)

程序设计题

3.请编写函数fun,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。

例如,字符串数组中的M个字符串为

AAAA

BBBBBBB

CC

则合并

本文档预览:3600字符,共5261字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C语言机试(操作题)模拟试卷341

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号