二级C语言上机题库2

二级C语言上机题库2

ID:83017014

大小:552.19 KB

页数:125页

时间:2023-09-19

上传者:灯火阑珊2019
二级C语言上机题库2_第1页
二级C语言上机题库2_第2页
二级C语言上机题库2_第3页
二级C语言上机题库2_第4页
二级C语言上机题库2_第5页
二级C语言上机题库2_第6页
二级C语言上机题库2_第7页
二级C语言上机题库2_第8页
二级C语言上机题库2_第9页
二级C语言上机题库2_第10页
资源描述:

《二级C语言上机题库2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

科益题库说明:本题库是根据教育部考试中心制定修改计划进行修改后的计算机等级考试二级C语言机试题库。对于题库的解答来自考试中心的答题系统。※※※※※※※※※※※※※※※※※※※※※※※※※第01套:给定程序中,函数fun的功能是:将形参n所指变量中,个位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(unsignedlong*n){unsignedlongx=0,i;intt;i=1;while(*n)/**********found**********/{t=*n%_1_;/**********found**********/if(t%2!=_2_){x=x+t*i;i=i*10;}*n=*n/10;}/**********found**********/♦n=_3_;)mainO{unsignedlongn=-l;while(n>99999999lln<0){printfCTIeaseinput(0

1Theresultis:%ld

2'

3);}解题思路:第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10o第二处:判断是否是奇数,所以应填:0o第三处:最后通形参n来返回新数X,所以应填:X。***************************************************给定程序MODI1.C中函数fun的功能是:计算n!。例如,给n愉入5,则愉出120.000000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intn){doubleresult=1.0;/************found************/ifn==Oreturn1.0;while(n>1&&n<170)/************found************/result*=n-returnresult;)main(){intn;printfC'InputN:H);scanf("%dn,&n);printf("

4

5%d!=%lf

6

7M,n,hin(n));)解题思路:第一处:条件语句书写格式错误,应改为:if(n==O).第二处:语句后缺少分号。请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语肃提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234”,则函数把它转换为整数值-1234。函数fun中给出的语句仅供参考。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includelongfun(char*p){/*以下代码仅供参考*/inti,len,t;/*len为串长,t为正负标识*/longx=0:len=strlen(p);if(p[0D{t=-l;len-;p++;}else1=1;/♦以下完成数字字符串转换为一个数字♦/returnx*t;}main()/*主函数♦/{chars⑹;longn;printf("Enterastring:

8");gets(s);n=fiin(s);printf("%ld

9".n);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chars[20];longn;fjp=fopenC'ciWtestWin.dat'V'r");wf=fopen("c:\Mesi\\oul.dal","w");for(i=0;i

10H,n);}fclose(fp);fclose(wf);}解题思路:本题是将一个数字字符小转换为一个整数。※※※※※※※※※※※※※※※※※※※※※※※※※第02套:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,inta,doublef)(/**********found**********/_1_fp;charch:fp=fopen(',filel.txf,,"w");

11fprintf(fp."%s%d%f

12",s,a,f);fclose(fp);fp=fopen("filel.txt","r");printfCAnTheresult:

13

14");ch=fgelc(fp);voidfun(chars[][N],char*b)(intij.n=O;for(i=0;i

15');fclose(fp);)}b[n]=V)';1main(){chara[l(X)],w[M]|Nl={{,W;,W,,,W,/W,}4,SVS,,'SVS'M,H,:H,,,H,,,H,H;intij;printf("Thematrix:

16");main(){chara[10]="Hello!";intb=12345;doublec=98.76;for(i=0;i

17");fun(a,b,c);}}fun(w.a);***************************************************解题思路:木题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上.第一处:定义文本文件类型变量,所以应填:FILE*。第二处:判断文件是否结束,所以应填:fpe第三处:显示读出的字符,所以应填:ch。***************************************************给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:printf("TheAstring:

18");puts(a);printf("

19

20°);NONOO;}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intij,k:chara(100bw[Ml[N],b;rf=fopenC'czWtestWin.dat",^");wf=fopen("c:\\les(\\out.dat".''w");for(k=0;k<10:k+4-){for(i=0;ivoidfun(char*s){intij;for(i=0,j=0;s(i]!=\O';i++)if(s[i]>='0,&&s[i]v=9)fun(w,a);fprinif(wf,a);Ifclose(rf):fclose(wf);}/**********found**********/s[j]=s[i];/**********Cund**********/s|jl=AOH;}解题思路:本题是把二维数组中的字符数据按列存放到一个字符串中。1.计算存放到•维数组中的位置。2.取出二维数组中的字符存放到一维数组(已计算出的位置)中。参考答案:main(){charitem[80];printf("

21Enterastring:");gets(item);#include#defineM3#deGneN4printf("

22

23Thestringis:V%s\"

24".item);fun(item);printf("

25

26Thestringofchangingis:V'%sV

27",ilem);voidfun(charchar*b)(解题思路:intij,n=O;第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j来控制新字符串的位置,所以应改为:s|j++]=sli];1.第二处:置新字符串的结束符,所以应改为:s[j]=\(y;.***************************************************for(i=0;i#defineM3#deGneN4I1b[n]=\0';1main(){chara[100],w[M][N>{{W/WVW?W'},{S'.S,S',S},{H,H,H'.H}};intij;printf("Thematrix:

28");for(i=0;i

29");1fun(w.a);printf('TheAstring:

30M);puts(a);printf("

31

32*);NONO();}

33NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;iniij,k;chara[l(X)Lw[M][NLb;rf=fopenC'ciWtestWin.dat'W);wf=fopen("c:\\test\\out.dat","w");for(k=0;k<10;k++){for(i=0;i

34M,a);)fclose(rf):fclose(wf):}※※※※※※※※※※※※※※※※※※※※※※※※※第03套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;fp=fopen(_1_,Mrb+");fseek(_2_,-lL*sizeof(STU),SEEK_END);/**********found**********/fwrite(&n.sizeofi(STU),I,_3_);fclose(fp);}main(){STUt[N]={{IOOOI,"MaChao",91.92.77).(l0002."CaoKai",75,60,88),{10003JLiSi”,85.70,78),(10004.HFangFang",90,82.87}.{10005."ZhangSan”,95,80,88});STUn={lOOt^:'ZhaoSi",55,70.68),ss(N];intij:FILE*lp;fp=fopenCstudent.dat","wb1');fwri(e(t,sizeof(STU),N,fp);fclose(fp);fp=fopenCstudent.dat","rbH);fread(ss,sizeof(STU),N,fp);fclose(fp);printf('r

35Theoriginaldata:

36

37");for(j=0;j

38No:%ldName:%-8sScores:'\ss[j].sno,ssfjj.name);for(i=0;i<3;i++)printf(H%6.2f",ss[j].score[i]);printf("

39");1funCstudent.dat",n);printf("

40Thedataaftermodifing:

41

42H);fp=fopen("student.dat","rb");fread(ss,sizeof(STU).N,fp);fclose(fp);for(j=0;j

43No:%ldName:%-8sScores:",ss[j].sno,ss(j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("

44");)}解题思路:本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。第一处:从指定的文件中读出数据,所以应填:filename.第二处:读取文件fp的最后一条记录,所以应填:fp。第三处:再把读出的记录,写入文件fp指定的位置上,所以应填:fp。***************************************************给定程序MODILC中的函数CreaUink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includetypedefstructaa{intdata:structaa*next;}NODE;NODE*Creatlink(intn.intm){NODE*h=NULL,*p,*s;inti;/**********Cund***********/p=(NODE)malloc(sizeof(NODE));h=p;p->nexl=NULL;for(i=l;i<=n;i++){s=(NODE♦)malloc(sizeof(NODE));s->data=rand()%m;s->nex(=p->nex(;p->next=s;p=p->next;}/**********found***********/returnp;}outlink(NODE*h){NODE*p;p=h->next;printf(,r

45

46THELIST:

47

48HEADM);while(p){printf(H->%d",p->data);p=p->next;}printfCAn");)main(){NODE*head;head=Creatlink(8,22);outlink(head);解题思路:第一处:指向刚分配的结构指针,所以应改为:p=(NODE*)malloc(sizeof(NODE));第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用P,是因为p的位置已经发生了变化,所以应改为返回h。***************************************************请编写函数ftin,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开.•行的开始没有空格。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#include#include#deGneN80intfun(char*s)[}main(){charline[N];intnum=0;printf("Enterastring:

49");gets(line);num=fun(line);printfCThenumberofwordis:%d

50

51",num);NONOO;}NONO(){/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,num:charline(N],*p;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dar',"w");for(i=0;i<10;i++){fgets(line,N,rf):p=strchr(line,An');if(p!=NULL)*p=0;num=fun(line);fprintf(wf,"%d

52",num);

53Ifclose(rf):fclose(wf);1解题思路:本题是统计字符串中的单词数。1.利用while循环语句和指针变量,当字符为空格时,则单词数k加1。2.循环结束返回匕参考答案:/include#include#defineN80intfun(char*s)]intk=1;while(*s){if(*s=")k++;s-H-;}returnk:)main(){charline|N];intnum=0;prinlf("Enterastring:

54");gels(line);num=fun(line):printf("Thenumberofwordis:%d

55

56".num);NONOO;}NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf:inti.num:charline[N],*p:rf=fopenC'ciWtestWin.dat'^'V");wf=fopen(',c:\\tesi\\out.dat,,,',w,');for(i=0:i<10:i++){fgets(line,N,rf);p=strchr(line,

57');if(p!=NULL)*p=0;num=hin(line):fprintf(wf,num);fclose(rf);fclose(wf):}※※※※※※※※※※※※※※※※※※※※※※※※※第04套:程序通过定义学生结构体变量,存储r学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#inc!ude#defineN5typedefstructstudent{longsno;charname(10];floatscore(3];}STU:voidfun(char*filename){HLE*fp;inti.j;STUs(NJ,t;/**********found**********/fp=fopen(filename,_I_);fread(s,sizeof(STU),N,fp);fclose(fp);for(i=0;i;85,70,78},(l0002,"CaoKai,,,75,60,88},{10004."FangFang",90,82.87},{10001,"MaChao",91,92,77}},ss[N];intij;FILE*fp;fp=fopenC'student.dat","wb");fwri(e(t,sizeof(STU),5.fp);fclose(fp);printf("

58

59Theoriginaldata:

60

61");for(j=0;jvN:j++){printfCAnNo:%ldName:%-8sScores:",t[j].sno,t[j].name);for(i=0;i<3;i++)prin〔f("%6.2f",t[j].score[i]);printf("

62M);}fun("student.dat");printf("

63

64Thedataaftersorting:

65

66H);fp=fopenC'student.dat",^rb*');fread(ss,sizeof(STU),5,fp);fclose(fp);for(j=O;j

67No:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf(M%6.2fss(j].score[i]);prinlf("

68,');I}解题思路:

69本题是考察把结构中的数据写入文件。#defineN50#defineM11voidfun(int*a.ini*b)第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读出,所以应埴:“rb".第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite。***************************************************给定程序MODI1.C中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为79。请改正函数firn中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(chars[],intn)(chara[80],*p;inti;/**********found***********/s=p;for(i=0;i

70Thestring\"%sV'

71",s);printf("

72Entern(numberof*):");scanf("%d".&n);fun(s,n);printf("

73Thestringafterinsert:\"%s\"

74",s);I解题思路:第一处:指针p应指向s,所以应改为:p=s;。第二处:死循环,当d。while循环执行一次,临时变量p应该指向字符串的下位置,所以应改为:while(*p++);o请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[l]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推.把100岁(含100)以上年龄的人数都放在d[IO]中。结果在主函数中输出。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublemd(){statict=29.c=217,m=1024.r=0;r=(r*t+c)%m;retum((double)r/m);)main(){intage(N],i,d(MJ;for(i=0;i

75M);fdr(i=0;i

76,':"%4d",age[il);printf("

77

78");fun(age,d);for(i=0;i

79",i*10.i*10+9,d[i]);printf("Over100:%4d

80",d[10]);NONO(d);}NONO(intd(M]){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/HLE*wf;inti;wf=fopen("c:\\(est\\out.dat,rw");for(i=0;i<10;i++)fprintf(wf,"%4d一%4d:%4d

81*\i*10,i*10+9,d[i]);fprintf(wf,"Over100:%4d

82",d[10]);fclose(wf);}解题思路:本题是统计各年龄段的人数。1.初始化各年龄段人数为0。2.使用for循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于10,则存入d[10]中(大于110岁的人)。参考答案:#include#defineN50#defineM11voidfun(int*a,int*b)]inti,j;for(i=0;i10)b[M-1J++;elseb[j]++;}}doublemd(){statict=29,c=217.m=IO24.r=O:r=(r*t+c)%m:retum((double)r/m);}main(){intage[NLi,d[M];for(i=0;i

83");for(i=0;i

84M:',%4d",age(i]);printf("

85

86");fun(age.d):for(i=0;i<10;i++)printf("%4d---%4d:%4d

87",i*10,i*10+9,d[i]);printfCOver100:%4d

88,,,d[10]);NONO(d);}NONO(intd[M]){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*wf;inti;wf=fopen("c:\\test\\out.dat","w");for(i=0;i<10;i++)fprintf(wf,,,%4d—%4d:%4d

89",i*IO,i*IO+9.d[ij);fprintf(wf,"Over100:%4d

90M.d[10]);fclose(wf);I※※※※※※※※※※※※※※※※※※※※※※※※派第05套:给定程序中,函数mn的功能是将参数给定的字符中、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*s,inta,doublef)(/**********found**********/_1_印;charstr[IOO],strl[100Lstr2[IOO];intal;doublefl;fp=fopen("filel.txt","w");

91fprintf(fp."%s%d%f

92",s,a.f);/**********found**********/_2_;fp=fopen("filel.txt",V);/**********found**********/fscanf(_3_,"%s%s%s",str,strI,str2);fclose(fp);al=atoi(strl);fl=atof(str2);printf("

93Theresult:

94

95%s%d%f

96H,str,al,fl):}main(){charallO]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE*»第二处:关闭刚写入的文件,所以应填:fclose(fp)o第三处:从文件中读出数据,所以应填:fp0***************************************************给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(mW10)名学生来,并将这些学生数据存放在•个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include#deHneN10typedefstructss{charnum[10];ints;)STU;STU*fun(STUa[].in(m){STUb(N],*t;intij.k;/**********found**********/t=(STU*)ca)loc(sizeof(STU).m)for(i=0;ib[jl.s)j=i;/**********found**********/Kk)=b(j);b(j].s=O;1returnI;}outresuk(STUa[],FILE*pf){inti;for(i=0;i

97M,a[i].num,a[i].s);fprintf(pf;"

98

99*);}main(){STUa[N]={{"A01”,81},{“A02”,89|J"A03",66M"A04",87},("A05,\77},{"A06",90},{"A07",79},{"A08H,61},{"A09",80},{"A10'1,71)};STU*pOrder;inti,m;printfC'*****TheOriginaldata*****

100");outresult(a,stdout);printf("

101Givethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);while(m>10){printf("

102Givethenumberof(hestudentswhohavebetterscore:"):scanf(,,%d,,,&m);}pOrder=fun(a,m);primfT*****THERESULT*****");printf("Thetop:

103");for(i=0;i

104".pOrder[i].num,pOrder[i].s);free(pOrder);|解题思路:第一处:语句最后缺少分号。第二处:应该使用方括号,而不是圆括号。像此类,使用编译,即可发现。***************************************************请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列.函数返回删除后数组中数据的个数。例如,一维数组中的数据是:2223445666677899101010.删除后,数组中的内容应该是:2345678910o注意:部分源程序在文件PROGI.C中.请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN80intfiin(inta[],intn)Imain(){inta(N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10J0,10J0},i,n=20;printf("Theoriginaldata:

105M);for(i=0;i

106printf("

107

108Thedataafterdeleted:

109");for(i=O;i

110

111");NONOO;请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。1NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inta[N],n,i,j;rf=fbpen("c:\\(est\\in.dat".',rM);wf=fopen("c:\\test\\out.dat","w");for(i=0;i<5;i++){注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefl(doublex){returnx*x;}doublef2(doublex,doubley)fscanf(rf."%d",&n);for(j=0;j

112");}{returnx*y;}/**********Cund**********/_1_fun(inti.doublex,doubley){if(i==D/**********found**********/return_2_(x);fclose(rf):fclose(wf):else/**********found**********/J解题思路:本题是删除已排序过数组中的相同数。1.取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。2.如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制,接着把这个数重新存入k0如果相同,则取F-数。参考答案:#include#deHneN80intfun(inta(],intn)(return_3_(x,y);)main(){doublexl=5.x2=3.r;r=fun(1,xl,x2);r+=fun(2,xl,x2);printf("

113xl=%f,x2=%f,xl*xl+xl*x2=%f

114

115",xl,x2,r);}解题思路:本题是根据给定的公式来计算函数的值。第一处:程序中使用双精度double类型进行计算,所以函数的返回值inti,j=l.k=a[O];fbr(i=1;i

116");请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********found**********/for(i=0;i

117

118Thedataafterdeleted:

119");for(i=0;i

120

121");NONOO;}charfun(char*s.char*t){intsl=O,tl=O;char*ss,*tt;ss=s;tt=(;while(*ss){sl-H-;/**********Cund**********/NONOO(*ss)++;(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/HLE*rf,*wf;inta[N],n,iJ;rf=fopenC'ciWtestWin.dat'V'r");wf=fopen("c:\\test\\out.dat,',',w");|while(*tt)(tl-H-;/**********於un(l**********/(*«)++;for(i=0;i<5;i++){fscanf(rf,"%d",&n);for(j=0:j

122");1Iif(ti>sl)return(;elsereturns;)main(){chara[80],b(80],*p,*q;inti;printf("

123Enterastring:");gets(a);fclose(rf);fclose(wf);)printf('AnEnterastringagain:"):gets(b);printf("

124Thelongeris:

125

126\"%s\"

127*,ftin(a,b));※※※※※※※※※※※※※※※※※※※※※※※※※第06套:给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出:x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000(X)01解题思路:第一处:试题要求返回字符串的首地址,所以应改为:char*fun(char*s,char*t)第二处:取字符串指针SS的下一个位置,所以应改为:SS++;。第三处:取字符串指针11的下一个位置,所以应改为:11++;。

128***************************************************请编写函数ftin.函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后.把第m+l到最后的字符移到字符串的前部。例如,字符串中原有的内容为:ABCDEFGHUKm的值为3,则移动后,字符串(=w[0];for(i=0;i#include#defineN80voidfun1(char*w)/♦本函数的功能是将字符中中字符循环左移一个位置*/1intm;printfCTheoriginalstring:

129M);puis(a);printf("

130

131Enterm:");scanf("%d".&m);fun(a.m);printf("

132Thestringaftermoving:

133,,);puts(a);printf("

134

135*);NONO();}NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;chara[N];intm,i;inti;chart;(=w[0];for(i=0;i

136",a);voidfun(char*w,intm)/*可调用funl函数左移字符*/]|fclose(rf);fclose(wf);1main(){chara[N]="ABCDEFGHIJK";inim;printf("Theoriginalstring:

137,,);puts(a);printf("

138

139Enterm:");scanf("%d",&m);J※※※※※※※※※※※※※※※※※※※※※※※※※第07套:程序通过定义并赋初值的方式,利用结构体变量存储了•名学生的信息。函数fun的功能是输出这位学生的信息。fun(a.m);printf("

140Thestringaftermoving:

141");puts(a);prinlf("

142

143,r);NONO();i请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。NONO()(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf:chara[N]:intm.i;rf=fopen("c:\\test\\in.dat",Mr");不得增行或删行,也不得更改程序的结构!给定源程序:#includewf=fopen("c:\Mes〔\\oul.dalY'w");for(i=0;i<10;i++){fscanf(rf,*%d%s",&m,a);fun(a,m);fprintf(wf,M%s

144M,a);}(ypedefstruct{intnum;charname[9]:charsex;struct{intyear,month.day;}birthday;floatscore(3];fclose(rf);fclose(wf);}STU;/**********Cund**********/解题思路:本题是考察字符串的操作。1.由于函数funl是将字符串中字符循环左移•个位置,并通过实参w返回循环左移一个位置的字符串。2.利用循环for语句来操作多少个字符(m)需要循环左移。参考答案:voidshow(STU1){inti;printf("

145%d%s%c%d-%d-%d",tt.num.tt.name,tt.sex,(t.birthday,year.tt.birthday,month,tt.birthday.day):for(i=0;i<3;i++)/**********found**********/printf("%5.ir2一);printfCXn");Imain()##include#include#defineN80voidfunl(char*w)/♦本函数的功能是将字符串中字符循环左移一个位置♦/{STUstd={1."Zhanghua",^'.1961,10.8.76.5.78.0.82.0};printf("

146Astudentdata:

147");/**********found**********/show(3);}解题思路:inti;charl;本题是利用结构体变量存储了一名学生的信息。

148第一处:tt变量在函数体fun已经使用,所以应填:L第二处:利用循环分别输出学生的成绩数据,所以应填:(t.score[i]<>第三处:函数的调用,所以应填:std。***************************************************给定程序MODU.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[l]中的数对调。清改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN20intfun(int*a.intn){inti,m,t,k;for(i=0y<2;i++)(/**********Cund**********/m=0;for(k=i+l;ka[m])k=m;t=a[i];a[i]=a(m];a|m]=t;)main(){intx,b[N]={11,5,12.0.3,6.9,7,10.8).n=10.i;for(i=0;i

149");fun(b,n);for(i=0;ia[m])m=k;o***************************************************请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n22)位的整数,函数求出w的低n-1位的数作为函数值返回。例如:w值为5923,则函数返回923:w值为923则函数返回23。注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#includeunsignedfun(unsignedw)I}main(){unsignedx;prinlf("Enteraunsignedintegernumber:");scanf("%u",&x);printf('Theoriginaldatais:%u

150",x);if(x<10)printf("Dataerror!M);elseprintf("Theresult:%u

151H,fun(x));NONO();}NONO(){/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/unsignedx;inti;FILE*ff,*wf;rf=fopen("c:\\test\\in.dat",',r,');wf=fopen("c:\\(est\\out.datM,°w");for(i=0;i<20;i++)(fscanf(rf,"%u",&x);fprintf(wf,"%u

152",fun(x));}fclose(rf);fclose(wf);I解题思路:本题是考察考生怎样获取一个符合要求的无符号整数。本题是应用if条件语句首先判断给出的数是几位数,再模相应的值,最后得出的余数就是结果。参考答案:#includeunsignedfun(unsignedw)(if(w>10000)w%=10000;elseif(w>1000)w%=1(X)0;elseif(w>100)w%=100:elseif(w>10)w%=10;returnw;Imain(){unsignedx;printf("Enteraunsignedintegernumber:");scanf("%u",&x);printf("Theoriginaldatais:%u

153",x);if(x<10)printf("Dataerror!");elseprinlf("Theresult:%u

154M,fun(x));NONO();INONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/unsignedx:inti;HLE*rf,*wf;rf=fopenC'cAVestWin.dat",'?");wf=fopen(',c:\\test\\out.dat","w,');for(i=0;i<20;i++)(fscanf(rf,M%u",&x);fprintftwf."%u

155'\fun(x));}fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第08套:给定程序通过定义并赋初值的方式,利用结构体变量存储/一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include(ypedefstruct{intnum:charname|9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:",tt.num,tt.name);for(i=0;i<3;i-H-)printf("%5.1f',tt.score[i]);printfCXn*');I/**********found**********/voidmodify(1*ss,floata){inti;for(i=0;i<3;i-H-)/**********found**********/ss->2*=a;Imain(){STUstd={17'Zhanghua",76.5,78.0,82.0};floata;printf("

156Thcoriginalnumberandnameandscores:

157");show(std);printf("

158lnputanumber:H);scanf(M%f',&a);/**********found**********/modify(3,a);printf("

159Aresultofmodifying:

160");show(std);}解题思路:本题是利用结构体存储学生记录并由实参SS返回。第一处:实参SS是一个结构型指针变量,所以应填:STUo第二处:该学生的各科成绩都乘以•个系数a,所以应填:score。]。第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std»***************************************************给定程序MOD11.C中函数fun的功能是:求k!(kvl3),所求阶乘的值作为函数值返回。例如:若k=10,则应输出:3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includelongfun(intk)

161(/************found************/ifk>0return(k*fun(k-l));elseif(k=0)returnIL;}main(){intk=10;prinlf("%d!=%ld

162",k.fun(k));I解题思路:第一处:条件判断缺少圆括号。第二处:判断相等的符号是==・***************************************************程序定义了NXN的二维数组,并在主函数中自动赋值。请编月函数fun(intintn),函数的功能是:使数组左下二角元素中的值乘以no例如:若n的值为3,a数组中的值为I197113971a=l238l则返回主程序后a数组中的值应为169811456111215181注意:部分源程序存在文件PROG1.C中.请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN5intfun(inta[][N],intn)main(){inta[N][N],n,i,j;printf("*****Thearray*****

163M);for(i=0;i

164");}don=rand()%10:while(n>=3);printf("n=%4d

165",n);fun(a,n);printf("♦♦♦**THERESULTfor(i=0;i

166");1NONO();INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*1FILE♦ff,*wf;inti,j,n,a[5H5];rf=fopen("c:\\test\\in.dat",Y*);wf=fopen("c:\\tes(\\out.dat","w");fbr(i=0;iv5;i++)for(j=0;j<5;j++)fscanf(rf,"%d",&a[i]|j]);fscanf(rf,M%d",&n);fun(a,n);for(i=0;i<5;i++)(for(j=0:j<5:j++)fprintf(wf,n%W,a[i][j]);fprintf(wf,"

167");}fclose(rf);fclose(wf);}解题思路:本题是利用两重循环给二维数组左下三角元素中的值乘以n。参考答案:/include#include#defineN5intfiin(inta|][N],intn)(inti.j;for(i=0;i

168");for(i=0;i

169M);Idon=rand()%10;while(n>=3);printf("n=%4d

170",n);fun(a,n);prinif("*****THERESULT*****

171");for(i=0;i

172M);

173}else{p->next=q:p=q;|NONO();)}returnh;1voidoutlist(NODE*h){NODE*p;p=h;NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;if(p==NULL)printf('ThelistisNULL!

174");else{printf("

175Head,r);dointi,j,n,a[5H5];{printf("->%d".p-xlata);p=p->next;}rf=fopen("c:\\test\\in.dat",V);wf=fopen(*'c:\\test\\out.dat",''wn);for(i=0;i<5;i++)fbr(j=0;j<5;j++)fscanf(rf,"%d",&a[i][jl);fscanf(rf."%d",&n);fun(a,n);while(p!=NULL):prinlfC'->End

176");1}main(){NODE*head;inta[N]={0,10,4,2,8,6):for(i=0;i<5;i++){for(j=0;j<5;j++)fprinif(wf,a[i][jj);fprintf(wf,"

177");}head=creatlist(a);printf("

178Theoriginallisl:

179");outlist(head);fun(head);fclose(rf);fclose(wf);\printf("

180Thelistafterinverting:

181");outlist(head);1i※※※※※※※※※※※※※※※※※※※※※※※※※第09套:给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹卜的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#deGneN6typedefstructnode{intdata;structnode*next;解题思路:本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的next指针,因此应填写:p.nexto第二处:判断内循环q指针是否结束,所以应填:q。第三处:外循环控制变量p指向自己的nexl指针,所以应填:p.nexlo给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A.z转换为a),其它字符不变。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include)NODE;voidfun(NODE*h){NODE*p,*q;intt;p=h;while(p){/**********found**********/q=_l_;/**********found**********/voidfun(char*s)(while(*s!='@'){if(*s>='A,&*s<=TII*s>=,a,&&*sv='z){if(*s=Z')*s='A';elseif(*s='z')*s='a';else*s+=1;while(_2_){if(p-xiata>q->data){t=p->data;p->dala=q-xlata:q->data=t;)q=q->next;}/**********Cund***********/(*s)++;}}main(){chars[80];/**********found**********/p=_3_;I)printf("

182Enterastringwithlength<80.:

183

184**);gets(s);printf("

185Thestring:

186

187");puts(s);fun(s);printf("

188

189TheCords:

190

191");puts(s);NODE*creatlist(in(a[]){NODE*h,*p,*q;inti;h=NULL;for(i=0;inext=NULL;if(h==NULL)h=p=q:1解题思路:第一处:使用while循环来判断字符串指针s是否结束,所以应改为:while(*s)<>第二处:取字符串指针s的下一个位置,所以应改为:SH;。***************************************************请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整

192数,要求把下标从0到P(含P,P小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1234567.8910;p的值为3o移动后,•维数组中的内容应为:5,6,7,8,9,10,1,2,3,4.注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#defineN80voidfun(in(*w,intp,inin)()main(){inta(N|=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15):inti,p.n=15;printfCTheoriginaldataiXn'1);for(i=0;i

193Thcdataaftermoving:

194");for(i=0;i

195");NONOO;INONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inta[N].i,j,p.n;rf=fopen("c:\\test\\in.dat".',rM);wf=fopen("c:\\test\\out.dat"w");for(i=0;i<5;i++){fscanf(rf,0%d%d';&n.&p);for(j=O;j#defineN80voidfun(int*w,intp,intn)[inti,j=0,b[N];fbr(i=p+1;i{1,234.5,6,7,8,9,10,1142,13,14,151;inti,p.n=15;printfCTheoriginaldata:

196'*);for(i=0;i

197

198En(erp:");scanf("%d",&p);fun(a,p.n);printf("

199Thedataaftermoving:

200M);for(i=0;i

201

202");NONOO;NONO()(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inta[NJ,i,j,p.n;rf=fopen(',c:\\test\\in.dat',,',r,');wf=fopen("c:\\tesi\\out.dat",,rw");for(i=0;i<5;i++){fscanf(rf,"%d%d';&n,&p):for(j=O;j#defineN3inifun(int(*a)[N]){inti,j,m1,m2,row,colum;ml=m2=0;for(i=0;i

203H);for(i=0;i

204M);for(i=0;i

205H);elseprintfCTheArrayisn'tamagicsquare.

206");}解题思路:第一,处:行列变量row和colum的值初始化为0。第二处:两个条件只要有一个不满足就返回0,所以应填:IL第三处:如果矩阵是“幻方”,则返回1。

207***************************************************给定程序MODII.C中fun函数的功能是:根据整型形参m,计算如下公式的值。111t=123mwf=fopen("c:\Mesi\\oul.dai","w");while(n<10)(fge(s(str.80,rf);fun(str);fprintf(wf,"%s",str);n++;例如,若主函数中输入5,则应输出-0.283333o请改正函数fun中的错误或在横线处境上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intm)f1fclose(rf);fclose(wf);}解题思路:本题是考察考生怎样利用字符串指针来删除字符串的空格字符。在函数开始处把指针p先指向字符串str以及位置变量i置0,然后采用while循环和字符串指针p来处理的,每循环一次来判断指针p所指的字符是否为空格,如果不是空格,则把该字符写到市doublet=1.0;inti;字符串中,位置由i来控制,fbr(i=2;i<=m;i++)/**********f()und**********/(=1.0-1/i;/**********found**********/如果是空格,则不处理,继续取下一字符,直至字符串结束为止,最后再把字符串结束符号到位置为i的sir上,再通过形参str返回。参考答案:#includemain()(#includeintfun(char*s(r)intm;printf("

208Pleaseenter1integernumbers:

209");scanf(M%d'\&m);printf("

210

211Theresultis%lf

212",fon(m));)(char*p=str;inti=0;while(*p)(!=")s(r[i++]=*p;解题思路:第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改p++:Istr(i]=0;}main()为t-=l./i0第二处:应是返回公式的值,函数中公式的值是存放在临时变量1中,所以应填reluEt;。***************************************************请编写一个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入"asdafaaz67",则输出为"asdafaaz67"«注意:部分源程序在文件PROG1.C中。请勿改动主函数main和共它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(char*str)()(charstr[8l];intn;printf("Inputastring:'*);gets(str);puts(str);fun(str);printf(*****str%s

213",str);NONOO;}NONOO(/*请在此函数内打开文件,输入调试数据,调用fun函数,输出数据,关闭文件。*/charstr[811;intn=0;HLE*rf.*wf;main()(rf=fopen(,,c:\\test\\in.dat",,,r");wf=fopen(,'c:\\test\\out.dat","wM);charstr[8)|;intn;printf("Inputastring:");gets(str);puts(str);fun(str);printfC****str:%s

214';str);NONO();iwhile(n<10){fgets(str,80,rf);fun(str);fprintf(wf,"%s",str);n++;}fclose(rf);fclose(wf);iNONOO[i※※※※※※※※※※※※※※※※※※※※※※※※※第11套:/*请在此函数内打开文件,输入调试数据,调用fun函数,输出数据,关闭文件。*/charstr[81J;inin=0;FILE*rf,*wf;给定程序中,函数hin的功能是将带头结点的单向链表逆置。即若原链表中从rf=fbpen("c:\Mesl\Vn.dal"Jr")

215头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2.请在程序的下划线处填入正确的内容并把下划线删除,便程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5typedefstructnode{intdata;structnode*next;}NODE:voidfun(NODE*h){NODE*p,*q,*r;/**********砧und**********/p=h->_1_;/**********found**********/if(p==2)return;q=p->nex(;p->next=NULL;while(q){r=q->next;q->next=p;/**********found**********/p=q:q=_3_;}h->next=p;)NODE*creatlist(inta[]>{NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;inext=NULL;if(h->next==NULL)h->next=p=q;else{p->next=q;p=q;}}returnh:}voidoutlist(NODE*h){NODE*p;p=h->next;if(p==NULL)prin(f("ThelistisNULL!

216)else{printfCAnHead°);do{printf(M->%d",p->data);p=p->next;}while(p!=NULL);printf(,,->End

217,');11main(){NODE*head;inta(N]={2,4,6,8,10);head=creatlist(a):printf(M

218TheoriginallistAn");outlist(head);fun(head);printfCAnThelistafterinverting:

219M);outlist(head);}解题思路:本题是考察使用链表方法,而链表的结点数据进行降序排列。第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h->next.第二处:判断p指针是否结束,所以应填写:0。第二处:q指向原q的next指针,所以应填:r。***************************************************给定程序MODILC中函数firn的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN80intfun(char*s,char*t){intn;char*p.*r;n=0;while(*s){P=s;/*********found**********/r=p;while(*r)iR*r==*p){r++;p++;}elsebreak;/*********Sund**********/ifi(*r=0)n++;S++;returnn;Imain(){chara[N],b[N];intm;printf("

220Pleaseenterstringa:");gets(a);prin(f('r

221Pleaseentersubstringb:");gets(b);m=fun(a,b);printfCAnTheresultis:m=%d

222'r.m);1解题思路:第一处:程序中子串是由变量l来实现的,再根据下面while循环体中语句可知,所以应改为:n=t;o第二处:是判断相等的条件,所以应改为:if(*r==O)。***************************************************请编'弓函数fun,函数的功能是:将放在字符半数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。例如,字符串数组中的M个字符串为AAAACC则合并后的字符串的内容应是:AAAABBBBBBBCC。提示:strcal(a,b)的功能是将字符串b复制到字符串a的串尾上,成为一个新串O注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineM3#defineN20voidfun(chara[M][N],char*b)(/♦以下代码仅供参考♦/inti;*b=0;main(){charw[MnN]=("AAAA","BBBBBBB",'CC'},a[100];inti;printf("Thestring:

223n);for(i=0;i

224");fun(w.a);printf('TheAstring:

225M);primf("%s",a);primf('An

226");NONO();}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/HLE*rf.*wf;charw[M][N],a[100];inti;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\test\\out.dat",,,wM);for(i=0;i<10;i++){fscanf(rf,H%s%s%sn,w[0],w[l],w[2J);fun(w,a);fprintf(wf,a):}fclose(rf):fclose(wf);}解题思路:本题是考察字符串的操作。使用for循环以及C语言函数strcat依次连接起来。参考答案:#include#defineM3#defineN20voidfun(charchar*b)]/*以下代码仅供参考*/inti;*b=0;for(i=0;i

227");for(i=0;i

228");fun(w.a);printfCTheAstring:

229K);

230printfC^s^aJiprinifCAnXn");NONO();}NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/HLE*rf,*wf;charw[M][N],a(100];inti;rf=fopen("c:\\test\\in.dat',,,,r");wf=fopen("c:\\test\\out.dat",',w");for(i=0;i<10;i++){fscanf(rf.n%s%s%sM,w(0],w(l],w[2]);fun(w,a);fprintf(wf."%s

231",a);Ifclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第12套:给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5typedefstructnode{intdata;structnode*nexl;|NODE;/**********found**********/_1_*fun(NODE*h)(NODE*p,*q,*r;p=h;if(p==NULL)returnNULL;q=p->next;p->next=NULL;while(q)(/**********found**********/r=q->_2_;q->next=p;p=q;/**********found**********/q=_3_;}returnp;}NODE*creatlist(inta[]){NODE*h,*p.*q;inti;h=NULL;for(i=0;idata=a[ij;q->next=NULL;if(h==NULL)h=p=q;else{p->next=q;p=q;)Ireturnh;}voidoutlist(NODE*h){NODE*p;p=h;if(p==NULL)printfCThelistisNULL!

232");else{printf(AnHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);prinlf("・>End

233");}1main(){NODE*head;inta[N]={2,4,6,8,10);head=creatlist(a);printf("

234Theoriginallist:

235");outlist(head);head=fun(head);printf("

236Thelistafterinverting:

237M);outlist(head);解题思路:本题是考察使用链表方法,对链表的结点数据进行降序排列,最后通过函数进行返回。第一处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE*o第二处:中间变量r用来保存q的next指针,所以应填:next。第三处:q指向原q的next指针,所以应填:r。***************************************************给定程序MODI1.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第个字符放在第0位中)。例如,字符串中的数据为:AABBCCDDEEFF,则输出应当是:ABBCDDEFF,请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:/include#include#defineN80voidfun(char*s,chart[]){inti,j=0;fbr(i=O;i

238,',t);}解题思路:第一处:根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%211s[i]%2=0)0第二处:当字符用处理结束后,应该补上字符串的结束符,那么字符串[的位置是由i来控制,所以应改为:t[j]=O;。***************************************************请编写函数fun,函数的功能是:将M行N列的二维数组中的数据.按列的顺序依次放到一维数组中。函数fun中给出的语句仅供参考。例如,二维数组中的数据为:333333334444444455555555则一维数组中的内容应是:334455334455334455334455-注意:部分源程序在文件PROGI.C中。请勿改动主函数main和丈它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(ints[][10],intb[],int*n,intmm,intnn)(/♦以下代码仅供参考*/intij,np=O;/♦np用作b数组下标*/*n=np;}main(){intw[10H10]={{33,33.33,33),{44,44.44,44).{55,55.5555}}.ij:inta[l00]={0},n=0:printf("ThematrixAn");for(i=0;i<3;i++){fw(j=0y<4;j++)printfC,%3dM,w[i]g]);printfCXn");Ifun(w,a,&n,3.4);printf("TheAarray:

239");for(i=0;i

240

241");NONOO;INONOO{/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数

242据,关闭文件。*/FILE*rf,*wf;intij,k;intw[10][!0],a[IOO],n=0.mm,nn:rf=fopen("c:\\test\\in.dat,,,,,r");wf=fopen("c:\\test\\out.datMw");for(k=0;k<5;k++){fscanf(rf,"%d%d",&mm.&nn);fbr(i=0;i

243*');}fclose(rf);fclose(wf);}解题思路:本题是把二维数组中的数据按行存放到一维数组中。1.计算存放到•维数组中的位置。2.取出二维数组中的数据存放到一维数组(已计算出的位置)中。参考答案:#includevoidfun(int(*s)(10],int*b,int*n,intmm,intnn)(/*以下代码仅供参考*/intiJ,np=O;/*np用作b数组F标*/fdr(i=0;i

244");for(i=0;i<3;i++){forti=0;j<4;j-H-)printf("%3dM,w[ilUl);printfCAn");)fun(w,a.&n,3,4):printf("TheAarray:

245");(6武=0;1<113++)由1«£(**%3(1”,哂])旃谦"\11\11");NONO();}NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/HLE*rf.*wf:inti,j,k;intwllORlO],a[IOO],n=0,mm,nn:rf=fopen("c:\\test\\in.dat","r");wf=fopen("c:\\test\\out.dat',."w");for(k=0;k<5;k++){fscanf(rf,M%d%d".&mm.&nn);for(i=0;i

246");}fclose(rf);fclose(wf);I※※※※※※※※※※※※※※※※※※※※※※※※※第13套:给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2,8、6.排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN6typedefstructnode{intdata;structnode*nex(;}NODE;voidfun(NODE*h){NODE*p.*q;intt;/**********found**********/P=_l_;while(p){/**********found**********/q=_2_;while(q){/**********f0und**********/if(p->data_3_q->data){t=p->da(a;p->data=q-xiata;q-xiata=t:}q=q->next;}p=p->next;)NODE*creatlist(inta(]){NODE*h,*p.*q:inti;h=(NODE*)malloc(sizeof(NODE));h->nexl=NULL;for(i=0;inext=NULL;if(h->nex(==NULL)h->next=p=q;else(p->next=q;p=q;)}returnh;)voidoutlist(NODE*h){NODE*p;p=h->next;if(p=NULL)printfCThelistisNULL!

247");else{printf("

248Head");do{printf("->%d",p->data);p=p->next;|while(p!=NULL);primf("->End

249");)}main(){NODE♦head:inta[N]={0,10,4,2,8,6};head=creatlist(a);printfCAnTheoriginalliscXn");outlist(head);fun(head);printf(,r

250Thelistaftersorting:

251");outlist(head);}解题思路:木题是考察使用链表方法,对链表的结点数据进行升序排列。第一处:使用结构指针p,来控制链我的结束,p必须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h->next.第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的nexi指针。所以应填写:p->nexto第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:>(或***************************************************给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。

252注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includetypedefstructaa{intdata:structaa*next;)NODE;fun(NODE*h){intmax=-1;NODE*p;/***********found**********/p=h;while(p){if(p-xlata>max)max=p->data;/***********f()und**********/p=h->next;}returnmax:}outresult(inls,FILE*pf){fprintf(pf,"

253Themaxinlink:%d

254'\s);}NODE*creal)ink(intn,intm){NODE*h,*p,*s,*q;inti,x;h=p=(NODE*)malloc(sizeof(NODE));h->data=9999;for(i=l;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%m;s->next=p->next;p->next=s;p=p->next;1p->next=NULL;returnh;)outlink(NODE*h,FILE*pf){NODE*p;p=h->next;fprintf(pf."

255THELIST:

256

257HEAD");while(p){fprintf(pf.,,->%d,r,p-xiata):p=p->nex(;)fprintfCpf.'An");main(){NODE*head;intm:head=creatlink(12.100);outlink(head,stdout);m=fun(head);printf("

258THERESULT:

259");outresult(m,stdout);)解题思路:程序中是使用while循环语句和结合结构指针-p来找到数据域中的最大值。第一处:p指向形参结构指针h的next指针,所以应改为:p=h->next;o第二处:p指向自己的下一个结点,所以应改为:p=p->next,***************************************************请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,二维数组中的数据为:333333334444444455555555则一维数组中的内容应是:333333334444444455555555。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(int(*s)[10],int*b.int*n,intmm.intnn)]}main(){intw[10][10]={(33,33,33,33}.{44.44.44.44),(55,55,55,55inta[100]={0|,n=0;printft'Thema〔rix:

260");for(i=0;i<3;i++){fbr(j=0;j<4;j++)printf("%3dM,w[i][j]);printfCAn");)fun(w.a,&n,3,4);printf("TheAarray:

261M);for(i=0;i

262

263M);NONO();)NONO0{/*请在此函数内打开文件,输入测试数据,调用ftin函数,输出数据,关闭文件。*/FILE*rf.*wf;inti,j,k;intw[10]U0],a[IOOJ,n=0.mm,nn:rf=fopen("c:\\test\\in.dat",Mr");wf=fopen("c:\\lest\\out.dal","w");for(k=0;k<5;k++){fscanf(rf."%d%d';&mm.&nn);fbr(i=0;ivoidfun(int(*s)[10]«ini*b,int*n,intmm.intnn)[inti,j,k;for(i=0;i

264");for(i=0;i<3;i++)(for(j=0;j<4;j++)prinlf("%3d",w[i][j]);printf("

265");}fun(w,a,&n,3,4);printfCTheAarray:

266");for(i=0;i

267

268");NONOO;}NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,♦wfJntiJA;intw[10Ul0),all(X)J,n=0,mm,nn:rf=fopen("c:\\(est\\in.dat",',r'');wf=fopen("c:\\(es(\\out.dat"."w,');for(k=0;k<5;k++){fscanf(rf.%d".&mm,&nn);for(i=0;i

269*');1fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第14套:给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在_2_处使f指向函数fl,在_3_处使f指向函数£2。当调用正确时,程序输出:x1=5.000000,x2=3.OO()O(X),xl*xl+xl*x2=40.(X)0(XX)

270请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefl(doublex){returnx*x;}doublef2(doublex,doubley){returnx*y;}doublefun(doublea.doubleb)[/**********found**********/_1_(*f)();doublerl,r2;f=2;/♦pointfountionfl*/rl=f(a);/**********found**********/f=_3_;/*pointfbuntionf2♦/r2=(*f)(a,b);returnrl+r2;1main(){doublexI=5,x2=3.r;r=fun(xl,x2);printf("

271xi=%f,x2=%f,x1*xI+x1*x2=%f

272",x1.x2,r);}解题思路:本题主要是考察用函数指针指向要调用的函数。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第•处:定义函数指针的类型,所以应填:double.第二处:使f指向函数fl,所以应填:flo第三处:使f指向函数E2,所以应填:f2o***************************************************给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数ftm的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为由数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/includetypedefstructaa{intdata:structaa*next;JNODE;intfiin(NODE*h){intsum=0;NODE*p;/***********found**********/p=h:while(p){if(p-xlata%2=0)sum+=p->data;/***********f()und**********/p=h->nex(;)returnsum;1NODE*creatlink(in(n){NODE*h,*p,*s,*q;inti,x;h=p=(NODE*)malloc(sizeof(NODE));for(i=l;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%16;s->next=p->next;p->next=s;p=p->next;}p->next=NULL;returnh:}oullink(NODE*h.FILE♦pf){NODE*p;p=h->next;fprintf(pf,AnVnTHELIST:

273

274HEAD");while(p){fprintf(pf."->%data);p=p->next;}fprintf(pf/An");}outresult(ints,FILE*pf){fprintf(pf."

275Thesumofevennumbers:%d

276*\s);}main(){NODE*head;inieven;head=creatlink(12);head->data=9000;outlink(head,stdout);even=fun(head):printfCAnTheresult:

277'r);outresult(even,stdout);)解题思路:本题是考察如何使用单向链表把数据域的值按条件进行累加。第一处:试题要求不计算头结点,所以应改为:p=h->nex(;第二处:指向p的下一个结点来实现循环,所以应改为:p=p->next;***************************************************请编写函数fun,函数的功能是:判断字符串是否为回文?若是,函数返回h主函数中输出:YES,否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。例如.字符串LEVEL是何文.而字符申123312就不是何文。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN80intfun(char*str)()main(){chars[N];printf("Enterastring:");gets(s);printfCAnXn");puts(s);if(fun(s))prinlfCYES

278M);elseprintf("NO

279");NONO();INONCX){/*请在此函数内打开文件,输入测试数据,调用fun函数,除出数据,关闭文件。*/FILE♦rf.*wf;inti;chars[N];rf=fopen("c:\\test\\in.dat"."rM);wf=fopenC^iWtestWout.dat'V'w");for(i=0;i

280".s):elsefprintf(wf,0%sNO

281",s);}fclose(rf);fclose(wf):}解题思路:本题是考察如何判断•个字符串是问文字符串,问文是指顺读和倒读都一样的字符串。可以利用f。!•循环语句来判断,如果前后不一致,则不是回文字符串。参考答案:#include#defineN80intfun(char*s(r)(inti.j=sirlen(str);for(i=0;i

282

283");puts(s);i«fun(s))printfCYES

284");elseprintf("NO

285");NONOO;1NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,

286输出数据,关闭文件。*/FILE*rf,*wf;inti:chars[N];rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\(est\\out.dat",Mw");for(i=0;i<10;i++){fscanf(rf,s);if(fun(s))fprintf(wf,0%sYES

287",s);elsefprintf(wf,M%sNO

288".s);}fclose(rf);fclose(wf):※※※※※※※※※※※※※※※※※※※※※※※※派第15套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到siudent.dat文件中。函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据及盖原数据,其它学生数据不变:若找不到,则什么都不做。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#de6neN5typedefstructstudent{longsno;charname[10];floatscore|3J;}STU;voidfun(char*filename.longsno){HLE*印;STUn;inii;fp=fopen(filename,"rb+,');/**********foun(j**********/while(!feof(_I_)){lread(&n,sizeof(STU),1,fp);/**********found**********/if(n.sno_2_sno)break;if(!feof(fp)){for(i=0;i<3;i++)n.score[i]+=3;/**********found**********/fseek(_3_,-lL*sizeof(STU),SEEK_CUR);fwrite(&n,sizeof(STU),1,tp);}fclose(fp);}main(){STUt[N]={{1()001,"MaChao",91,92.77},{10002/CaoKai\75,60.88).{IOOO3."LiSi”,85,70,78),{KHMM:'FangFang",90,82,87}.{10005.,,ZhangSanH,95.80.88}),ss[N];intij:FILE*fp;fp=fopenC'student.dat*',"wb");fwri(e(t,sizeof(STU),N.fp);fclose(fp);printf("

289Theoriginaldatafp=fopen("student.dat","rb");fread(ss,sizeof(STU).N,fp);fclose(fp);for(j=0;j

290No:%ldName:%-8sScores:ss(j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].scoFe[i]);printfCVn");}fun("student.dat",10003);fp=fopenC'student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("

291Thedataaftermodifing:

292");for(j=O;j

293");}}解题思路:本题是考察如何从指定文件中找出指定学号的学生数据,并进行适当的修改,修改后重新写回到文件中该学生的数据上,即用该学生的新数据覆盖原数据。第一处:判断读文件是否结束,所以应填:fp。第二处:从读出的数据中判断是否是指定的学号,其中学号是由形参sno来传递的,所以应填:==。第三处:从已打开文件fp中重新定位当前读出的结构位置,所以应填:fpo给定程序M0DII.C中函数ftin的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序。然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……o待排序的字符串已在主函数中赋予。清改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include#defineN80voidinsert(char*aa){inti.j,n;charch;/**********found**********/n=slrlen[aa];fbr(i=l;i=0)&&(ch

294",a);insert(a);printfCThestringaftersorting:%s

295

296",a);}解题思路:第•处:函数应该使用圆括号,所以应改为:n=strlen(aa)第二处:变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aa[i|;eN名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向锌表的头节点。请编写函数ftin,它的功能是:找出学生的最高分,由函数值返回。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doublefun(STREC*h){}STREC*createdouble*s)(STREC*h,*p,*q;inti=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(is=s[i];i++;p->next=q;p=q;)p->next=O;returnh;Ioutlist(STREC*h){STREC*p;p=h->next;printf("head");do{printf(,'->%2.0f',p->s);p=p->next;)while(p!=O);printfCMXn。;)main(){doubles[N]={85,76,69,85,91,72,64,87),max;STREC*h;h=creat(s);outlist(h);max=fun(h);

297printf(',max=%6.1t

298",max);NONCX);}NONO(){/*本函数用于打开文件,输入数据,调用函数,检出数据,关闭文件。*/FILE*in,*out;intij;doubles[N].max;STREC*h:in=fopen("c:\\test\\in.dat,,,MrM);out=fopen("c:\\test\\out.dat',."w");for(i=0;i<10;i++)(for(j=0;j

299",max);)fclose(in);fclose(out);)解题思路:本题是考察如何从链表中求出学生的最高分。我们给出的程序是利用while循环语句以及临时结构指针p变量来求出最高分。1.将链表中的第1个值赋给变量max。2.将链表指针p的初始位置指向h的next指针(honexi)。3.判断p指针是否结束,如果结束,则返回max,否则做下一步。4.判断max是否小于如果小于,则max取p->s,否则不替换。5.取ponexi赋值给p(取下一结点位置给p),转3继续。参考答案:/include#include#defineN8structslist{doubles;structslist*next;];typedefstructslistSTREC:doublefun(STREC*h){doublemax=h->s;STREC*p;p=h->nex(:while(p){if(p>>s>max)max=p->s;p=p->next;)returnmax:}STREC*creat(double*s){STREC*h.*p,*q;inti=0:h=p=(STREC*)malioc(sizeof(STREC));p->s=0;while(is=s[il;i++;p->nexl=q;p=q:p->next=0;return忙}outlist(STREC*h){STREC*p;p=h->next;prinlfC'head");do{printf(>'->%2.0r'.p->s);p=p->next;}while(p!=0);printf(,r

300\ii");}main(){doubles[Nl={85.76,69,85,91,72.64,87},max;STREC*h;h=creal(s);outlist(h);max=fun(h);prin(f(,'max=%6.1f

301".max);NONOO;)NONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;intij;doubles[N],max;STREC*h;in=fopen("c:\Vesl\\in.dal",T);out=fopen("c:\\test\\out.dat",*'w");for(i=0;i<10;i++){for(j=0;j

302",max);Ifclose(in);fclose(oul);1※※※※※※※※※※※※※※※※※※※※※※※※※第16套:给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其。最长的字符串等长。SS所指字符申数组中共有M个字符串,且串长vN。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j.n,len=0;for(i=0;in)n=len;}for(i=0;i

303M);for(i=0;i

304",ss[i]);printfCAn");fun(ss);printfCTheresultis:

305M);for(i=0;i

306",ss[i]);1解题思路:第一处:利用for循环语句取当前字符串的长度,所以应填:ss[i]o第二处:在字符串的右边填字符*,其开始位置是11句,其中n是该字符串本身的长度,j是循环控制变量,所以应填:n+j.第三处:字符串处理结束应置字符串结束符,其位置是n+j+1,所以应填:1。***************************************************给定程序MODH.C中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。例如,若输入"Iamastudenttotaketheexamination.".则应输出"IaMAstudenTtOtakEthEexamination.°o请修改程序中的错误之处,使它能得出正确的结果。注意:不要改动main函数,不得删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*p)intk=0;for(;*p;p++)if(k)[/**********found***********/if(P==")(k=0;/**********found***********/*(p-l)=toupper(*(p-1))IIelsek=1;}main()charchrstr[64];intd;printf('AnPleaseenteranEnglishsentencewithin63letters:");ge(s(chrslr);d=strlen(chrstr);chrstr(d)='';chrstr[d+1]=0;printf("

307

308Beforechanging:

309%s",chrstr);fun(chfstr);printf("

310Afterchanging:

311%sM,chrstr);}解题思路:第一处:关键字int错写成INT。第二处:该行括号没有配对,所以只要加上一个右括号即可。***************************************************

312请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列.例如,原来的字符串为CEAedca,排序后输出为CedcEAa.注意:部分源程序在文件PROGI.C中。请勿改动主函数main和K它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#includeintfiin(char*s,intnum)main()(chars[10];printf("输入7个字符的字符串:");gets(s);fun(s,7);printf("

313%sw,s);NONO();INONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/chars[10];FILE*rf,*wf;inti=0;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dat","w");whiled<10){fgets(s,10,rf);s[7]=0:fun(s,7);fprintf(wf,"%s

314'\s);i++;1fclose(rf);fclose(wf);}解题思路:本题是考察考生如何对字符串中的字符按降序进行排序。给出的程序是使用双重for循环以及冒泡法进行排序的,结果仍存放在原先的字符串上。参考答案:#include#include#includein(fun(char*s,intnum)]charch:inti,j;fbr(i=1;i<6;i++)fbr(j=i+I;j<6;j++)(if(*(s+i)<*(s+j))(ch=*(s+j);*(s+j)=*(s+i);*(s+i)=ch;1Imain(){chars(10]:printf("输入7个字符的字符串:");gets(s);fun(s,7);printf("

315%sM,s);NONOO;}NONOOI/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/chars[10];FILE*rf,*wf;inti=0;rf=fbpen("c:\\test\\in.dat',,,,r");wf=fopen(',c:\\tesi\\out.dat,,,',w,');while(i<10){fgets(s,10,rf);s[7]=0;fun(s,7);fprinlf(wf,s);i++;)fclose(rf);fclose(wf);I※※※※※※※※※※※※※※※※※※※※※※※※※第17套:程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includestructstudent{longsno;charname[10];floatscore[3J;};voidfun(structstudenta[],intn)/**********found**********/inti,j;/**********他und**********/for(i=0;i<_2_;i++)fbr(j=i+l;j0){t=a[i];a[i]=a(j];a[j]=t:}}main(){structstudents[4]={{10001."ZhangSan",95,80.88},{10002,"LiSi",85,70,78}.(10003,"CaoKai",75,60.88),{10004,"FangFang",90,82,87)};inti,j;printf("

316

317Theoriginaldata:

318

319");for(j=0;jv4;j++){printf('AnNo:%ldName:%-8sScores:",s|j].sno,s[j].name);for(i=0;i<3;i++)primfT%6.2f",s|j].score[i]);printfCAn");}fiin(s,4);printf("

320

321Thedataaftersorting:

322

323M);for(j=0;j<4;j-H-){printfCAnNo:%ldName:%-8sScores:",s(j].sno,s[j].name);for(i=0;i<3;i++)prin(fC%6.2f",s[j].score[i]);printf("

324'*);}1解题思路:本题是对结构体数组中的姓名按升序进行排列。第一处:t是一个临时变量,主要是存放学生数据的结构变量,所以应填:structstudent。第二处:利用两重for循环进行排序操作,排序的终止条件应该是总人数减1,所以应填:n-1..第.处:对姓名进行比较大小,所以应填:a(i].namc.a[j].nameo给定程序M0DI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置匕并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includefun(char*p){charmax.*q;inti=0;max=p|ij;while(p(il»=0){if(max

325\TABq=p+i\TAB}i++:}wihle(q>p){*q=*(q-l);q-;1p[O]=max;Imain(){charstr[8O];printf("Enterastring:");gets(str);printf("

326Theoriginalstring:"):puts(str);fun(str);printf("

327Thestringaftermoving:");puts(str);printf("

328

329M);I解题思路:第一处:在语句后缺少分号,所应改为:q=p+i:。第二处:保留字while写错,所应改为:while(q>p)o***************************************************学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fiin,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中.把69放在heigh中。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#detlneN16(ypedefstruct{charnum[10];ints;}STREC;intftm(STREC*a,STREC*b.int1,inth)main(){STRECs[N]={{"GAOO5"<85},("GA003",76},{"GA002,',69},{MGAOO4",85}.{"GA00r',96},("GA007",72},{"GA008",64),("GA006",87},{,,GAO15",85}4"GAO13"<94},{"GA012",64},{"GA014".91).「GAOHM,90},{"GAO17",641J'GAOl8",64},{“GAO16",72});STRECh[N]4t;HLE*out;intij,n,low.heigh,t;prints"Enter2integernumberlow&heigh:");scanf("%d%d",&low.&heigh);if(heigh

330",low,heigh);fbr(i=O;i

331NJi[i].num,h[i].s);prinlfCAn");out=fopen(Mc:\\ies(\\out.dat","w'3;n=fun(s,h,80,98);fprinif(oui,"%d

332".n);fbr(i=O;ihljl.s){tt=hlij;h[i]=h(j];hlj]=tt:|for(i=0;i

333",h[i].s);fprintf(out."

334");fclose(out);}解题思路:本即是把符合条件的学生记录存入到另•个结构体,最后通过主函数进行输出.1.符合条件的学生人数存在变量j(初始值为0)中,最后返回其值。2.利用面循环语句,依次判断是否符合条件,如果符合,则存入另一个记录体中,人数j加I.参考答案:#include#defineN16(ypedefstruct(charnum[10];ints;}STREC;intfun(STREC*a.STREC*b,int1,inth){intij=0;for(i=0;i=1&&a[i].s<=h)b[j++J=a[i];returnj:)main(){STRECs[N]={(MGA005",85M"GA003",76},{MGA002".69),{"GA004",85),{"GA001",96},{,,GA007”,72},{“GA008”,64}.{"GA006”.87},{,,GA015",85},{"GA013”,94},{"GA012",64},{"GA014",91},("GAOH".9O},{"GA017",64},{"GAOI8",64),{"GAO16",72});STRECh[N],tt;FILE*out;inti.j,n,low.heigh,t;printf("Enter2integernumberlow&heigh:");scanfC'%d%dM.&low,&heigh);if(heigh

335nfh[i].num,h[i].s);printf("

336M);out=fopen("c:\\test\\out.da(,\,,w,');n=fun(s,h,80,98);fprinif(out."%d

337',,n);for(i=0;ihU].s){tt=h[i];h[i]=hg];h[j]=tt;!for(i=0;i

338M.h[i].s);fprintf(out,"

339");fclose(oul);1※※※※※※※※※※※※※※※※※※※※※※※※※第18套:给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includechar*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+l;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0:for(i=0;i=,a')&&(s[i]<=,z'))ll((s[i]>='A,)&&(s[i]<=Z,)))(

340/**********found**********/t(j]=_l_;j++;>else{p[k]=s[i];k++;}){fiin(s,tl,t2.w);printf("

341Theresultis:%s

342M,w);1elseprintf("

343Error:strlen(tl)!=strlen(t2)

344M);)解题思路:第一处:判断w指针所指的值是否是结束符,应改为:while(*w).for(i=0;i<_2_;i++)t[j+i|=p[i];/**********found**********/t[j+k]=_3_;returnt;}第二处:if错写成If。***************************************************函数ftm的功能是:将s所指字符串中ASCII值为奇数的字符删除,申中剩余字符形成一个新串放在t所指的数组中.main(){chars[8OJ;printf("Pleaseinput:");scanf(M%s",s);printf("

345Theresultis:%s

346".fun(s));}例如,若s所指字符串中的内容为:"ABCDEFG123450,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后1所指的数组中的内容应是:"BDF24%解题思路:第•处:函数中申请了两个内存空间,其p是存放字母字符串,1是存放非字母字符串,根据条件可知,p依次存放字母字符串,其位置由j来控制,所以应填:s[i].第二处:利用for循环再把【中的内容依次追加到p中,我中1的长度为k,所以应填:k.第三处:字符串处理好后必须添加字符出结束符,所以应填:注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#inciude#includevoidfun(char*s,chart[|)\U0给定程序M0DI1.C中函数fun的功能是:将s所指字符串中最后一次出现的与tl所指字符串相同的子串替换成12所指字符串,所形成的新串放在w所指的数组中。在此处,要求H和12所指字符串的长度相同。例如,当s所指字符串中的内容为:"abcdabfabc”,tl所指子串中的内容为:"ab",12所指子串中的内容为:"99"时,结果,在w所指的数组中的内容应为:,,abcdabf99c"B请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(char*s,char*t1,char*t2,char*w)fImain()(charsflOO].printfCAnPleaseenterstringS:M);scanf("%sM,s);fun(s,t);prin(f("

347Theresultis:%s

348".t);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。到chars[100],([100];FILE*rf,*wf;inti;rf=fopen(c:\Vest\Vn.dat,r');wf=fopen("c:\\les(\\ou(.dat","w'');for(i=0;i

349",t);/************found************/while(w){p=w;r=11;while(*r)}fclose(rf);fclose(wf);}/************four>d************/IF(*r=*p){r++;p++;|elsebreak;if(*r==V)*)a=w;W++;I解题思路:本题是从一个字符串按要求生成另一个新的字符串。我们使用f。!•循环语句来解决这个问题。参考答案:#includer=t2;while(*r){*a=*r;a++;r++;}#includevoidfun(char*s,char([])Jmain()intiJ=O;for(i=0;i

350PleaseenterstringS:");scanf("%s",s);printf("

351Pleaseentersubstringscanf(M%s",tl);printf("

352Pleaseentersubstring2");scanf("%s".(2);if(strlen(tl)=strlen(t2))main()(chars[100],t[l00);printf("

353PleaseentersiringS:");scanf(H%sM,s);fun(s,t);

354printf("

355Theresultis:%s

356M,t);NONO();INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[l(X)],1(1001;FILE*rf,*wf;inti;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\(est\\out.dat","w");for(i=0;i<10;i++){fscanf(rf,o%s",s);fun(s,t);fprintf(wf,,,%s

357,\t);}fclose(rf);fclose(wf):}※※※※※※※※※※※※※※※※※※※※※※※※※第19套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数ftin的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:10001、0ZhangSan\95、80、88,修改后输出t中的数据应为:10002、LiSi\96、81、89o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includestructstudent{longsno;charname[10];floatscore[3];};/******n(***found**********/_1_fiin(structstudent*a){inti;a->sno=10002;strcpy(a->name."LiSi");/**********found**********/for(i=0;i<3;i++)_2_+=1;/**********found**********/return_3_;}main(){structstudents={10001,"ZhangSan”,95,80.88}.*t;inti;printf("

358

359Theoriginaldata:

360");printf("

361No:%ldName:%s

362Scores:'\s.sno,s.name);for(i=0;i<3;i++)printf("%6.2fs.scone[i]);printf("

363");t=fun(&s);printf("

364Thedataaftermodified:

365");printf("

366No:%IdName:%s

367Scores:",t->sno,t->name);for(i=0;i<3;i++)prinif("%6.2ft->score[i]);printf("

368M);)解题思路:本题是利用形参对结构体变量中的值进行修改并通过地址把函数值返回。第一处:必须定义结构指针返回类型,所以应填:structstudent*。第二处:分别对成绩增加1分,所以应填:a->score[i]。第三处:返回结构指针a,所以应填:a.***************************************************给定程序MODI1.C中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。清改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include#defineN5#defineM81/**********found**********/fun(char(♦sq)[M]){inti;char*sp;sp=sq[0];for(i=0;i

369",N);for(i=0;i

370TheNstring:

371';N);for(i=0;i

372Thelongeststring:

373"):puts(longest);)解题思路:第,处:要求返回字符中的首地址,所以应改为:char*fun(char(*sq)[Ml)o第二处:返回个由变量sp控制的字符串指针,所以应改为:return卬;。***************************************************函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的十位和千位上。例如,当a=45,b=12c调用该函数后,c=2415。注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数hin的花括号中填入你编写的若「语句。给定源程序:#includevoidfun(inta,intb.long*c)(}main(){inta,b;longc;printfC'Inputa.b:");scanf("%d%dM,&a,&b);fun(a.b.&c);printfCTheresultis:%ld

374'\c);NONO();NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。HLE*rf.*wf;inti,a,b;longc;rf=fopen("c:\\(est\\in.dat',,"r");wf=fopen("c:\\test\\out.dat",',w");for(i=0;i<10;i++){fscanf(rf,&a,&b);fun(a.b,&c);fprintf(wf,"a=%d.b=%d,c=%ld

375",a,b.c);}fclose(rf);fclose(wf);}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成•个新数。取a卜位数字的方法:a/10取a个位数字的方法:a%10参考答案:#includevoidfun(inia,intb,long*c){♦c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;Imain(){inta.b;longc;printf("Inputa,b:H);scanf(,,%d%d,\&a.&b);fun(a,b,&c);printf(',Theresultis:%ld

376'\c);NONOO;

377INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b:longc;rf=fbpen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dar',"w");for(i=0;i<10;i++){fscanf(rf.&a.&b);fun(a,b,&c);fprintf(wf."a=%d.b=%d,c=%ld

378",a,b.c);)fclose(rf);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第20套:给定程序中,函数ftin的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为iE数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:4630324061745154826,平均值为:3O.5OOOOO移动后的输出为:3061715264632404548请在程序的下划线处填入正确的内容并把F划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN10doublefun(double*x){inti,j;doubleav,y[N];av=O;/**********found**********/for(i=0;i

379");printf("

380Theaverageis:%f

381".fun(x));printf("

382Theresult:

383",fun(x));for(i=0;i

384");}解题思路:第•处:求出N个数的平均值,所以应填:No第二处:利用for循环语句,把数组x中小于平均值的数,依次存放到数组y中,其中位置由变量j来控制,所以应填:j++»第三处:i是while循环体的控制变量,每做一次循环均要加1。给定程序MODII.C中函数ftin的功能是:统计字符串中各元音字母(即:A、E、【、0、U)的个数。注意:字母不分大、小写。例如:若输入:THIsisabool,则输出应该是:I、0、2、2、0。请改正程序中的错误,使它能得出1E确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includefun(char*s.intnum[5]){intk.i=5;for(k=0;k=0)num[il++;I}main(){charsi[81];intnuml[5],i;printf("

385Pleaseenterastring:"):gets(si):fun(si,numl);for(i=0;i<5;i++)printf(H%dw,numl[i]);printfC

386°);I解题思路:第一处:num初始化错误,应为:num[k]=0;o第二处:由于s是指针型变量,所以应改为:switches)。***************************************************请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数

387值返二维数组中的值在主函数中赋予。例如:二维数组中的值为13579299946999813570则函数值为61o注意:部分源程序存在文件PROGI.C文件中。tot+=a[i][0];tot+=a[i][N-l];}returntot;}main(){intaa[M][N]=U1.3.5.7.9},(2.9,9,9.4),[6,9,998),(l,3,5,7.O}};y;请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/includeclrscrO;printf("Theoriginaldatais:

388*);for(i=0;i

389Thesum:%d

390",y);printf("

391");NONO();i}main(){intaa[M][N]={{1,35,7,9},{2,9.994}.{6,9,9,9.8),[1,35,7,0}};inti.j,y;clrscrO;printf("Theoriginaldatais:

392");for(i=0;i

393H);IiNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,y,k,aa[M][Nl;FILE*rf,*wf;rf=fopen("czWtestWin.dat",'?");wf=fopen("c:\\test\\out.dat","w");for(k=0;k<10;k++){for(i=0;i

394".y);y=fun(aa);printf(AnThesum:%d

395",y);printf("

396");NONO();1fclose(rf):fclose(wf);NONO()(/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。♦/inti,j,y,k.aa[M][N];FILE*rf,*wf;rf=fbpen("c:\\test\\in.dat',,',r");}※※※※※※※※※※※※※※※※※※※※※※※※※第21套:给定程序中,函数hin的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,wf=fopenC'cAMescWout.daf'/'w");for(k=0;k<10;k++){for(i=0;i确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN10#defineM4#deHneN5intfun(inta[M][N])(doublefun(double*x){inti.j:doubles,av,y[N];s=0;for(i=0;iav){/**********f0und**********/)for(i=1;i

397第一处:包含头文件的标识错误,在include前漏写了机第二处:由于传入的参数是字符串,所以应为upfsi(char*p)。***************************************************程序定义了nxn的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的$。例如:a数组中的值为1012791II97451a=l2383IIH5682115914II则返回主程序后s的值应为:3.375o注意:部分源程序存在文件PROG1.C文件中。请勿改动t函数main和其它函数中的任何内容,仅在函数funsum+=w[i][0]+w[i][N-l];n+=2;}returnsum/n;}main(){inta[N][N]=[0,127,9.1,9,7.45,2,3,&3,L4$,6.8.2,591.4,1);inti.j;doubles;printfC******Thearray*****

398n);for(i=0;i

399");printf("

400Theaverageis:%f

401".fun(x));printfCAnTheresult:

402",fun(x));for(i=0;i#include/******,*****found************/includeupfst(charp){inik=0;for(;*p;p+4-)if(k){if(*p==-')k=o;}elseif(*p!=''){k=1:*p=toupperf*p);}}main(){charchrstr[81];prinlf("

403PleaseenteranEnglishtextline:");gets(chrstr);printf("

404

405Beforechanging:

406%s'\chrstr);upfst(chrstr);printf("

407Afterchanging:

408%s

409M.chrstr);)解题思路:的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN5doublefun(intw[|[N])main(){inta[N][N]=<0,i,2.7,9.1,9.7.4^,2.3,8,3.1,4,5,6,8,2,5,9,1,4,1);inti,j;doubles;printfC******Thearray*****

410M);for(i=0;i

411");printf('Thesumis:%lAn",s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE♦ff,*wf;inti,j,a[5][5];doubles;rf=fopenC'ciWtestWin.dat'VY");wf=fopen("c:\\(es(\\out.dat"."w,');fbr(i=0;iv5;i++)for(j=0:j<5;j++)fscanf(rf,"%d",&a[i][j]);s=fun(a);fprintf(wf,H%lf

412",s);fclose(rf);fclose(wf):I解题思路:本题是统计二维数组周边元素值的平均值,但要注意的是不要重更计算四个角上的元素值。参考答案:#include#include#defineN5doublefun(intw[][N]){inti,j,n=0;doublesum=0;for(i=0;i

413"):prinlf("Thesumis:%lf

414",s);NONO();1NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/FILE*rf,*wf;inti,j,a[5][5];doubles;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\(est\\out.dat",Mw");for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,"%#includeintfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,"w"))==NULL)return0;for(i=lu<=IO;i++)/**********found**********/fprintf(_1"%d%f

415,,.i.sqrt((double)i));prinlf("

416Succeed!!

417");/**********found**********/

418_2_iprintf("

419Thedatainfile:

420"):/**********foun(j**********/if((fp=fopen(_3_,T'))==NULL)return0;fscanf(fp,"%d%r.&n,&x);while(!feof(fp))(printf("%d%f

421",n,x);fscanf(fp,"%d%f,&n,&x);)fclose(fp);return1;)main(){chiirfnamef>"myfile3.txt0;fun(fname);}解题思路:本题要求所求出的数月人到指定的文件中保存。程序中共有三处要镇上适当的内容,使程序能运行出正确的结果。第,处:inifprintf(F!LE*stream,constchar"formal[.argument,•,,]);因此本处只能填写文件流的变量fp。第二处:由于文件打开耳操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)o第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出文件名,所以本处只能写文件名变量fname或者直接给出文件名"myfHe3.dal"。***************************************************给定程序MODH.C中fun函数的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includefun(intn,int*a){intij,p,t;for(j=0;ja[i])/************found************/t=i;if(p!=j){t=a[j];a[j]=a(pj;a[p]=t;)1putarr(intn,int*z){inti;for(i=1;i<=n;i++.z++){printf(,'%4d,\*z);if(•(i%10))prin(f("

422");}printfCXn");}main(){intaa[20]={9,3,0,4,1,2,5,6,8,10,7),n=11;printf("

423

424Befbresorting%dnumbers:

425",n);putarrfn,aa);fun(n,aa);prinlf("

426Aftersorting%dnumbers:

427",n):putarr(n.aa);I解题思路:第一处:for循环的终止值应该voidfun(in(a.intb,long*c)(}main(){inta,b;longc;printf("Inputa.b:M);scanf("%d,%d*,,&a.&b);fun(a.b.&c);printf("Theresultis:%ld

428,\c);NONOO;}NONO(){/♦本函数用于打开文件,谕入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("c:\MestWin.dat","r1*);wf=fopen("c:\\test\\out.da(","w'');for(i=0;i<10;i++){fscanf(rf."%d,%d",&a,&b):fun(a,b,&c);fprintf(wf,Ha=%d,b=%d,c=%ld

429",a,b,c);Ifclose(rf);fclose(wf);}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%IO参考答案:#includevoidfun(inta,intb,long*c)I*c=(b%10)#1000+(a%10)*100+(b/10)*10+(a/l0);)main(){inta.b;longc;printf("Inputa,b:M);scanf("%d,%d",&a,&b);fun(a,b,&c):printfCTheresultis:%ld

430'\c);NONOO;1NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b:longc;rf=fopen("c:\Vest\\in.dar',"r");wf=fopenC'cAMescWout.daf'/'w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%

431,\a,b.c);1fclose(rf);fclose(wf):)※※※※※※※※※※※※※※※※※※※※※※※※※第23套:给定程序中,函数fun的功能是:找出NXN矩阵中每列元素中的最大值,并按顺序依次存放于•形参b所指的一维数组中。请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果e注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4voidfun(int(*a)[N],int*b)(intij;for(i=0;i{{I2.5,8,7)J6.1,9,3),{2,8.43}printf("

432Thematrix:

433");for(i=0;i

434");}/**********foun(i**********/fun(_3_);

435printfCAnTheresultis:");for(i=0;i

436M);)解题思路:第•处:把每列的第1值赋值给b[ij,所以应填:a⑼[小第二处:如果b[i]值小于的值,则把aUMi]重新赋值给b[i]中,保存最大的值,所以应填:/*********found**********/intfun(intx,inty)]intt;/*********found**********/t=x;x=y;y=t;}main(){inta.b;a=8;b=3;fun(&a.&b);printf('%d,%d

437",a,b);1解题思路:第•处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*x;*x=*y;*y=t;。***************************************************编写函数fun,函数的功能是求出小于或等于lim的所有素数并放在aa数组中,函数返回所求出的素数的个数。函数fun中给出的语句仅供参考。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineMAX100intfun(intlim,intaa[MAX|){/*以下代码仅供参考*/intiJ,k=O;/♦其中变量k用于统计素数个数*/fbr(i=2;i<=lim;i++)(/♦以下完成判断aa数组中小于或等于lim的索数并统计个数*/

438returnk:)intlimit,i.sum,aa[MAX|;main()]rf=fopen(c:\\test\\in.dat,*r');wf=fopen("c:\\test\\out.dat","w,');intlimit,i,sum;intaa[MAX]:fscanf(rf,sum=fun(limit,aa);printf("输入•个整数");scanf(M%dM,&limit);sum=fun(limit,aa);fbr(i=O;i

439",aa[i]);fclose(rf);fclose(wf);1※※※※※※※※※※※※※※※※※※※※※※※※派第24套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成NONOO;绩。函)NONOO(数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数/»请在此函数内打开文件,输入测试数据,调用ftin函数,输出数据,关闭文件。*/FILE*rf,*wf:进行输出。例如:传给形参a的数据中,学号、姓名、和三门课的成绩依次是:10001、"ZhangSan".95、80、88,修改后的数据应为:10002、"LiSi"、96、81、89o请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正intlimit,i,sum.aa[MAX];rf=fbpenC'cAVestWin.dat",'7");wf=fopen("c:\\lest\\out.dal","w");fscanf(rf,"%d",&limit);sum=fun(limit,aa);for(i=0;i

440''.aa(i|);确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:fclose(rf);#includefclose(wf);|#includestructstudent{解题思路:本题是考察考生如何判断一个数是素数,再求出所有小于lim数的素数并存入数组aa中保存,最后由形参aa返回,素数的个数由函数值返回。参考答案:/include#detlneMAX100intfun(intlim.intaa|MAX])(longsno;charname(10];floatscore[3];};/**********found**********/_1_fun(structstudenta){inti;a.sno=10002;/**********found**********/slrcpy(_2_,"LiSiM);/♦以下代码仅供参考♦/intij,k=O;/»其中变量k用于统计素数个数♦/for(i=2u<=lim;i++)(/**********Cund**********/for(i=0;i<3;i++)_3_+=1;returna;1main()/♦以下完成判断aa数组中小于或等于lim的素数并统计个数*/for(j=2;j<=(i/2);j++)if(i%j=O)break;if(j>(i/2))aa(k++]=i;}{structstudents=(100()1,"ZhangSan95,80,88},t;inti;printf("

441

442Theoriginaldata:

443"):printf("

444No:%ldName:%s

445Scores:",s.sno,s.name);for(i=0;i<3;i++)prin(fC%6.2f",s.score(il);printf("

446");returnk;)t=fun(s);printf("

447Thedataaftermodified:

448");main()(intlimit,i,sum;intaa[MAX];printf("输入・个整数");scanf("%d",printf("

449No:%ldName:%s

450Scores:",(.sno,1.name):for(i=0:i<3;i++)printfC%6.2f”,t.score[i]);printf("

451");}sum=fun(limit,aa);for(i=0;i

452#defineN20fun(int*a,intn,intx){intp=0,i;a[n]=x;while(x!=a[p])\TABp=p+l;/**********found**********/if(P==n)return-I;else{fbr(i=pu

453");for(i=0;i

454lnputx(todelete):");scanf(*'%d'\&x);printf("Delete:%d

455",x);n=fun(w,n,x);if(n==-l)printf("***Notbefound!***

456

457**);else{printf("Thedataafterdelcted:

458");for(i=0;i#de6neN16typedefstruct{charnum[l0];ints;}STREC;intfun(STREC*a,STREC*b)]}main()(STRECs|Nl=({"GA05".85},{,'GA03".76|,{"GA02".69}.("GA04(',85),\TAB\TAB{"GAOr;91},{,'GA07",72}.{“GA08”,64),("GA06”,87},\TAB\TAB{“GA015”,85},{"GAO13';91},{"GA012".64},{“GAO14”,91),\TAB\TAB{“GA011”,91},{“GA017",64),{"GA018*',64},("GAO16",72}};STRECh[N]:inti,n;FILE*out;n=fun(s,h);printfCThe%dlowestscore:

459",n);fbr(i=O;i

460",h[i].num,h[i].s);printf("

461M);out=fopen("c:\\test\\out.dat',,,,w,,);fprintf(ou(."%d

462M,n);fbr(i=O;i

463,',h[i].s);fclose(out);}解题思路:本题是把符合条件的学生记录存入到另•个结构体,人数通过函数返回,记录由实参b返回。1.符合条件的学生人数存在变量j(初始值为0)中,最后返回其值。2.利用for循环语句,依次判断是否符合条件,如果成绩相等,则把记录存入b中,人数j加1;如果当前成绩小于最低成绩min,那么人数重新初始化为0,把当前成绩存入最低成绩中,人数j加1。3.直至循环结束为止。参考答案:/include#defineN16typedefstruct{charnum[10];ints;}STREC;intfiin(STREC*a,STREC*b)(inti,j=0.min=a[0].s;for(i=0;ia[i].s){j=0;blj++]=a[i];min=a|i].s;}elseif(min==a|ij.s)bU++l=ari];}returnj:}main(){STRECs[N]={{"GA05".85},{"GA03",76},{HGA02",69).{"GA04",85},\TAB\TAB("GAOI';91}4"GA07",72},{"GA08",64},{"GA06",87),\TAB\TAB{"GAO15",85},{,'GAO13,,,91},{MGA012",64},{"GAO14",91},\TAB\TAB("GA011”,91}.{"GA017M,64},("GAO18164},{“GA016”,72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printfCThe%dlowestscore:

464",n);for(i=0;i

465\h[i].num,h[i].s);printfCAn1');out=fopen("c:\\test\\out.dalMw");fprintf(out,"%d

466M,n);for(i=0;i

467,\h[i].s);fclose(out);|※※※※※※※※※※※※※※※※※※※※※※※※※第25套:人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一.函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹卜.的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstruct{charnumllO];intyear,month.day:}STU;/**********found**********/Ifun(STU*s(d.char*num){inti;STUa={*'",9999,99,99);for(i=0;i

468");else{printf("

469Succeed!

470prinlf("%s%d-%d-%d

471",p.num.p.year.p.monih.p.day);})解题思路:木题是要求从给定的人员数据中找出编号相同的记录数据。第一处:从返回值来看,是返回一个结构型的值,所以应填:STU-第二处:判断结构变量中的编号num是否相等,所以应填:stu[i].num0第三处:返回编号相等的记录值,所以应填:***************************************************给定程序MODH.C中函数fun的功能是:从s所指字符串中,找出。[所指字符串相同的子串的个数作为函数值返回。例如,当s所指字符串中的内容为:"abcdabfab",t所指字符串的内容为:"ab'\则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(char*s,char*t)]intn;char*p,*r;n=0;while(*s){p=s;r=(;while(*r)if(*r==*p){/************found************/r++;p++Ielsebreak:

472/************foun(]************/if(r=V)・)n-H-:s++;returnn;}main(){chars(100],t[l00];intm:printf("

473PIeaseenterstringS:");scanf("%s",s);printf("

474Pleaseentersubstringt:M);scanf("%s",t);m=fun(s,t);printf("

475Theresultis:m=%d

476".m);)解题思路:第一处:语句后缺少分号。第二处:判断r的当前字符是否是字符串结束符,所以应改为:if(D)。***************************************************函数fun的功能是:将s所指字符串中ASCH值为偶数的字符删除,串中剩余字符形成•个新申放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符B的ASCII码值为偶数、…、字符2的ASCII码值为偶数、…都应当删除,其它依此类推。最后t所指的数组中的内容应是:"ACEG135"。注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编”的若F语句。给定源程序:#include#includevoidfun(char*s,chart[]){}main(){charsi100],W00];printf("

477PleaseentersiringS:");scanf("%s",s);fun(s,t);printf("

478Theresultis:%s

479M,l);NONOO;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t(100];FILE*rf,*wf;inti;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf."%s

480",t);1fclose(rf);fclose(wf);}解题思路:本题是从个字符串按要求生成另•个新的字符用。我们使用for循环语句来解决这个问题。参考答案:#inc!ude#includevoidfun(char*s,chart[])(inti,j=0;for(i=0;i

481{q=(SLIST♦)malloc(sizeof(SLIST));main()[char$[100],t[IOOJ;prinlf("

482PleaseenterstringS:");scanf("%s",s);fun(s,t);printf("

483Theresultis:%s

484",t);NONOO;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[1001,t[100]:FILE*rf,*wf;inti;rf=fopen("c:\\test\\in.dat',.*,r");wf=fopen("c:\\test\\out.dat","w");for(i=0;i

485",t);)fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第26套:给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留-个。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata:structlist*next;}SLIST;voidfun(SLIST*h){SLIST*p,*q;p=h->next;if(p!=NULL){q=p->next:while(q!=NULL){if(p->data==q->data){p->next=q->next;/**********found**********/free(—1-);/**********Sund**********/q=p->2;)else(p=q;q=q->3;}I11SLIST*creatlist(int*a){SLIST*h.*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;inext=q;p=q;}p->next=O;returnh;}voidoutlist(SLIST*h){SLIST*p:p=h->next;if(p=NULL)printf("

486ThelistisNULL!

487");else{primfCMHead");do{printf(',->%d",p->data);p=p->next;}while(p!=NULL);printf("->End

488");main(){SLIST*head;inta(N]={1,2,23,4,4,4,5};head=creatlist(a);printf("

489Thelistbeforedeleting:

490");outlist(head);fun(head);printfCAnThelistafterdeletingAn");outlist(head);}解题思路:本题是考察考生对链表的操作,主要是解决删除链表中数据域值相同的结点。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。函数fun中使用两个临时结构指针变量p和q时链表进行操作。首先p指向链表开始的next指针,q指向p的next指针,再利用while循环语句来判断指针q是否NULL,如果q指针是指向NULL,那么函数结束返回。如果不是NULL,那么就要判断p和q中dala值是否相同,如果值相同,则要删除该结点,然后继续判断卜•结点值是相同,如果还相同,那么维续删除结点,直至不相同为止。如果两个结点的值不相同,那么p就指向q,q指向q的nexl指针再继续操作上述过程。删除结点的方法是:先将p的next指针指向q的next指针,再肆放q指针指向的内存,最后把q指针再指向p的next指针就可以删除一个链表中的结点了。第•处:祥放q指针所指的内存空间,应填中第二处:q指针指向p的nexl指针,重新完成链接,应填next。第三处:两个结点的值不相同,那么q就指向q的next指针,应填next。***************************************************给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!给定源程序:#include#defineN20voidfun(inta[|.intn){intij,Up;for(j=0j#defineM100voidfun(intm,ini*a.int*n)])

491main(){intaa|M),n,k;fun(50.aa,&n);for(k=0;k

492",sum);}fclose(fp);fclose(wf);)解题思路:本题是考察考生对某个数能被其他的数整除方式,并把符合条件的数存放在数组a中。我们给出的程序是使用for循环语句以及取模的方式来解决这个问题的。参考答案:#include#defineM100voidfun(intm,int*a.int*n){inti;*n=0;fbr(i=7;i<=m;i++)if((i%7==0)II(i%11==0))a[(*n)++]=i;}main(){intaa|M],n,k;fun(50.aa,&n);for(k=0;k

493".sum);Ifclose(fp);fclose(wf);1※※※※※※※※※※※※※※※※※※※※※※※※※第27套:给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为10时,函数返回:9.612558。请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intn){inti:doubles,t;/**********found**********/s=_l_;/**********found**********/fbr(i=I;i<=_2_;i++){t=2.0*i;s=s+(2.0*i-l)*(2.0*i+1)/_3_;}returns;}main(){intn=-l;while(n<0){printf("Pleaseinput(n>0):M);scanf("%d",&n);}printfCAnTheresultis:%f

494M,ftin(n));)解题思路:第一处:根据公式可知,累加和变量s,应置0。第二处:for循环的终止值应为形参n。第三处:根据公式以及函数体中t变量内容,所以应填:产匕***************************************************给定程序MODI1.C中函数fun的功能是:统计substr所指子字符串在str所指字符串中出现的次数。例如,若字符串为aaaslkaaas.子字符串为as,则应输出2。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:/includefun(char*str,char*substr)

495{inti,j.k.num=O;/************found************/for(i=0,str[i].i++)fbr(j=i,k=O;substrlk]=str[jJ;k++j++)/************found************/lf(substrlk+ll=\O'){num-H-:break:}doubles=l,t=lJ3:intn=l;while(o=eps)(s+=(;n++;t=t*n/(2.0*n+l);}return(s*2.0);}main(){doublex;printfC'Inputeps:");scanf("%lf',&x);printf("

496eps=%lf,PI=%lf

497",x,fun(x));returnnum;NONOO;)main()[JNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。charstr[8O],substr(8O];printfC'Inputastring:");gets(str);printfC'Inputasubstring:'1);*/FILE*fp,*wf;inti;doublex;gets(substr);printf("%d

498H,fun(str,substr));}fp=fopen(Mc:\\testVUn.dat,7rM);wf=fopen("c:\\test\\out.dat",',wM);for(i=0;i<10;i++){解题思路:fscanf(fp,"%lf,&x);第一处:循环for语句中应有分号。第二处:if错写成If。fprintf(wf,fun(x));I***************************************************请编写一个函数fun,它的功能是:根据以下公式求人的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):nI1x21x2x3Ix2x3x4lx2x...xn-1+―+++++fclose(fp);fclose(wf);1※※※※※※※※※※※※※※※※※※※※※※※※※第28套:给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出233x53x5x73x5x7x93x5x...x(2n+l)程序运行后,如果输入精度0.0005,则程序输出为3.14…。注意:部分源程序存在文件PROGI.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(doubleeps){)现的次数,并存放在形参1所指的变量中,最后在主函数中输出。例如,形参s所指的字符申为:abcdef35adgh3kjsdf7。输出结果为:4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includemain(){doublex;printfC'Inputeps:");scanf(M%lf',&x);printf("

499eps=%lf,PI=%lf

500",x,fun(x));NONO0;}voidfun(char*s,int*t){inti,n;n=0;/**********foun(i**********/for(i=0;_1_!=NULL;i++)NONO()if(s[i]>=,O,&&s|i]<=_2—)n++;/**********found**********/(/*本函数用于打开文件,输入数据,调用函数,临出数据,关闭文件。*/HLE♦fp,*wf;inti;doublex;fp=fopenC'cAMestWinJat",'?");wf=fopen("c:\\test\\out.dat","w'');for(i=0;i<10;i++){fscanf(fp,M%lf,&x);fprintf(wf,"%lf

501",fun(x));},«)main(){chars[80]="abcdef35adgh3kjsdf7";intt;printf("

502Theoriginalstringis:%s

503",s);fun(s,&t):printf("

504Theresultis:%d

505",t);}解题思路:第一处:在for循环中终止值要判断字符串是否结束符,所以应填:s[i]o第二处:判断是否是数字,所以应填:9。fclose(fp);fclose(wf):I第三处:字符串中数字字符出现的次数n,并存放在形参1所指的变量中,所以应填:*t=n.***************************************************解题思路:本题是根据公式进行计算。参考答案:#include#includedoublefun(doubleeps)给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它能得出正确的结果。

506注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(int+x,inty)[*n=0;for(i=7;i<1000;i++)if(((i%7)==0ll(i%ll)=0)&&(i%77)!=0)a[(*n)++]=i;1main(){intaa[l(XX)Ln.k;intt;fun(aa.&n);/**************found**************/t=x;x=y;/**************found**************/retum(y);for(k=0;k

507");elseprintf(M%5d,\aa[k]);NONO();})main()(NONO(){/*本函数用于打开文件,输入测试数据,调用fiin函数,输出数据,关闭文件。intaa[1000],n.k:inta=3,b=8;printfC'%d%d

508",a,b);b=fun(&a,b);printfC'%

509",a.b):)HLE*fp;fp=fopen("c:\\tesi\\oui.dat","w");fun(aa,&n);for(k=0;k

510H);解题思路:第•处:由于X是整型指针变量,所以地址不能赋值给整型变量,因此必须取X地址上的值,所以应改为t=*x;*x=y;»第二处:已交换后的值存放在t中,所以返网值应为return⑴;。***************************************************请编写函数fun,它的功能是:求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/includevoidfun(int*a,int*n)(}elsefprintf(fp,"%5d”,aa(k]);fclose(fp);1※※※※※※※※※※※※※※※※※※※※※※※※※第29套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变昂:中的数据进行修改.最后在主函数中输出修改后的数据。例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、"ZhangQi",93、85、87,修改后输出1中的数据应为:10004、"LiJie"、93、85、87。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:main(){intaa[1000],n,k;fun(aa,&n);for(k=0;k

511");elseprintf("%5d",aa[k]);NONCX);}/include#includestructstudent{longsno;charname|10];floatscore[3];};voidfun(structstudent*b)NONO()(/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intaa[1000],n,k;{inti;/**********found**********/FILE*fp;fp=fopen("c:\\les(\\out.dat",Mw");fun(aa.&n);b_l_=10004;/**********found**********/slrcpy(b_2"LiJie");for(k=0;k

512'r);1main()elsefprintf(fp,M%5dM,aa[k]);fclose(fp);}{structstudentt=(10002,,,ZhangQi,,93,85,87);inti;printf("

513

514Theoriginaldata:

515");解题思路:本题是利用for循环语句以及取模%运算来得出符合条件的整数并存入a所指的数组。参考答案:#includevoidfun(int*a.int*n)]printf("

516No:%ldName:%s

517Scores:",t.sno,t.name);for(i=0;i<3;i-H-)prinlf("%6.2fLscore[i]);printf("

518M);/**********found**********/fun(_3__);printf("

519Thedataaftermodified:

520");printf("

521No:%ldName:%s

522Scores:".t.sno,(.name):for(i=0;i<3;i++)printf("%6.2f",t.scorefi]);printfCAn");iinti;J解题思路:

523本题是对结构体变量中的值进行修改并通过函数中的参数进行返闻第一处:对学号进行更改,所以应填:。n。。第二处:对姓名进行更改,所以应填:->name。第三处:对函数的调用,所以应填:&3***************************************************给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:Iaxl=—(xO+-)2x0例如,a为2时,平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include/**********found**********/doublefun(doublea,dounlexO){doublexl,y;xl=(x0+a/x0)/2.0;/**********found**********/if(fabs(xl-xo)>0.00001)\TABy=fun(a,xl);elsey=x1;returny;)main(){doublex;printf("Enterx:");scanf("%ir.&x);printfCThesquarerootof%lfis%lf

524",x,fun(x,1.0));)解题思路:第一处:第二个变量定义的保留字double写错。第二处:变量xO错写成X。了.***************************************************学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高丁•等于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#idelude#deGneN12typedefstruct{charnum[10];doubles;)STREC;doublefun(STREC*a,STREC*b.int*n){}main(){STRECs[N]=H"GA05",85}.{"GA03176),{“GA02".69},{“GA04”.85},\TAB\TAB{"GA0r',91},r,GA07,,,72},{"GA08",64}J"GA06".87},\TAB\TAB{"GA09",60M"GAH',,79}.("GA12173},{“GA10*90}};STRECh[N],t;FILE*out:inti.j.n;doubleave;ave=fiin(s,h,&n);printf("The%dstudentdatawhichishigherthan%7.3f:

525".n,ave);fbr(i=O;i

526",h[i].num,h(i].s);primW);out=fopen(Mc:\\test\\out.dat",Mw");fprintf(out."%d

527%7.3f

528".n,ave);fbr(i=O;i

529M,h[i].s);fclose(out);1解题思路:本题是计算平均分并把高于平均分的记录存入结构体数组中,最后平均分t通过函数值返回,人数n和符合条件的记录b由形参传回。1.利用fbr循环计算平均分32.利用for循环把高T平均分的学生记录存入b中,人数*n加I。参考答案:#include#defineN12(ypedefstruct{charnum[1()];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){doublet=0;inti;*n=0;for(i=0;it)b[(*n)++]=a[i];returnt;}main(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02';69),{"GA04M,85),\TAB\TAB{"GA0l",9l|,{,,GA07",72}J"GA08".64},{"GAOb^.S7),\TAB\TAB(,,GA09",60M'GAlI",79},{"GA12",73}JGA10",90}};STRECh[N].(;FILE*out;intij,n:doubleave;ave=fun(s.h.&n);printfCThe%dstudentdatawhichishigherthan%7.3f:

530",n.ave);for(i=0;i

531N,h[i].num,h[i].s);printf("

532");out=fopen("c:\\test\\out.dat,\,,w");fprintf(out,"%d

533%7.3f

534,

535,ave);for(i=0;i

536".h[i).s);fclose(out):I※※※※※※※※※※※※※※※※※※※※※※※※※第30套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中的学号、姓名、和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为:10002、"LiSi"、95、80、88.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includestructstudent{longsno;charname[10];floatscore[3];};voidfun(s(ructstudenta){structstudentb;inti;/**********found**********/b=_l_;b.sno=10002;strcpy(_2_,"LiSi°);printf("

537Thedataaftermodified:

538");printf("

539No:%ldName:%s

540Scores:0,b.sno,b.name);/**********found**********/for(i=0;i<3;i++)printf("%6.2f",b._3_);prinlf("

541M);1main(){structstudents={10001,"ZhangSan",95,80,88);inti;printf("

542

543Theoriginaldata:

544");printf("

545No:%ldName:%s

546Scores:",s.sno,s.name);for(i=0;i<3;i++)primf("%6.2f”,s.scorefi]);printf("

547");fun(s);解题思路:本题是对结构体变量中的值进行修改。第一处:要修改的结构体变量是由形参a来传递的.所以应填:a。第二处:对结构体中的成员name进行替换,所以应填:b.name。

548第三处:分别输出结构体中的成绩,所以应填:score回。***************************************************给定程序MODILC中函数fun的功能是:从s所指字符串中删除所有小写字母c。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s){iniij;for(i=j=0;Ni—O';i++)/************found************/\TABs[j]=s[il;/************foun(l************/s[il=AO';main(){chars[80]:printf("Enterastring:");gets(s);printf("Theoriginalsiring:");puts(s);fun(s):printf('Thestringafterdeleted:");puls(s);printf("

549

550M);1解题思路:第一处:新字符串的位置值是由变量j来控制的,但程序中字符赋值后没有对j进行增量的语句,所以应改为:s|j++]=s[i];。第二处:对新字符串添加字符串结束符,由于程序中使用变量j对新字符串来控制的,所以应改为:sm=o;。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考。例如,字符串中的内容为:*******A*BC*DEF*G****,移动后.字符申中的内容应当是:A*BC*DEF*G***********»在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROGLC文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/includevoidfun(char*a){/*以下代码仅供参考*/char*p.*q;intn=0:p=a;while(*p==*')/*统计串头”个数n*/{n++;p++:}q=a;/♦向前复制字符串,请填写相应的语句完成其功能*/for(;n>0:n-)/*在串尾补n个“♦/*q++=w;*q=\0';}main(){chars[81],*p;intn=0;printf("Enterasiring:

551"):geis(s);fun(s);printf("Thestringaftermoveing:

552"):puts(s);NONO();INONO(){/*本函数用丁•打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*ou(;inti;chars(81];in=fopen("c:\\test\\in.dat,',"rM);out=fopen("c:\\test\\out.da("w");for(i=0;i<10;i++){fscanf(in."%s'\s);fun(s);fprintf(out,"%s

553",s);1fclose(in);fclose(out);}解题思路:本题是考察字符中的移动。具体操作请看参考源程序。参考答案:#includevoidfun(char*a)(/*以下代码仅供参考♦/char*p.*q;intn=0;p=a;while(*p==**')/*统计串头*个数n*/{n++;p++:)q=a;/*向前复制字符串,请填写相应的语句完成其功能*/while(*p){

554*q=*p:p++;q++;}解题思路:第一处:取外循环的控制变量,所以应填:仁i。for(;n>0;n-)/*在串尾补n个“♦/*q++='*';♦q=XO';第二处:内循环的起始变量,应该是i+2,所以应填:i。第三处:新字符串处理完后应添加字符串结束符,所以应填:VX。***************************************************}main(){chars[81],*p;inin=0;printf("Enterastring:

555,,);gets(s);fun(s);printf("Thestringaftermoveing:

556");puts(s);NONO();1给定程序MODI1.C中函数fun的功能是:用下面的公式求我的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:n|11——=»1-++...4357例如.程序运行后.输入0.0001,则程序输出3.1414。NONO(){/*本函数用于打开文件,输入数据,调用函数,检出数据,关闭文件。*/FILE*in,*out;请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includefloatfun(floatnum)inti;chars(8l];(ints:in=fopen("c:\\(est\\in.dat"."rM);floatn.t,pi;out=fopen("c:\\test\\out.da("/'w");for(i=0;i<10;i++){fscanf(in,M%s0,s);fun(s);fprintf(out,"%s

557",s);)t=l;pi=O;n=l;s=l;/**************found**************/while(t>=num)(pi=pi+1;n=n+2:fclose(in);s=-s;fclose(out);|/**************found**************/※※※※※※※※※※※※※※※※※※※※※※※※※第31套:给定程序中,函数fun的功能是:刻形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda.执行后p所指字符数组中的字符串应为:aachjlswo请在程序的下划线处填入1E确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,char*p){inti,j.n,x.t;n=0;for(i=0;s[i]!=V)':i++)n++;for(i=l;i

558”,n2);)解题思路:第一处:要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)o第二处:t是s除以n的值,而不是取余数,所以应改仁s/n;0***************************************************请编写一个函数voidfun(chara[],charb(],intn),其功能是:删除一个字符串中指定下标的字符。其中.a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。/**********found**********/1;例如,输入•个字符串:World,然后输入3,则调用该函数后的结果为:/**********found**********/for(j=—2—+2;jsU])t=U;Wordo注意:部分源程序在文件PROGLC中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号if(t!=i)(x=s[i];s[i>s(t];s(t>x;)}中填入你编写的若干语句。给定源程序:for(i=l.j=0;i#include#defineLEN20voidfun(chara[],charb[|.intn)main(){chars[80]="baawrskjghzlicda”,p[50];printf("

559Theoriginalstringis:%s

560",s);fun(s,p);printf("

561Theresultis:%s

562M,p);}[}main(){charstrl[LEN],str2[LEN];intn;printf("Enterthestring:

563M);

564gets(strl);printf("Enterthepositionofthestringdeleted:");scanf("%d”,&n);fun(strl,str2,n);printf("Thenewstringis:%s

565",slr2);NONO();)NONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/chars(rl[LEN],s(r2[LEN];inti,n;HLE*rf,*wf;rf=fbpen("c:\\test\\in.dat',,,,r");wf=fopen(',c:\\tesi\\out.dat,,,',w,');for(i=0:i<10:i++){fscanf(rf,0%s%dM,strl,&n);fun(strl,str2,n);fprintf(wf,"%s

566H,str2);1fclose(rf);fclose(wf);}解题思路:本题是利用字符串拷贝和字符串连接来生成新的字符串。参考答案:/include#include#deGneLEN20voidfun(chara[],charb[],intn)(stmcpy(b.a,n);b[n]=0;strcat(b,a+n+I);}main(){charstr1[LEN],str2[LEN];intn;printf("Enterthestring:

567M);gets(strl);printf("Enterthepositionofthestringdeleted:M);scanf(M%dM,&n);fun(strl,str2,n);printf("Thenewstringis:%s

568",str2);NONO();INONO(){/*木函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。charstrHLEN],slr2[LENJ;inti.n;FILE*rf,*wf;rf=fopen("c:\\test\\in.dat",,(r");wf=fopen("c:\\(est\\out.dat","w");for(i=0;i<10;i++){fscanf(rf,0%s%d",strl,&n);fun(strl,str2,n);fprinlf(wf,str2);}fclose(rf);fclose(wf):}※※※※※※※※※※※※※※※※※※※※※※※※※第32套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的卜划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5#deflneM10/**********Cund**********/voidfun(char(*ss)_1_,intk){inti=0;/**********found**********/while(iv_2_){ss[il[k]=_3_;if}1main(){charx[N][M]={-Create"."Modify"JSort“Jskip“JDdete");inti;printf("

569Theoriginalstring

570

571**);for(i=0;i

572Thestringafterdeleted:

573

574M);for(i=0;i

575");}解题思路:本题是根据给定的字符串数组中删除串长大于某个值的右边字符串。第一处:函数的定义,试题中已用M作为字符串的长度,所以应填:Mo第二处:利用while循环,分别对字符串数组中的每个字符串置字符串结束符,程序中已经给定了N个字符申,所以应填:No第三处:置字符串结束符,所以应填:0(或V)')。***************************************************给定程序MODII.C中函数fun的功能是:根据以下公式求「值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578on1121231234-=1+—+-X-+-X-X—+-X-X-X—+23353573579请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:/include#includedoublefun(doubleeps){doubles,t;intn=l;s=0.0;/**4<*********found************/1=0;while(t>eps){s+=t;t=t*n/(2*n+l);n++;1/************found************/retum(s);}main(){doublex;printf("

576Pleaseenteraprecision:");scanf("%lF,&x);printf("

577eps=%lf,Pi=%lf

578

579,,.x.fun(x));解题思路:第一处:初始化I的值,根据程序中的计算程序和试题的要求得出,I应为1.第二处:根据公式兀/2得出,所以返回时应原有s的基础上乘以2作为返回值。***************************************************假定输入的字符串中只包含字母和*号。请编写函数ftin,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等了n个,则什么也不做,字符串中间和尾部的*号不删除。函数fun中给出的语句仅供参考.例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****:若n的值为8,则字符串中的内容仍为:*******A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:

580/includevoidfun(char*a,intn)(/*以下代码仅供参考♦/inii=0j,k=O;while(a[k]=*)k++:/*k为统计*字符个数*/if(k>n)[i=n;j=k;/*以下完成将下标为k至串尾的字符前移k-n个位置*//*以下代码仅供参考*/inti=0j,k=O;while(a[kl='*r)k++;/*k为统计*字符个数♦/if(k>n)[i=n;j=k;/*以下完成将下标为k至串尾的字符前移k-n个位置*/for(;a[j]!=0;j++)a|i++]=a(jl;a[i]=0;}}main(){chars[81];intn;printf(,rEnterastring:

581,');ge(s(s);printfC'Entern:");scanf("%d",&n);fun(s,n);printfCThestringafterdeleted:

582");puts(s);NONOO;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。号FILE*in,*oui;inti,n;chars[81];in=fopen("c:\\(est\\in.dat",,,rM);out=fopen("c:\\test\\out.dat","w");fbr(i=0;i<10;i++){fscanf(in,"%sM,s);fscanf(in,H%dM.&n);fun(s,n);fprintf(out,"%s

583M.s);1fvlose(in);main(){chars[81];intn;printf("Enterastring:

584*');gels(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf('Thestringafterdeleted:

585");puts(s);NONOO;}NONOO{/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,n:chars[81];in=fopen("c:\Vest\\in.darT);out=fopen("c:\\test\\out.dat"w");for(i=0:i<10;i++)(fscanf(in,M%sM,s);fscanf(in,"%d".&n);fun(s,n);fprintf(out,"%s

586",s);}fclose(in);fclose(out);}解题思路:本题是考察字符串的操作。利用for循环来判断a(j]的字符是否是字符串结束符,如果不是字符串结束符,则把a(jj的字符依次存放到a[i]a其中,变量i是n的初始值,变量j是字符串前导的*号数。参考答案:#includevoidfiin(char*a,intn)fclose(out);1※※※※※※※※※※※※※※※※※※※※※※※※※第33套:给定程序的功能是:调用函数fun将指定源文件中的内容豆制到指定的目标文件中,复制成功时函数返回值为I,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量(fname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#inc!udeinifun(char*source.char*(arget){FILE*fs,*ft;charch;/**********found**********/if<(fs=fopen(source,1))==NULL)return0;if((ft=fopen((arget.Mw"))==NULL)return0:printf("

587Thedatainfile:

588");ch=fgetc(fs);/**********found**********/while(!feof(2)){putchar(ch);fpulc(ch__3^);ch=fgetc(fs);}fclose(fs);fclose(ft);printf('An

589,r);return1;Imain(){charsfname[20]="myfnel[fname[20]="myflle2";FILE*myf;inti;charc;myafbpen(sfname,"w");printf("

590Theoriginaldata:

591");for(i=l;i<30;i++)(c='A'+rand()%25;fprintf(myf,"%c0,c);printf("%cM,c);}fclose(myf);printf(',

592

593M);if(fun(sfname,tfname))printf("Succeed!");elseprintf(MFail!");)解题思路:本题要求是把一个文件中的内容豆制到另一个文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第•处:要求打开个读方式的源文件,因此可以填上"I""或"什"。打开读文件操作的流是fs。第二处:用while循环来判断源文件是否已读到文件结束符,intfeof(HLE*stream),因此,此处只能填写fs。第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft因此,此处只能填写我。***************************************************给定程序MODII.C中函数fun的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在[中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,I中的数为:8642«请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(longs,long*t){intd;longsl=l;*t=0;while(s>0){d=s%IO;/************found************/if(d%2=0){*t=d*sl+*t;si♦=10;)/************found************/sG10;)1main(){longs,t;printf("

594Pleaseenters:H);scanf("%Id",&s);fiin(s.&t);printf('Theresultis:%ld

595,\t);)解题思路:第一处:判断相等的条件是==。第二处:整除的符号是/。***************************************************函数mn的功能是:将两个两位数的正整数a、b合并形成个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数

596的十位和个位数依次放在c数的百位和个位上。例如,当a=45,b=如时,调用该函数后,c=5142.注意:部分源程序存在文件PROG1.C中。数据文件1N.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/includevoidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scanfC'%d.%dM.&a,&b);fun(a,b,&c);printf("Theresultis:%ld

597*\c);NONOO;1NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a.b:longc;rf=fopen("c:\\test\\in.dat",MrM);wf=fopen("c:\Mesi\\oul.dar',"w");for(i=0;i<10;i++){fscanf(rf,*%d,%dw,&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld

598",a,b,c);}fclose(rf);fclose(wf);1解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:#includevoidfun(inta.intb,long*c)(♦c=(a%10)*1(XX)+(b/IO)*l00+(a/10)*10+(b%10);}main(){inta,b;longc;printf("Inputa.b:");scanf("%d,%d",&a.&b);fun(a,b.&c);printfCTheresultis:%ld

599'\c);NONO();INONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/HLE*rf,*wf;inti,a,b;longc;rf=fopen("c:\\test\\in.dat",'Y");wf=fopen("c:\\test\\out.dat',,0w");for(i=0;i<10;i++)(fscanf(rf,&a,&b);fun(a,b.&c);fprintf(wf,"a=%d,b=%d,c=%ld

600'\a,b,c);)fclose(rf);fclose(wf);※※※※※※※※※※※※※※※※※※※※※※※※※第34套:用筛选法可得到2〜n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数:依此类推•直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5.7,11,13,17,19,23,函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intn){inta[10000].ij.count=0;fbr(i=2;i<=n;i++)a(i]=i;i=2;while(i

601Theprimenumberbetween2to%d

602",n);for(i=2;i<=n;i++)/**********found**********/if(a[i]!=_3—){count++;printf(count%l5?',%5d',:"

603%5d,,,a[i]);}returncount;}main(){intn=20,r;r=fun(n);printf("

604Thenumberofprimeis:%d

605'\r);}解题思路:第一处:所有2的倍数的数从数表中删去,所以应填:a[i]。第二处:找出下个不是的a[i],所以应填:a[i]o第三处:输出素数,只要判断a[i]不是。就是素数,所以应填:0o***************************************************给定程序MODH.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(inta,int*b,int*c){inti.j,d,y;for(i=3;i<=a/2;i=i+2){/**************Sund**************/Y=l;for(j=2j<=sqrt((double)i)y++)if(i%j==O)y=0;if(y==l){/**************found**************/d=a-i;fbr(j=2^<=sqrt((double)d)j++)if(d%j=O)y=0;if(y==D{*b=i;*c=d;}})}main(){inta.b.c;do{printf("

606lnputa:");scanf("%d".&a);}while(a%2);fun(a.&b,&c);printf("

607

608%d=%d+%d

609",a,b.c);

610}解题思路:第•处:变量y错写成Y。第二处:给变量d进行赋值,所以应改为:d=a-i;.***************************************************请编写函数fun.它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333o注意:要求n的值不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn){}main(){intn;doubles;prinlfCAnInputn:");scanf("%d",&n):s=fun(n);prinlf("

611

612s=%An",s);NONOO;}NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf:intn.i:doubles;rf=fopen("c:\\test\\in.dat","r");wf=fopen(',c:\\tesi\\out.dal",',w");for(i=0;i<10:i++)(fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,M%lf

613",s);}fclose(rf);fclose(wf);}解题思路:本题是计算n(包括n)以内能被5或9捡除的所有自然数的倒数之和。参考答案:#includedoublefun(intn)(inti;doublesum=().0;for(i=l;i<=n;i++)if(i%5=0lli%9==0)/*被5或9整除*/sum+=1.0/i;returnsum;}main(){intn;doubles;printf("

614lnputn:");scanf("%d",&n);s=fiin(n);printf("

615

616s=%f

617",s);NONOO;NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i:doubles;rf=fopen("c:\\test\\in.dat",Mr");wf=fopen("c:\\lest\\out.dal","w");for(i=0;i<10;i++){fscanf(rf."%d';&n);s=fun(n);fprintf(wf."%lf

618".s);}fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第35套:给定程序中,函数fun的功能是建立一个NXN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2:第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为:1111112221123211222111111请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹卜的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN7/**********found**********/voidfun(int(*a)_1_){intiif(N%2=0)m=N/2:elsem=N/2+1;fbr(i=O;ivm;i++){/**********found**********/for(j=_2_;j

619Theresultis:

620");for(i=0;i

621");}I解题思路:第一处:建立一个NXN的矩阵,所以应填:[Nb第二处:j的起始变量值应i。第三处:也应该填写i+1。***************************************************给定程序MODH.C中函数fun的功能是:将十进制正整数m转换成k(2WkW9)进制数,并按高位到低位顺序输出。例如I,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)c请改iEfun函数中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!给定源程序:/include#includevoidfun(intm.inik)[intaa[20],i;for(i=0;m;i-H-)(aa[i]=m/k;m/=k;1for(;i;i-)/**********found**********/printf(aa[i]);

622|main()(intb,n;prinlf("

623Pleaseenteranumberandabase:

624");scanf(M%d%d",&n,&b):fun(n,b);printf("

625");)解题思路:第一处:应该取模而不是整除,所以应为:aa[i]=m%k;o第二处:输Hlaa的位置不正确,所以应为:prin(f("%d".aa(i-ll);o编写一个函数,从num个字符串中找出最长的一个字符电并通过形参指针max传回该事地址。(注意:主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考。)注意:部分源程序在文件PROGI.C中.请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includefun(char(*a)[8l].intnum.char**max)(/♦以下代码仅供参考*/inti,k=0,Ien.maxlen:/*k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长♦/maxlen=strlen(a[k]);for(i=l;i

626gets(ss[i]);puts(ss[ij);|NONOOn=i;fun(ss.n,&ps);printf("

627max=%s

628".ps);NONOO;/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charss[20][81],*ps;intn,i=0;1NONO(){FILE*rf,*wf;rf=fopen('c:\\test\\in.dat,i1');wf=fopen("c:\\les(\\out.dat","w");/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charss[2O][81],*ps;intn,i=0;FILE*rf,*wf;rf=fopen("c:\\test\\in.dat',.*,r");wf=fopen("c:\\test\\out.dat","w");fgets(ss[i],81,rf);while(!stmcmp(ss[ij,"****",4)==()){i++;fge(s(ss[i],81,rf);1n=i;fun(ss,n,&ps);fprintf(wf,"%s",ps);fgets(ss[i],81,rf);while(!stmcmp(ss(iJ/'****",4)==0)fclose(rf);fclose(wf);ii++;fgets(ss[il,81.rf);※※※※※※※※※※※※※※※※※※※※※※※※※第36套:1n=i;fun(ss,n,&ps):fprintf(wf,"%sM,ps);fclose(rf):给定程序中,函数hin的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确fclose(wf);)的结果。解题思路:本题是考察考生怎样从已输入的字符串中找出长度最大的字符串。求字符串的长度可以使用strlen函数。参考答案:#include#includefun(char(*a)[81],intnum.char**max)]注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*next;/*以下代码仅供参考*/inti,k=O.maxlen;/*k为a数组中最长串所在元素的下标,初始为0,maxlen为其中长*/maxlen=strlen(a(k]);for(i=l;imaxlen){maxlen=strlen(a[i]);k=i;)}-1-=o:p=h->next;while(p)((*n)++;/**********found**********/*max=a(k);}p=p->一2一;main(){1|main()charss[10][81h*ps;intn,i=0;primiT输入若干个字符串:");gets(ss(i]);puts(ss[i]);while(!strcmp(ss(i],,,****")==O)({SLIST*head;inta[N]={12,87,45,32,91,16,20,48),num;head=creatlist(a);outlist(head);/**********found**********/fun(3.&num);printf("

629number=%d

630",num);i++;gets(ss[i]);jSLIST*creatlist(inta[|){SLIST*h,*p,*q;inti;puts(ss[i]);}h=p=(SLIST*)malIoc(sizeof(SLIST));for(i=0;inext=q;p=q;fun(ss,n,&ps):Jp->next=O;printf("

631max=%s

632",ps);NONO();returnh;

633voidoutlist(SL!ST*h){SLIST*p;p=h->next;if(p==NULL)prinlfCThelistisNULL!

634");else{printf("

635Head*);do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End

636,");}I解题思路:本题是要求统计出带有头结点的单向锌表中结点的个数。第一处:对n所指的存储单元进行初始化,所以应填:*no第二处:指向p的下•个结点,所以应填:next。第三处:函数调用,在主函数中已经给出了head,所以应填:heado***************************************************给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t所指了字符申的地址,通过函数值返[可,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为:"abedabfabedx”,I中的内容为:"ab"时,输出结果应是:abcdxo当字符串中的内容为:"abedabfabedx”,I中的内容为:“abd”时,则程序输出未找到信息:notbefound!.请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/includechar*fun(char*s,char*t)(char*p,*r,*a;/************found************/a=Null:while(*s){p=s:r=t:while(*r)/************found************/if(r=p){r++;p++;}elsebreak;if(*r=)a=s;S-H-;}returna:Imain()]chars[100],t|100],*p;printf("

637PleaseenterstringS:"):scanf(M%s",s);printf("

638Pleaseentersubstringtscanf("%s",l);p=fun(s,t);if(p)printfCAnTheresultis:%s

639",p);elseprintfCViNotfound!

640");1解题思路:第一处:指向空指针错误,Null应NULL。第二处:比较指针位置的值是否相等,所以应改为:if(*r==*p)。***************************************************函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除:串中剩余字符所形成的一个新事放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG123456",其中字符A的ASCII码值为奇数,因此应当删除:其中字符B的ASCH码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,K它依此类推。最后I所指的数组中的内容应是:"246"。注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*s,char([]){}main()(chars[100],t[100];printf("

641PleaseenterstringS:");scanf("%s",s);fun(s,I);printf("

642Theresultis:%s

643M,t);NONO();INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars。00],1(100];FILE*rf,*wf;inti;rf=fopen("ciWtestWin.dat",'?");wf=fopen("c:\\tesi\\out.dat",,rw");for(i=0;i<10;i++)(fscanf(rf,0%s';s);fun(stt);fprintf(wf,"%s

644",();}fclose(rf);fclose(wf):}解题思路:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。参考答案:#include#includevoidfun(char*s,chart[])(inti,j=0;for(i=0;i

645PleaseenterstringS:*');scanf(,,%sH,s);fun(s,();printf("

646Theresultis:%s

647H,t);NONOO;1NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/chars[100Lt[100];FILE*rf,*wf;inii;rf=fbpenC'ciWtestWin.dat",'?");wf=fopenC'ciWtestWout.dat'Vw");for(i=0;i<10;i++)(fscanf(rf,s);fun(s,t);fprintf(wf,"%s

648",t);)fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第37套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。SS所指字符串数组中共有N个字符串,且串长小于M。程序中库函数SEKS1.s2)的功能是在si串中查找s2子串,若没有,函数值为0,若有,为非0。请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹卜,的BLANK1.C中。不得增行或删行,也不得更改程序的结构!

649给定源程序:#include#include#deHneN5#deflneM15voidfun(char(*ss)[M],char*substr){inti.find=O;/**********found**********/for(i=0;i<_1_;i++)/**********Cund**********/strstr(ss[i]v_2_)!=NULL){find=l;puts(ss[ij);printf("

650");}/**********found**********/if(find=_3_)printfCAnDon'tfound!

651,');}main()(charx[N][M]=("BASICH,',Clangwage",',Java"."QBASIC,,,,,Access,,}.s(r(M];inti;printf("

652Theoriginalstring

653

654");for(i=0;i

655");printfCAnEnterastringforsearch:");gets(str);fun(x,str);1解题思路:本题是根据给定的字符串数组中查找指定的字符小,如果存在,则显示。第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:No第二处:查找子串,子串由形参substr传递,所以应填:subsir。第;.处:试题要求,若没有找到,函数值为0,所以应填:00***************************************************给定程序MOD11.C中函数fun的功能是:求三个数的最小公倍数。例如,给主函数中的变量xl、x2、x3分别输入15112,则输出结果应当是:330.请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#inc!ude/************found************/fun(intx.y,z){intjj,n,m;j=I;t=j%x;m=j%y;n=j%z;while(t!=0llm!=0lln!=0){j=j+l;t=j%x;m=j%y;n=j%z;returni;}main(){intxl,x2,x3j;prinlfC'Inputxlx2x3:");scanf(H%d%d%d",&xI,&x2,&x3);printf("xl=%d.x2=%d,x3=%d

656';xl,x2,x3);j=fun(xl,x2.x3);printfCTheminimalcommonmultipleis:%d

657'\j);}解题思路:第一处:函数中形参的定义不正确,应改为:fun(intx.inty,intz)o第二处:程序中三个数的最小公倍数是用j处理的,所以应返回j的值。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符申前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:A*BC*DEF*Go注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a,intn.inth.inte)(1main(){chars[811.*t,*f;intm=0,tn=O.fn=O;printf("Enterastring:

658");gets(s);(=f=s;while(*t)(t++;m++:)Iwhile(*t==*'){|while(*£='*'){f++;fn++;)fun(s,m.fn.m);printfCThestringafterdeleted:

659*,);puts(s);NONOO;}NONO(){/*本函数用于打开文件,谕入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81],*t,*f;intm=0,(n=0,fn=O;in=fopen("c:\Vesl\\in.dal",T);out=fopen("c:\\test\\out.dat"w");

660for(i=0:i

661",s);)存放到1[0卜a[l]>a[2]>……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。fclose(in);不得增行或删行,也不得更改程序的结构!fclose(out);给定源程序:I解题思路:#include#defineN9intfun(inta[].intn)本题是考察对字符串的操作。1.求出字符串的长度。2.利用循环把字符串中字符按要求仍存放在原字符串首址开始的位置上。参考答案:#includevoidfun(char*a,intn.inth.inte){intij;j=o;for(i=0;i

662Theoriginaldata:

663'r);for(i=0;i

664");n=fun(b,N);main(){chars[81].*t,*f;intm=0,tn=O.fn=O;printf("Enterastring:

665N);gets(s);(=f=s;while(*t)(t++;m++;}printf("

666Thenumberofodd:%d

667",n);printf("

668Theoddnumber:

669N);for(i=0;i

670");puts(s);NONO();所以应填:j+4-o第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:j»iNONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti:chars[81],*t,*f;inim=0.(n=0,fn=O;in=fopen(',c:\\test\\in.dal","rM);out=fopen("c:\\test\\out.datM,"w");for(i=0;i<10;i++){fscanf(in,M%sw,s);t=f=s;m=0;in=O;fn=O;***************************************************给定程序M0DI1.C中函数fun的功能是:求出两个非零1E整数的最大公约数.并作为函数值返回。例如,若给numl和num2分别输入49和21,则输出的最大公约数为7:若给numl和num2分别输入27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:while(*t){t++;m++:}C-;while(*t='*,){t--;tn++;}while(*f='*,){f++:fn-H-;|fun(s,m,fn,tn);fprintf(ou(."%s

671",s);}#includeinifun(in(a.inlb){intr.t:if(a

672printf("InputnumInum2:,r);scanf("%d%d".&numl,&num2);printf("numl=%dnum2=%d

673

674".numl,num2);a=fun(numl.num2);printfCThemaximuncommondivisoris%d

675

676",a);)解题思路:第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t;。第二处:返回值错误,应改为:re(um(b);o***************************************************假定输入的字符串中只包含字母和*号。请编写函数ftin,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:♦♦♦♦A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG.注意:部分源程序在文件PROGLC中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a)(1main(){char$[81];printf("Enterastring:

677*');gets(s);fun(s);printf("Thestringafterdeleted:

678");puts(s);NONOO;1NONOO{/*本函数用于打开文件,输入数据,调用函数,愉出数据,关闭文件。*/FILE*in,*out;inti:chars[81];in=fopen("c:\\test\\in.dat"."rM);out=fbpen("c:\\tesl\\out.datMw");for(i=0;i<10;i++){fscanf(in,"%s",s);fun(s);fprintf(out,"%s

679",s);}fclose(in);fclose(oul);I解题思路:本题是考察字符串的操作。1.利用循环扫描字符串中所有的字符是否是如果不是中,则把这些字符存放字符串a苜地址开始的位置上。2.最后给字符串a加上结束符。参考答案:#includevoidfun(char*a)(intj=O;char*p=a:while(*p){ift*p!='♦')aU++]=*p;p++;}a(j>0;}main(){chars[81];printf("Enterastring:

680*);gets(s);fun(s);printfCThestringafterdeleted:

681");puis(s);NONO();NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*ou(;inti;chars[8l];in=fopen(',c:\\tesl\\in.dat","rM);out=fopen("c:\\test\\out.datMw");for(i=0;i<10;i++)(fscanf(in,"%s",s);fun(s);fprintf(ou(.M%s

682".s);Ifclose(in);fclose(out);}※※※※※※※※※※※※※※※※※※※※※※※※※第39套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符巾,函数返I可所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把卜划线删除.使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#deflneN5#defineM10inifun(char(*ss)(MJ.in(k){inti,j=O,len;/**********founcl**********/for(i=0;i<_I_:i++){len=strlen(ss[i]);/**********found**********/if(len<=_2_)/**********found**********/strcpy(ss(j++L_3_):}returnj;}main(){charx[N][M]={"Beijing",,,Shanghai,,,,,Tianjing","Nanjing",'•Wuhan"!;inti,f;printf("

683TheoriginalstringViXn',);for(i=0;i

684");f=fun(x,7);printfCThestringwitchlengthislessthanorequalto7:

685M);for(i=0;i

686");}解题思路:本题是根据给定的字符半数组中删除率长大于某个值的字符中。第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。第二处:串长由形参k来传递,所以应填:ko第三处:如果字符串ss⑴的串长小于k,则该字符串仍存在原字符串数组中,位置由变量j来控制,所以应填:ss[i]。给定程序MODI1.C中函数fiin的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则c中的字符串应为:aBcdeFgHo请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#includevoidfun(char*p,char*q,char*c)(/************砧und************/inik=1;/************砧und************/while(*p!=*q){if(*p<*q)c[k]=*q;elsec[k]=*p;if(*p)P++;if(*q)q++;k++:main(){chara[10)="aBCDeFgH",b[IO]="ABcd",cfSO>CXO');fun(a,b,c);printf("Thestringa:");puts(a);printfCThestringb:");puts(b);printf("Theresult:");puts(c);)

687解题思路:第一处:存放字符串初始位置也是从0开始存放的,由于k是控制c字符串的位置值,所以k值应为0。第二处:判断两个字符串中是否有字符串结束符产生,所以应改为:while(*pII*q),而不是两字符串中对应位置的值不相等。***************************************************假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将申中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。例如,字符串中的内容为:♦♦♦♦A*BC*DEF*G*******,删除后,字符串中的内容应当是:♦♦♦*ABCDEFG0注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句.给定源程序:#includevoidfun(char*a)]/•以下代码仅供参考*/inti=0,k;while(a[i]==,*')i++;k=i+l;while(a[i]!=\01)/♦以下程序段实现非*字符前移*/[)a[i+l]=W}main(){chars[81];printf("Enterastring:

688");geis(s);fun(s);printf("Thestringafterdeleted:

689");puts(s);NONOO;}NONOO(/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81];in=fopen("c:\Mesl\\in.dal",T);out=fopen("c:\\test\\out.dat"7'w");for(i=0;i<10;i++){fscanf(in,"%s';s);fun(s);fprintf(ou(.^sXn".s);Ifclose(in);fclose(out);}解题思路:本题是考察字符串的操作。1.使用while循环语句求出字符串前导*号的个数。2.使用while循环语句判断a(i]是否是字符串结束符标志,如果不是字符串结束标志,则再判断是否是字符*号,如果不是*号,则把a(口字符存入a[k]中,如果是*号则跳过该*号,直至字符串结束为止。参考答案:#includevoidfun(char*a)(/*以下代码仅供参考♦/inti=0,k;while(a[i]='*')i++;k=i;while(a[i]!=V)')/*以下程序段实现非*字符前移*/{iRa[iJ!=<♦')a|k++]=a[i];i++;)a[k]=V)';1main(){chars[81];printfC'Enterastring:

690");gets(s);fiin(s);prinlf('Thestringafterdeleted:

691");puts(s);NONO0;)NONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inii;chars[81];in=fbpen("c:\Vest\\in.dat","r");out=fopen(',c:\\test\\out.dat,\,,w");for(i=0:i<10;i++){fscanf(in,"%s'\s);fun(s);fprintf(out,"%s

692",s);}fclose(in);fclose(oul);I※※※※※※※※※※※※※※※※※※※※※※※※※第40套:给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*nex(;}SLIST;voidfun(SLIST*h,intx){SLIST*p,*q,*s;s=(SLIST*)malloc(sizeof(SLIST));/**********found**********/s->data=1;q=h;p=h->next;while(p!=NULL&&x>p->data){q=_2_;p=p->next;Is->next=p;/**********Sund**********/q->next=3;}SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST♦)malloc(sizeof(SL!ST));for(i=0;idata=a[i];p->nex(=q:p=q;)p->next=O;returnh:}voidoutlist(SLIST*h){SLIST*p;p=h->nex(;if(p=NULL)printf("

693ThelistisNULL!

694");else{printfCMHead"):do{printf(,'->%d",p-xlata);p=p->next;}while(p!=NULL);primf("・>End'n");main(){SLIST*head;intx;inta[N]={11,12,15,18,19,22,25,29):head=creatlist(a);printf("

695Thelistbeforeinserting:

696"):outlist(head);printfCAnEnteranumber:");scanf("%d",&x);fun(head.x);printf("

697Thelistafterinserting:

698M);outlist(head);)解题思路:本题是要求在一个有序的链表中插入一个数,插入后各结点仍

699然是有序的。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:在函数fun的开始处.已经对结构指针s分配了内存,其中data是•个整型变量,实际要求填入一个整型数据。根据本题要求在一个链表插入一个整型数,该数一通过函数的形参x传入,因此应填X。第二处:使用•个while循环找出要插入•个数的位置,在循环体中q实际上保留当前链表p位置的临时变量,如果x>p->data时,那么再移动链表指针到下一个结果,再进行判断是否符合条件,如果仍大于,则仍q保留链表p的位置。因此,此处应填p。第三处:当找到结点位置后,就要插入这个数,完成插入过程。由于函数体中分配了结构指针s,s的next指针已经指向了p,所以,当前位置q的next指针就应该指向指针s完成链表的徒接。因此,此处应填s.***************************************************给定程序MODI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includelongfun(longnum){longk;do{k*=num%10;/************found************/num\=IO;}while(num);return(k);}main(){longn;printfC'APleaseenteranumber:");scanf("%ld",&n);printf(,'

700%ld

701",fun(n));}解题思路:第一处:由于在k定义时没有赋初值,所以k是一个随机数,根据试题要求,k应赋值为Io第二处:整除的符号是/。请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返卬1・例如:若有5门课程的成绩是:90,5,72.80,61.5.55则函数的值为:71.80.注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句.给定源程序:#includefloatfun(float*a.intn)()main(){floatscore[30]={90.5,72,80,61.5,55),aver;aver=fun(score,5);printf("

702Averagescoreis:%5.2f

703M,aver);NONO();}NONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。HLE*fp.»wf;inti,j;floataver,score[5]:fp=fopen(,'c:\\test\\in.datMr**);wf=fopen("c:\\(est\\out.dat","w");for(i=0;i<10;i++){for(j=0;j<5;j++)fscanf(fp:'%f,",&score[jD;aver=fiin(score,5);fprintf(wf,aver);Ifclose(fp);fclose(wf):}解题思路:本题是使用循环来计算平均值且结果由函数值返回。参考答案:#includefloatfun(float*a,intn)]inti;floatave=0.0;fbr(i=0;i

704Averagescoreis:%5.2f

705",aver);NONO();1NONO(){/*本函数用于打开文件,输入数据,调用函数,愉出数据,关闭文件。♦/FILE*fp,*wf;inti,j;floataver,score[5];fp=fopenC'crWtestWin.dafW);wf=fopen("c:\\test\\out.dat",,,w");for(i=0;i

706",aver);Ifclose(fp);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第41套:给定程序中,函数ftin的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:m=30.0请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN10doublefun(doublex[].double*av){inti.j;doubled,s:s=0;for(i=0;i

707for(i=0;i

708M);m=fun(x,&av);printf("

709Theaverageis:%f

710'\av);prinlf("m=%5.1f",m);printf("

711M);I解题思路:第处:计算好的平均值通过形参av返回,所以应填:*av。第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。第三处:返回该数,所以应填:x(j]o***************************************************给定程序MODU.C中函数fun的功能是:根据整型形参n,计算如下公式的值。例如,若n=10,则应输出:0.617977。请改正程序中的语法错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************found************/intfun(intn){floatA=1;inti;/************found************/for(i=2;i

712P!easeentern:");scanf(&n);printf("A%d=%f

713",n.fun(n));解题思路:第一处:函数的返回是浮点型数,所以应改为:fioatfun(intn)0第二处:for的终止条件应是iv=n。***************************************************程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。例如:若m的值为2,a数组中的值为I19711218141a=l238l则返回主程序后a数组中的值应为12616114561145121注意:部分源程序存在文件PROGI.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#include#defineN5intfun(inta[][N],intm)main(){inta[N][N],m,i,j;printf(*******Thearray*****

714M);for(i=0;i

715(for(j=0;j

716");}for(i=0:i<5;i++)for(j=0;j<5;j++)fscanf(rf,H%d",&a(i](j]);fscanf(rf,"%d",&n);dom=rand()%10;while(m>=3);printf("m=%4d

717",m);fun(a,m);printfCTHERESULT

718");for(i=0;i

719");ifun(a.n);for(i=0;i<5;i++)(for(j=0;j<5;j++)fprintf(wf,"%4dM,a[i](j]);fprintf(wf,,An°);}fclose(rf);fclose(wf);iNONO();)i※※※※※※※※※※※※※※※※※※※※※※※※※第42套:NONO(){/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/HLE*rf.*wf;给定程序中,函数fiin的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序.例如,形inti,j,n,a[5][5];rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\test\\out.dat",,,wM);for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,"%d",;fscanftrf,*%dw,&n);fun(a,n);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(wf,"%4d",a[i][j]);fprintf(wf,"

720");参s所指的字符串为:def35adh3kjsdn«执行结果为:defadhkjsdt3537.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:/include1fclose(rf);fclose(wf);voidfun(char*s){inti,j=0.k=0;chartl[80],t2[80];for(i=0;s[i]!=W;i++)J解题思路:木题是利用两重循环给二维数组右上三角元素中的值乘以m0参考答案:#include#include#defineN5intfun(inta|][N],intm){s[i]<=9)(/**********found**********/t2Ul=s[iJ;一1一;1elsetl[k++]=s[i];(2[i]=0;il[k]=0;/**********found**********/for(i=0;i

721Theoriginalstringis:%s

722",s);fun(s);main(){inta[N][N],m.ij;printfC******Thearray*****

723M);for(i=0;i

724Theresultis:%s

725",s);}解题思路:12是存放数字字符串,ll是存放非数字字符串。第一处:12存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j++o第二处:利用for循环把(1字符串添加到原字符串s中,所以应填:dom=rand()%10;while(m>=3);printf("m=%4d

726",m);fun(a,m);printfCTHERESULT

727N);s[i]=tl[ib第三处:利用for循环把12字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所以应填:j.for(i=0;i

728");给定程序MODI1.C中函数fun的功能是:用用泡法对6个字符串按由小到大NONO();的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,n,a[5][5];rf=fopen("c:\\test\\!n.dat",,,r");wf=fopen(',c:\\tesi\\out.dat,,,',w,');注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineMAXLINE20fun(char*pstr(6])

729{inti.j;char*p;for(i=0;i<5:i++)(/**************found**************/forO=i+lJ<6,j-H-)(if(strcmp(*(pslr+i),*(pstr+j))>0)p=*(pstr+i);/**************found**************/*(pstr+i)=pstr+j;*(pstr+j)=p;1)}}main(){inti;char*pstr[6],sir⑹[MAXLINE];fbr(i=0;i<6;i++)pstrfi]=strti];printf('AnEnter6string(1stringateachline):

730°);for(i=0;i<6;i++)scanf("%s”,pstrfi]);fun(pstr);printf("Thestringsaftersorting:

731");for(i=0;i<6;i++)prints,'%s

732**,pstr(i));)解题思路:第一处:for循环语句中缺少分号。第二处:应该把pstr+j位置上的值赋值给*(psir+i)上,所以应改为:*(pstr+i)=*(pstr-»j);o***************************************************请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串:123412132.输入字符为:1,则输出:3。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若F语句。给定源程序:#include#include#defineM81intfun(char*ss.charc)main(){chara[M],ch;printf("

733Pleaseenterastring:");gets(a);printf("

734Pleaseenterachar:");ch=getcharO;printf("

735Thenumberofthecharis:%d

736",fun(a.ch));NONO();}NONO(){/*本函数用丁•打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;FILE*rf,*wf;chara[M].b[M],ch;rf=fopen("c:\\(est\\in.dat',."r'');wf=fopenC'ciWtestWout.dat",'^");for(i=0;i<10;i++)(fscanf(rf,0%s'\a);fscanf(rf,"%s".b);ch=*b;fprinif(wf,"%c=%d

737",ch,fun(a.ch));fclose(rf);fclose(wf);}解题思路:本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数ent加1,直至字符串结束为止,最后由函数返回。参考答案:#include#inc!ude#defineM81intfun(char*ss,charc){intent=0;char*p=ss;while(*p){if(*p==c)cnt++;p++:)returnent;}main(){chara[M|.ch;printf("

738Pleaseenterastring:");gets(a);printf("

739Pleaseenterachar:");ch=getchar();printf("

740Thenumberofthecharis:%d

741",fun(a,ch));NONO();)NONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;FILE*rf,*wf;chara(M],b[M],ch;rf=fopen(',c:\\test\\in.dat","r");wf=fopen(',c:\\test\\out.dat",,,w'');for(i=0;i

742",ch,fun(a,ch));}fclose(rf);fclose(wf):I※※※※※※※※※※※※※※※※※※※※※※※※※第43套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符半数组中的位置(下标值),未找到则返回ss所指字符半数组中共有N个内容不同的字符串,且申长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5#deHneM8intfun(char(*ss)[M].char*t){inti;/**********found**********/for(i=0;i<_l_;i++)/**********found**********/if^strcmp(ss[i],t)=O)return2;return-I;1main(){charch[N][M>{"if',,,while,\,,switch,\"int,\Mfor"!,tlMJ;intnj;printf("

743Theoriginalstring

744

745");for(i=0;i

746");printf("

747Enterastringfbrsearch:");gets(t);n=fun(ch,t);/**********found**********/if(n==_3_)printfCAnDon'tfoundin'');elseprintf("

748Thepositionis%d.

749".n);1解题思路:本题是考察在字符串查找指定的子串。第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:No第二处:在字符中已经找到,则返回字符半数组中的位置(下标值),所以应填:i。第三处:如果没有发现,则显示没有找到信息,所以应填:-1。***************************************************给定程序MODH.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这的数放在b所指的数组中,这些数的个数作为函数值返回.规定,函数中al放个位数,a2放十位数。请改正程序中的错误,使它能得出正确结果。

750注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includefun(int*b){intk.al.a2,i=0;for(k=10;k<=55;k++){/************found************/a2=k/lO;al=k-a2*10:if((k%3=0&&a2=5)ll(k%3==0&&a1=5)){b[i]=k;i++;}/************found************/returnk;}main(){inta[100],k.m;m=fun(a);print。'Theresultis:

751");for(k=0;kvoidfun(char*a)}main(){chars[81];printf("Enterastring:

752");gets(s);fiin(s);printf("Thestringafterdeleted:

753");puts(s);NONOO;NONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81];in=fopen("c:\Vest\\in.dal".T);out=fopen("c:\Mesl\\out.daT'."w");for(i=0;i

754",s);}fclose(in);fclose(oul);1解题思路:本题是考察字符串的移动。1.使用while循环语句和字符串指针p扫描出尾部的*号。2.定义两个字符串中间变量s和3其中s是存放*号后面的字符串,t是存放*号字符串。3.最后利用字符串拷贝和连接,重新组成字符串a。参考答案:#includevoidfun(char*a)[char*p=a;while(*p)p++:p--;while(*p='♦*)p—;p++;*p=0;}main(){chars[81];printf("Enterastring:

755,');gets(s);fun(s);printfCThestringafterdeleted:

756M);puts(s);NONO();1NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。FILE*in,*out;inti;chars[81];in=fopen("c:\Vesl\\in.dar',T);out=fopen("c:\\test\\out.dat"w");for(i=0;i<10;i++){fscanf(in,"%s",s);fun(s);fprintf(out."%s

757M.s);}fclose(in);fclose(out);}※※※※※※※※※※※※※※※※※※※※※※※※※第44套:函数firn的功能是进行数字字符转换。若形参ch中是数字字符。〜9,贝ij’0'转换成9,T转换成8,2转换成7,……,9转换成若是其它字符则保持不变:并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********found**********/1fun(charch)ifShE'&&2)/**********found**********/return9-(ch-3);returnch;1main(){charcl,c2;printf("

758Theresult:

759");cl=2;c2=fun(cl);printf("cl=%cc2=%c

760",cl,c2);cl=8;c2=fun(cl);printf(*'cl=%cc2=%c

761",cI.c2);cl="a';c2=fun(cl);printf("cl=%cc2=%c

762",cl,c2);)解题思路:第•处:要求返回处理好的字符,所以应填:char。第二处:判断该字符是否是数字,所以应填:chv=9。第三处:只要减去'0'的ASCH值,即可得到要求的结果,所以应填:V.***************************************************给定程序MOD11.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给a谕入字符串:ABCDEFGHUK,调用函数之后,字符数组b中的内容则为:ABCDEFGHIJKo请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includevoidfun(char*p,char*b){inti,k=0;while(*p){i=l;while(i<=3&&*p){

763/**********found**********/b[k]=p;k++;p++;i++;)if(*P)b[k++]="}}b[k]=\O,:}main(){chara[80],b[80];printf("Enterastring:,r);gels(a);printfCTheoriginalstring:");puts(a);fun(a,b);printf("

764Thestringafterinsertspace:");puts(b);printf("

765

766M);}解题思路:第一处:把指针p所指的值赋值给b[k]中。第二处:把空格字符赋值给b[k++]中,而不是•个空格的字符申。***************************************************N名学生的成绩已在主函数中放入•个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625.注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doubleftin(STREC*h)[}STREC*creat(double*s){STREC*h,*p,*q;inti=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0:while(is=s|i];i++;p->next=q;p=q;}p->next=();returnh;1outlist(STREC*h){STREC*p;p=h->next;printfCTiead");do{printf("->%4.1f\p->s);p=p->next;}while(p!=0);primf(An

767");}main(){doubles[N]={85,76,69,85,91,72,64,87},ave;STREC*h;h=creat(s);outlist(h);ave=fun(h);printf("ave=%6.3f

768",ave);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*ou(;intij:doubles(N].ave;STREC*h;in=fopen(,'c:\\test\\in.dat","rM);out=fopen("c:\\tesl\\oui.dal"."w");for(i=0;i<10;i++)(for(j=0;j

769".ave);}fclose(in):

770fclose(out);fclose(out);解题思路:本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。参考答案:#include#includei※※※※※※※※※※※※※※※※※※※※※※※※※第45套:函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0ha[lba[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删#defineN8structslist{doubles;structslist*next;};除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。请在程序的卜划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。typedefstructslistSTREC;doublefun(STREC*h)注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!(STREC*p=h->next;/*由于头结点中没有存放数据*/doubleav=O.O;/*对计算成绩平均值的变量进行初始化*/intn=0;while(p!=NULL)(/♦判断链表是否结束*/av=av+p->s;/*对成绩进行累加♦/p=p->next;/♦到下一个结点位置♦/n++;/*人数加1*/}给定源程序:#include#defineN9intfun(inta[],intn)(>nti,j;j=o;for(i=0;is=O;while(is=s[i];i++;p->next=q;p=q:return3;|main(){intb[N]=[9,1,4,2,365,8,7},i,n;printf("

771Theoriginaldata:

772");for(i=0;inexl=0;returnh;printfCXn'1);n=fun(b,N);printf("

773Thenumberofeven:%d

774M,n);Joutlist(STREC*h){STREC*p;p=h->next;printf("headn);do{prinlf(H->%4.1f'.p->s);p=p->next;}while(p!=0);primfCMXn");}printf("

775Theeven:

776");for(i=0;i

777",ave);NONOQ;i应填:a[i]%2.第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:a[j]。第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:jo***************************************************给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。r10(n=l)iNONOO(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/fun(n)=HLfun(n-l)+2(n>l)例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。FILE*in,*ou(;intij:doubles(N),ave;STREC*h;给定源程序:#include/************found************/in=fopen("c:\\test\\in.dat",MrM);out=fopen("c:\\test\\out.datM,Mw");for(i=0;i<10;i++){for(j=0;j

778",ave);}c=10;elsec=fun(n-l)+2;retum(c);fclose(in);

779main(){intn;printf("Entern:"):scanf("%d",&n);printfCTheresult:%d

780

781",fun(n)):)解题思路:第一处:形参n没有定义类型,所以应改为:fun(intn)。第二处:判断相等的符号是==。***************************************************假定输入的字符串中只包含字母和*号。请编写函数hin,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做.字符串中间和前面的*号不删除。例如,字符串中的内容为:****a*BC*DEF*G*******,若n的值为4,删除后,字符串中的内容应当是:**»*A*BC*DEF*G****:若n的值为7,则字符串中的内容仍为:****a*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若卜语句。给定源程序:#includevoidfun(char*a,intn)]}main()(chars[81];intn;printf("Enterastring:

782");gets(s);printf("Entern:");scanf("%d",&n);fun(sji);printfCThestringafterdeleted:

783");puts(s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,检出数据,关闭文件。*/FILE*in,*out;inii.n;chars[81];in=fopen("c:\\test\\in.dat".,'rM);out=fopen("c:\\test\\out.dat",Mw");for(i=0;i<10;i++){fscanf(in,"%s0,s);fscanf(in,"%d,'.&n);fun(s,n);fprintf(ou(,"%s

784",s);1fclose(in);fclose(out);}解题思路:本题是考察字符串的操作。1.使用while循环语句和字符串指针p扫描出尾部的*号。2.找出字符串最右边字母后出现”的第1位置。3.使用while循环来处理右边”是否大于n个,若大于,则取n个*。4.最后给字符串加上结束符。参考答案:#includevoidfun(char*a,in(n)(char*p=a;intj=0;while(*p)p++;p~;/*字符串的长度*/while(*p==,♦')p-;/*字符串右的**/P++;while(j

785");gets(s);printf("Entern:M);scanf(',%d".&n);fun(s,n);printfCThestringafterdeleicd:

786");puis(s);NONOO;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,n;chars[81];in=fopen("c:\Mesl\\in.dat”;T’);out=fopen("c:\\test\\out.dat",nw");for(i=0;i<10;i++)(fscanf(in,"%s0,s);fscanf(in,"%d",&n);fun(s,n);fprintf(out,"%s

787",s);}fclose(in);fclose(out);1※※※※※※※※※※※※※※※※※※※※※※※※※第46套:给定程序中,函数hin的功能是:利用指针数组对形参ss所指字符申数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5#defineM8voidfun(char(*ss)[M]){char*ps[N],*tp;inti.j.k;for(i=0;i

788Thestringaftersortingbylength:

789

790");for(i=0;i

791Theoriginalstring

792

793");fbr(i=Oa#include

794/************Cund************/fun(inin){doublesum,sO,si,s2,s;intk;sum=1.0;if(n<=2)sum=0.0:sO=0.0;s1=0.0;s2=1.0;for(k=4;k<=n;k++){s=sO+sl+s2;sum+=sqrt(s);s0=si;si=s2;s2=s;}/************found************/returnsum}main(){intn;printfC'InputN=");scanf("%dM,&n);prinlf("%f\rT,fun(n));}解题思路:第•处:由于函数返回是实数,所以必须定义返网的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float.第二处:该行缺少分号。编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当11=10,x=0.3时,函数值为1.349859。注意:部分源程序在文件PROGLC文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefiin(doublex,intn){}main()]printf("%f

795",fun(0.3tI0));NONCX);}NONO()(/♦本函数用于打开文件,输入数据.调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;doubles,x;fp=fopen("c:\\test\\in.dat","r,");wf=fopen("c:\MesiWoul.dat"Jw"):fbr(i=0;i<10;i++){fscanf(fp.',%!£,%d",&x,&n);s=fun(x,n);fprinlf(wf,"%An';s);|fclose(fp);fclose(wf);}解题思路:本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后把s作为函数值返回.其中,jc函数是计算阶乘的。参考答案:#include#includelongjc(intn)longs=1;inti;fbr(i=1;i<=n;i++)s*=i;returns;}doublefun(doublex.intn)[doubles=1.0,y=x;inti;fbr(i=1;i<=n;i++){s+=y/(double)jc(i);y*=x;returns;}main()(prinlf("%f

796”,fun(0.340));NONO();NONO()(/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/HLE*fp.*wf;inti,n;doubles,x;fp=fopenC'ciWtestWin.dat'V'r");wf=fopen("c:\Mesi\\oul.dal","w");for(i=0;i

797请在程序的下划线处填入正确的内容并把下划线删除,使程序解题思路:得出正确的结第一处:由于函数返网是实数,所以必须定义返回的类型,只有整型或果。无结果返回可以忽注意:源程序存放在考生文件夹下的BLANK1.C中。略,其他必须定义返回的类型,所以要在此行前加上double或noal。不得增行或删行,也不得更改程序的结构!第二处:缺少分号。***************************************************编写函数fun,它的功能是:计算并输出下列级数和:给定源程序:111#include#include1x22x3n(n+l)#include例如,当n=10时,函数值为:0.909091。voidfun(char*s)注意:部分源程序在文件PROGLC文件中。{intk(26]={0},n,i,max=O;charch:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括while(*s){if(isalpha(*s)){号中填入/**********found**********/你编写的若干语句。ch=tolower(_1_);给定源程序:n=ch,a';#include/**********found**********/doublefun(intn)k[n]+=_2_;{]iS++:/**********found**********/main。/*主函数♦/(if(max

798,\fiin(10));NONO();printf("

799Aftercount:

800M);for(i=0;i<26;i-H-)NONO()if(k[i]=max)printfCAnletterV%cV:%dtimes

801",i+'a',k[i]);{/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。}main()HLE*fp.*wf;{chars[81];inti,n;printf("

802Enterastring:

803

804M);gets(s);doubles;fun(s);}fp=fopen(,'c:\\test\\in.dat,',Mr");wf=fopen("c:\Mest\\oul.dal","w");解题思路:本题是找出字符串中出现频率最高的字母并统计出其次数。第•处:将当前字母转换为小写字母,所以应填:*s»fbr(i=0;i<10;i++){第二处:把该字母出现的个数累加到指定的数组中,所以应填:fscanf(fp,"%d",&n);]一s=fun(n);第三处:如果当前该字母出现次数大于最大次数max,那么把fprintf(wf,s);j该次数赋值给max,所以应填:fclose(fp);k[n].fclose(wf);***************************************************}给定程序MODILC中函数fun的功能是:求S的值。解题思路:例如,当k为10时,函数值应为:1.533852。本题是根据公式计算结果。使用for循环语句进行计兑。但要注意的是:请改iE程序中的错误,使程序能输出正确的结果。在除法运算中.如注意:不要改动main函数,不得增行或删行,也不得更改程果除数和被除数都是整数,所以所除的结果也是整数,因此1应取实数序的结构!或进行实型的类型转换。给定源程序:参考答案:#include#include#includedoublefun(intn)/************拈und************/voidfun(intk)(doubles=0.0;{intn;floats,w,p,q;inti;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));returns;s=1.0;imain()/*主函数*/while(n<=k)]{w=2.0*n;printfC'%^",fiin(10));p=w-1.0;q=w+1.0;NONO();}s=s*w*w/p/q;n++;1/************Cund************/returnsImain()NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*lp,*wf;inii.n;doubles:fp=fopenC'ciWtestWin.dat'V'r");wf=fopen("c:\\(est\\out.dat"wM);for(i=0;i<10;i++)((printf(',%f

805'',fun(IO));

806fscanf(fp."%d".&n);s=fun(n);fprintftwf,"%An';s);1fclose(fp);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第48套:给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为:abs5defl26jkm8,程序执行后的输出结果为:22。请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includeintfun(char*s){intsum=O;while(*s){/**********Cund**********/if(isdigit(*s))sum+=*s-_1_;/**********found**********/_2_;}/**********found**********/return_3_;1main(){chars[81];intn;printfCAnEnterastring:

807

808M);gets(s);n=fiin(s);printf("

809Theresultis:%d

810

811M,n);}解题思路:本题是把字符串中是数字字符转换成对应的数值并进行累加。第•处:。字符对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填:48。第二处:到字符串下•个位置,所以应填:SH。第三处:返回累加和sum,所以应填:sum。***************************************************给定程序MODII.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intk){intm=0,mc=0,j;while((k>=2)&&(me<10)){/************Cund************/if((k%13=0)II(k%17=0)){m=m+k:mc++;}k-;Ireturnm;main()[prinlf("%d

812M,fun(500));}解题思路:第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个』第二处:经过编译可知,和"}"没有配对,所以在横线处加上”}、***************************************************编写函数hin,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如若n为1(X)0时,程序输出应为:s=153.9090640注意:部分源程序在文件PROGLC文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(intn)(}main()/*主函数*/(printfC's=%f

813",fun(1000));NONO0;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/HLE*fp.*wf;inti,n;floats;fp=fbpen(,'c:\\test\\in.dat,',MrM);wf=fopen("c:\\test\\out.dat","wM);for(i=0;i<10;i++)(fscanf(fp."%d",&n);s=fun(n);fprintf(wf,"%An",s);}fclose(fp);fclose(wf):}解题思路:本题是求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。参考答案:#inciude#includedoublefun(intn)doublesum=().0;inti;fbr(i=21;i<=n;i++)iR(i%3=0)&&(i%7=0))sum+=i:returnsqrt(sum);}main()/*主函数*/{printfC's=%f

814M,fun(1()0()));NONOO;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

815*/FILE*fp,*wf;inti,n;floats;fp=fopenC'ciWtestWin.dat'W);wf=fopen("c:\\test\\out.dar',"w");for(i=0;i<10;i++){fscanf(fp,"%d".&n);给定源程序:#includeintfun(floatx(],intn)(/************foun(j************/intj,c=0,floatxa=0.0;for(j=0;j

816';s);)for(j=O;jxa)C++;returnc;※※※※※※※※※※※※※※※※※※※※※※※※※第49套:给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如,形参s所指的字符串为:Abc@lx56*,程序执行后t所指字符数组中的字符串应为:A@156*O请在程序的下划线处填入正确的内容并把下划线删除,便程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中.不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(char*s,char*t){intn=0;while(*s){if(*s<97){/**********found**********/♦(t+n)=_1_;n++;}/**********four)d**********/}main(){floatx[100]=(193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763}:printf("%d

817H.fun(x,8));}解题思路:第一处:两种类型变量定义之间应该用分号,所以应改为:imj,c=0:floatxa=0.;o第二处:在C语言中,大于等于应表达为>=。***************************************************编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n,m!P=n!(m-n)!例如:m=12,n=8时,运行结果为495.0000000注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若「语句。给定源程序:_2_;}#includefloatfun(intm.inin)*(t+n)=O;/**********found**********/return_3_;i}main()/*主函数*/imain(){chars[8l],t[81];intn;printf("

818Enterastring:

819H);gets(s);n=fun(s,t);printf("

820Thereare%dletterwhichASCIIcodeislessthan97:}printfC'P=%An",fun(12,8));NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,»wf;解题思路:本题是根据条件组成新的字符串并统计出符合条件的个数n。第一处:把符合条件的当前字符存放到1字符串中,所以应填:*So第二处:到字符串下一个位置,所以应填:SH。第三处:返回符合条件的字符个数n,所以应填:no***************************************************给定程序MODI1.C中函数fun的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。例如.n=8时,输入:193,199,195.673,195,757,196.051,196,092,196.596,196.579,196.763所得平均值为:195.838745,在平均值以上的实数个数应为:5请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!inti,m,n;floats;fp=fopen("c:\\test\\in.dat",Mr");wf=fopen("c:\\(est\\out.dal","w");for(i=0;i<10;i++)(fscanf(fp,&m.&n);s=fun(m,n);fprintf(wf,"%f

821",s);}fclose(fp);fclose(wf):I解题思路:本题是计算阶乘。参考答案:/includelongjc(intm)(longs=1;

822inti;for(i=1;i<=m:i++)s=s*i;returns;1j;printf("

823Theoriginalarray:

824");for(i=0;i

825Theresultis:

826M);floatp;p=I.O*jc(m)/jc(n)/jc(m-n);returnp;for(i=0;i

827");main()/*主函数*/[1解题思路:printf("P=%An",fun(12,8));NONOO;}第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,m.n;floats;fp=fopen("c:\\test\\in.dat",''r");wf=fopen("c:\\lest\\out.dal","w");for(i=0;i<10;i++){fscanf(fp,w%d,%dM,&m,&n);s=fun(m.n);fprintf(wf,"%f

828",s);}Wlljl。第三处:右上三角元素置为0,所以应填:⑴田】。***************************************************给定程序MODI1.C中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。例如,当x的值为9、y的值为11、z的值为15时,函数值为-3.50。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include#includefclose(fp):fclose(wf);)/************found************/#defineFU(m,n)(m/n)floatfiin(floata,floatb.floatc)※※※※※※※※※※※※※※※※※※※※※※※※※第50套:给定程序中,函数ftm的功能是:有NXN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0o例如,若N=3,有下列矩阵:123456789计算结果为10065010149{floatvalue;value=FU(a+b,a-b)+FU(c+b,c-b);Retum(Value);}main(){floatx,y,z,sum;printf("Inputxyz:");scanf("%f%f%f,,&x,&y,&z);prinlf(,'x=%f,y=%f,z=%IXn",x,y,z);if(x==ylly==z){printf("Dataerror!

829");exit(0);)sum=fun(x,y,z);printfCTheresultis:%5.2f

830",sum);请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4/**********found**********/voidfun(int(*t)1)}解题思路:第•处:define定义错误,所以应改为:#deflneFU(m.n)((m)/(n))«,第二处:return错写成Reium,变量value错写成Value。***************************************************规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。例如,字符串中的内容为:*******A*BC*DEF*G****,删除后.字符串中的内容应当是:A*BC*DEF*G****.在编写函数时,不得使用C语言提供(intij;for(i=l;ivoidfun(char*a)(1main()main(){intt[]|NJ=(21,12,13,24,25,16,47,38,29,11.32M42,21,33,10},i,{chars[81];printf("Enterastring:

831");gets(s);

832fun(s);printf("Thestringafterdeleted:

833");puts(s);NONOO;1NONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/FILE*in,*out;inti:chars[81];in=fopen("c:\\tesl\\in.dat,',"rM);out=fopen(Mc:\\test\\out.dat",MwM);for(i=0;i<10;i++){fscanf(in,"%sM,s);fun(s);fprintf(out,"%s

834",s);}fclose(in);fclose(out);}解题思路:本题是考察字符串的操作。1.利用循环扫描出字符串左边第1个字符不是的的字符。2.再利用循环把以后的字符依次移动原字符串首地址开始存放。3.最后给字符串a加h结束符。参考答案:#includevoidfun(char*a)(intj=0;char*p=a;whiie(*p=***)p++;while(*p){a[j++]=*p;p++;}a[j]=O;Imain(){chars[81J;printf("Enterastring:

835");gets(s);fun(s);printf('Thestringafterdeleted:

836");puts(s);NONOO;}NONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*ou(;inti:chars[8l];in=fopen("c:\\tesl\\in.dat,',"rM);out=fopen("c:\\test\\out.dat",Mw");for(i=0;i<10;i++){fscanf(in,M%sM,s);fun(s);fprintf(oul,"%s

837",s);1fclose(in);fclose(out);)※※※※※※※※※※※※※※※※※※※※※※※※※第51套:给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返I可。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.,函数的返I可值为6.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(char*s){intn=(),flag=O;while(*s!='\0,){if(*s!="&&flag=O){/**********found**********//**********found**********/if(*s==,,)flag=_2_;/**********foun(l**********/_3_;1returnn;1main(){charstr[81]:intn;printf("

838Enteralinetext:

839");gets(str);n=fun(str);printf("

840Thereare%dwordsinthistext.

841

842",n);}解题思路:本题是统计字符串中包含的单词个数。第一处:单词个数用变量n来统计,当当前字母不是空格且flag状态标志为。时,则单词数就加1,将状态标志nag置为1,所以应填:n++o第二处:当当前字符是空格时,flag状态标志置0,所以应填:0o第三处:到字符串下一个位置,所以应填:SH。***************************************************给定程序MODI1.C中函数fun的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返I可,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:80.5607290.59851.58864则低于平均分的学生人数为:4(平均分为:75.5625)<,请改1E程序中的错误,使它能统计出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN20intfun(float*s,intn,float*aver){floatave,t=0.0;intcount=0.k,i;for(k=0;k

843Pleaseenter%dmark:

844",m);for(i=0;i

845Thenumberofstudents:%d

846",fun(s,m.&aver));prinlf("Ave=%f

847M,aver);1解题思路:第一处:应求累加和,而不赋值,所以应改为t+=s[k];。第二处:ave不需要取地址,直接赋给*aver就可以了。***************************************************请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编”的若干语句.给定源程序:#includeintfun(int*s,int(,ini*k){)main()(inta[10]=<876,675,896,101,301,401,980.431,451,777},k;fun(a,10,&k);prinif("%d.%d

848”,k,a[k]);NONCX);)NONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inta[I0],i,k.j;HLE*rf,*wf;rf=fbpen("c:\\tesi\\in.dai","r");wf=fopen("c:\\lest\\out.dal"."w");for(i=0;i<10;i++){for(j=0;j<10;j++)fccanf(rf,M%d",&a[jD;fun(a,10,&k);fprintf(wf."%d,%d

849",k.a[k]);}fclose(rf);fclose(wf);}解题思路:本题是考察考生如何在指定的数组找出最大元素值的卜标,通过形参*k返回到主程序中。给出的程序是使用for循环语句进行处理的,在循环之前,首

850先把数组的第一个元素值赋给最大值变量max,位置pos为0,然后通过循环依次判断下一元素值是否大于最大值max,如果大于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后执行语句*k=pos就可以实现返回了。参考答案:#includeintfun(int*s.intt.int*k)(inti,pos=0,max=*s;fbr(i=1;i

851",k,a[k]);NONCK);NONO(){/*本函数用于打开文件,输入测试数据,调用ftin函数,输出数据,关闭文件。*/inta[10],i.k,j:FILE*rf,*wf;rf=fopen("c:\\test\\in.dat",',r,');wf=fopen("c:\\lest\\out.dal","w");fbr(i=0:i<10;i++){for(j=0;j<10;j++)fscanf(rf,"%d",&a(j]);fiin(a,10,&k);fprintf(wf,"%d,%d

852”.k,a[kj);Ifclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第52套:给定程序中,函数fun的功能是:将NXN矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵123456789计算结果为312645978请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#deflneN4voidfun(int(*t)[N]){inti,j,x;/**********Sund**********/for(i=0;i<1;i++)x=t[i][_2_];fbr(j=N-l;j>=l;j)HilUEMHl;Kill_3_]=x;})main(){intt[]|N]={21,12,13,24,25,16,47,38,29,11,32,54.42,21,33.10),i.j;prin(f("Theoriginalarray:

853M);fbr(i=O;i

854");for(i=0;i

855M);I}解题思路:第一处:函数fun是对NXN矩阵进行操作,for循环的终止值为N。第二处:把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:N-lo第三处:第1列元素值使用x替换,由于C语言的下标是从。开始的,所以应填:0。

856解题思路:例如,若q的值为:50.0,则函数值为:49.394948。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(doubleq){intn;doubles,t;n=2;s=2.0;while(s<=q)]本题是考察考生用递推算法来求出斐波那契数列中每项的值。给出的程序就是用变量f、ft)和fl来表示递推的过程,给变量fD和fl最初分别置数列中第1项和第2项的值0和1,然后进入循环,执行语句f=m+fi:将所得和值存入f中,这就是数列的第3项,把n的值移入fD中,将f的值移入n中,为求数列的下一列作好准备:接着进入下一次循环,通过语句f=fD+fl求得数列的第4项,不断重复以上步骤,每重复•次就依次求得数列的下•项,直至某项满足要为止。参考答案:t=s;/************found************/s=s+(n+l)/n;n++;I/include#includeintfun(intt){intft)=0,fl=l,f;printf("n=%d

857",n);/************found************/returns;}do{f=ft)+fl;fO=fl;fl=f;main()(}while(f第二处:返回结果错误,应改为:return1;.{intn;n=1000:printf(*'n=%d,f=%d

858*',n,fun(n));NONO0;1***************************************************编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的•个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(l)=lF(n)=F(n-1)+F(n—2)例如:当1=1000时,函数值为:1597.注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(intt)(NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n,s;fp=fopenCciWtestWin.daf'/'r");wf=fopen("c:\\test\\out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%d

859",s);}fclose(fp);fclose(wf);※※※※※※※※※※※※※※※※※※※※※※※※※第53套:函数fun的功能是:计算}main()/*主函数*/{intn;n=1000;printf(wn=%d,f=%d

860M,n,fun(n));NONOO;}请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:NONO(){/♦本函数用于打开文件,输入数据,调用函数,检出数据,关闭文件。♦/FILE*fp,*wf;inti,n,s;fp=fopen("c:\\test\\in.dat,,.,,r,');wf=fopen("c:\\test\\out.dat,',',w");#include#includedoublefun(doublex){doublef,t:intn:f=1.0+x;/**********f0und**********/t=_1_;for(i=0;i<10;i++){fscanf(fp,"%dM,&n);s=fun(n);n=1;do{n++;fprintf(wf,"%d

861'\s);)t*=(-1.0)*x/_2_;fclose(fp);fclose(wf);f+=t;)

862while(3>=le-6);returnf;1main(){doublex,y;x=2.5;y=fun(x);printfCAnTheresultis:

863M);prinlf("x=%-12.6fy=%-12.6f

864",x,y);I解题思路:第一处:根据公式可知,变量I的值为X。第二处:根据公式可知,此处应该除以n,所以应填:n.第三处:根据试题中条件的要求,所以应填:fabs⑴。***************************************************给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数.不得增行或删行,也不得更改程序的结构!给定源程序:#includelongfun(intx,inty,long*p){inti;longt=1;/**************found**************/fbr(i=l;ivy:i++)t=t*x;*p=t;/**************found**************/(=1/1000;returnt;}main(){longLr;intx,y;printf("

865Inputxandy:");scanf("%ld%ld",&x,&y);t=fun(x,y,&r);printf(',

866

867x=%d,y=%d.r=%ld.Iast=%ld

868

869",x,y,r,l);)解题思路:第一处:错误在for循环语句上,根据试题要求,终止条件应该是i<=y»第二处:要取低3位的值时,应模1000取余数,而不是整除1000取商。例如.在主函数中从键盘给x输入0.21后,输出为:s=l.100000。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefiin(doublex)(}main(){doublex,s;printf("Inputx:");scanf("%lf',&x);s=fun(x);prinlf("s=%f

870'\s);NONCX);1NONOO(/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti;doubles,x;rf=fopen("c:\\test\\in.dat,',',r'');wf=fopen("c:\\test\\out.dat",',w");for(i=0;i#includedoublefun(doublex)(intn=l;/♦循环计数*/doublesn=1;/♦累计数*/doublexn=l,xnl=0;Z*x的n值,以及x的n-1值”while(fabs(xn-xnl)>=0.000001)/*绝时值是否满足条件*/{xn=xn*x*(0.5-n+1)/n;/*表达式分解以后xn=(xn-1)#x*(0.5-n+1)/n*/n+=l;sn+=xn;/*sn累加上xn*/}retum(sn);}main(){doublex,s;printfC'Inputx:");scanf(M%ir,&x);s=fun(x);printf("s=%f

871M,s);NONOO;}NONO(){/*请在此函数内打开文件,输入测试数据,调用ftin函数,输出数据,关闭文件。*/FILE*rf,*wf;inti;doubles,x;rf=fopen("c:\\test\\in.dat","rM;wf=fopen("c:\\tesi\\oul.dar',"w");for(i=0;i<10;!++)(fscanf(rf,n%ir,&x);s=fun(x);fprintf(wf,"%lf

872",s);}fclose(rf);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第54套:给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹卜的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#deHneN8typedefstructlist{intdata;structlist"next;}SUST;

873SLIST*creatlist(in(*);voidout!ist(SLIST*);intfiin(SLIST*h){SLIST*p;ints=0;p=h->next;intfun(char*s.char*t1.char*t2,char*w)while(p)([inti;char*p.*r.*a;s+=p->1;/**********found**********/p=p->2:}strcpy(w,s);while(*w){p=w;r=(1;/************found************/while(r)returns;)if(*r==*p){r++;p++;}elsebreak;if(*r=='()'){a=w;r=t2;while(*r){/************found************/main()(SUST♦head;inta[N]={12,87,45,32,91.16,20.481;head=creatlist(a);outlist(head);*a=*ra++;r++}w+=strlen(t2);I/**********found**********/elsew++;printfCAnsumM%^^”.ftm(3));SLIST*crea(list(inta[]){SLIST*h,*p,*q;inti;main(){h=p=(SLIST»)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}chars[100],(1[IOO],t2[IOO],w[100];printf("

874PleaseenterstringS:H);scanf("%s".s);printf("

875Pleaseentersubstringscanf(M%s",tl);printf("

876Pleaseentersubstringt2:M);scanf(M%s",t2);if(strlen(t1)=strlen(t2)){p->next=O;returnh;fun(s,tl,t2,w);printf("

877Theresultis:%s

878M,w);1voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printfCThelistisNULL!

879,r);else{printf("

880Head");do{printf("->%dM,p-xlata);p=p->next;}while(p!=NULL);printf("->End

881");)}!elseprintf("Error:strlen(tl)!=strlen(t2)

882N);}解题思路:第一处:利断字符串当前字符是否是字符串结束符,所以应改为:while(*r)o第二处:语句后缺少分号。函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新小放在t所指数组中。例如,当s所指字符串中的内容为:"ABCDEFGHIJK”,解题思路:本题是计算出带有头结点的单向锌表中各结点数据域中值之和。第一处:累加数据域中的值,所以应填:data.第二处:指定p的下一个指针,所以应填:next。第三处:函数调用,在主函数中已经给出了head,所以应填:headn***************************************************给定程序MODI1.C中函数fun的功能是:将s所指字符串中出现的与tl所指字符串相同的子串全部替换成(2所指字符串,所形成的新串放在w所指的数组中。在此处,要求H和12所指字符串的长度相同。例如,当s所指字符串中的内容为:"abcdabfab",tl所指子串中的内容为:“ab”,t2所指了事中的内容为:“99”时,结果在w所指的数组中的内容应为:“99cd99f99'。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include在【所指数组中的内容应是:"BDFHJ”。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若「语句。给定源程序:#include#includevoidfun(char*s,chart[])(}main(){charsllOOLClOO];printf("

883PleaseenterstringS:M);scanf("%sM,s);fun(s,I);printf("

884Theresultis:%s

885M,t);NONOO;1NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/

886chars[IOO],t(100];intfiin(char*s)FILE*rf,*wf;(char*lp,*rp;inti;rf=fbpen("c:\\test\\in.dat,,,"r,');wf=fopenC'crWtestWout.dat'V'w");for(i=0:i<10;i++){fscanf(rf,n%^,s);ftin(s,t);fprintf(wf,"%s

887'\t);I/**********found**********/lp=_I—;rp=s+strlen(s)-l;while((toupper(*lp)==toupper(*rp))&&(lp#includevoidfun(char*s,chart[]){chars[81];printf("Enterastring:");scanf('1%sM,s);if(fun(s))printf("

888V%sVisaPalindrome.

889

890M,s);elseprintf("

891\"%s\'^isn'taPalindrome.

892

893",s);)解题思路:本题是判断字符串是否是“回文inti,j=0;fbr(i=1;i

894PleaseenterstringS:");scanf("%s",s);fun(s,t);printf("

895Theresultis:%s

896H.t);NONO();第三处:当Ip和rp相等时,则表示字符串是回文并返回1,否则就返回0,所以应填:return0,***************************************************iNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/给定程序MOD11.C中fun函数的功能是:求出以下分数序列的前n项之和。235813211235813和值通过函数值返回main函数。例如,若n=5,则应输出:8.391667ochars[100],t[100];请改正程序中的错误,使它能得出正确的结果。FILE*rf.*wf;inti;rf=fopen('c:\\(est\\in.datT");wf=fopen(',c:\\test\\out.dat",',w");注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/**************Aund**************/for(i=0;i<10;i++){fscanf(rf,0%s",s);fun(s,t);fprintf(wf,t);}fun(intn){inta=2,b=1,c,k;doubles=0.0;for(k=1;k<=n;k++){s=s+1.0*a/b;fclose(rf);/**************f()und**************/fclose(wf);}c=a;a+=b;b+=c;※※※※※※※※※※※※※※※※※※※※※※※※※1retum(s);第55套:给定程序中,函数fun的功能是:判断形参s所指字符串是否是"回文"(Palindrome),若是,函数返回值为1:不是,函数返回值为0。"回文"是正读和反读都一样的字符串(不区分大小写字母)。例如,LEVEL和Level是"回文",而LEVLEV不是"回文"。请在程序的下划线处填入正确的内容并把下划线删除,便程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include1main(){intn=5;printf("

897Thevalueoffunctionis:%lf

898",fun(n));}解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double或float等定义。第二处:根据公式可知,在Ibr循环内b的值应是c。***************************************************请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入XX所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。函数fun中给

899出的语句仅供参考。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:if(i=t)(xx(j-l]=i;j++;}t++;I}#includevoidfun(intm,intk.intxx[])1main()/♦以下代码仅供参考*/]intm,n,zz(1000J;printf("

900Pleaseentertwointegers:");scanf(M%d%d",&m,&n);fun(m,n,zz);fdr(m=0;m

901Pleaseentertwointegers:");HLE*rf,*wf;rf=fopen(c:\\test\\in.dat,T");scanf(',%d%dM,&m,&n);fun(m,n,zz);wf=fopen("c:\\test\\ou(.dal","w'');for(i=0;i<10;i++){for(m=0;m

902");fscanf(rf,"%d%d”,&m.&n);fun(m,n,zz);for(m=0;m

903");NONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intm,n,zzflOOO],i;ifclose(rf);fclose(wf):1※※※※※※※※※※※※※※※※※※※※※※※※※HLE*rf,*wf;rf=fopen("c:\\test\\in.dat',,',r,');wf=fopen(',c:\\test\\out.dat,,,',w,');第56套:给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到for(i=0;i<10;i++){fscanf(rf,"%d%d'\&m,&n);fun(m.n,zz);文件myfile4.lxt也用-1作为字符中输入结束的标志。然后将文件的内容读出显for(m=0;mvoidfun(intm.intk.intxx[])不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#inciudevoidWriteText(FILE♦);voidReadText(FILE*);main(){FILE*fp;if((fp=fopen("myfile4.txt","w',))==NULL)(/*以下代码仅供参考♦/inti,j=I,t=m+l;while(j<=k)({printf("openfail!!

904");exit(O):}WriteText(fp);fclose(fp);if((fp=fopen("myfile4.txt","r',))==NULL){prinifCopenfail!!

905M);exit(O);}/*以下完成判断素数,并存放到数组XX中*/ReadText(fp);fclose(fp);1/**********found**********/voidWriteText(FILE—1_)for(i=2;i

906Enterstringwith-1toend:

907"):

908gets(str);while(slrcmp(str,"-l")!=O){/**********found**********/fputs(2,fw);fputs("

909",fw);gets(str);I}voidReadText(FILE*fr){charstr[81];printf("

910ReadfileandoutputtoscreenAn");fgets(str,81,fr);while(!feof(fr)){/**********found**********/prinlf(H%sN-3_);fgets(str,8l,fr);)}解题思路:本题要求是把键盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:要求填写文件流的自变量名,在这个函数中,已有的语句印心(An'fw);分析可知:由于文件流变量fw在函数体没有定义过,所以本处应填*fw或an。第二处:通过while循环语句,把键盘上输入的内容,要写入到指定的文件中,键盘上输入的内容已存入字符串str变量中,因此,本处应填写sir。第三处:要把已存入文件中的内容,再从文件中读出且已存入字符串变量:str中,最后在屏幕显示出来,因此,此处应填写str。给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成•个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:7531.请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(longs,longt){longsl=10;♦t=s%10;while(s>0){s=s/100;*t=s%10*si+*t;/************found************/\TABsi=si*100;main(){longs»t;printf("

911Pleaseenters:");scanf("%Id",&s);fun(s,&t);printf('Theresultis:%ld

912'\t);}解题思路:第一处:在函数fun中使用了舞,但在函数定义时没有使用*t,所以应改为:voidftin(k)ngs.long*t)«第二处:每循环一次,si的值就乘以10,所以应改为:sl=sl*10;o***************************************************函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和仃位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12时,调用该函数后,c=1524o注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(in(a.intb.long*c)(}main(){inta.b;longc;printf("Inputa,b:M);scanf(M%d,%d",&a.&b);fun(a,b,&c);printf('Theresultis:%Id

913*\c);NONOO;NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("c:\\test\\in.dat",MrM);wf=fopenC'czWtestWout.dat'V'w");for(i=0;i

914",a,b,c);}fclose(rf):fclose(wf);1解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:#includevoidfun(inta.intb.long*c)(♦c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);Imain(){inta,b;longc;printf(''Inputa.b:w);scanf("%d.%d”.&a,&b);fun(a,b,&c);printfCTheresultis:%ld

915,\c);NONOO;}NONO()(/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b:longc;rf=fopen("c:\\test\\in.dat,',V);wf=fopen("c:\\test\\out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf."a=%d.b=%d,c=%ld

916",a.b,c);

917fclose(rf);fclose(wf):1值给max和min变量,所以应填:a[i].第二处:判断max是否小于aUl,若小于,则把a(j]赋值给max,所以应填:a(j]。第三处:判断min是否大于a(j],若大于,则把a|j]赋值给min,所以应填:a(j]。***************************************************※※※※※※※※※※※※※※※※※※※※※※※※※第57套:函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把形参a所指数组中的最大值放在a[l]元素中:再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。注意:规定ftin函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN9voidfun(inta[],intn){intij,max.min,px.pn,t;for(i=0;i3){min=a|j];pn=j;}}if(pn!=i){t=a[i];a[i]=min;a[pn]=t;if(px=i)px=pn;}if(px!=i+1){t=a[i+l];a[i+l]=max;a(px]=t;})1main(){intb[N]={9J,4.2,3.6,5.8,7},i;printf("

918Theoriginaldata:

919");for(i=0;i

920Thedataaftermoving:

921H);给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……例如,若给n输入7,该项的斐波拉契数值为:13。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includelongfun(intg)/**********found**********/switch(g);{case0:return0;case1;case2:return1;retum(tun(g-1)+fun(g-2));)main(){longfib;intn;printfC'Inputn:scanf("%dM.&n);prin(f("n=%d

922';n);fib=fun(n);printf("fib=%d

923

924,,.fib);解题思路:第一处:switch后有多余的分号。第二处:caseI后没有返回语句,也应该为return1;«所以应改为:caseI:return1:case2:relum1;。***************************************************某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中.例如,学生的成绩是:85.5,76,69585,91,72,64587.5.他的平均分应当是:78.875.注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。给定源程序:/include#defineN8typedefstruct{charnum[10];doubles|N|;doubleave;}STREC;voidfun(STREC*a)for(i=0;i

925",s.num);for(i=0;i

926M,s.s(i]);

927printf("

928ave=%7.3f

929",s.ave):NONO();1|;out=fopen("c:\\tes(\\out.da(".Mw");for(i=0;i<10;i++){NONO(){/*本函本用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*out;fun(&s[i]);fprintf(oui."%7.3f

930",s[i].ave);Ifclose(oul);intij;STRECs(10]={{"GA()05,\85.5.76.69.5.85,91.72,64.5.87.5).{"GAOOr\82.5,66,76.5,76,89,76,46.5,78.5},(,'GA002,1,72.5.56.66.5.66,79.68,46.5.58.5},{"GA(X)3",92.5,76,86.5,86,99,86,56.5,88.5},{"GA004",82,66.5.46.5.56,76,75,76.5,63.5},{"GA006",75.5,74,71.5,85,81.79,64.5,71.5},{"GA007",92.5,61,72.5,84,79,75,66.5,72.5},{,,GA008",72.5,86.73.5.80,69,63,76.5.53.5},(,'GA009',,66.5,71,74.5,70,61,82,86.5,58.5},{"GA010",76,66.5,75.5,60,76,71,96.5.93.5},}※※※※※※※※※※※※※※※※※※※※※※※※※第58套:给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参1所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个};out=fbpen("c:\\test\\out.dat",Mw");for(i=0;i<10;i++){fun(&s[i]);fprintf(out,"%7.3f

931M,s[ij.ave);}字符串复制到形参t所指字符数组中.例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh,请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正fclose(out);确的结j解题思路:本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。参考答案:#include#defineN8typedefstruct果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN80voidfun(char*s,intn,char*t)(intlen,i,j=O:len=strlen(s);/**********found**********/if(n>=len)strcpy(_1_);{charnum[10];doubles(N];doubleave;}STREC;voidfun(STREC*a)Ielse(/**********found**********/for(i=len-n;i<=len-l;i++)t|j++]=_2_;/**********Cund**********/昨_3_;inti;for(i=0;iave=a->ave+a->s[ij;a->ave/=N;1|}main(){chars[N],t[NJ;intn;printf("Enterasiring:");geis(s);printf("Entern:");scanf("%d",&n);main(){STRECs={"GA005,,.85.5.76,69.5.85,91.72,64.5,87.5};inti;fun(&s);printfCThe%s'sstudentdata:

932",s.num);for(i=Ou

933ave=%7.3An",s.ave);NONOO;)拷贝到[就M以了,所以应填:第二处:使用for循环语句,把最右边n个字符依次添加到1中,所以NONOO(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/FILE*out;intij;STRECs[10]={{"GA005",85.5.76.69.5.85.91.72,64.5.87.5},{“GA001”.82.5,66.76576,89.76,46.5.78.5}.{"GA002M,72.5,56,66.5,66,79,68,46.5,58.5},{“GA003”,92.5,76.86.5.86.99,86,56588.5),(“GA004”,82,66.5,46.5,56,76,75,76.5,63.5},{“GA006”,75.5,74,71.5,85,81.79,64.5.71.5|,{"GA007",92.5,61,72.5,84,79,75,66.5,72.5),{"GA008",72.5,86.73.5,80,69,63,76.5,53.5},{"GA009",66.5,71,74.5,70,61,82,86.5,58.5},{"GAO10176.66.5,75560.76,71,96593.5),应填:s[i].第三处:字符串操作结束,需要到t加•个字符串结束符,所以应填:Wo***************************************************给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值返回.请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intm){inti,k;for(i=m+1;;i++){

934for(k=2;k

935",n);I解题思路:第…处:判断素数的条件是一个数i除自身或1除外不被任何数k整除的数,如果•个数i被另一个数k取模,模值等于零,那么这个不是素数并退出循环体,所以应改为if(i%k=O).第二处:如果i不被循环中任•个k值不整除,那么循环结束后k的值应该等于i,所以应改为if(k=i)或if(k>=i)也可以。***************************************************请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为:35,则有4个数符合要求,它们是:1,5,7,35o注意:部分源程序在文件PROGLC文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(intx,intpp(],int*n)(1main(){intx,aa[1000].n.i;printf("

936Pleaseenteranintegernumber:

937M);scanf(M%d",&x);fun(x.aa.&n);fbr(i=0;i

938");}fclose(fp);1解题思路:本题是求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这咋除数的个数通过形参n返回。参考答案:#includevoidfun(intx,intpp[],int*n)(inti;*n=0;for(i=l;i<=x;i++)if((x%i=0)&&(i%2))pp((*n>++]=i;}main(){intx,aa[1000],n,i;printf(,r

939Pleaseenteranintegernumber:

940");scanf(M%d",&x);fun(x,aa,&n);fbr(i=0;i

941");NONO();)NONO()(/*木函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intX,aa[1000],n.i.j;FILE*fp;fp=fopen("c:\\test\\out.dat",nw");for(j=0;j<10;j++)(x=30+j;fun(x,aa,&n);for(i=O;i

942");1fclose(fp):}※※※※※※※※※※※※※※※※※※※※※※※※※第59套:给定程序中,函数fun的功能是:在3X4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如,有下列矩阵:12134781063597程序执行结果为:find:a[2][2]=9请在程序的下划线处填入正确的内容并把卜划线删除.使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!给定源程序:/include#defineM3#deflneN4voidfun(int(*a)[N]){inti=0J.find=0,rmax,c,k;while((i

943"a,c,a[i][c]);/**********found**********/_3_;1if(!find)printfC'notfound!

944M);Imain(){intx[M][N]4j;printf("Enternumberforarray:

945M);for(i=0;i

946

947");)fun(x);}解题思路:

948木题是在矩阵中找出在行上最大、在列上最小的那个元素。第一处:找出行上最大的数,并该位置j(列)保存在c中,所以应填:jc第二处:使用while循环语句和控制变量find,如果该数不是列是最小数,那么把find置0,所以应填:0«第三处:i是while的控制变量,所以每做一次循环,该数均要加1»所以应填:i++。***************************************************给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。2*23*3m*m例如,若m中的值为:5,则应输出:0.536389。请改正程序中的错误,使它能得出1E确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intm){doubley=1.0;inti;/**************Cund**************/fbr(i=2;i

949Theresultis%lf

950",fun(n));)解题思路:第一处:使用for循环计算公式,必须计算到m,所以应改为fbr(i=2;i<=m;i++)。第二处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为y-=l/(i*i)。***************************************************m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低丁•平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为:10、20>30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为:10、20、30、40。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(intscore]],intm.intbelow口)(|main(){inti,n.below[9];intscore[9]=<10,20,30,40,50,60,70,80,90):n=fun(score.9.below);printf("

951Below(heaveragescoreare:");for(i=0;i

952");1fclose(rf);fclose(wf);}解题思路:木题是计算平均成绩,再把低于平均成绩的分数存入依次数组below中。参考答案:#include#includeinifun(intscored,intm.intbelowf]){floatav=0.0;inti,j=0;for(i=0;iscore[i])below[j++]=score[i];returnj;]main(){inti,n,below[9];intscore[9]=(10,20,30,40,50.60.70,80,90};n=fun(score,9,below);printf("

953Belowtheaveragescoreare:");for(i=0;i

954");}fclose(rf);fclose(wf):)※※※※※※※※※※※※※※※※※※※※※※※※※第60套:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果e注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includetypedefstruct{intnum;charname[10]:}PERSON;/**********found**********/voidfun(PERSON_1_)(/**********found**********/__2_temp;if(std[0].num>s(d[1].num){temp=std[0];std[O]=std(l];std[I|=temp;}if(std[0].num>s(d[2].num){temp=std[0]:std[0]=std[2];std[2]=temp;}if(std|1].num>std[2].num)

955{temp=std[1];std[l]=std[2];std[2]=temp;}1main(){PERSONstd|]={5,,,Zhanghu,,.2,,,WangLi",6,"LinMin"};inti;/**********Cund**********/fun(_3^);printf("

956Theresultis:

957M);for(i=0;i<3;i++)printf("%d,%s

958".s(d[il.num,std[i].name);}解题思路:本题是要求对结构体数组中的三个元素按num成员升序排列。第一处:由于在函数体fun中.已经使用了std变量,所以应填:*s(d,第二处:由于(emp是存放交换记录的中间变量,所以应填:PERSONo第三处:函数的调用,所以应填:std。***************************************************给定程序MOD11.C中函数fun的功能是:将m(iWmWIO)个字符串连接起来,组成一个新串,放入pl所指存储区中。例W:把3个用:"abcVCD\”EF•连接起来,结果是"abcCDEF”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(charstr(][10],intm,char*pt)/************foun(j************/Intk,q.i;for(k=0;k

959Pleaseenterm:");scanf("%d",&m):gets(s[O]);printf("

960Pleaseenter%dstring:

961",m);for(h=0;h

962Theresultis:%s

963M,p);I解题思路:第一处:保留字int错写成Im。第二处:字符数组的字符串书写格式错误。***************************************************程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),函数的功能是:使数组左下三角元素中的值全部置成0O例如:a数组中的值为I197110971a=l238l则返回主程序后a数组中的值应为100811456110001注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#include#defineN5intfun(inta[][N])(}main(){inta[Nl[N]ti,j;printf(*******Thearray*****

964M);for(i=0;i

965");}NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,a[5][5];rf=fopen("c:\\tesi\\in.dat,,,,,r,');wf=fopen("c:\\test\\out.dat","w");for(i=0;i<5;i++)

966for(j=0:j<5;j++)fscanf(rf,"%d",&a[i][j]);fun(a);for(i=0;i<5;i++)(for(j=O;j<5;j++)fprintf(wf.a[i][j]);fprintf(wf,"

967");}注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:fclose(rf);#includefclose(wf);#includeI解题思路:本题是利用两重循环给二维数组左下三角元素中的值全部置成0・参考答案:#include#include#defineN5charfun(charch){/**********found**********/if((ch>='a)_1_(ch<='z))returnch-'a'+'A';if(isupper(ch))/**********found**********/returnch+'a:2;/**********found**********/return3;}main()intfun(inta[][N])({charcl,c2;printf("

968Theresult:

969");inti,j;for(i=0;i

970",c1.c2);cl=W;c2=fun(cl);printf("cl=%cc2=%c

971",cl,c2);cl=8;c2=fun(cl);main(){inta(NHN],i,j;printf("*****Thearray*****

972N);for(i=0;i

973".cl.c2);}解题思路:第•处:判断形参ch是否是小写字母,所以应填:&&。第二处:小写字母与大写字母的ASCH值相差为32,所以应填:‘A,或65o第三处:返回处理后的形参ch,所以应填:ch。Jfun(a);printfCTHERESULT

974H);***************************************************给定程序MODII.C中函数fun的功能是:给维数组a输入任意4个for(i=0;i

975");}整数,并按下例的规律输出。例如输入1、2、3、4,程序运行后将输出以下方阵。41233412NONO();I23411234NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,a(5][5];rf=fopenC'cAMestWin.dat".^");wf=fopenC'crWtestWout.dat'V'w");for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,*%d*,&a[i]Q]);请改正函数ftin中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数、不得增行或删行,也不得更改程序的结构!给定源程序:/include#defineM4/**************f()und**************/voidfun(inta){intijkm;printf("Enter4number:");for(i=0;i

976

977Theresult:

978

979M);fclose(rf);for(i=M;i>0;i-)fclose(wf);I{k=a[M-l];for(j=M-lj>0y-)※※※※※※※※※※※※※※※※※※※※※※※※※第61套:函数fun的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应的大写英文字母:若ch中是大写英文字母,则转换成对应的小写英文字母:若是其它字符则保持不变:并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。/**************tbund**************/aa[jl=aU-n;a|0]=k;for(m=0;m

980

981");}

982解题思路:第一处:在函数fun体中,a是个整型数组,所以形参a应定义为指针型整数变量。第二处:变量书写错误,aa应为a。***************************************************请编写一个函数fun.它的功能是:计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n的值不大于1000。例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includeintfun(intn)]Imain(){intn,sum;printf("Inputn:");scanf("%d".&n);sum=fun(n);printf("sum=%d

983",sum);NONOO;}NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;in(i,n.sum;rf=fopenC'ciWtestWin.dat'V'r");wf=fopen("c:\\test\\out.dat,',',w");for(i=0;i<10;i++)(fscanf(rf,"%d",&n);sum=fun(n);fprintf(wf."%d=%d

984",n,sum);)fclose(rf):fclose(wf):)解题思路:本题是考察考生怎样利用循环来求出一个数n的所有(除I和自身外)因子i并求出它们的和s作为函数值返回.判断因子的条件是:n%i=0,(i是大于1且小于n中所有的正整数)。参考答案:#includeintfun(intn)(ints=0,i;for(i=2;i

985".sum);NONO();}NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf.*wf:inti.n,sum;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\Mes〔\\oul.dalY'w");for(i=0;i<10;i++){fscanf(rf,*%dw,&n);sum=fun(n);fprintf(wf,"%d=%d

986",n.sum);fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第62套:给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符申为:abcdefgh.执行结果为:ahcbedgf.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#inc!udevoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!=AO':i++)n++;/**********found**********/iRn%2==0)k=n-_1_;elsek=n-2;/**********found**********/c=_2__;for(i=k-2;i>=l;i=i-2)s[i+21=s[i];s[l]=_3_;1main(){chars[801="abcdefgh";printf("

987Theoriginalstringis:%s

988",s);fun(s);printf("

989Theresultis:%s

990M,s);}解题思路:第•处:首先判断字符串的长度是奇数还是偶数,如果是奇数,则k=n-L所以应填:1。第二处:取字符串最后一个奇数位的字符,并由变量c保存,所以应填:s[k]0第三处:第1位奇数位用最一个奇数位字符替换,所以应填:c。给定程序MODI1.C中ftm函数的功能是:求s=aa...aa-...-aaa-aa-a(此处aa…aa表示n个a,a和n的值在1至9之间)例如a=3»n=6»则以上表达式为:s=333333-33333-3333-333-33-3其值是:296298a和n是fun函数的形参,表达式的值作为函数值传回main函数。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:/includelongfun(inta,in(n){加j;longs=0,t=1;for(j=0;j

991PIeaseenteraandn:");scanf(M%d%dM,&a,&n);printf("Thevalueoffunctionis:%ld

992H,fun(a.n));}

993解题思路:第一处:根据f。!•循环计算I的值可知,变量【的初值不正确,应为0.第二处:每次循环都是取I除以10的值,而不是取余数,所以应改W10;。请编写一个函数voidfun(char*(t.intpp[l),统计在U所指字符串中区到N26个小写字母各自出现的次数,并依次放在pp所指数组中。例如,当愉入字符串:abcdefgabcdeabc后,程序的谕出结果应该是:33322110000000000000000000注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fiin的花括号中填入你编写的若F语句。给定源程序:#include#includevoidfun(char*tt,intpp[|)(}main()(charaa[1000]:intbb[26],k,n;printf("

994Pleaseenteracharstring:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26;k++)printf(M%dbb[kl);printf('

995M);NONO();}NONO(){/♦本函数用于打开文件,输入测试数据,调用fun函数,愉出数据,关闭文件。*/charaall(MX)J;intbb[26].k,n,i;FILE*rf,*wf;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\(est\\out.dat,,,',w");for(i=0;i<10;i++){fscanf(rf,aa);fun(aa,bb);for(k=0;k<26;k++)fprintf(wf,H%d",bb(k]);fprintf(wf,'An*');)fclose(rf);fclose(wf);解题思路:本题是考察考生在给定的字符串中统计出26个小写字母的次数并存入到指定的数组中且由形参返同。其中数组下标的位置可以通过某•个字符的ASCII值减去97或直接减Z也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为b-'a'=l,就是实际存放的位置。参考答案:/include#includevoidfun(char*(t,intpp[])[char*p=tt;inti;for(i=0;i<26;i++)pp[i]=0;while(*p){ifCp>=a'&&*p<='z')pp|*p-'a']+=1;p++;1}main()(charaa[1000];intbb[26],k,n;printf("

996Pleaseenteracharstring:");scanf("%s",aa);fun(aa.bb);for(k=0;k<26;k++)printf(M%dbb[k]);prinlf("

997M);NONO();}NONO(){/*本函数用丁•打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charaa|1000];intbb[26],k,n.i;FILE*rf,*wf;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dat","w");for(i=0;i#defineN4voidfun(int(*t)[N],intm)

998{inii.j;/**********found**********/for(i=0;kN:—1—){fbr(j=N-1-m;j>=0;j~)/**********found**********/Uillj+一2―MiJUl:/**********foijnd**********/for(j=0;j<_3_;j++)t[i]Ul=O;I)Error:Breakstatementmissing;infunctionfun在函数fun中break语句缺少;。这种题型只要通过编译即可发现程序的错误所在。***************************************************编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。迭代步骤如下:(1)取xl初值为0.0:(2)x0=xl,把xl的值赋给x0:(3)x1=cos(x0)»求出•个新的xl;main(){intt[]|N]=|21J2,l3,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;printf("

999Theoriginalarray:");for(i=0;i

1000M);(4)若x0-xl的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);<5)所求xl就是方程cos(x)-x=0的一个实根,作为函数便返回。程序将输出结果Root=0.739085oJprintf("Inputm(m<=%d):",,N);scanf("%d".&m);fun(t.m);注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数funprintf("

1001Theresultis:

1002M);for(i=0;i

1003M);}的花括号中填入你编写的若干语句。给定源程序:#include#includefloatfun(){1解题思路:第一处:fbr循环变量的增量,所以应填:i++。第二处:由于右移m个位置,所以应填:mo第三处:左边m列均置于0,所以for循环的终止值应为m。}main()(prin(f("Root=%f

1004",fun());NONOO;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。***************************************************给定程序MODI1.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。若high的值为:100,则函数的值为:732。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeFILE*wf;wf=fopen(',c:\\(est\\out.dat","wM);fprintf(wf,M%An",fun());fclose(wf);)解题思路:本题是根据给定的公式及条件来计算方程的一个实根。参考答案:/include#includefloatTun()#includeintfun(inthigh){intsum=0.n=0,j,yes;while((high>=2)&&(n<10){yes=1;for(j=2;j<=high/2;j++)(floatxO,x1=0.0;do{x0=xl;xl=cos(x0);}while(fabs(x0-x1)>O.(XMXX)1);returnx1;if(high%j==O)(/************砧und************/main()yes=0;break1{printf("Root=%f

1005",fun());if(yes){sum+=high;n++;}high-:1NONO0;}NONO()relumsum;I{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/main()]FILE*wf;wf=fopen("c:\\tes(\\out.dat","wH);printf("%d

1006M,fun(100));fprintf(wf,"%f

1007",fun());解题思路:第一处:括号没有匹配。Error:Whilestatementmissing)infunctionfun在函数fun中While语句缺少)。第二处:缺少分号.fclose(wf);}

1008※※※※※※※※※※※※※※※※※※※※※※※※※第64套:给定程序中,函数fun的功能是:将a所指3X5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例如,有下列矩阵:123451234512345若k为2,程序执行结果为345123451234512请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#deGneM3#defineN5voidfun(inl(♦a)[N],intk){inti.j.p.temp;/**********f()und**********/fbr(p=l;p<=_1_:p++)for(i=0;i

1009

1010");for(i=0;i

1011

1012");for(i=0;i

1013,');解题思路:第一处:外循环p的终止变量的值,试题要求第k列左移,所以应填:k.第二处:矩阵共N歹IJ,所以应填:N-lo第三处:把存放在临时变量temp中的值,放到a[i][N/]中,所以应填:lemp。***************************************************给定程序MODI1.C中函数fun的功能是:根据形参m的值(2Wm<9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入21若输入4则输出:I则输出:121123424124681369121481216请改正程序函数中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#inc!ude#defineM10fun(int**a,intm){intj,k;for0«O;j

1014M);)}解题思路:第一处:在函数体fun中可知,a是一个字符串数组型变量,所以应改为:fun(intintm)o第二处:根据输出的结果可知,应改为:a[j][k>(k+l)*(j+l);.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的卜位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12.调用该函数后,c=5241。注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数hin的花括号中填入你编写的若「语句。给定源程序:#includevoidfun(inta,inib.long*c)(}main(){inta.b:longc;printf("Inputa.b:M);scanf("%d%dM,&&&b);fun(a.b,&c);printf("Theresultis:%ld

1015M,c);NONO();INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a.b;longc;rf=fopen(''c:\\test\\in.dat",',r'');wf=fopen("ciWtestWout.dat'V'w");for(i=0;i

1016",a,b,c);}fclose(rf);fclose(wf);1

1017解题思路:本题是给出两个两位数的正相数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:#includevoidfun(inta,intb,long*c)]main(){intx[MKN]=({1.2.310,11.12}),ij;printf("Thearraybeforemoving:

1018

1019");fbr(i=O;i

1020

1021,r);main(){inta,b;longc;printf(wlnputa,b:");scanf("%d%d”,&a,&b);fun(a,b,&c);printf('Theresultis:%ld

1022",c);NONOO;}fun(x,2);printf("Thearrayaftermoving:

1023

1024M);for(i=0;i

1025

1026°);1INONO(){/*本函数用于打开文件,输入数据,调用函数,检出数据,关闭文件。*/FILE*rf,*wf;inii,a.b;longc;rf=fbpen("c:\\test\\in.dat","r");wf=fopen("c:\\test\\out.dat","w");for(i=0;i<10;i++){fscanf(rf,&a,&b);fun(a,b.&c);fprintf(wf,"a=%d,b=%d,c=%ld

1027",a,b,c);|解题思路:第一处:变量k在函数体fun中已经使用,所以应填:匕第二处:共N行,所以应填:No第三处:变量值交换,所以应填,a[k)[i]・***************************************************给定程序MODI1.C中函数fun的功能是:读入一个字符串(长度V20),将该字符串中的所有字符按ASCH码升序排序后输出。例如,若输入:edcba,则应输出:abcde。请改正程序中的错误,使它能统计出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(chart|])fclose(rf);fclose(wf);(chare;inti,j;1※※※※※※※※※※※※※※※※※※※※※※※※※第65套:给定程序中,函数fun的功能是:将a所指4X3矩阵中第k行的元素与第0行元素交换。例如,有下列矩阵:12345678910II12若k为2,程序执行结果为:789456123101112fbr(i=strien(t);i;i-)for(j=0;j

1028Pleaseenteracharacterstring:");gets(s);请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeprintf('AnXnBefbresorting:

1029\',%s\'M,,s);fun(s);printf("

1030Aftersortingdecendingly:

1031s);}#defineN3#defineM4/**********f()und**********/voidfun(int(*a)[Nl,int_!_){intij,temp;/**********found**********/for(i=0;i<_2_;i++){temp=a[0][i];/**********found**********/a[0][i]=_3_;a[k][i]=temp;解题思路:第一•处:外for循环的初始值应是strlen(t)-l。第二处:由于是按升序排序,所以应ifdUNU+iJ)-***************************************************请编写一个函数fun,其功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4EFg",则应输出"aBc4EFg"。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括

1032号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*ss)(Ivoidmain(void)(charprintf(H

1033Pleaseenterancharacterstringwithin50characters:

1034");gets(tt);printf("

1035

1036Afterchanging,thestring

1037\M%s\M,',tt);fun(tt);printf("

1038becomes

1039tt);NONO();)NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/chartt[5l],ch:FILE*rf,*wf;intlen,i=0;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dar',"w");while(i<10){fgets(tt,50,rf);len=strlen(tt)-1;ch=tt[len];if(ch==

1040'IIch==OxIa)tt|len]=0;fun(tt);fprintf(wf,tt);i++;fclose(rf);fclose(wf);}解题思路:本题是考察考生在字符串指定位置上的字母转换为大写。给出的程序是由i来控制字符串所在的位置,字符串指针p是指向形参ss,再使用while循环语句对p进行控制来判断字符串是否结束,在循环体中使用if条件语句来判断位置i是否为奇数且p所指的当前字符是否为言至N的字母,如果满足这两个条件,则把该小写字母转换成大写字符,小写字母。大写字母的差是32,所以只小写字母减去32,即可得到该字母的大写字母,且转换后的字母仍存放到原字符串的位置上,转换结束后,最后通过形参ss返回已转换后的字符串。参考答案:#include#includevoidfun(char*ss)(char*p=ss;inti=0;while(*p){i«(i%2)&&(*px'a,&&*p<=N))*pv32;P++;i++;)returnss;}voidmain(void)chartt[51];printf("

1041Pleaseenterancharacterstringwithin50characters:

1042");ge(s(tt);printf("

1043

1044Afterchanging,thestring

1045V,%s\M",tt);fun(tt);printf("

1046becomes

1047\"%s\,"',tt);NONO();}NONO()/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/chartt[51],ch;FILE*rf,*wf;intlen,i=0;rf=fopen(',c:\\test\\in.dat","r");wf=fopen("c:\\test\\out.dat",0w");while(i<10){fgets(tt,50,rf);len=strlen(tt)-I;ch=tt[len];iRch==

1048'IIch==Oxla)tt[len)=0;fun(tt);fprintf(wf,"%s

1049M,tt);i++;}fclose(rf);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第66套:给定程序中,函数ftin的功能是:将形参sid所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:/includetypedefstruct{charname[10];intage;}STD;STDfun(STDsld[|.intn){STDmax;inti;/**********f0ijnd**********/max=I;fbr(i=l;i

1050Theresult:

1051");/**********found**********/printf("

1052Name:%s.Age:%d

1053M,3,max.age);1解题思路:本题是从结构体中找出年龄最大的记录。第一处:给存放最大者max赋初值,所以应填:*stdo第二处:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age))第三处:输出最大者的姓名和年龄,所以应填:max.name.给定程序MOD”.C中函数ftin的功能是:实现两个整数的交换。例如给a和b分别输入:60和65,输出为:a=65b=60请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********found**********/voidfun(inta.b){intt;/**********found**********/t=b;b=a;a=t;Imain(){inta,b;printf("Entera.b:");scanf("%d,%d,\&a.&b);fun(&a,&b);prinlf(,,a=%db=%d

1054",a,b);1解题思路:第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int*a,int*b。第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为(=*b;*b=*a;*a=t;<»***************************************************请编•个函数voidfun(inl],intpp[N]),it指向•个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指♦维数组中。二维数组中的数已在主函数中赋予。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句.给定源程序:#include#defineM3

1055#defineN4voidfun(int111MHN].inipp(N]){}main(){intt[M](N]={{22,45,56,30),(19,33,45.38}.(20,22,66,40));intp[N],ij,k;printf("Theoriginaldatais:

1056");for(i=0;i

1057");)fun((,p);printf("

1058Theresultis:

1059");for(k=0;k

1060");NONO();NONO()(/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti.jtk,m,t[M][N],p[N];FILE*rf,*wf;rf=fopen("c:\\test\\in.dat,,,,,r'');wf=fopen(',c:\\test\\out.dat",',w");for(m=0;m<10;m++){for(i=0;i

1061");}fclose(rf);fclose(wf):}解题思路:本题是求出二维数组每列中最小元素,并依次放入pp所指一维数组中。参考答案:#include#defineM3#defineN4voidfun(inttt[M][N],intpp|N])(intij,min,k;for(i=0;in[j][n)(\TABmin=tt(j][i];k=j;Ippjil=(t[k][il;}}main(){intt[M][N]={{22,45,56,30),(19,33,45.38},(20.22.66.40)};intp[N],ij,k;printf("Theoriginaldatais:

1062");for(i=0;i

1063");}fun(t,p);printf("

1064Theresultis:

1065");for(k=0;k

1066fprintf(wf."

1067"):)(for(j=0y<3u++)/*********found**********/fclose(rf);scanf("%d".a[i][j]);fclose(wf);})for(i=0;i<3;i++)※※※※※※※※※※※※※※※※※※※※※※※※※第67套:给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在sum=sum+a[i][i];形参a所指数组中(此数组在主函数中已置0)。printf("Sum=%d

1068",sum);}请在程序的卜划线处填入正确的内容并把卜划线删除,使程序得出正确的结main()果。{注意:源程序存放在考生文件夹下的BLANK1.C中。fun();不得增行或删行,也不得更改程序的结构!1给定源程序:解题思路:/include第•处:变量sum进行初始化,由于计算累加和,所以应为:sum=0;。#defineN20第二处:读入整型数,应使用地址读入,所以应为:scanf("%d”,&a[i]m);。voidfun(int*a)***************************************************{inti,x,n=0;编写程序,实现矩阵(3行3列)的转置(即行列互换)x=rand()%20;例如,输入下面的矩阵:1002003004005(X)600700800900程序输出:/**********found**********/1004()0700while(n<_1_)2(X)500800{for(i=0;imain()intfun(intarray⑶⑶)(intx|Nl={0),i;(fun(x):}printf("Theresult:

1069");main()for(i=0;i

1070");intarray[31[3]={{100,200,300}.}{4(X),500,600},printf("

1071

1072");(700,800.900));1for(i=0;i<3;i++)解题思路:{forg=0j<3;j++)第一处:一共产生20个随机数,所以应填:Noprintf(w%7d",array[i]|j]);第二处:要求产生不同的20个整数,所以采用for循环对已产printf("

1073");生的随机数进行比较,是否有}fun(array);printf("Convertedarray:

1074");相同数,如果有相同,则退出循环体,所以应填:breako第三处:当退出循环体还是进行判断,i和n的值是否相等.for(i=0;i<3;i++)如果相等,则表示该随机整数{for(j=0u<3y++)不重复,可以存放到指定的数组中,所以应填:n。printf("%7d\array[i]UD;***************************************************printf("

1075");给定程序MODH.C中函数fun的功能是:先从键盘上输入一个|3行3列矩阵的各NONOO;个元素的值,然后输出主对角线元素之和。请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。1注意:不要改动main函数,不得增行或删行,也不得更改程NONOO序的结构!(给定源程序:/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,#include关闭文件。*/intfiin()intij,array[3][3];(FILE*rf,*wf;inta[3][3],sum;rf=fopen("c:\Mcsi\\in.dai","r");intij;wf=fopen("c:\\test\\out.dat","w,');/*********found**********/for(i=0;iv3;i++)for(j=O;j<30++)for(i=0;i<3;i++)

1076fscanf(rf,w%dw,&anay[i]Q]);fun(array);for(i=0;i<3;i++){for(j=OJ<3J++)fprintf(wf,"%7d",array[i][j]);fprintf(wf,"

1077");}请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:fclose(rf);#includefclose(wf);}#defineM5#defineN20解题思路:本题是解决矩阵的转置问题。参考答案:#includeintfun(intarray[3][3])/**********found**********/intfiin(char(*ss)1,int*n){intI,k=0,len=();for(i=0;i*n){/**********found**********/for(i=0;i<3;i-H-)for(j=0;j<3;j-H-)array[i](jj=arr(jni];_3_;k=i;main()intij;intarray[31[3]={{100.200.300).{4(X),500.600),{700,800.900}};for(i=0;i<3;i++)(for(j=0y<3;j++)printf("%7d".array[i][j]);printf("

1078");}}retum(k);}main(){charss[M]rNX,lshanghai'\NguangzhouVbeijing","tianjing\Ncchongqingw);intn,k,i;}fun(array);printf("Convertedarray:

1079");for(i=0;i<3;i++){for(j=0J<3;j++)printf("%7d",array[i][j]);printf("

1080Theoriginalstringsare:

1081M);for(i=0;i

1082Thelengthoflongeststringis:%d

1083".n);printfCAnThelongeststringis:%s

1084'\ss[kj);}解题思路:第一处:形参ss的定义,它是一个字符串数组的定义,其宽度为N,所以应填:Noprintf("

1085");I第二处:取第一个字符串的长度赋值给变量*n,所以应填:len。第三处:每循环一次,判断当前字符串的长度是否大于*n,如果大于,NONOO;)则*n=lcn。***************************************************NONO()(给定程序MODI1.C中fun函数的功能是:根据形参m,计算如卜公式的值。/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intij,array[3][3];FILE*rf,*wf;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\Mes〔\\oul.dalY'w");for(i=0;i<3;i++)for(j=0U<3J++)fscanf(rf,"%d".&array[i][j]);fun(array);for(i=0;i<3;i++){for(j=0J<3;j++)fprintf(wf,"%7d",array[i][j]);fprintf(wf,"

1086");)11111=1+++++234m例如,若输入5,则应输出2.283333。请改正程序中的错误或在F划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#inciudedoublefun(intm)(doubleI=1.0;inti;fclose(rf):fbr(i=2;i<=m;i++)fclose(wf);}/**********Cund**********/t+=1.0/k;※※※※※※※※※※※※※※※※※※※※※※※※※/**********found**********/第68套:给定程序中,函数fun的功能是:求ss所指字符数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符中数组中共有M个字符串,且串长

1087Pleaseenter1integernumber:");scanf(M%dK.&m);

1088printf("

1089Theresultis%lf

1090,\fun(m));)解题思路:第一处:在此变量k没有定义过,再根据公式和for循环语句中所用的变量可知,这里的k实际上是i。第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填returnt;。***************************************************编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如I,假定输入的字符串为:asdasasdfgasdaszx67asdmklo,子字符串为:as,则应输出6・注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(char*s(r,char*substr){)main()(charstr[81],substr[3];intn;printf("输入主字符串:");ge(s(str);primf("输入子字符串:”);geis(subslr);puts(str);puts(substr);n=fiin(str,substr);printf("n=%d

1091,',n);NONOO;)NONOO]尸请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charstr[81].substr[3],ch;intn.len,i=0;HLE*rf,*wf;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\(est\\out.dat",Mw");while(i<5){fgets(sir,80.rf);fgets(substr,1(),rf):len=slrlen(substr)-1;ch=substr[len];if(ch=WIIch=Oxla)substr(len)=0;n=fun(str,substr);fprintf(wf,"%d

1092",n);i++;fclose(rf);fclose(wf);I解题思路:本题是统计一个字符串在另一个字符串中出现的次数。程序流程如下:1.利用strstr函数,首先找到第一个出现的位置。2.利用while循环和stEr依次查找所有出现的位置,并进行统计,并把统计结果作为函数值返回。strstr(constchar*sl,constchar*s2)是字符串s2在si中出现的位置,如果找到则返回位置指针。参考答案:/include#includeintfun(char*str,char*substr)(intent=0;char*p=str,*q;while(*p)(q=strstr(p,substr);if(q==NULL)break;p=q+strlen(substr);cn(++:}returnent;Imain()Icharstr[81J,substr[3];intn;printff输入主字符串:");gecs(str);prinif("输入子字符串:”);gets(substr);puts(str);puts(substr);n=fun(str,substr);printf('*n=%d

1093",n);NONO();}NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charstr[81],substr[3],ch;intn.len.i=0;FILE*rf,*wf;rf=fopen("c:\\test\\in.dat;wf=fopen(,'c:\\(es(\\out.dat",''w'');while(i<5){fge(s(s(r,80.rf);fgets(substr.10.rf);len=strlen(substr)-1;ch=substr[len]:if(ch=

1094'IIch==0xla)substrflen]=0;n=fun(str,substr);fprintf(wf,"%d

1095'',n):i++;}fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第69套:给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。例如,主函数中输入字符申:32486和12345,在主函数中输出的函数值为:44831。请在程序的卜划线处埴入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include#defineN9longctod(char*s){longd=0;while(*s)i^isdigit(*s)){d=d*10+*s-_l_;

1096/**********found**********/_2_;)returnd;Ilongfun(char*a,char*b)]/**********found**********/return_3_;1main(){charsl[NU2[N];do{printf("Inputstringsi:");gets(sl);}while(strlen(sl)>N);do{printf("Inputstrings2:gets(s2);}while(s(rlen(s2)>N);printfCTheresultis:%ld

1097".fun(sl,s2));}解题思路:第•处:数字字符与其对应的数值相差48,所以应填:48。第二处:到字符串下一个位置,所以应填:SH。第三处:返回两个数字字符串经转换成数值的和,所以应填:ctod(a)+ctod(b)o***************************************************给定程序MODI1.C中fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符小s输入:AAaaBBbl23CCccccd,则应输出结果:upper=6,lower=8o请改正程序中的错误,使它能计兑出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********found**********/voidfun(char*s,inia,intb)(while(*s){if(*s>='A'&&*s<=Z)/**********found**********/♦a=a+l;if(*s>=H&&*s<='z,)/**********found**********/*b=b+I;s++;1)main()(chars[100J;intupper=0,lower=0;printf("

1098Pleaseastring:");gets(s);fun(s,&upper,&lower);printf("

1099upper=%dlower=%d

1100",upper,lower);解题思路:第一处:在等式右边应写*a。第二处:在等式右边应写*b。***************************************************请编…个函数fun,函数的功能是使实型数保的2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567.则函数返回1234.570000:实型数为1234.564,则函数返回1234.560000。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数tun的花括号中填入你编写的若干语句。给定源程序:#includefloattiin(floath){}main(){floata;printf("Entera:");scanf("%f\&a);printf('Theoriginaldatais:");printf('^fXnXn';a);printf(,Theresult:%f

1101",fun(a));NONO();1NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;floata;FILE*rf,*wf;rf=fopen("c:\\test\\in.dat","r");wf=fopen(',c:\\test\\out.dat".',w");for(i=0;i<20;i++)(fscanf(rf,&a);fprintf(wf,,'%f

1102M.fun(a));Ifclose(rf);fclose(wf);}解题思路:本题主要是考察考生保留小数点后两位数并对第三位进行四舍五入。方法是先把这个数乘以100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。参考答案:#includefloatfun(floath)(longw;w=h*100+0.5;return(float)w/100;1main(){floata;printf("Entera:");scanf(&a);printf("Theoriginaldatais:");printf(H%f

1103

1104".a);printf('Theresult:%f

1105",fun(a));NONO();)NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inii;floata;FILE*rf,*wf;rf=fbpen("c:\\(est\\in.dat',.',rM);wf=fopen("c:\\test\\out.dat","w");for(i=0;i<20:i-H-)(fscanf(rf,"%r,&a);fprintf(wf,"%An,\fun(a));1fclose(rf);fclose(wf):}※※※※※※※※※※※※※※※※※※※※※※※※※第70套:给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返同:并将大于平均值的数放在形参y所指数组中.在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:4632404548请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN10doublefun(doublex(],double*y){iniij:doubleav;/**********found**********/av=_l_;/**********found**********/for(i=0;iav)y[_3_]=x[i];y[j]=-h

1106returnav;}main(){inti;doublex[N].y[N];for(i=0;i

1107",fiin(x,y));for(i=0;y[i]>=0:i++)printf("%5.1fprintfCAn");)解题思路:第•处:计算平均值时,需对变量av进行初始化为0。第二处:利用for循环计算其平均值,所以应填:x[i]/No第三处:把数组x中元素值大于平均值的数依次存放到形参y所指的数组中其中位置由变量j来控制,所以应填:j-H-o***************************************************给定程序MODII.C中函数fun的功能是:根据整型形参m,计克如下公式的值。1111100*100200*200300*300m*m例如,若m=2000,则应输出:0.000160o请改正程序中的语法错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************found************/fun(intm){doubley=0,d;inti;/************found************/for(i=100,i<=m.i+=100){d=(double)i*(double)i;y+=1.0/d;}retum(y);)main(){intn=2000;printf("

1108Theresultis%lf

1109H.fun(n));I解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要im或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double等定义。如果使用float则精度不够,所以在这里不能使用float定义。第二处:在for循环中,两个不可行略,在此把“;”错写成***************************************************已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s)])main(){STUa[N]={{"A0rr,81}.{“A02”,89},{"A03",66},{"A04",87}.{"AO5177},{''A06",90},{HA07",79},{"A08';61},{"A09",80},{,,A10,1,71)},m;inti;printf("*****Theoriginaldata*****

1110,1);for(i=0;i

1111",a[i].num,a[i].s);fun(a,&m):printf(',♦♦♦**THERESULTprintf("Thelowest:%s,%d

1112,'.m.num.m.s);NONO();1NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。HLE*rf.*wf;STUa(N],m;inti;rf=fopen("c:\\test\\!n.dat',,"r,');wf=fopen("c:\Mesi\\oul.dar',"w");for(i=0;i<10;i++)fscanf(rf,"%s%d",a[i].num,&a[i].s);fun(a,&m);fprintf(wf,"Thelowest:%s,%d

1113",m.num,m.s);fclose(rf);fclose(wf);)解题思路:本题考察学生在一组记录中找出最低分。我们使用for循环语句来解决这个问题。参考答案:#include#include#deflneN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s)inti,min=a(0].s,j=0;for(i=I;ia(i].s){/*如果最低分min仍大于当前分*/j=i;/*记住位置*/min=a[i].s;/*把当前分赋值给min*/}*s=a|j]:main(){STUa[N]={{"A01181},{“A02”,89},{"A03”,661.{,'A04"<87},{"A05",7{"A06",90},("A07"<79},{"A08".61},{,^09".80},{^10",71}),m;inti;printf(*******Theoriginaldata*****

1114");for(i=0;i

1115M,a[i].num.a[i].s);fun(a,&m);printf("*♦♦**THERESULT*****

1116");printf("Thelowest:%s,%d

1117",m.num,m.s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,愉出数据,关闭文件。*/FILE*rf,*wf;STUa[N],m;inti;rf=fopenC'ciWtestWin.dat'W);wf=fopen("c:\\test\\out.dat","w,');forfi=0;i<10;i++)fscanf(rf,"%s%d0,a[i].num.&a[i].s);fun(a.&m):fprintf(wf,"Thelowest:%s,%d

1118",m.num,m.s);fclose(rf);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第71套:给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh5##43df,处理后新字符串为:123543asdfgh##df■:请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include#includechar*fun(char*s){inti,j.k,n;char*p,*t:n=strlen(s)+l;t=(char*)malloc(n*sizeof(char));p=(char*)mall(x:(n*sizeof(char));j=0;k=0;for(i=0;ivn:i++){if(isdigit(s(i])){

1119/**********found**********/PLI—]=s[i];j++;)else{t[k]=s[i];k++;J}/**********found**********/for(i=0;i<_2_;i++)pU+i]=t[i];p|j+k]=O;/**********found**********/return_3_;}main(){chars[80];printf("Pleaseinpul:");scanf("%s",s);printf("

1120Theresultis:%s

1121",fun(s));}解题思路:第•处:函数中申请了两个内存空间,其p是存放数字字符串,t是存放非数字字符串,根据条件可知,p依次存放数字字符串,其位置由j来控制,所以应填:第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:ko第三处:最后返回p的首地址即可,所以应填:p。***************************************************给定程序MODI1.C中函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为“abcdefg",b所指字符串中的内容为“1234”时,c所指数组中的内容应该为,4b3c2dlefg":而当a所指字符串中的内容为“1234",b所指字符串中的内容为"abcdefg”时,c所指数组中的内容应该为"Ig2f3e4dcba"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*a,char*b,char*c)inti,j;charch;i=0;j=strlen(b)-l;/**********"found************/while(i>j){ch=b[il;b[i]=b[j];bU]=ch;i++;j-;}while(*aII*b){

1122/************found************/参考答案:If(*a)#include{*c=*a;C++;a++;|#includeif(*b)voidfun(char*s,chart(]){*c=*b;C++;b++;)|Iinti,j=0;♦c=0;fbr(i=0;i

1123Entersistring:");scanf("%sM,sl);(printf("

1124Enters2string:");scanf("%sw,s2);chars[100],t(100];fun(si,s2,t);printf("

1125PleaseenterstringS:"):scanf("%sM,s);printf("

1126Theresultis:%s

1127M,t);fun(s,t);)printf("

1128Theresultis:%s

1129",t);解题思路:NONOO;第•处:应该判断i是否小于j,所以应改为:while(i

1130",t);注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。}给定源程序:fclose(rf):#includefclose(wf):#include}voidfun(char*s,char([])※※※※※※※※※※※※※※※※※※※※※※※※※(第72套:I给定程序中,函数fun的功能是计算下式main();例如,若形参e的值为le-3,函数的返回值2.735678。\chars[JOOLt[100];请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确printf("

1131PleaseentersiringS:");scanf("%s",s);的结fun(s,t);果。printf("

1132Theresultis:%s

1133H,t);注意:源程序存放在考生文件夹下的BLANK1.C中。NONOO;不得增行或删行,也不得更改程序的结构!}给定源程序:NONO()#includedoublefun(doublee){inti;doubles,x;/**********found**********/s=0;i=_1_;{/♦本函数用于打开文件,输入数据,调用函数,愉出数据,x=1.0;关闭文件。*/while(x>e){charsfl00],t[100];/**********Cund**********/HLE*rf,*wf;_2_;inti;/**********的und**********/rf=fopenC'ciWtestWin.dat'W);x=(2.0*i-l)/((_3_)*(2.0*i));wf=fopen("c:\\test\\out.dat","w");s=s+x;for(i=0;i<10;i++)(}fscanf(rf,M%s",s);returns;fun(s,t);1fprintf(wf."%s

1134",t);main()I{doublee=le-3;fclose(rf);printf("

1135Theresultis:%f

1136,'.fun(e));fclose(wf);|)解题思路:解题思路:第一处:根据公式以及下而的程序,可以得出i应为0。本题是从•个字符串按要求生成另个新的字符串。我们使用第二处:根据公式以及i的初值为0,所以应填:for循环语句来解决这个问第三处:根据公式要求,所以应填:2.0*io题。***************************************************

1137给定程序M0DI1.C中函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新事放在I所指的数组中。例如,当s所指字符串为:“ABCD"时,则[所指字符串中的内容应为:"ABCDDCBA"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/************found************/voidfun(chars,chart)(inti,d;d=strlen(s);for(i=0;i

1138PleaseenterstringS:");scanf("%sM,s);fun(s,t);printf("

1139Theresultis:%s

1140M,t);)解题思路:第•处:从函数体fun中可知,两个均为字符指针型变量,应改为:voidfun(char*s,char%)a第二处:字符串结束位置错误,应改为:t[2*d>0;。***************************************************函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ascd码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:"135"。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若卜语句。给定源程序:#include#includevoidfun(char*s,chart[J)(1main(){chars[100],t[100];printfCAnPleaseenterstringS:");scanf("%sM,s);fun(s,t);printf("

1141Theresultis:%s

1142M.t);NONO();}NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],([100]:FILE*rf,*wf;inti;rf=fopenC'cAVestWin.dat",'?");wf=fopen("c:\\test\\out.dat"wM);for(i=0;i<10;i++){fscanf(rf,0%s",s);fun(s,0;fprintf(wf,"%s

1143",t);}fclose(rf);fclose(w0;}解题思路:本题是从个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。参考答案:#include#includevoidfun(char*s,chart[])(inii,j=0;fdr(i=I;i

1144PleaseenterstringS:");scanf("%s",s);fun(s,t);printfCAnTheresultis:%s

1145H,t);NONO();}NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。chars[100]tt[100];FILE*rf,*wf;inti;rf=fopen("ciWtestWin.dat",'?");wf=fopen("c:\\iest\\oul.dal","w");for(i=0;i<10;i++)(fscanf(rf,o%s",s);fun(s.t);fprintf(wf."%s

1146",t);Ifclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第73套:给定程序中,函数fun的功能是计算下式例如:若形参e的值为的・3,函数的返回值为0.551690。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include

1147doublefun(doublee)#include{inti,k;doubles,t,x;#defineM4s=0;k=l;i=2;fun(inta[][M])/**********found**********/x=_1_/4;(}/**********found**********/main()while(x_2_e){intarr(2][M]={5,8.3,45,76,-4,12,82);{s=s+k*x;printf("max=%d

1148".fun(arr));k=k*(-1);t=2*i;/**********found**********/NONO();x=_3_i++;}}returns;)NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。main()*/{doublee=le-3;FILE*wf;printf("

1149Theresultis:%f

1150",fun(e));}intarr|](MJ=<5,8,3,90,76,-4,12,82);wf=fopen("c:\\test\\out.dat,,,,'wM);解超思路:fprintf(wf,"max=%d

1151",fun(arr));第一处:根据公式,苜项应该是3.4,所以应填:3.。fclose(wf);第二处:当x大于e时,循环体才会运行,所以应填:><,}解题思路:本题是求出一个2XM整型二维数组中最大元素的值。参考答案:#include第三处:分子的值是2i+l,所以应填:2*i+lo#defineM4***************************************************fun(inta[][M])给定程序MODI1.C中函数fun的功能是:求出以下分数序列的前n项之和。和{inti,j,max=a(0n0|;值通过函数位返回到main函数。fbr(i=O;i<2;i++)23581321fbr(j=O;j

11520,fun(arr));序的结构!NONCX);给定源程序:}#includeNONO()/************found************/{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。fun(intn)*/{inta,b.c,k;doubles;FILE*wf;s=0.0;a=2;b=1;intarr[][M]={5,8,3,9O.76.-4J2,82};for(k=1;k<=n;k++){wf=fopen("c:\\test\\oul.dal","w");/************foun(j************/iprintf(wf,,,max=%d

1153",fun(arr));s=s+(Double)a/b;fclose(wf);c=a;a=a+b;b=c;}}※※※※※※※※※※※※※※※※※※※※※※※※※returns;)第74套:人员的记录由编号和出生年、月、11组成7名人员的数据已在主函数main(){intn=5;printf('AnThevalueoffunctionis:%lf

1154".fun(n));}中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在解题思路:形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件第•处:由于计算的实型值要通过函数返回,所以必须定义函的人数。数的返回类型,只要im或void请在程序的卜.划线处填入正确的内容并把卜划线删除,使程序得出正确可以省略,其他都要定义类型。由于返回是实型值,所以应在的结数名前加上double或float等定义。果。第二处:double的第1个字母错写成大写Do注意:源程序存放在考生文件夹下的BLANK1.C中。***************************************************不得增行或删行,也不得更改程序的结构!请编写一个函数fun,它的功能是:求出一个2XM整型二维给定源程序:数组中最大元素的#include值,并将此值返回调用函数。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun#defineN8的花括号中填入你编写的若干语句。typedefstruct给定源程序:(intnum:

1155intyear,month,day:}STU;intfun(STU*s(d,STU*k.intyear){inti,n=O;for(i=0;i

1156Nopersonwasbomin%d

1157",year);else{printf("

1158Thesepersonswerebornin%d

1159",year);fbr(i=O;i

1160,\k[i].num.k[i].year,k[i].month.k[i].day);}解题思路:本题是从给定的人员数据中找出年龄相同的记录存入k中,并返回符合条件的人数。第一处:断结构变量中的编号year是否相等,所以应填:std[i].yearo第二处:把符合条件的记录依次存入实参k中,所以应填:第三处:返回符合满足条件的人数,所以应填:n。***************************************************给定程序MODU.C的功能是:读入一个整数k(2WkW10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、II。请改正程序中的语法错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************f()und************/IsPrime(intn):{inti,m;m=1;fbr(i=2;i

1161Pleaseenteranintegernumberbetween2and10000:");scanf("%d”.&k);printf("

1162

1163Theprimefactor(s)of%dis(are)k);for(j=2;j<=k;j++)if((!(k%j))&&(IsPrime(j)))prinif("

1164%4d",j);printfCAn");}解题思路:第一处:函数定义的行尾有多余的分号。第二处:条件判断缺少圆括号。已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写函数fun,函数的功能是:找出成绩最高的学生记录,通过形参指针传回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN10(ypedefstructss(charnum[10];ints;}STU:fun(STUa[],STU*s)main(){STUa[N]={{"A01",8l}4"A02M,89}.(HA03".66},{"AO4",87},{"A05".77},["A06190},{"A07",79},{"A08161},{,'A09>;80}.{,,AI0",7l}},m;inti;printfC******Theoriginaldata*****

1165");for(i=0;i

1166M,a[i).num,a[i].s);fun(a,&m);printf("♦♦♦*♦THERESULT*****

1167");printf("Thetop:%s,%d

1168",m.num,m.s);NONO();)NONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;STUa[N],m;inti;rf=fopen("c:\Mesi\\in.dai",T);wf=fopenC'cAVtestWout.dat'V'w");for(i=0;i<10;i++)fscanf(rf,*'%s%d'\a[i|.num,&a[i].s);fun(a.&m);fprintf(wf."Thetop:%s,%d

1169",m.num,m.s);fclose(rf):fclose(wf);}解题思路:本题考察学生在一组记录中找出最高分。我们使用foi■循环语句来解决这个问题。参考答案:/include#include#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s)(inti,max=a[0].s.j=0;for(i=1;i

1170inti;printf("*****Theoriginaldata*****

1171");for(i=0;i

1172w,a[i].num,a[i].s);fun(a,&m);printfC******THERESULT*****

1173");printf("Thetop:%s,%d

1174'\m.num.m.s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/HLE*rf,*wf;STUa[N],m;inti;rf=fopen("c:\\test\\in.dat',."r");wf=fopen("c:\\test\\out.dat","w'');for(i=0;i<10;i++)fscanf(rf,"%s%d",a[i].num,&a[i].s);fun(a.&m);fprintf(wf,"Thetop:%s,%d

1175”,m.num,m.s);fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第75套:给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按长度由短到长进行排序。ss所指字符串数组中共有M个字符串,且串长VN.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineM5#defineN20voidfun(char(*ss)[N|){inti,j,k.n|M]:chart[Nl;for(i=0;in[jl)_2_;if(k!=i){strcpy((.ss[i]);strcpy(ss(ij,ss[k]);/**********found**********/strcpy(ss[k]3_);n[k]=n[i];)main(){charss[MHNJ=("shanghai","guangzhou",',beijing","tianjing',,,,cchongqing");inti;printf("

1176Theoriginalstringsare:

1177M);for(i=0;i

1178",ss[i]);printfCAn");fun(ss);printf("

1179Theresult:

1180");for(i=0;i

1181",ss[i]);解题思路:本题是要求按字符串的长短进行排序。第一处:内循环赋初值,应填:i+1。第二处:找出最短的一个长度,所以应填:m=j0第三处:交换字符串,所以应填:I,***************************************************给定程序MODI1.C中函数fun的功能是:判断ch中的字符是否与str所指串中的某个字符相同:若相同,什么也不做,若不同,则符其插在串的最后。清改正程序中的错误,使它能进行正确的操作。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/**********found**********/voidfun(charstr,charch){while(*str&&*str!=ch)str++;/**********found**********/if(*str=ch){str[0]=ch;/**********found**********/sirfl]=5I)main(){chars[81],c;printf("

1182Pleaseenterastring:

1183");gets(s);printf('AnPleaseenterthecharactertosearch:");c=getchar();fun(s,c);printf("

1184Theresultis%s

1185",s);}解题思路:第一处:第1个形参应该是字符串类型,所以应改为:voidfun(char*sir,charch)o第二处:应该是判断不相等,所以应改为:if(*str!=ch)。第三次:置字符串结束符错误,所以应改为:s(r[l]=0;o***************************************************请编•个函数fiin(char*s),函数的功能是把s所指字符串中的内容逆置。例如:字符串中原有的字符串为:abcdefg,则调用该函数后,串中的内容为:gfedcba.,注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#includefdefineN81fun(char*s)(}main(){chara[N];printf("Enterastring:");gets(a);printf("Theoriginalstringis:");puts(a);fun(a);printfCAn");printf("Thestringaftermodified:");puts(a);

1186NONO();)请在程序的下划线处填入正确的内容并把「划线删除,使程序得出正确的结NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inii;chara[NJ;FILE*rf,*wf;果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includerf=fbpen("c:\\(est\\in.dat',.',rM);wf=fopen("c:\\test\\out.dat","w");for(i=0;i<10:i++)(fscanf(rf.a);fun(a);fprintf(wf,"%s

1187M,a);)doublefun(intn){inti.k:doubles,t:s=0;/**********found**********/k=_l_;for(i=l;i<=n;i++){/**********foun(i**********/fclose(rf):l=_2_;fclose(wf);is=s+k*(2*i-l)*(2*i+l)/(t*t);/**********found**********/1解题思路:本题是考察考生如何对字符串中的字符进行逆序操作。给出的程序使用了一个临时变量b的字符串,使用for循环语句把原字符串的字符从尾部依次赋给临时变量b(从头开始)中,循环结束后,再把临时变量b的内容重新复制给原字符串变量即可。参考答案:#include#include#deHneN81fun(char*s)k=k*_3_;)returns;}main(){intn="l;while(n<0){printfC'Pleaseinput(n>0):");scanf("%d".&n);}printf("

1188Theresultis:%f

1189",fun(n));}(charb[N]:inti=0,j;memset(b,0.N);解题思路:第一处:k是用来管理正负号的,公式中第个值是正数,所以应填:for(j=strlen(s)-1;j>=0;j-)b[i++]=s[j];第二处:根据公式,[是2i,所以应填:2*i.slrcpy(s,b);I第三处:根据公式,第2个是负数,所以应填:(-1)。***************************************************main(){chara[N];给定程序MODI1.C中函数fun的功能是:判断一个整数是否是素数,若是返printf("Enterastring:");gets(a);printf('Theoriginalstringis:"):puts(a);fun(a);回1,否则返回0。在main。函数中,若返回1输出YES,若fun返回0输出NO!。请改iE程序中的错误,使它能得出正确的结果。注意;不要改动main函数。不得增行或删行,也不得更改程序的结构!给定源程序:/includeprintf("

1190");printf('Thestringaftermodified:");intfun(intm){intk=2;puts(a);NONO();}while(k<=m&&(m%k))/************found************/k-H-NONO()(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;chara[N|;FILE*rf,*wf;/************found************/if(m=k)return1;elsereturn0;1main()rf=fopen("c:\\test\\in.dat',.',r");{intn;wf=fopenC'ciWtestWout.dat",'^");for(i=0:i<10:i++){fscanf(rf,0%s",a);fun(a);fprintf(wf,"%s

1191",a);Iprintf("

1192Pleaseentern:");scanf("%dM,&n);if(fun(n))printf("YES

1193n);elseprintf(MNO!

1194w);}解题思路:第一处:语句后缺少分号。fclose(rf);第二处:条件判断相等的符号是fclose(wf);}***************************************************请编写个函数hin,它的功能是:找出•维整型数组元素中最大的值※※※※※※※※※※※※※※※※※※※※※※※※※第76套:给定程序中,函数ftin的功能是:计算F式前n项的和作为函数值返回。例如,当形参n的值为的时,函数返回:-0.204491。和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值.index

1195存放最大值所在元素的下标。注意:部分源程序存在文件PROGI.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,x(20],max,index,n=10,j;fp=fopen("c:\\test\\in.dat",,'r");wf=fopen("c:\\test\\out.datM,MwM);for(i=0;i

1196",max.index);给定源程序:#include#includevoidfun(inta[],intn,int*max,int*d){}fclose(fp);fclose(wf);※※※※※※※※※※※※※※※※※※※※※※※※※第77套:1main(){inti,x[20],max,index,n=10;randomizeO;for(i=0;i

1197");fun(x,n.&max.&index);printf("Max=%5d,Index=%4d

1198",max.index);NONOO;给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输入•个整数:27638496,函数返回值为:64862.请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。JNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,x[20],max,index,n=10.j;不得增行或删行,也不得更改程序的结构!给定源程序:#includeunsignedlongfiin(unsignedlongn){unsignedlongx=0;intt;fp=fopenC'ciWtestWin.dat"/'r");wf=fopen("c:\\test\\out.dat".',w'');for(i=0;i<10;i++){for(j=0;j

1199",max,index);iwhile(n){t=n%10;/**********found**********/if(t%2=—1_)/**********found**********/x=_2_+t;/**********found**********/ifclose(fp);n=_3_;fclose(wf):}!returnx:解题思路:}main()本题是找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传向。具体看参考源程序中的说明。参考答案:{unsignedlongn=-l;#include/includevoidfun(inta[|.intn.int*max.int*d)while(n>99999999lln<0){printf("Pleaseinpul(0

1200Theresultis:%ld

1201",fun(n));}解题思路:第一处:判断t是否是偶数,所以应填:0o第二处:每操作一次,x必须乘以10,再加3所以应填:IO*x。第三处:每循环一次n的值缩小10倍,所以应填:n/10o给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成•个新数放在t中。高位仍在高位,低位仍在低位。main(){inti,x[20],max,index,n=10;例如,当s中的数为:87653142时,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includerandomize。;for(i=0;i

1202M);fun(x,n.&max.&index);printf("Max=%5d.Index=%4d

1203,',max.index);NONOO;}voidfun(longs,long*t){intd;longsl=l;/************foun(j************/t=0;while(s>0){d=s%10;NONO()/************found************/

1204if(d%2=0){*t=d*si+*t;\TABsi♦=10:1voidfun(charpl[].charp2[])(char*p=pl;while(*p)p-H-;s/=10;while(*p2)♦p++=*p2++;main(){longs,t;clrscr();*p=0;printf("

1205Pleaseenters:");scanf("%Id",&s);fun(s.&t);print。'Theresultis:%ld

1206'\t);))main()(charsi[80],s2[40];printf("Entersiands2:

1207'r);解题思路:第一处:由于t是一个指针变量,赋初值的方式应为:*1=0;。第二处:d%2条件判断时应为不是0,所以应改为:if(d%2!=0)o***************************************************编写•个函数fun.它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到pl所指的字符串后。例如,分别输入下面两个字符中:scanf(M%s%sw,si,s2);prinlf(Msl=%s

1208,,,sl);printf(,,s2=%s

1209M,s2);printfC'Invokefun(sl,s2):

1210M);fun(sl,s2);primfC'Afterinvoking:

1211H);prinlf(H%s

1212",sl);NONO();)FirstString-SecondStringNONO(){/♦本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;FILE*rf,*wf;程序输出:FirslString-SecondString注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(charpi[],charp2[J)(charsl[8O],s2[4O];rf=fopen("c:\\test\\in.dat",'V1');wf=fopen("c:\\tes(\\out.dat".",w'');for(i=0;i<10;i++){fscanf(rf,M%s",si);fscanf(rf."%s".s2);fun(sl,s2);fprinif(wf,"%s

1213",si);}fclose(rf);fclose(wf);i}main(){charsi[80].s2[40];printf("Entersiands2:

1214,r);scanf(',%s%s,\si,s2);printf("sl=%s

1215",si);printf("s2=%s

1216",s2);J※※※※※※※※※※※※※※※※※※※※※※※※※第78套:给定程序中,函数fun的功能是:将NXN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:123printfC'Invokeftin(sl.s2):

1217M):fun(sl,s2);prinlf("Afterinvoking:

1218");printf("%s

1219".si);456789交换后为:321NONOO;456INONO(){/♦本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;987请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。FILE*rf,*wf;charsi[80],s2[40J;rf=fopen("c:\\test\\in.dat",',r'');wf=fopen("c:\\test\\out.dar',"w");for(i=0;i<10;i++){fscanf(rf,o%s",si);fscanf(rf,'r%s",s2);fiin(sl,s2);fprintf(wf,si);}注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4/**********found**********/fclose(rf);voidfun(int1,intn)fclose(wf);1(inti,s;解题思路:本题是不使用字符串库函数来实现两个字符串的连接。参考答案:/includefor(2—;i++){s=t[iHil;tli][i]=t[i][n-i-l];/**********found**********/

1220t[i][n-l-i]=_3_;)Imain(){intl[)(N]=(21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10),i,j;printf("

1221Theoriginalarray:

1222'*);for(i=0;i

1223Theresultis:

1224M);for(i=0;i

1225M);}}解题思路:第•处:在函数体fun中,已经使用了I整型数组,所以应填:第二处:要求填写for循环语句的初始值和终止值,所以应填:i=0;ihigh,查找结束。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#defineN10/************found************/voidfun(inta[],intm){intlow=0,high=N-l,mid;while(low<=high){mid=(low+high)/2;if(ma[mid])low=mid+1:elseretum(mid);}retum(-l);)main(){inti,a[N]={-3,4,7,9.13,45.67,89,100.180}.k.m;printfC'a数组中的数据如下巧;for(i=0:i=0)printf("m=%d,index=%d

1226",m,k);elseprintfC'Notbefound!

1227n);}解题思路:第一处:函数有返回值,不能定义为void,所以应改为:intfun(inia[].inim)<>第二处:if错定成If。***************************************************假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其它*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符小函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后.字符串中的内容应当是:ABCDEFG*******。注意:部分源程序在文件PROGLC中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a,char*p)main(){chars[8l],*t;printf("Enterastring:

1228");gets(s);t=s;while(*t)t++;t-;while(*t='*')t-;fun(s,I);printfCThestringafterdeleted:

1229");puts(s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81],*t;in=fopen("c:\Mest\\in.daT',T);out=fopen("c:\\test\\out.dat"w");for(i=0;i<10;i++){fscanf(in,"%s'\s);t=s;while(*t)t-H-:t-;while(*t=='*,)t-;fun(s.t);fprintf(out,"%s

1230",s);1fclose(in);fclose(out);}解题思路:本题是考察字符串的操作。1.利用循环扫描出p指针左边的字符是否是田,如果不是田,则依次把这些字符移动原字符串a首地址开始存放.2.把p指针所指的字符串也依次存放到字符串a中。3.最后给字符串a加上结束符。参考答案:#includevoidfun(char*a,char*p)(char*q=a;intj=0;

1231while(*q&&q

1232");gets(s);t=s;while(*t)t++;t";whiie(*t=='**)(-;ss[MnN]=(,,shanghai"."guangzhou","beijing","tianjingH."chongqing");intn,k,i;printf("

1233Theoriginalstringsare:

1234n);for(i=0;i

1235Thelengthofshorteststringis:%d

1236'

1237);printf("

1238Theshortestsiringis:%s

1239w,ss[k]);fun(s.t):1解题思路:第一处:字符串数组共有M个字符串,所以在循环中终止值应填:M第一.处:由于本题是取长度最短的字符串,*n总是保存长度最短值,printf("Thestringafterdeleted:

1240");puts(s);NONOO;所以应填:<。第三处:其中k是保存长度最短的字符串所在的行下标,所以应填:匕***************************************************JNONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti:chars[8l],*t;in=fopen("c:\\test\\in.dat","rM);给定程序MODI1.C中函数fun的功能是:将n所指字符串中的小写字母都改为对应的大写字母,其它字符不变。例如,若输入"Ab.cD",则输出"AB,CD入请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!out=fopenC'cAUestWoutdat^/w");for(i=0;i<10;i++)(fscanf(in,M%s",s);t=s;while(*t)t++;给定源程序:#include#includechar*fun(chartt[])(t-:inti;while(*t=**')t—;fun(s.t);for(i=0;tt[i];i++)/**********Cund***********/fprintf(out,"%s

1241",s);1if(Ca'<=tt[i])11(ttli]<=z'))/**********found***********/fclose(in);fclose(out);|tt[i]+=32;relum(it);※※※※※※※※※※※※※※※※※※※※※※※※※}main()第79套:给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长

1242Theresultstringis:

1243%s",fun(tt));1解题思路:第一处:判断是小写字母,则条件应该是与的关系。第二处:小写字母的ASCH值减去32正好是其大写字埒。***************************************************请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组#include#include#defineM5#deHneN20intfun(char(*ss)|N],int*n){inti,k=0,len=N;for(i=0;i<_1—;i++){len=strlen(ss[i]);if(i=0)*n=len;/**********found**********/if(len—2_*n){*n=len;k=i;中,非素数的个数通过k传回。例如,若输入:17,则应输出:46891012141516。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/includevoidfun(intm,int*k,intxx[])Imain()intm.n,zz[100];

1244第一处:第二处:第三处:printf("

1245Pleaseenteranintegernumberbetween10and100:");scanf(M%dM.&n);fun(n,&m.zz);printf("

1246

1247Thereare%dnon-primenumberslessthan%d:*\m,n);fbr(n=0;n

1248%4d",zzfn]);NONOO;}NONOO(/♦请在此函数内打开文件,输入测试数据,调用ftin函数,输出数据,关闭文件。*/intm,n,zz[l(X)];HLE*rf,*wf;rf=fbpen("c:\\test\\in.dat',.*,r");wf=fopen("c:\\test\\out.dat","w");fscanf(rf,"%d",&n):fun(n,&m,zz);fprintf(wf."%d

1249%d

1250",m,n);fbr(n=0;nintisP(in(m)intj,tag=0;for(j=2;j

1251Pleaseenteranintegernumberbetween10and100:");scanf(&n);fun(n,&m,zz);printf('AnXnThereare%dnon-primenumberslessthan%d:",m,n);fbr(n=0;n

1252%4d",zz[n]);NONO0;)NONOO(/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intm,n,zz[100];FILE*rf,*wf;rf=fopen("c:\\(est\\in.dat","r");wf=fopen("c:\\test\\out.dat","w");fscanf(rf,"%d",&n);fun(n,&m,zz);fprintf(wf,"%d

1253%d

1254",m.n);fbr(n=0;n

1255",zz(n]);fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※派第80套:给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入•个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeunsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;$=n;/**********Cund**********/i=_l_;/**********found**********/whilef2_){t=s%10;if(t%2=0){/**********found**********/x=x+t*i;i=_3_;}s=s/IO;returnx;1main(){unsignedlongn="l;while(n>99999999lln<0){printfC'Pleaseinpul(0

1256Theresultis:%ld

1257",fun(n));解题思路:对变量i赋初值,根据i的使用规则来看,i应等于Lwhile循环要求计算后的s应大于0,所以应填:s。每循环一次,i要乘以10,所以应填:i*10。***************************************************给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。请改iE程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:/include#defineM5/************found************/intfun(intn.intxx[][]){inti,j,sum=0;printf("

1258The%dx%dmatrix:

1259r,.M.M);for(i=0;i

1260#includevoidfun(inta,intb,long*c)fdr(i=0;i

1261Thesumofallelementson2diagnalsis%d.*',fun(M,aa));1解题思路:第一处:形参必须定义字符串数组的长度,所以应改为:inifun(intn.intxx[][M])o第二处:由于xx是整型的双维数组,不能用浮点型输出,所以应改为:printf(H%d***************************************************函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和卜位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12»调用该函数后,c=4251o注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若「语句。给定源程序:#includevoidfun(inta.intb.long*c)(Imain(){inta,b;longc;printf("Inputa,b:");scanf(M%d%d'\&a.&b);fun(a,b.&c);printfCTheresultis:%ld

1262",c);NONOO;INONO(){/*本函数用于打开文件,输入数据,调用函数,检出数据,关闭文件。*/FILE*rf,*wf;inti,a.b:longc;rf=fopenC'ciWtestWin.dat'VY");wf=fopen("c:\MesiWoul.dalT'w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a.&b);fun(a,b.&c);fprintf(wf,,'a=%d,b=%d,c=%ld

1263",a,b,c);}fclose(rf);fclose(wf);解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:♦c=(a/l0)*1000+(b%10)»100+(a%10)*10+(b/10);}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%dM,&a,&b);fiin(a.b.&c);printf("Theresultis:%ld

1264M,c);NONOO;INONO(){/♦本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inii,a.b;longc;rf=fopen("c:\\test\\in.dat',,"r,');wf=fopen(',c:\\tes(\\oul.dat,,,,,w,');for(i=0;i

1265",a,b,c);Ifclose(rf);fclose(wf);1※※※※※※※※※※※※※※※※※※※※※※※※※第81套:给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7o执行结果为:def3*5*adh3*kjsdf7*o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:/includevoidfun(char*s){inti,j,n;for(i=0;s[i]!=\0';i++)if(s[i]>='0,—1—s[i[v=9')(n=0;/**********Cun(j**********/while(s[i+1+n]!=2)n++;fbr(j=i+n+l;j>i;j-)/**********found**********/s|j+l]=_3—:sU+1)=♦';i=i+l:}}main(){chars[80]=,,ba3a54cd23a";printf("

1266Theoriginalstringis:%s

1267",s);fun(s);printf("

1268Theresultis:%s

1269,,,s);}解题思路:第一处:判断是数字,应该使用“与”,所以应填:&&。第二处:判断字符串是否是字符串结束符,所以应填:AO'.第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后个位置,所以应

1270填:s"***************************************************给定程序MODH.C中函数fun的功能是:根据整型形参m,计算如下公式的值。1111inti.j,k,a[3][3],t[3][3];FILE*rf,*wf;rf=fopen("cAMestWin.dat",'?");wf=fopen("c:\\test\\out.dat","w");for(k=0;k<5;k++)(y-1+++++2*23*34*4m*m例如,若m中的值为:5,则应输出:1.463611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:for(i=0;i<3;i++)fscanf(rf,'r%d%d%d”.&a[i][0],&a[i][l].&a[i][2]);fun(a,t);for(i=0;i<3;i++)(for(j=0;j<3;j++)fprintf(wf,w%7d\t[i][j]);fprintf(wf,"

1271M);1#includedoublefun(intm){doubley=1.0;inti;/**************Cund**************/fbr(i=2;i

1272Theresultisfun(n));}生成一个新的矩阵。矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。参考答案:解题思路:#includevoidfun(inta[3][3],intb[3][3])(intc[3][3];inti,j;第•处:使用for循环计算公式,必须计算到m,所以应改为fbr(i=2;i<=m;i++)0第二处:在除法运兑中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改为y+=l./(i*i)ofor(i=0;i<3;i++)for(j=0;j<3;j++)(c[i][j]=aD]W;/*矩阵的转置*/b(ilUl=anHj]+c[i][jl;1}***************************************************请编写函数ftin.函数的功能是:实现B=A+A:即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:123147456258789369main()Z*主程序*/{inta[3][3]={{1,2,3),(4,5.6),(7,8.9)|,t(3][3];inti,j;fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",t[i][j]);printf("

1273");程序输出:261061014101418注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta[3][3],intb[3][3])]}NONO();}NONO(){/*木函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,k,a[3H3],"3]网;FILE*rf,*wf;rf=fopen("c:\Mesi\\in.dat","r");wf=fopen("c:\\test\\out.dat",,rw");for(k=0;k<5;k++)(for(i=0;iv3;i++)fscanf(rf,"%d%d%d",;fun(a,t);main()/*主程序*/{inta[3][3]={{1,2,3),(4,5.6),(7,8,9)),t[3][3];inti.j;for(i=0;i<3;i++){for(j=0;j<3;j++)fprintf(wf,,,%7d,\t[i][j]);fprintf(wf,"

1274M);fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(M%7dM,t[i][j]);printf("

1275");}1fclose(rf);fclose(wf):NONO();NONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/1※※※※※※※※※※※※※※※※※※※※※※※※※第82套:

1276给定程序中,函数fun的功能是:找出100〜999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出:符合条件的整数个数作为函数值返回。例如,当x值为5时,100〜999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500o共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结果,注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:/includefun(intx){intn,si,s2,s3,t;n=0;t=100;/**********found**********/while(t<=_I_){/**********found**********/sl=t%10;s2=(_2_)%10;s3=t/I00;/**********found**********/if(s1+s2+s3=_3_){printf(M%dV);n++;1l++;1returnn;Imain(){intx=-l;while(x<0){printf("Pleaseinput(x>0):");scanf("%d",&x);}printfCAnTheresultis:%d

1277w,fiin(x));}解题思路:第一处:使用while循环找出100〜999之间所有整数,所以应填:999o第二处:s2是求卜位数字,所以应填:1/10。第三处:各位数字之和为x,所以应填:X。***************************************************给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在I中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************found************/voidfun(longs,longt){longsl=IO;s/=10;♦t=s%10:/************found************/while(s<0){s=s/100;*t=s%10*sl+*t;si=si*10;main(){longs,t;printf('AnPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld

1278';t);)解题思路:第•处:在函数fun体中,t是•个指针型变最,因此定义形参时也应定义指针。第二处:条件应该s>0,所以应改为:while(s>0)o***************************************************学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN16typedefstruct{charnum(10];ints;}STREC;intfun(STRECa[])main(){STRECs[N]={{"GAOO5”,85M,,GA003,\76}.{nGA002,,,69},{"GA004",85}.\TAB\TAB{"GAOOr',911,{HGA007,;72},("GA008",64},{MGA006M,87},\TAB\TAB("GA0l5".85|,{"GA0l3',,9l),{"GAO12",64M,'GAOI4,1.91),\TAB\TAB{PAO11”,66},{"GA017M,64},{PAO18”,64},{MGA016",72});inti:FILE*out;fun(s);printf('Thedataaftersorted:

1279°);for(i=0;i

1280,');out=fbpen("c:\\test\\out.dat","w");for(i=0;i

1281");fprintf(out,"%4dM,s[i].s);}fprinlRout/An");fclose(out);1解题思路:本题是按结构体中成绩s进行降序排列,其结果仍存入当前结构体中。参考答案:/include#defineN16(ypedefstruct{charnum[l()];ints;}STREC;intfun(STRECa[]){STRECtmp;iniij;for(i=0;i

1282fbr(j=i+l;j

1283");for(i=Ou

1284'');printf("%s%4d".s[i].num,s[i).s);printf("

1285M);out=fopenC'cAUestWoutdat^/w");for(i=0;i

1286");fprintf(out,"%4d",s[i].s);}fprintftout.'An");fclose(out);)※※※※※※※※※※※※※※※※※※※※※※※※※第83套:给定程序中,函数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中。不得增行或删行,也不得更改程序的结构!给定源程序:/includefun(intx){intn,si,s2,s3,t;/**********found**********/n=_1_;t=100:/**********foun(l**********/while(y=_2_){sl=t%10;s2=(t/10)%10;s3=t/100;if(sl+s2+s3=15){printf("%dI);n++;1main(){intx=-l;while(x>999llx<0){printf("Pleaseinput(0

1287Theresultis:%d

1288",fun(x));I解题思路:第一处:符合条件的整数个数n,必须进行初始化,所以应填:0o第二处:找出XW999,所以应填:X。第三处:循环控制变量I每循环一次I要加1,所以应填:给定程序MODII.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。例如:当s所指的字符串为:"ABCDE"时,则t所指的字符串应为:"EDCBAABCDE”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:/include#includevoidfun(char*s.char*t)/************found************/inti;si=strlen(s);for(i=0;i

1289Pleaseenterstrings:M);scanfC'%s",s);fun(s,t);printf("Theresultis:%s

1290M.t);解题思路:第一处:变量si没有定义。第二处:在C语言中,字符串开始位置从。开始的,所以应改为:s[sl-i-l];o***************************************************函数fun的功能是:将a、b中的两个两位正整数合并形成•个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的干位和十位上。例如,当a=45,b=12.调用该函数后,c=1425o注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,long*c){}}returnn:}mainO/*主函数*/{inta,b;longc;printf("Inputab:H);scanf(',%d%d,\&a,&b);fun(a,b,&c);printf("Theresultis:%ld

1291'\c);NONOO;)NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf.*wf;inti,a,b:longc;rf=fopen("c:\\test\\in.dat",Mr");wf=fopen("c:\\lest\\out.dal","w");for(i=0;i<10;i++){fscanf(rf,&a,&b):fun(a,b,&c);fprintf(wf."a=%d.b=%d,c=%ld

1292",a,b.c);}fclose(rf);fclose(wf);)解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a卜位数字的方法:a/10取a个位数字的方法:a%10参考答案:#includevoidfun(inia.intb,long*c){♦c=(b/10)*l000+(a/10)*l00+(b%10)*10+(a%10);}

1293main()/*主函数*/{inta,b;longc;printf("Inputa,b:H);scanf(,,%d%d,\&a.&b);fun(a,b,&c);printfCTheresultis:%ld

1294M.c);NONOO;INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fbpen("c:\\test\\in.dat",,,r");wf=fopenC'ciWtestWout.dat",'^");for(i=0:i<10:i++){fscanf(rf.&a.&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld

1295",a,b,c);1fclose(rf);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第84套:函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(inta,intb,intc)(intt;/**********found**********/(=(a>b)?(b>c?b:(a>c?c:I)):((a>c)?2((b>c)?c:―3—));returnt;}main(){inta1=3,a2=5,a3=4,r;r=fun(al,a2,a3);printf("

1296Themiddlenumberis:%d

1297M,r);}解题思路:第一处:给三个数进行比较大小,所以应填:a。第二处:给三个数进行比较大小,所以应填:a。第三处:给三个数进行比较大小,所以应填:b.***************************************************给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a〜1则将其转换为其后的第5个字母;若小写字母为v〜z,使其值减21»转换后的小写字母作为函数值返I川。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includecharfun(charc){if(c>='A'&&c<=Z')/**************found**************/C=C+32;if(c>=a,&&c<='uf)/**************found**************/c=c-5;elseif(c>='v,&&c<=,z")c=c-21;returnc;}main(){charcl,c2;prin情("Enteraletter(A-Z):*);cl=getcharO;if(isupper(cl)){c2=fun(cl);printf("

1298

1299TheletterV%cVchangeto\'%cV

1300",cl,c2);|elseprintf("

1301Enter(A-Z)!

1302M);}解题思路:第一处:变量c错写成大写C了。第二处:要求转换为其后的第5个字母,所以应改为:c=c+5;o***************************************************请编写函数fun,其功能是:计算并输出例如,在主函数中从健盘给n输入20后,输出为:s=534.l888840注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(intn)

1303main(){intn;doubles;printf("

1304

1305lnputn:");scanf("%d",&n);s=ftin(n):果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!printf("

1306

1307s=%f

1308

1309M,s);NONOO;给定源程序:#includeJNONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopenC'ciWtestWin.dat'^'V");wf=fopen(',c:\\tesi\\out.dat,,,',w,');#include#defineN5typedefstruct{intnum;charname|10];chartel[10];ISTYPE;for(i=0:i<10:i++){voidcheck();/**********f0und**********/intfun(1*std)/**********Cund**********/fscanf(rf,&n);-2_*fp;inti;s=fun(n);fprintf(wf,"%lf

1310",s);)if((fp=fopen("myfile5.dat","wbM))==NULL)retum(O);printf("

1311Outputdatatofile!

1312w);fclose(rf);fclose(wf);for(i=0;i#includedoublefun(intn)/**********Cund**********/fwrite(&std[i),sizeof(STYPE),1,3);fclose(fp);return(1);}main(){STYPE{inti;doublefac=1.();doublesum=1.0;fbr(i=2;i<=n;i++)(fac+=sqrt(i);sum+=fac;}s[10]={{l,"aaaaa"."l1111T'Ml."bbbbb"."222222,,}.{l,"cccccM,,,333333,,}||.Hddddd","444444"},{1,"eeeeeM."555555"!);intk;k=fun(s);if(k==l){printf("Succeed!");check();}elsereturnsum;printf("Fail!");iImain(){intn;doubles;printf("

1313

1314lnputn:");scanf("%d",&n);s=fun(n);printf("

1315

1316s=%An

1317M,s);voidcheck(){HLE*fp;inti;STYPEs[10];if((fp=fopen("myfile5.dat".',rb,'))=NULL){printf("Failexit(O);|NONO();1printf("

1318Readfileandoutputtoscreen:

1319");printf("

1320numnametel

1321n);NONOO(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("ciWtestWin.dat'V'r");wf=fopen("c:\\test\\out.dat","w");for(i=0;i

1322M,s[i|.num,s[i].naine,s(i].tel);)fclose(fp);}for(i=0;i<10:i++)(fscanf(rf."%d",&n);s=fun(n);fprintf(wf,"%lf

1323",s);)解题思路:木题是要求把指定的学生记录输出到指定的文件中。程序中共有:.处要填上适当的内容,使程序能运行出正确的结果。第一处:结构定义自变量,因此应填写STYPE。fclose(rf):fclose(wf):}第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp※※※※※※※※※※※※※※※※※※※※※※※※※已经给出,这样,此处只能填写FILE。第85套:给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结每三处:fwrite是把变量中的内容写入指定文件中,再根据fwriie参数的使用要求,所以只能填写文件流变量fp。***************************************************给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放到1串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为:"ABCDEEDCBA"。

1324请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*s,char*t){inti,si;si=strlen(s);/************found************/for(i=0;i<=sl;i++)t[i]=s[il;for(i=0;ivoidfun(inta,intb.long*c)[)main(){inta,b;longc;printf("Inputa,b:w);scanf("%d,%d",&a,&b);fun(a,b,&c);printfCTheresultis:%d

1327",c);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fbpen("c:\Mesi\\in.dai","r");wf=fopen("c:\\test\\out.dat","w");for(i=0;i

1328",a,b,c);}fclose(rf);fclose(wf);}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:#includevoidfun(inta,intb,long*c)(♦c=(a/IO)*l000+(b/10)*100+(a%10)*10+(b%10);}main(){inta,b;longc;printf("Inputa,b:");scanf(',%d,%d,'.&a.&b);fun(a,b,&c);printfCTheresultis:%

1329",c);NONO0;}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b:longc:rf=fopen("c:\Vest\\in.dat","r");wf=fopen("c:\\(est\\out.datMw");for(i=0;i<10;i++)(fscanf(rf,"%d,%d”,&a.&b);fun(a,b,&c);fprintf(wf,Ha=%d,b=%d,c=%ld

1330".a.b.c);}fclose(rf);fclose(wf):}※※※※※※※※※※※※※※※※※※※※※※※※※第86套:甲乙丙丁四人同时开始放鞭炮,甲每隔11秒放一次,乙每隔12秒放一次,丙每隔13秒放一次,丁每隔M秒放一次,每人各放n次。函数fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒。例如,若U=7,t2=5.t3=6,t4=4.n=10,则总共可听到28次鞭炮声。请在程序的卜.划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:/include/**********found**********/#defineOK(i,l,n)((_1_%(=0)&&(i/«n))intfun(inttl,intt2,inti3,intt4,intn){intcount,t,maxt=t1;if(maxt

1331",r);}解题思路:第•处:根据定义的要求,所以应填:i。第二处:for循环语句的增量,所以应填:I什。第三处:返回统计次数,所以应填:couni。

1332***************************************************给定程序MODILC中函数fun的功能是:根据输入的三个边长(整型值),判断能否构成-:角形;构成的是等边:角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成二角形函数返回0。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/**************Cund**************/voidfun(inta,intb,intc){if(a+bx&&b+c>a&&a+c>b){if(a=b&&b==c)return3;elseifi(a==bllb==clla==c)return2;/**************Sund**************/elseretrun1}elsereturn0;main(){inta,b,c,shape;printfCAnlnputa,b,c:");scanf(,,%d%d%d,\&a.&b,&c);printf("

1333a=%d,b=%d,c=%d

1334",a,b,c);shape=fiin(a.b,c);printfCAnXnTheshape:%d

1335",shape);)解题思路:第一处:函数有返回值,不能定义为void,所以应改为:intfun(inta.intb,intc)。第二处:语句后缺少分号。请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,在主函数中从键盘给n输入100后,输出为:sum=l48.874270o注意:要求n的值大于2但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(inin)])main(){intn;doublesum;printf("

1336

1337lnputn:");scanf("%d",&n);sum=fun(n);printf("

1338

1339sum=%i

1340

1341",sum);NONO();}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf:intn,i:doubles;rf=fopen("c:\MeslWin.dat",T');wf=fopen("c:\\(est\\out.dat",,rw"):for(i=0;i<10;i++){fscanf(rf,w%d",&n);s=fun(n);fprinlf(wf,s);fclose(rf);fclose(wf):解题思路:本题是计算并输出3到n之间(含3和n)所有素数的平方根之和.参考答案:#include#includedoublefun(intn)(intiJ=0;doubles=0;fbr(i=3;i<=n;i++){for(.j=2;j

1342

1343lnputn:0);scanf(',%d",&n);sum=fun(n);printf("

1344

1345sum=%f

1346

1347",sum);NONO();}NONO()(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf:intn,i:doubles;rf=fopen(',c:\\test\\in.dat',,',r,');wf=fopen("c:\\tesi\\out.dat",,rw");for(i=0;i<10;i++)(fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%lf

1348",s);}fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第87套:函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量cl,c2,c3返回主函数。例如:当n=123114350时,结果应该为:cl=3c2=lc3=2o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintcl,c2,c3;voidfun(longn)(cI=c2=c3=0;while(n){/**********found**********/swi(ch(I)(/**********found**********/case1:cl++;2;/**********found**********/case2:c2++;3;case3:c3++;}n/=10;}Imain(){longn=123H4350L;fun(n);

1349printf("

1350Theresult:

1351,f);NONOOprintf("n=%ldcl=%dc2=%dc3=%d

1352",n,cl,c2,c3);1{/♦请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/解逆思路:第一处:取个位数上的数,所以!>%10就可以得到个位数。第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填:breako第三处:同第二处。***************************************************给定程序MODI1.C中函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数:并把该整数中各位上最大的数字值作为函数值返例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8.请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeFILE*rf,*wf;intn,i;doubles;rf=fopen(c:\\test\\in.dat,T');wf=fopen("c:\\test\\out.dat","w,');for(i=0;i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%lf

1353",s);1fclose(rf);fclose(wf):I解题思路:本题是根据公式计算多项式的值。注意变量的取值范围。参考答案:#includedoublefun(intn)(doubles=0,t=1;inti;for(i=l;i<=n;i++){(*=i;s+=1Jt;intfun(unsignedn.int*zero){intcount=(),max=(),t;do{t=n%IO;/**************founci**************/if(t=O)count++;iftmax

1354lnputn:");scanf("%d",&n);s=fun(n);printf("

1355

1356s=%f

1357

1358,\s);NONO();1NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/main(){unsignedn;intzero.max;printf("

1359Inputn(unsigned):");scanf(',%d",&n);max=fiin(n,&zero);printf("

1360Theresult:max=%dzero=%d

1361^.max.zero);}FILE*rf.*wf;intn.i:doubles;rf=fopen("c:\\test\\in.dat;wf=fopen("c:\\(es(\\out.dat"w");for(i=0;i<10;i++){fscanf(rf,"%dM,&n);s=fun(n);解题思路:第一处:条件相等符号为第二处:由于zero是一个指针型变量,所以给它进行赋值时应带指针,因此应改为:*zero=count;o请编写函数fun,其功能是:计算并输出下列多项式的值:111fprintf(wf,"%lf

1362",s);}fclose(rf);fclose(wf);※※※※※※※※※※※※※※※※※※※※※※※※※第88套:函数ftin的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a⑴中:佛a所指数组元素中的次大位放在a[2]S-1+++…+1*21*2*31*2*3*...50例如,在主函数中从键盘给n输入50后,输出为:s=l.7182820注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn)[)中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:main(){intn;doubles;printf("

1363lnputn:");scanf("%d",&n);s=fun(n);printf("

1364

1365s=%f

1366

1367,,.s);/include#defineN9voidfun(int1,intn){inti,j.max.min.px,pn.t;NONO();}/**********found**********/for(i=0;i

1368{max=min=a[i];px=pn=i;/**********found**********/for(j=一3一:ja[j]){min=a[j];pn=j;}}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn=i)pn=px;Iif(pn!=i+1){t=a[i+l];a[i+lJ=min;a[pn]=t;})}main(){intb[NJ={1,4.2,3,9,65,8.7},i;printf("

1369Theoriginaldata:\iT);for(i=0;i

1370Thedataaftermoving:

1371");for(i=0;i

1372");}解题思路:第一处:形参a应定义指针整型变量,所以应填:*a。第二处:外for循环每次增量应该加2。第三处:内for循环的初始值应为:i+1。***************************************************给定程序MOD11.C中函数fun的功能是:按顺序给s所指数组中的元素赋产从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。清改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#deGneSIZE20funfdouble*s,double*w){intk,i;doublesum;for(k=2,i=0;i

1373");for(i=0;i

1374");printf("%4.0f,.a[i]);}printf("

1375

1376Theresult:

1377");for(i=0;i#defineN8typedefstruct{charnum[l()];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}main(){STRECs[N]={{,,GA05,\85},{"GA03",76},{,,GA02,,,69},(,,GA04,,,85},{"GAOr,91},{"GA07'1,72},{HGA08",64},("GA06M,87});STRECh[N],t;FILE*out:intij.n:doubleave;ave=fiin(s,h.&n);printf('The%dstudentdatawhichislowerthan%7.3f:

1378",n,ave);for(i=0;i

1379",hli].num,h(i].s);printf("

1380");out=fopen("c:\\test\\out.dat"w");fprintf(out."%d

1381%7.3f

1382M.n.ave);fdr(i=O;ih|j],s){t=h[i];h[i]=h[j];hU]=(;}for(i=0;i

1383M,h[i].s);fclose(out);}解题思路:本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指的数组中。具体操作请看答案程序中的说明。参考答案:/include#defineN8typedefstruct(charnum[IO];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n)(inti;doubleave=0.0;*n=0;for(i=0;i

1384".n,ave);fbr(i=O;i

1385",h[i].num.h(i].s);printf(W);out=fopen("c:\\test\\out.dat"w");fprinif(ou(."%d

1386%7.3f

1387,'.n.ave);fbr(i=O;ihU].s)

1388".h[i].s);fclose(out);I※※※※※※※※※※※※※※※※※※※※※※※※派第89套:给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长vN。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineM5#defineN20voidfun(char(*ss)[N|){inti,j,k=0,n.m,len;for(i=0;in){/**********found**********/n=len;I=i;}}for(i=0;i

1389for(j=—2—;j>=O;j-)ss[i][m-]=ss[i][j];for(j=0;j

1390Theoriginalstringsare:

1391M);for(i=();i

1392",ss[i]);prinlf(W);fun(ss);printf("

1393Theresult:

1394");for(i=0;i

1395,',ss[i]);}解题思路:第•处:使用变量k来保存第几个字符串是最长的字符串,所以应填:k.第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len。第三处:左边用字符*补齐,所以应填:ss[i][D・***************************************************给定程序MODI1.C中函数fun的功能是:计算整数n的阶乘。请改正程序中的错误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intn)doubleresult=1.0;while(n>l&&n<170)/*********Cund*********/result*=-n;/*********found*********/return;main()intn;printf("Enteraninteger:");scanf("%d".&n);printf("

1396

1397%d!=%lg

1398

1399",n,fun(n));解题思路:第一处:-n是先减1,n-是后减1。本题应该先乘以n,再减1,才正确。第二处:返回计算结果,所以应填:result,***************************************************编'弓函数fun,函数的功能是:从s所指的字符串中删除给定的字符。同一字母的大、小写按不同字符处理.若程序执行时输入字符串为:turbocandborlandC++从健盘上输入字符:n,则输出后变为:turbocadborladc++如果输入的字符在字符串中不存在,则字符串照原样输出。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(chars[],charc)(|main()(staticcharstr(]="turbocandborlandC++";charch;printf("原始字符串:%s

1400”,str);printf("输入个字符:");scanf(M%c",<&ch);fiin(str.ch);printf("str[]=%s

1401二str);NONO();INONOOI产请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;chars[81],ch,w;intlen;rf=fopenC'cAVestWin.dat",'?");wf=fopen("c:\\tesi\\out.dat",,rw");fgets(s,80.rf);fscanf(rf,"%c'\&ch);len=s(rlen(s)-1;w=s[len];iRw=*

1402'IIw==0x1a)s[len]=0;fun(s,ch);fprinlf(wf,s);fclose(rf);fclose(wf);I解题思路:本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序是引用字符串指针p和while循环语句以及if条件判断语句进行处理的,新字符串的位置是由i来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程序中。参考答案:#include#includeintfun(chars[],charc)[char*p=s;inti=0;while(*p){if(*p!=c)s[i++]=*p;p++;}s[i]=0;)main()[staticcharstr[]="turbocandborlandC++”;charch;printfC原始字符串:%s

1403*str);primfT输入一个字符巧;scanf("%c”.&ch);fun(str,ch);printf("str(]=%s

1404",str);NONOO;)NONO()(尸请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;chars[81],ch.w;intlen;rf=fopenC'ciWtestWin.daCVV);wf=fopen("c:\\lest\\out.dar',"w");fgets(s,80,rf);fscanf(rf.n%c".&ch);len=strlen(s)-1;w=s[len];if(w=An'IIw==Oxla)s[len]=0;fun(s,ch);fprintf(wf,"%s0,s);fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第90套:函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返网。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intn){inti,j,count=0;printf("

1405Theprimenumberbetween3to%d

1406",n);for(i=3;i<=n;i++){/**********found**********/for(—I—:j=i){count++;printf(count%15?,'%5d',:"

1407%5d',,i);}}

1408returncount;main(){intn=20,r;r=fun(n);printf("

1409Thenumberofprimeis:%d

1410",r);解题思路:第•处:素数的条件是除1和其本身外不能整除该数,所以应填:2。第二处:判断i是否素数,所以应填:i0第三处:如果内循环for中所有数都不能整除i,那么i是素数且j大于等于i,所以应填:jo***************************************************数列中,第•项值为3,后一项都比前•项的值增5;给定程序MODI1.C中函数fun的功能是:计算前n(4#deGneN20intfun(intn,int*a){inti,j,k,sum;sum=j==0;fbr(k=3.i=O;i

1411

1412Theresult:

1413"):for(i=0;i

1414

1415w);}解题思路:第一处:连续赋初值为0,中间使用条件相等符号了,所以应改为:sum=j=0;a第二处:条件相等符号为=。***************************************************请编写函数何必其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入8后,输出为:s=0.662872。注意:要求n的值大于1但不大于100o部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入

1416你编”的若「语句。给定源程序:#includedoublefun(intn)({doublef,t;intn;/**********found**********/f=i.o+—1—:t=X;n=1;)main(){intn;doubles;printf("

1417Inputn:");scanf("%d",&n);s=fun(n);printf("

1418s=%An",s);NONO();)do{n-H-;/**********found**********/t*=x!2:/**********found**********/f+=—3—;}while(fabs(t)>=le-6);returnf;NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf.*wf:intn.i:doubles;rf=fopenC'ciWtestWin.dat",'?");wf=fopen("c:\\tes(\\out.dat","w");for(i=0;i<10;i++){fscanf(rf&n);s=fun(n);fprintf(wf,s);1}main(){doublex,y;x=2.5;y=fiin(x);printf("

1419TheresultisAn");printf("x=%-12.6fy=%-12.6f

1420H,x,y);}解题思路:第一处:根据公式可知,此处应填:X。第二处:根据公式可知,此处应该除以n,所以应填:nofclose(rf);fclose(wf);1第三处:计算的结果进行累加并赋值给变量f,所以应填:1。***************************************************解题思路:本题是根据公式计算多项式的值。参考答案:#includedoublefun(intn)给定程序MODI1,C中函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数:并计算该值的个位、十位、百位上数字之和作为函数值返回。{inti;doublesum=0.();if(n>l&&n<=100)(fbr(i=l;i<=n;i++)sum+=1.0/(2*i-l)-1.0/(2*i);}例如,7的5次方是16807,其低3位数的和值是15o请改正函数ftin中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数、不得增行或删行,也不得更改程序的结构!给定源程序:#include#includereturnsum;}intfun(intn,int*value){intd.s.i:main(){intn;doubles;printf("

1421lnputn:");scanf("%d",&n);s=fun(n);printf("

1422s=%f

1423,,,s);NONO();I/**************Cund**************/d=0;s=0;fbr(i=l;i<=5;i++)d=d*n;*value=d;fbr(i=l;i<=3;i++){s=s+d%10;/**************found**************/NONOOd=d\10;{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("c:\MesiWin.dalTT');wf=fopen("c:\\(es<\\out.datHwH);for(i=0;i<10;i++){fscanf(rf,&n);}returns;}main(){intn,sum,v;do(printf("

1424Entern(2=8):sum=fun(n,&v);printf("

1425

1426Theresuk:

1427value=%dsum=%d

1428

1429,',v,sum);fclose(rf);fclose(wf);\1解超思路:i※※※※※※※※※※※※※※※※※※※※※※※※※第91套:函数fun的功能是:计算请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹卜的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includedoublefun(doublex)第一,处:变量d的初始值应为1。第二处:整除的符号是***************************************************请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

1430给定源程序:#include#includedoublefun(doublex[9]){}果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(doublex,intn)main(){doubles,a(9]={12.0,34.0,4.0,23.0.34.0,45.0,18.0,3.0,11.0);inti;printfCAnTheoriginaldatais:

1431M);for(i=0;i<9;i++)printf(H%6.1P,a[i]);prinif("

1432

1433");s=fun(a);printf("s=%f

1434

1435",s);NONOO;}{doublef,I;inti;f=1.0;/**********found**********/t=1;/**********found**********/for(i=_2_;i

1436",s);returnf;}main(){doublex,y;x=2.5;y=run(x,12);printf("

1437Theresultis:

1438M);printf(*'x=%-12.6fy=%-12.6f

1439'\x,y);fclose(rf);fclose(wf):J解题思路:)解题思路:本题是计算并输出给定数组中每相邻两个元素之平均值的平方根之和。参考答案:#include#includedoublefun(doublex[9])第一处:t是处理公式中每一项中间项,所以应填:1。第二处:根据公式可知,f。!•循环变量的初始值应从1开始。第三处:每做一次循环均要除以变量i的值,所以应填:i。***************************************************给定程序MODII.C中函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。{inti;doubleavg=0.0,sum=0.0;for(i=0;i<8;i++){avg=(x[i]+x[i+l])/2;请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includesum+=sqrt(avg);}#deGneN100intfun(int*s,intn)returnsum;){inti.j,k.a.b.c;j=0;main()(doubles,a(9]={12.0,34.0.4.0,23.0,34.0,45.0,18.0,3.0,11.0};inti;printf("

1440Theoriginaldatais:

1441");for(i=0;i<9;i++)printfC'%6.1r.a[i]);printf(',

1442

1443M);s=hin(a);for(i=100;i

1444

1445';s);NONO();c=k%10if(a=b&&a==c)s[j++]=i;iJNONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf:inti,j;doubles.a(9];rf=fopenC'ciWtestWin.dat'^'V");wf=fopen(',c:\\tesi\\out.dat,,,',w,');Ireturnj;|main(){inta[N],n.num=0.i;do{printf("

1446Entern(<=1000):");scanf("%d",&n);}for(i=0;i<5:i++){for(j=0;j<9;j++)fscanf(rf,*%lPt&a(j]);s=fun(a);fprintf(wf,"%if

1447",s);}while(n>1000);num=fun(a,n);printf("

1448

1449Theresult:

1450"):for(i=0;i

1451

1452M);fclose(rf):fclose(wf);I)解题思路:※※※※※※※※※※※※※※※※※※※※※※※※※第92套:函数ftin的功能是:计算的前n项。若x=2.5,函数值为:12.182340。请在程序的下划线处填入正确的内容并把下划线删除,便程序得出正确的结第一处:k应该取循环变量i的值,所以应改为:k=i;。第二处:语句后缺少分号。***************************************************请编写函数fun,其功能是:计算并输出给定10个数的方差:例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0.输出为=11.730729。

1453注意:部分源程序在文件PR0G1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句.给定源程序:#include#includedoublefun(doublex[10])(}main(){doubles,x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};inti;printf("

1454Theoriginaldatais:

1455");for(i=0;i<10;i++)printf("%6.1printf(H

1456

1457");s=fun(x);prin(f("s=%f

1458

1459",s);NONOO;)NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/HLE*rf,*wf;intiJ;doubles.x[10];rf=fopen("ciWtestWin.dat'W);wf=fopenC'crWtestWout.dat'V'w");for(i=0;i<5;i++){for(j=0;j<10;j++)fscanf(rf,"%lf.&x[j]);s=fun(x);fprintf(wf,"%lf

1460",s);Ifclose(rf);fclose(wf);}解题思路:本题是根据公式进行计算。参考答案:#include#includedoublefun(doub1ex[10])(inti;doubleavg=0.0,sum=0.0,abs=0.0,fc;for(i=0;i

1461Theoriginaldatais:

1462");for(i=0;i<10;i++)printf("%6.1F,x(il);print"MW);s=fiin(x);printf("s=%f

1463

1464",s);NONOO;1NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intiJ:doubles.x[10];rf=fopen("c:\\(est\\in.dat',.',rM);wf=fopen("c:\\tesc\\out.dat","w'');for(i=0;i<5;i-H-){for(j=0;j

1465M.s);}fclose(rf):fclose(wf):※※※※※※※※※※※※※※※※※※※※※※※※※第93套:给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用•次fun函数,输出链表尾部结点中的数据,并科放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata:structlist*next;}SUST;voidfun(SLIST*p){SUST%*s;(=p->next;s=p;while(t->next!=NULL){s=t;/**********foun(l**********/t=t->1;printfC"-2_);s->next=NULL;/**********found**********/free(3);}SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)maIloc(sizeof(SLIST));for(i=0;idata=a[il;p->next=q;p=q;}p->next=0;returnh;voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)prinlf("

1466ThelistisNULL!

1467");else{printf("

1468Head");do{printf("->%dM,p->data);p=p->next;}while(p!=NULL);printf("->End

1469");11main(){SLIST♦head;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf("

1470Outputfromhead:

1471M);outlist(head);printf("

1472Outputfromtail:

1473");while(head->next!=NULL){fun(head);printf("

1474

1475");printf("

1476Outputfromheadagain:

1477");outlist(head);解题思路:本题是对已经建立的链表,通过调用一次函数就除出链表尾部的数据。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:由于本题要求输出链表尾部的数据,函数是利用while循环语句找出链表尾部的指

1478针并存入临时变量S中,那么每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过1指针变量进行操作的,因此,都要取t的next指针重新赋给t来实现,所以本处应填nexto第二处:输出最后一个结点的数据,所以应填t-xlata或(*t).data0第三处:输出出最后个结点数据后,并把此结点删除了,程序要求释放内存,所以应填t。***************************************************给定程序MODil.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:debao请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:/include/************found************/fun(chara){if(*a){fun(a+1);fscanf(fp,"%s%s",a.b);fprintf(wf,"%s

1479",fun(a.b));}fclose(fp);fclose(wf);I解题思路:本题是比较两个字符串的长度并按要求返回字符串。我们给出的程序是使用f。!•循环来判断两个字符串中哪一个比较长或相等,循环的终止值为两个字符串中是否字符串结束符,如果有,则退出循环体。接下来再判断两个字符串是否同时出现结束符,则返眄1第•个字符串S,如果不没有同时出现,则判断哪一个字符串先有结束符,则按要求返回指定的字符串。参考答案:#includechar*fun(char*s,char*t)(inti;char*p=s,*q=t;fbr(i=O;*p&&*q;i++){p++;q++;}/************Cund************/prinlf(',%cM*a);Iiif<*p==0&&*q==0)returns;if(*p)returns;elsereturnt;)main(){chars[10]="abcd";prinlfC处理前字符串=%s

1480处理后字符串=",s);fun(s);printfCAn");}}main(){chara[20],b[20];printf("Input1thstring:");gets(a);printf("Input2thstring:");解题思路:第一处:形参a应定义为字符串指针。第二处:语句中缺少逗号。***************************************************请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返眄1第•个字符串。例如,输入beijingvCR>shanghai(为回车键).函数将返回shanghaio注意:部分源程序存在文件PROGLC中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includechar*fun(char*s,char*1){ge(s(b);printf(,'%s

1481",fun(a,b));NONO();INONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp.*wf;inti;chara[20]tb[20];fp=fopen("c:\\testWn.dat","r");wf=fopen("c:\\(est\\out.dat","wM);for(i=0;i<10;i++)(fscanf(fp.M%s%sM.a.b);fprintf(wf,"%s

1482",fun(a.b));}fclose(fp);fclose(wf);1※※※※※※※※※※※※※※※※※※※※※※※※派第94套:}main(){chara[20],b[20];printfi("Input1thstring:");gets(a);printf("Input2thsiring:");gets(b);printf(',%s

1483,,.fun(a,b));NONO();}函数fun的功能是:计算的前n项之和。若x=2.5,n=15时,函数值为:1.917914。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/HLE*fp,*wf;inti;chara(20],b[20];fp=fopen("c:\Mesl\\in.daT',T);wf=fopenC^czWtestWout.daf'/'w");for(i=0;i<10:i++)(#includedoublefun(doublex,intn){doublef,I;inti;/**********foun(i**********/f=—1—;t=-1;for(i=l;i

1484/**********found**********/t*=(__2__)*x/i;/**********f0und**********/f+=—3—;)returnf;main(){doublex,y;x=2.5;y=fun(x,15);printf("

1485Theresultis:

1486M);printf("x=%-!2.6fy=%-12.6f

1487M,x,y);)解题思路:第一处:根据公式可知,变量f的初值为1。第二处:根据公式可知,此处是正负号的变换,所以应填:第三处:计算的结果进行累加并赋值给变量3所以应填:I。给定程序MODI1.C中函数fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为•组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表向球数.k的值代表黑球数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(){inti.j,k.sum=0;printf("

1488Theresult:

1489

1490M);/**************f0und**************/fbr(i=O;i<=3;i++){for(j=l;j<=5;j++){k=8-i-j;/**************found**************/if(K>=0&&K<=6){sum=sum+l;printf("red:%4dwhite:%4dblack:%4d

1491",i.j,k);returnsum;main(){intsum;sum=fun();printf("sum=%4d

1492

1493*'.sum);解题思路:第一处:外for循环的初始变量i的值应为1«第二处:变量k写成了大写K了。***************************************************请编写函数fun,其功能是:计算并愉出下列多项式的值:例如,在主函数中从键盘给n输入15,则输出为:42.718282。注意:要求n的值大于1但不大于100。部分源程序在文件PROGLC中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#inchidedoublefun(intn))main(){intn;doubles;printfC'Inputn:");scanf(M%d",&n);s=fun(n);printf("s=%f

1494",s);NONOO;NONOO{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("c:\MestWin.dat",'Y");wf=fopenC'ciWtestWout.dat'V'w");for(i=0;idoublefun(intn){doubles=l;longt=l;inti;for(i=l;i<=n;i++){/♦计算阶乘*/s+=17t;/*计算母项的值并累加至变量s中*/1returns;/♦返回多项式的值♦/main(){intn:doubles;printfC'Inputn:");scanf("%d",&n):s=fun(n);printf("s=%f

1495",s);NONO();}NONO(){/*请在此函数内打开文件,愉入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("c:\\tesl\\in.da「T);wf=fbpen("c:\\lest\\oul.dal","w");for(i=0;i<10;i++){fscanf(rf."%d",&n);s=fun(n);fprintf(wf,"%lf

1496",s);)fclose(rf);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第95套:给定程序中,函数fun的功能是:计算NXN矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩阵:123456789fun函数首先累加I、5、9,然后累加3、5、7,函数的返回值为30。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4fun(intt[][N],intn){inti,sum;/**********found**********/for(i=0;i

1497ThcoriginaldataiXn'1);for(i=0;i

1498");printfCTheresultis:%d",fun(t,N));)解题思路:第•处:变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:sum=Oo

1499第二处:对主对角线元素值累加,所以应填:第三处:对反向对角线元素值累加,所以应填:***************************************************例如,若给m输入“00,给n输入90,则函数求得的一个根值为2.000。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#includedoublefunx(doublex){retum(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen)]/************Cund************/intr;r=(m+n)/2;/************Cund************/while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r;\TABelsen=r:\TABr=(m+n)/2;}returnr;)main(){doublem.n.root;printf("Entermn:

1500");scanf("%lf%ir',&m,&n);root=fun(m,n);printf('rroot=%6.3f

1501".root);}解题思路:第一处:变量r应该定义为实数型double或浮点型float变量:。第二处:while必须先满足条件,才做循环体的内容,所以应改为:while(fabs(m-n)>0.()01).***************************************************假定输入的字符串中只包含字母和*号。请编写函数ftin,它的功能是:除了字符串前导和尾部的*号之外.将串中其它*号全部删除。形参h已指向字符串中第•个字母,形参p己指向字符串中最后个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:秘**A*BC*DEF*G********,删除后,字符申中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a,char*h,char*p){Imain(){chars[81].*t,*f;printf("Enterastring:

1502");gets(s);t=f=s;while(*t)t++;t-;while(*f='*,)f++;fun(s,f,t);printf("Thestringafterdeleted:

1503");puts(s);NONOO:}NONOO{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti:chars[8l],*t,*f;in=fopen("c:\Vest\\in.dat".T);out=fopen("c:\\tes(\\out.dat"."w");for(i=0;i<10;i++){fscanf(in,"%s",s);(=f=s;while(*t)t++;(-;while(*t='*)l—;while(*f='*,)f++;fun(s,f,t);fprinlf(out,"%s

1504",s);)fclose(in);fclose(out);}解题思路:本题是考察字符串的操作。1.把1■指针左边的字符仍存放字符串a首地址开始的位置ho2.把r指针和p指针中间的字符进行判断,其字符是否是如果不是田,则把这些字符放到第1步操作字符串a的后面;3.把p指针右边的字符放到第2步操作字符串a的后面。4.最后给字符申a加上结束符。参考答案:#includevoidfun(char*a,char*h,char*p)intj=0;char*q=a;while(*q&&q

1505");gets(s);t=f=s;while(*t)t++:t";while(*t=='*^t~;while(*f='*,)f++:fun(s,f,();printfCThestringafterdeleted:

1506");puts(s);NONOO;}NONO(){/*本函数用于打开文件,谕入数据,调用函数,愉出数据,关闭文件。*/FILE*in,*out;inti;chars(81],*t,*f;in=fopen("c:\\test\\in.dat,,,MrM);out=fopen(''crWteslWout.dat",Mw");for(i=0:i<10:i++){fscanf(in,"%s",s);(=f=s;while(*t)t++;t-:while(*t=='*')l—;while(*f='*,)f++;fun(s,f,t);fprintffout."%s

1507",s);Ifclose(in);fclose(out);}※※※※※※※※※※※※※※※※※※※※※※※※※第96套:给定程序中,函数fun的功能是:有NXN矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:123456789计算结果为74I852963请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4voidfun(int(*t)(NJ){intj,r(N];for(j=0;j=0;2)l[N-l][N-l-j]=tU][N-l];for(j=N-l;j>=0;j)/**********found**********/CUHN-I]=r[_3_1;}main(){intt[J(N]=(21J2,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf("

1508Theoriginalarray:

1509'^);for(i=0;i

1510M);}fun(t);printf("

1511Theresultis:

1512");for(i=0;i

1513");)

1514}解题思路:第一处:把第1列上的数存放到第1行上,所以应填:0。第二处:for循环的增量值,由于循环是从大到小递减,所以应填:j-。第三处:把临时数组中的元素成为最后一列,所以应填:jo***************************************************给定程序MODI1.C中函数fun的功能是:计算S=f(-n)+f(-n+1)+...+fi(0)+f(l)+fi[2)+...+«n)的值。例如,当n为5时,函数值应为:10.407143.f(x)函数定义如下:r(x+l)/(x-2)x>0且xW2f(x)=T0x=0或x=21-(x-l)/(x-2)x<0请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/************found************/f(doublex)]if(x==0.0IIx=2.0)return0.0;elseif(x<0.0)return(x-l)/(x-2);elsereturn(x+l)/(x-2);Idoublefun(intn){inti;doubles=0.0,y;for(i=-n;i<=n;i++)(y=f(1.0*i);s+=y;|/************found************/returns1main()(printfC'%^",fun(5));1解题思路:第一处:由于返回值是实数型值,所以在函数名前加上double。第二处:语句后缺少分号。***************************************************编写函数fun,它的功能是计算:s作为函数值返回。在C语言中可调用log(n)函数求In(n)olog函数的引用说明是:doublelog(doublex)»例如,若m的值为:20,fun函数值为:6.506583。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(intm){}main()(printf("%f

1515",fun(20));NONO();NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/FILE*fp,*wf;inti,n;doubles;fp=fopen("c:\\test\\in.dat",,'r");wf=fopenC'ciWtestWout.dat'Vw");for(i=0;i<10;i++)(fscanf(fp,M%dM,&n);s=fun(n);fprintf(wf,s);)fclose(fp):fclose(wf);}解题思路:本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,循环结束后再对s求平方根,结果仍存入s中,最后返回s。参考答案:#include#includedoublefun(intm)doubles=0.0;inti;for(i=I;i<=m;i++)s+=log(l.0*i);s=sqrt(s);returns;}main()(printf("%f

1516",fun(20));NONO();)NONO(){/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/HLE*fp.*wf;inti,n;doubles;fp=fopen("c:\\test\\in.datH,"r");wf=fopen("c:\MesiWoul.dal"Jw");for(i=0;i<10;i++){fscanf(fp.H%d".&n);s=fun(n);fprintf(wf,"%f

1517'\s);}fclose(fp);fclose(wf);}※※※※※※※※※※※※※※※※※※※※※※※※※第97套:函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、Io形参n给出数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(in

1518");for(i=0;i<9;i++)printf("%4dw,b[ij);printf("

1519M);fiin(b,9);prin(f("

1520Thedataafterinvert:

1521M);for(i=0;i<9;i-H-)printf("%4dM,b(i]);printf("

1522");}解题思路:第一处:利用for循环语句,对数组中的各元素进行逆置,所以终止值为n/2。第二处:进行交换数组中元素的值,由于是依次是首和尾交换,所以应填:i。第三处:使用中间变量I来交换的,所以应填:a(n-i-l]0给定程序MODI1.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符中最多只能包含5位八进制数字字符。

1523例如,若输入:77777,则输出将是:32767。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includeintfun(char*p){intn;/**********found**********/n=♦P-'o';p++;while(*p!=0){/**********found**********/\TABn=n*8+*P-,o,:\TABp++;}returnn;}main(){chars[61;inti;intn;printf("Enterastring(Ocataldigits):M);ge(s(s);if(strlen(s)>5){printf("ErrorStringtoolonger!

1524

1525");exit(0);}for(i=0;s[i];i++)if(s[i]<'0,lls[i]>7,){printf("Error:%cnotisocataldigils!

1526

1527",s[i]);exil(O);}printfCTheoriginalstring:**);puts(s);n=fun(s);printf("

1528%sisconveredtointegernumber:%d

1529

1530",s,n);)解题思路:第•和第二处:*p错用成"P,'0'错写成***************************************************学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun、它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN16typedefstruct{charnum(10];ints;)STREC;STRECfun(STREC*a,char*b){)main()(STRECs[N]={{"GAOO5”.85}.{"GA003”.76},{“GA002".69},{“GAOO4”,85},\TAB\TABf'GAOO1",91},{"GA007\72},{,,GA008",64},{MGA(X)6",87},\TAB\TAB{"GA015”,85}.{"GAO13",91}.{“GAO12",64},{MGAO14\91},\TAB\TAB{"GAOir',77},{“GAO17",64},{"GA018,,,64M"GA016",72}|;STRECh;charm[10];inti;FILE*out;printf('Theoriginaldaia:

1531");for(i=0;i

1532");printf("%s%3d”闻i].num,s[i].s);}printf("

1533

1534En(erthenumber:M);gets(m);h=fun(s,m);printf('Thedata:printf("

1535%s%4d

1536",h.num,h.s);prinlf("

1537M);out=fopen("c:\\test\\out.dat11w");h=fun(s,',GAO13M);fprintf(out,"%s%4d

1538,\h.num,h.s);fclose(out);}解题思路:本题是从学生记录体中找出给定的学号。具体操作请看答案程序中的说明。参考答案:#include#include#defineN16typedefstruct{charnum[10];ints;}STREC;STRECfun(STREC*a,char*b)(STRECc;inti;c.numfO]=¥>*;/♦置初始空串♦/c.s=-l;/♦置成绩为-I*/for(i=0;i

1539H);for(i=0;i

1540M);printf("%s%3d",s[i].num,s[i].s);}printf("

1541

1542Enterthenumber:");gets(m);h=fun(s,m);printfCThedata:");printf("

1543%s%4d

1544",h.num,h.s);prinlfCXn1');out=fopen("c:\\test\\out.dat","w");h=fun(s,"GAO13");fprintf(out/%s%4d

1545M,h.num,h.s);fclose(out);}※※※※※※※※※※※※※※※※※※※※※※※※※第98套:给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号:若不存在值为ch的结点,函数返回。值。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#inciude#defineN8typedefstructlist{intdata:structlist*next;}SLIST;SLIST*creatlist(char♦);voidoutlisKSLIST*);intfun(SLIST*h.charch){SLIST*p;intn=0;p=h->next:/**********found**********/while(p!=1){n++;/**********found**********/if(p-xiata==ch)return2;elsep=p->next;1return0;|main(){SLIST*head:intk;charch;charalNJ={,m',,p',,g',,a,;w,;x,;r,;d,};head=creatlist(a);outlist(head);printf("Enteraletter:");scanf("%c".&ch);/**********found**********/k=fun(_3_);if(k==0)printf('AnNotfound!

1546");elseprintfCThesequencenumberis:%d

1547,,,k);ISLIST*creatlisl(char*a){SLIST*h,*p,*q:inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0:inext=q;p=q;)p->next=O;return忙)voidoutlist(SLIST*h){SLIST*p:p=h->nex(;if(p==NULL)printf("

1548ThelistisNULL!

1549");else{printf("

1550Head,');do{printf(M->%cM,p->data);p=p->next;)

1551while(p!=NULL);printfi(*->End

1552M);)}解题思路:本题是在给定的链表中要求找出指定的值。第一处:判断p是否结束,所以应填:NULL。第二处:在函数fun中,使用n来计算结点的位置,当找到ch值,则返回结点的位置n,所以应填:returnn»第三处:函数调用,在主函数中已经给出了head和ch,所以应填:head.ch0给定程序M0DI1.C中函数fun的功能是:删除p所指字符串中的所有空白字符(包括制表符、【用车符及换行符)。输入字符串时用#结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includefiin(char*p){inii,t;charc[80];/************l^und************/For(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c(t-H-]=p[i];/************found************/c[tl=A0H;strcpy(p,c);)main(){charc,s[80|;inti=0:printft"Inputastring:");c=getchar();while(c!='#'){s[i]=c;i++;c=ge(char();}s[i]=\0';fun(s);puts(s);}解题思路:第•处:保留字f。「错用成For。第二处:置字符串结束符错误,应该是:V)'。请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4EFg",则应输出“aBc4EFg"。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#includevoidfun(char*ss){)main(){chartt(8l];prin(f("

1553Pleaseenteranstringwithin80characters:

1554");gets(tt);printf("

1555

1556Afterchanging,thestring

1557V'%s\"",tt);fun(tt);printf("

1558becomes

1559tt);NONO();1NONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/HLE*fp.*wf;chartt[8l];inti;fp=fopen(,'c:\\test\\in.datM,Mr");wf=fopen("c:\\test\\out.dat"."w'');fbr(i=0:i<10;i++){fscanf(fp,"%s'\tt);fiin(tt);f]3rintf(wf,"%s

1560'\tt);Ifclose(fp);fclose(wf);1解题思路:本题是考察考生对字母按要求进行转换。其中大小字母的ASCII值相差32。参考答案:#include/includevoidfun(char*ss){inti;for(i=1;i='a'&&ss[i]<='z')ss[i]-=32;}}main(){chartt[81];printf("

1561Pleaseenteranstringwithin80characters:

1562*');gets(tt);printf("

1563

1564Afterchanging,thestring

1565\M%s\K",tt);fun(tt);printf("

1566becomes

1567\"%s\,'

1568'\tt);NONO();1NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*印,*wf;charU[81];inti;fp=fopenC'crWteslWin.daCV'r");wf=fopen("c:\\test\\out.dat","wH);for(i=0;i<10;i++){fscanf(fp,tt);fun(tt);fprintf(wf,tt);Ifclose(fp);fclose(wf);)※※※※※※※※※※※※※※※※※※※※※※※※※第99套:函数fun的功能是:将膨参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、I、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN9voidfun(inta[],intn){inti,t,p;/**********f0und**********/p=(n%2=O)?n/2:n/2+_1_;for(i=0;i

1569main(){intb[N]=(1,2,3,4,5,6,7,89},i;printfCAnThcoriginaldata:

1570");for(i=0;i

1571M);fun(b,N);prinlf("

1572Thedataaftermoving:

1573");for(i=0;i

1574M);}解题思路:第一处:如果n是奇数,则中间的元素不动,所以应填:I。第二处:使用foi•循环语句来交换数组元素的值,所以应填:i.第三处:使用中间变量I来交换的,所以应填:I。***************************************************给定程序MOD11.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输出结果应当是:a=55.0.b=34,0,c=12.0o请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includevoidfun(float*a,float*b,float*c)(/**********Cund**********/float*k;if(*a<*b){k=*a;*a=*b;*b=k;)if(*a>*c){k=*c;*c=*a;♦a=k;}if(*b<*c){k=*b;*b=*c;*c=k;)Imain(){floata,b,c;printf("Inputabc:scanf(',&a.&b,&c);prinlf("a=%4.1f,b=%4.1f,c=%4.1f

1575

1576",a,b,c);fun(&a,&b,&c);prinlf("a=%4.1f,b=%4.1f,c=%4.1f

1577

1578",a,b,c);1解题思路:第一处:在函数fun体中,k是一个浮点型变量,所以应改为:floatk;.第二处:三个数比较大小,第1个条件是第1个比第2个小,则交换。第3个条件是第2个比第3个小,则也交换。第2个条件是应该第1和第3个小,则交换就符合题意了,所以应改为:if(*a<*c)<.***************************************************学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:/include#defineN16(ypedefstruct{charnum[l()];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{"GA05",85},{°GA03M,76},{"GA02",69},{"GA04*\85},\TAB\TAB{"GAOr^l).「GA07”,72},{"GA08”.64},{“GA06”,87).\TAB\TAB("GAOI5”,85},{PAO13”,91M”GA012”,64},「GA014191},\TAB\TAB{"GAOII",77},{"GAO17”,64),{"GAO18';64},{"GA016';72}};STRECh[N];inii.mFILE*ou(;n=fun(s.h);printf('The%dhighestscore:

1579",n);for(i=0;i

1580",h[i].num.h(i].s);printf("

1581");out=fopen("c:\\test\\out.dat"w");fprintf(out."%d

1582".n);fdr(i=O;i

1583M,h[i].s);fclose(out):1解题思路:本题是找出最高成绩,再把N名学生的成绩等于最高成绩的记录存入b所指的数组中。具体操作请看答案程序中的说明。参考答案:#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a.STREC*b){inii,max=a[0].s,n=0;for(i=1;i

1584",n);fbr(i=O;i

1585",h[i].num,h[i].s);printf("

1586");out=fopen("c:\\test\\out.dat11w");fprinif(out."%d

1587M.n);fbr(i=O;i

1588,\h[i].s);fclose(out):}※※※※※※※※※※※※※※※※※※※※※※※※※第100套:给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入•个与之相同的字符,若找不到相同的字符则函数不做任何处理。例如,s所指字符串为:baacda,c中的字符为:a,执行后s所指字符串为:baaaacdaao请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,charc){intuj,n;/**********found**********/for(i=0;s[i]!=_I—;i++)if(s[i]=c)/**********foun(j**********/n=_2_;while(s[i+1+n]!='\0,)n++;for(j=i+n+I;j>i;j-)sU+H=s[j];/**********found**********/s[j+l]=_3—;i=i+l;})main(){chars[80]="baacda",c;printf("

1589Thestring:%s

1590",s);printf("

1591lnputacharacter:0);scanf("%c'\&c);fun(s,c);printf("

1592Theresultis:%s

1593H,s);解题思路:第一处:在for循环中终止值要判断字符串是否结束符,所以应填:¥),(.第二处:n用于统计参数c后还有多少个字符,要对其进行初始化,

1594所以应填:0»第三处:要求插入相同的字符c,所以应填:Co***************************************************在主函数中从键盘愉入若「个数放入数组中,用。结束输入并放在最后一个元素中。给定程序MODI1.C中函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intx[]){/************found************/intsum=0.0;intc=0,i=0:while(x(i]!=0){if(x[i]>0)(sum+=x[i];c++;}i++;I/************found************/sum\=c;returnsum;}main(){intx[1000];inti=0;printf("

1595Pleaseentersomedata(endwith0):");do{scanfC^d",&x[i]);}while(x[i++]!=0);printf(,,%f

1596,'.fun(x));}解题思路:第•处:由于sum是存放实数值,因此不能定义为整型,所以应改为doublesum=0.0;或floatsum=0.0;<>第二处:除的运算符是***************************************************编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回:n通过形参传入。111S=1+++...+1+21+2+3l+2+3+...+n例如:若n的值为“时,函数的值为:1.833333注意:部分源程序在文件PROGLC中。请勿改动主函数main和其它函数中的任何内容,仅在函数ftin的花括号中填入你编写的若干语句。给定源程序:#includefloatfun(intn)()main(){intn;floats;printf("

1597PleaseenterN:"):scanf(,,%d,\&n);s=fun(n);printf("(heresultis:%f

1598",s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。HLE*fp.*wf;inti,n;floats;fp=fopen("c:\\test\\in.dat",Mr");wf=fopen("c:\Mesi\\oul.dal","w");for(i=0;ifloatfun(intn)

1599intij,(;floats=0;fbr(i=l;i<=n;i++){1=0;for(j=lj<=i;j++)t+=y;s=s+l./t;}returns;}main(){intn;floats;printf("

1600PleaseenterN:M);scanf("%d".&n):s=fun(n);printf("(heresultis:%An",s);NONO();)NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。♦/FILE*fp.*wf;inti,n;floats;fp=fopen("c:\\test\\in.dat",,'r");wf=fopen("c:\\test\\out.dat,,,,,w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,s);)fclose(fp);fclose(wf);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭