版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷第1
套
一、程序填空题(本题共I题,每题1.0分,共J分0)
1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所
有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指
的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的
学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划
线处填入正确的内容并?巴下划线删除,使程序得出正确的结果。注意:源程序存
放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!
#includc#dcflncN5typedefstructstudent{longsno;charnamc[10];floaf
score[3];)STU;voidfun(char*filena,me){FTLE*fp;inti,j;STUs[N],t;
/*******************found********************/fp=fopen(fllename,[]]
fread(s,sizeof(STU),N,fp);fclose(fp);for(i=0;i
标准答案:(l)“rb”(2)>(3)fwrite
知识点解析:第一空:眼据题干要求,"fp=fopen(filename,【I]):"是打开
filename所指文件,读出学生数据"fread(s,sizeof(STU),N,fp);",然后关闭文
件“fclose(fp)”,故第一空处是只读方式打开文件,因此第一空处应为第二
空:根据题意,for循环是将学生数据按照学号从小到大排序后,这里采用的是冒
泡法排序,如果发现前面的数据比后面的大则交换,故第二空处应为第三
空:文件是以只写方式(“wb”)打开,执行"[3](s,sizeof(STU),N,fp);”后,关
闭文件,即第二处是一次把所有学生数据写入文件.这是执行数据块写函数
fwrite,故第三空处为“斯rite"。
二、程序修改题(本题共I题,每题7.0分,共[分0)
2、给定程序MODH.C中函数fun的功能是:根据整型形参m的值,计算如下公
i_________i
式的值。’…赤-再-…-赤例如,若m中的值为:5,则应输出:0.536389。
请改正程序中的错误,使它能得出正确的结果。注意;不要改动main函数,不得
增行或删行,也不得更改程序的结构!#includedoublefun(intm){doubley=l.0;
[nt]•/**************found****************/for(i=2•i
标准答案:(l)for(i=2;i<=m;i++)(2)y—=1.0/(i*i);
知识点解析:(1)第一个标识下面,"fbr(i=2;i
三、程序设计题(本题共1题,每题1.0分,共7分0)
3、请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所
在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中
赋予。主函数中x是数组名,n是x中的数据个数:max存放最大值,index存放
最大值所在元素的下标。注意:部分源程序存在文件PR0G1.C文件中。请勿改
动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的
若干语句。#include#includevoidfun(inta[]fintn,int*max,int*d){)main(){int
i,x[20],max,index,n=10;voidNONO();for(i~0;i
标准答案:int1;*max=a[0];*d=0;/*把数组的第I个元素值赋值给最大值变
量*max*/for(i=l;i
知识点解析:进入fun函数,根据前面的分析:(1产max指针变量首先指向数组a
的第一个数据,同时将标志位*d初始值赋为0。(2)然后利用for循环对每一个当前
数组数据与max标记的数据进行比较。(3)循环中将求得的最大数据a[i]赋值给
*msx,并将该数据项数组标志位赋给标志位*d。
国家二级(C语言)机试模拟试卷第2
套
一、程序填空题(本题共I题,每题1.0分,共7分。)
1、请补充函数fun(),该函数的功能是;交换数组aa中最大和最小两个元素的位
置,结果依然保存在原数组中,其它元素位置不变。注意数组aa中没有相同元
素。例如,输入“33,67,42,58,25,76,85,16,41,56”,则输出“33,57,
42,58,25,76,16,85,41,56”。注意:部分源程序给出如下。请勿改动主函
数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达
式或语句。试题程序:#include<stdio.h>#defineN10voidfun(intaa|]){inti,j,
t;intmax=0,min=0;for(i=0;i<N;i++){if([])max=i;if([])min=i;)t=aa
[max];[];aa[min]=t;}main(){inti;intaa[N]=|33,67,42,58,25,76,85,16,41,
56);clrscr();printf("\n***originallist***\n");for(i=0;i<N;i++)printf("%4d",aa
[i]);fun(aa);printf(M\n***newlist***\n");for(i=0;i<N;i++)printf("%4d",aa[i]);}
标准答案:aa[max]<aa[i]aa[min]>aa[i]aa[max]=aa[min]
知识点解析:第一空:先假设aa[0]最大,如果找到更大的元素,则将这个元素的
下标赋给max。第二空:同理,先假设aa[0]最小,如果找到更小的元素,则将这
个元素的下标赋给min。第三空:找到最大值和最小值之后,借助第三个变量t交
换这两个元素。
二、程序修改题(本题共1题,每题1.0分,共7分0)
2、下列给定程序中fun。函数的功能是:将n个无序整数从小到大排序。请改正程
序中的错误,使它能得出正确的结果。注意;不要改动main函数,不得增行或删
行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>
#include<stdlib.h>fun(intn,int*a){inti,j,p,t;for(j=O;j<n-l;j++){P=j;
/***************^und*******************/for(i=j+I;i<n-1;i++)if(a[p]>a[i])
/***************found*******************/t=i,if
{t=a[j];a[j]=a[p];a[p]=t;}})putarr(ihtn,int*z){inti;for(i=l;i<=n;i++,z++)
{printf(u%4d",*z);if(!(i%10))printf(u\n");}printf('”);}main(){int
aa[20]={9,3,0,4,1,2,5,6,8.10,7),n=11;clrscr();printf("\n\nBeforesorting%d
numbers:\n",n);putarr(n,aa);fun(n,aa);printf("\nAftersorting%d
numbers:\n*\n);putarr(n,aa);}
标准答案:⑴?昔误:for(i=j+1;iVn-1;i++)正确:for(i=j+l;iVn;i++)(2)错
误:t=i;正确:p=i;
知识点解析:该程序是对n个数实现从小到大的排序,该题中先是找小输入整数的
最小项,置于指针第1个元素的位置:再找出第2个元素至尾元素的最小项,置于
第2个元素的位置:之后顺次处理后读元素。
三、程序设计题(本题共I题,每题1.0分,共1分。)
3、请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第
1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前
部。例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符
串中的内容应该是DEFGHIJKABC。注意:部分源程序给出如下。请勿改动主函
数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语
句。试题程序:#include<stdio.h>#include<string.h>#defineN80voidfun
(char*w,intm){)main(){chara[N]="ABCDEFGHIJK";intm;printf("Theorigina
string:\n");puts(a);printf("\n\nEnterm:");scanf("%d'\&m);fun(a,m);printf("
\nThestringaftermoving:\n");puts(a);printf("\n\n");}
标准答案:voidfun(char*w,intm){inti,j;chart;for(i=l;iV=m;i++)/*进
行m次的循环左移*/{t=w[0];for(j=l/w[j]!=,\0,;j++)/*从第2个字符开始以后的
每个字符都依次前移一个字符*/"中-1]=\¥⑴;w[j-l]=t;/*将第1个字符放到最后
一个字符中*/}}
知识点解析:我们在学习C语言的时候,应该广泛地应用到循环的方法,本题应
采用“循环左移”的算法°即从第2个字符开始以后的每个字符都依次前移一个字
符,而原来的第1个字符放在申中的最后个字符。当耍平移出个字符时,则要
进行m次的循环左移。内嵌的循环的作用是完成从第2个字符开始以后的每个字
符都依次前移一个字符,的作用是将第1个字符放到最后一个字符中。
家二级(C语言)机试模拟试卷第3
套
一、程序填空题(本题共I题,每题1.0分,共I分C)
1、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文
件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制
的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在
变量tfnamc中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得
出正确的结果。注意:源程序存放在存生文件夹下的BLANK1.C中。不得增行
1!tinclude<stdio.h>
2linclude<stdlib.h>
3intfun(char*source,char^target)
4(FILEcharch;
5/………*found………*/
6if((fs-fopen(source,1_))
--NULL)
7return0;
8if((ft«fopen(target,Mw"))««NULL)
9return0;
10printf(n\nThedatainfile:\nw);
11ch-fgetc(fs);
12/*****•…*found*****••••*/
13while(!feof(___2___))
14{putchar(ch);
15/………*found……*…/
16fputc(ch,___3);
17ch-fgetc(fs);
18
19fclose(fs);fclose(ft);
20printf(w\n\nw);
21return1;
22
23main()
nn
24(charsfname[20]-myfilelr
tfname[20]asWmyfile2n;
25FILE*rayf;int1;charc;
26myf-fopen(sfname,"w");
27printf(w\nTheoriginaldata:\n");
28for(i-l;i<30;i++)
29(c-*A**rand()%25;
R
30fprintf(myf,"%crc);
R
31printf("%crc);)
32fclose(myf);printf(w\n\n°);
33if(fun(sfname,tfname))
34printf("Succeed!");
35!elseprintf("Fail!");
或删行,也不得更改程序的结构!36•1
标准答案:(l)"r"(2)fs(3)ft
知识点解析:fun函数要求实现的功能是将指定源文件中的内容复制到指定的目标
文件中,即以只读方式打开源文件,以只写方式打开目标文件,然后将源文件内的
内容复制到目标文件中。
二、程序修改题(本题共[题,每题L0分,共[分0)
2、给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。
xl=--(xO+—―)
求平方根的迭代公式如下:2xO例如,a为2时,平方根值为:
1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main
函数,不得增行或删行,也不得更改程序的结构。
1♦include<stdio.h>
2*include<math.h>
3/**•♦•*****found**********/
4doublefun(doublea,dounlexO)
5{doublexl,y;
6xl«(xO*a/x0)/2.0;
7/********♦♦found**********/
8if(fabs(xl-xo)>0.00001)
9y-fun(a,xl);
10elsey-xl;
11returny;
12
main()
14{doublex;
15printf("Enterx:**);scanf
16printf("Thesquarerootof%lf
w
is%lf\n,x#fun(x,1.0));
17i)
标准答案:(1Roublefun(doublea,doublexO)(2)if(fabs(xl-x0)>0.OOOOI)
知识点解析:(1)主函数中1.Of,x是double型变量,1.0是浮点数,可
知fun有两个double型参数,而第一标识下“dounlc”不是C语言关键字,所以应世
“doublefun(doublea,dounlex0)"改为"doublefun(doublea,doublex0)”。(2)第二个标
识下的if语句是判断进行递归运算的条件,第二标识下变量xO没有定义,根据题
意,这里是判断xl和xO的差值的绝对值是否比0.00001大,所以第二个标识下
t€ifi[fabs(xl-xo)>0.0
三、程序设计题(本题共[题,每题7.0分,共1分。)
3、程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数
的功能是:使数组右上三角元素中的值乘以m。例如:若m的值为2,a数组中的
I97
a=238,则返回主程序后a数组中的值应为:
456
21814
2616
值为:4512注意:部分源程序存
在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在
函数fun的花括号中填入你编写的若干语句。
1♦include<stdio.h>
2finclude<stdlib.h>
3♦defineN5
4voidfun(inta[][N],intm)
5
6
7)
8main()
9(inta[N](NJirj;voidNONOO;
10printf(**♦**♦Thearray*****\n");
11for(1-0;i<N;i++)
12(for(j-0;j<N;j++)
13(a[i](j]*rand()%20;printf
14printf("\n");
15}
16dom«rand()%10;while(m>-3);
17printf("m■%4d\nH,m);
18fun(a,m);
19printf("THERESULTS”);
20for(i-0;i<N;i++)
21{for(j-0;j<N;printf
<-%4d-fa(i)(j));
22printf("\n");
23)
24NONO();
25)
26voidNONO()
27</*本函数用于打开文件,帖入数据,调用函
ft.输出数据,关闭文件.*/
28FILE*rf,*wf;
29inti,j,n,a⑸⑸;
30rf-fopen("in.dat","r");
31wf-fopen("out.dat",Ww");
32for(i-0;i<5;i++)
33for(j«0;j<5;j++)
34fscanf(rf,"Id",(a(i)(j));
35fscanf(rf,8%d・,&n);
36fun(a,n);
37for(i-0;i<5;1+♦){
38for(j-0;j<5;fprintf
w
(wf,%4d-ra(i](jD;
39fprintf(wf,"\n");
40
41fclose(rf);
42fclose(wf);
43
1iinti,j;
25for(i-0;i<N;i++)
3ifor(j-i;j<N;j++)
标准答案:4!
知识点解析:该程序功能是使数组右上半三角元素中的值乘以m。本题中首先要
确定右上角半角元素的特点,然后对元素逐个进行乘以m的操作。其中,右上角
的元素是行下标小于等于列下标的元素。
国家二级(C语言)机试模拟试卷第4
套
一、程序填空题(本题共/题,每题i.o分,共1分。)
1、给定程序中,函数fun的功能是:判断形参s所指字符串是否是“回文
"(Palindrome),若是,函数返回值为1;不是,函数返回值为0。”回文“是正读和
反读都一样的字符串(不区分大小写字母)。例如,LEVEL和Level是“回文”,而
LEVLEV不是“回文”。请在程序的下划线处填入正确的内容并把下划线删除,使
程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不
得增行或删行,也不得更改程序的结构!#include#include#includeintfun(char*s)
{char*ip,*rp;/***********found*********/Ip=[1];rp=s+strlen⑸一1;
while((toupper(*lp)==toupper(*rp))&&(ip
标准答案:(l)s(2)-----(3)return0
知识点解析:第一空:“rp=s+strleMs)-l;”可知rp指向最后一个元素,因此Ip是指
向第一个元素,因此第一空应为“s”.第二空:“lp++;rp【2】;"lp往后移动,rp
应该往前移动,故第二空处应为“一一”。第三空:“if(lp
二、程序修改题(本题共1题,每题7.0分,共2分。)
2、给定程序MODI1.C中函数fun的功能是:实现两个整数的交换。例如给a和
b分别输入:60和65,输出为:a=65b=60请改正程序中的错误,使它能得出正确
的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#includc/**********found**********/voidfun(inta,b){intt;
/*****来*东*女found比*近女上东东女东/t=b;b=a;a=t;}main(){inta,b;printf("Entera,b:");
scanf("%d,%d",&a,&b);fun(&a,&b);printf("a=%db=%d\n",a,b);}
标准答案:voidfun(intxa,int*b)t=*b;*b=*a;*a=t;
知识点解析:(1)该题明显是指针类型的错误。主函数传的形参分别是a、b的地
址,而函数fun中却定义a、b为整型,所以第一个标识下的飞01(1向11(由12m”改为
“voidfun(int*a,int*b)“。(2)根据上面的修改,第二个标识下,"t=b;b=a;a=t;”明
显应该是“t=*b;*b=*a;
三、程序设计题(本题共2题,每题1.0分,共2分。)
3、编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之
和的平方根,并作为函数值返回。例如若n为1000时、程序输出应为:
s=153.909064o注意:部分源程序在文件PROG1.C文件中。请勿改动主函数
main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#includc#includcdoublefun(intn){}main()/*主函数*/{voidNONO();
printf("s=^f\n",fun(1000));NONO();}voidNONO(){/*本函数用于打开文
件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;
doubles;fp=fopcn("in.clat","r");wf=fopcn("out.dat","w");for(i=0;
i<10;i++){fscanf(fp,"%d",&n);s=fun(n),fprintf(wf,s);)
fclose(fp);fclose(wf);)
标准答案:doublesum=0.0;inti;for(i=21;i<=n;i++)if((i%3==0)&&(i%
7==0))sum+=i;returnsqrt(sum);
知识点解析:(1)首先,利用循环逐个选出能同时被3与7整除的所有自然数0(2)
然后,对这些自然数求和。最后求得平方根,并返回这个值。
4、编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当
n=10,x=0.3时,函数值为1.349859o注意:部分源程序在文件PROGLC文
件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中
填入你编写的若干语句。#include#includedoublefun(doublex,intn){}main()
{voidNONO():printf('%f\n",fun(0.3,10)):NONO();)voidNONO(){/*
本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE*fp,*wf;inti,n;doubles,x;fp=fopen(*in.dat","r");
wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,u%lf,%d",&x,
&n);s=fun(x,n);fprintf(wf,s);}fclose(fP);fclose(wf);}
标准答案:doubles=l.0,y=x;inti;longk=l;for(i=l;i<=n;i++){k=k*i;
s+=y/k;y*=x;}returns:
知识点解析:(1)根据题干中给出的数列,推出每一项分子是在前一项的基础上乘
以x,分母是每一项的阶乘,它可以在前一项的基础上乘以当前项的项数,即第n
项是n。(2)在循环中求得每一项,然后对其进行累加求和。
国家二级(C语言)机试模拟试卷第5
套
一、程序填空题(本题共1题,每题1.0分,共7分0)
1、给定程序中,函数fun的功能是:找出100至x(xW999)之间各位上的数字之和
为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中。不得增行或删行,也不得更改程序的结构!
finclude<stdio.h>
2intfun(intx)
3{intn,si,s2,s3,t;
4/………*"und……•…/
5n・_1__;
6t-100;
7found*………/
8while(t<-_2_)
9(sl-t%10;s2-(t/10)%10;s3-t/100;
10if(sl+s2+s3=-15)
(printf("%d”,t);
12
13
14******found****
153;
16
17returnn;
18
19main()
20{intx-1;
21while(x>999||x<0)
22{printf("Pleaseinput(0<x<-
999):");scanf("%dWr&x);)
23printf(w\nTheresultis:%d\n",
fun(x));
24
标准答案:(l)0(2)x(3)t++或t=t+l
知识点解析:本题函数fun的功能是找出100至x(xW999)之间各位上的数字之和为
15的所有整数,需要求一个三位数x的个位、十位和百位,x%10,x/10再对10
求余、x/100分别得到x个位、十位和百位。
二、程序修改题(本题共[题,每题1.0分,共1分0)
2、给定程序MODH.C中函数fun的功能是:统计substr所指子字符串在str所指
字符串中出现的次数。例如,若字符串为aaaslkaaas,子字符串为as,则应输出
2o请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函
数,不得增行或删行,也不得更改程序的结构!
linclude<stdio.h>
2intfun(char*str,char*substr)
3{intirj,krnum«0;
4/…………found…………/
5for(i-0,str[1],i++)
6for(j-i,k-0;substr[kJ—str(j];
k++,”♦)
7•found………
8If(substr(k>l]->\01)
9{num++;
10break;
12returnnum;
13
14main()
15
16charstr[80],substr(80];
17printf("Inputastring:");
18gets(str);
19printf("Inputasubstring:");
20gets(substr);
21printf("%d\n”,fun(strrsubstr));
22
标准答案:(l)for(i=0;str[i];i++)(2)if(substr[k+l]==,\O,)
知识点解析:本题中函数的功能是统计子字符串subsir在字符串sir中出现的次
数。解题过程是在str中查找指定的子串,并且统i一子串出现的次数。
三、程序设计题(本题共1题,每题1.0分,共/分C)
3、请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返
回。二维数组中的值在主函数中赋予。例如:二维数组中的值为:135792999
46999813570则函数值为61。注意:部分源程序存在文件PROG1.C文件
中。请勿改动主函数main和其他函数中的任何内容,仅在函数「un的花括号中填
♦include<stdio.h>
2♦defineM4
3♦defineN5
4intfun(inta[M][N])
5
6
7
8main()
9(int(2,9,
9,9,4),(6,9,9,9,8},
10inti,j,y;voidNONO();
11printf("Theoriginaldatais:
\nw);
12for(i-0;i<M;
13(for(j«0;j<N;j++)printf
(w%6dw,aa[i](j]);
14printf(w\n");
15)
16y-fun(aa);
17printf(w\nThesum:%d\nw,y);
18printf("\nw);
19NONO();
20)
21voidNONO()
22{/*请在此函数内打开文件,输入测试数据,
调用fun函数,输出数据,关闭文件.*/
23inti,j,yrk,aa(MJ[NJ;
24FILE*rf,*wf;
25rf-fopen(Hin.datH,"rM);
26wf-fopen("out.dat","wH);
27for(k-0;k<10;k++)(
28for(i«0;i<M;i++)
29for(j-0;j<N;j**)fscanf(rf,
"%d%6aa[i][j]);
30y=fun(aa);
H
31fprintf(wf,"%d\n/y);
32}
33fclose(rf);
34fclose(wf);
入你编写的若干语句。35)
inttot-0,Ltj;
2
3for(i-0;i<N;i++){
4tot*-a(0][i];
5[M-l][i];
6)
7for(i-1;i++)(
8totf-a[i][0];
9tot4—a(i)(N-l);
10}
标准答案:11returntot;
知识点解析:该程序功能是求出二维数组周边元素之和。其中周边元素是指数组的
最上和最下的两行,最左和最右的两列。数组第一行元素的行下标为0,最后一行
元素的行下标为M-1,第一列的列下标为0,最后一列的列下标为N-1。
国家二级(C语言)机试模拟试卷第6
套
一、程序填空题(本题共[题,每题1.0分,共7分。)
1、给定程序中,函数fun的功能是:找出NxN矩阵中每列元素中的最大值,并按
顺序依次存放于形参b所指的一维数组中。请在程序的下划线处填入正确的内容
并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的
BLANK1.C中。不得增行或删行,也不得更改程序的结构!#inckide#defineN4
voidfun(int(*a)[N],int*b){inti,j;for(i=0;i
标准答案:(l)a[0][i](2)〈(3)x,y
知识点解析:第一空:第二个循环是寻找每列的最大值,方法是用最大值变量b[i]
标记第一个待找数据,逐个把所有待找数据和b[i]进行比较,并用b[i]标记其当前
最大值,从而找出最大值。故第一空处为第一个待找数据第二空:由上
述的分析可知,如果b[i]小于那么用b[i]标记其当前最大值,故第二空处为
“V"。第三空:fun函数的声明为:voidfun(int(*a)[N]»int*b)»函数的两个参数均
是指针。故在主函数内fun函数的调用形式为“fun(x,y)”,x是二维数组首地址,y
是一维数组首地址。
二、程序修改题(本题共7题,每题1.0分,共7分。)
2、给定程序M0DI1.C中函数fun的功能是:先从键盘上输入一个3行3列矩阵
的各个元素的值,然后瑜出主对角线元素之和。请改正函数fun中的错误或在横
线处填上适当的内容并任横线删除,使它能得出正确的结果。注意:不要改司
main函数,不得增行或删行,也不得更改程序的结构!#includeincludevoidfun()
{inta[3][3],sum;inti,j:/***********found************/
printf("Inputdata:");for(i=0;i<3;i++){for(j=0;j<3;j++)/
***********found************/scanf'%d",a[i]|j]);)for(i=0;i<3;i++)
sum=sum+a[i][i];printf("sum=%d\n",sum);)main(){fun();)
标准答案:(l)sum=0(2)scanf(H^d,",&a[i]|j]);
知识点解析:(1)根据题意计算元素求和,所以函数fun中不仅要有用于存储累加和
的变量sum,而且要给sum赋初值。因此,填空处填上"sum=0"。(2)scanf()语句中
的实参必须是地址型的,而下标却是整型的变量。因此第二个标识下“叫]用”
应改为
三、程序设计题(本题共7题,每题7.0分,共I分0)
3、请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入KX所
指的数组中°例如,若输入17.5•则应输出:19,23.29.31.37c注意:部分
源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内
容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inLm,int
k,intxx[])(}Nain(){intIn,n,zz[1000];voidNONO();printf("\nPleaseenter
twointegers:");scanf("%d%d”,&m,&n);funim,n,zz);for(m=0;m
标准答案:intr=0,temp,P,sign=l;for(temp=m+1;temp=temp)
知识点解析:进入fun函数,根据前面的分析:首先,定义、初始化变量sign,作
为素数的标志;定义r,初始化为存储素数数组的起始位。然后,每判断一次
lemp中的值是否为素数后,使lemp的值增1,再次对lemp中新的值进行判断其是
否为素数,不断循环此过程,直到m的值等于指定的个数,即函数中的k个数。
国家二级(C语言)机试模拟试卷第7
套
一、程序填空题(本题共,题,每题1.0分,共/分。)
1、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件
myfile4.ixt中,用一1作为字符串输入结束的标志。然后将文件的内容读出显示
在屏幕上。文件的读写分别由自定义函数ReadTexl和WrileText实现。请在程序
的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源
程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序
的结构!#inckide#include#includevoidWriteText(FILE*);voidReadText(FTLE
*);main()(FILE*fp;if((fp=fbpen(,,myfile4.txt”,"w"))=NULL){printf("open
fail!!\n,r);exit(O);jwziteTexl(fp);fcloseffp);
if((fp=fdpen(,,myfile4.txt",,Y,))=NULL){print^openfail!!\n,>);exit(O);|
ReadText(fp);fclose(fp);}/**********found**********/voidWriteTcxt(FILE
[1]){charstr|811;printtff'\nEnterstringwith—1toend:\n");gets(str);
while(strcmp(str,"一l'?!=0){/fputs([2],
fw);printf("%s'',[3]);fgcts(str,81,fr);}}fputs("\rT,fw);
gets(str);}}voidReadText(FTLE*fr){charstr|81];printR”\nReadfileandoutput
toscreen:\n");fgetsisir,81,fr);while(!leof(fr)){/
标准答案:(l)*fw(2)str(3)slr
知识点解析:第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,
futs(”\n”,fw)是将字符\”写入文件,可知fw是文件指针名,因此第一宅处应该是
voidwriieTexl(FILE*fw)0第二空:while(strcmp(strJ・l")!=O)循环的结束标志是str
字符串等于时循环退出,如果str不等于“-1”,执行循环体内容;用fputs函数
将出字符串写入文件。fputs函数的调用形式是:fputs(s,fp),其中s是指向字符
串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此第二处
应该是fputs(str,fw)o笫三空:while(!feof(fr))循环的作用是不断读取文件直到到达
文件尾,每次最多读81个,将读到的数据放在s打字符串里,并用printf输出到屏
幕,因此第三处应该是primf(”%s”.sir)。
二、程序修改题(本题共7题,每题7.0分,共I分0)
2、假定整数数列中的数不重复,并存放在数组中。给定程序MODII.C中函数
fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。请改
正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或
删行,也不得更改程序的结构。#include#defineN20intfun(int*a,intn,intx){int
p=0,i;a[n]=x;while(x!=a[p])p=p+l;/**********found**********/if(P==n)return-1;
else{for(i=p;i
标准答藁:if(p==n)return-1;a[i]=a[i+l];
知识点解析:(1)第一标识下“if(P==n)return-1;”中变量P没有定义,编译时会提
示出错。根据题意,这里是判断p是否已经到了字符串的末尾,即是否存在值为x
的元素,如果不存在则返回-1,故第一标识下应改为“if(p==n)return-1;"。(2)
“fbr(i=p;i
三、程序设计题(本题共[题,每题7.0分,共[分0)
3、请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一
个。数组中的数己按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如。一维数组中的数据是:2223445666677899101010。册IJ除后,数组
中的内容应该是:2345678910o注意:部分源程序在文件PROG1.C中。请
勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编
写的若干语句。#include#defineN80intfiin(inta[bintn){}main(){inta[N]=(2,
2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10),i,n=20;
voidNONO();printfV'Theorig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 检验科医疗质量与安全管理工作计划
- 2026年会展集成碳核查协议
- 2026年服装培训质量管理协议
- 预防校园暴力工作制度
- 领导定期研究工作制度
- 风险辩识公示工作制度
- 高陵四班三倒工作制度
- 菏泽地区单县2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 思茅市墨江哈尼族自治县2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 黔东南苗族侗族自治州台江县2025-2026学年第二学期五年级语文第八单元测试卷(部编版含答案)
- 四川省成都市2025年八年级上学期期末数学试题附答案
- 2026年中国汽车发电机调节器发展现状与市场前景分析
- 配电室改造合同范本
- 2026年高考生物复习难题速递之基因工程(2025年11月)
- 幼小衔接数学练习题及答题技巧21套
- 雨课堂学堂在线学堂云《工程伦理与学术道德(电科大)》单元测试考核答案
- 2025年10月自考13140财务会计中级试题及答案
- 教务管理岗位面试实战技巧
- 学校分级授权管理制度
- 网格员非法集资风险识别与处置培训
- 2025年大学《公安视听技术-刑事影像技术》考试模拟试题及答案解析
评论
0/150
提交评论