二级C语言上机题库100题

二级C语言上机题库100题

ID:83017012

大小:351.01 KB

页数:314页

时间:2023-09-19

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

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

说明:本题库是针对2008年4月份考试的上机考试题库,本题库共有100套题目(每套题目包含3道题:一道程序填空题、一道程序修改题、一道程序设计题),真实考试的时候,考生输入准考证后计算机随机为你抽取一套考试,每个考生考试时只需考一套题目(包含三道题),但由于考试时是随机抽题,所以即使把原题库告诉大家,你也不能知道到时计算机会给你抽取哪一套题,所以大家只有把全部题库都理解才能万无一失)※※※※※※※※※※※※※※※※※※※※※※※※※第01套:给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(unsignedlong*n){unsignedlongx=0,i;intt;i=l;while(*n)/**********found**********/{t=*n%_1_;/**********'f^und**********/if(t%2!=_2_){x=x+t*i;i=i*10;}*n=*n/10;)/**********found**********/*n=_3_;}main(){unsignedlongn="l;while(n>99999999lln<0)

1{printf(MPleaseinput(O

2Theresultis:%ld

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

4

5%d!=%lf

6

7u,n,fun(n));解题思路:第一处:条件语句书写格式错误,应改为:if(n==O)。第二处:语句后缺少分号。

8请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234”,则函数把它转换为整数值-1234。函数fun中给出的语句仅供参考。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includelongfun(char*p)(/*以下代码仅供参考*/inii,len,t;/*len为串长,l为正负标识*/longx=0;len=strlen(p);if(plOJ==-*){t=-l;len-;p++;}elset=1;/*以下完成数字字符串转换为一个数字*/returnx*t;}main()/*主函数*/{chars[6J;longn;printf(MEnterastring:

9H);gets(s);n=fun(s);printf(M%ld

10H,n);NONO();NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chars[20J;longn;

11fp=fopen(Mc:\\test\\in.datn,MrM);wf=fopen(Hc:\\test\\out.datu,Mwn);for(i=0;i<10;i++){fscanf(fp,M%sM,s);n=fun(s);fprintf(wf,"%ld

12”,n);}fclose(fp);fclose(wf);}解题思路:本题是将一个数字字符串转换为一个整数。参考答案:#include#includelongfun(char*p)(/*以下代码仅供参考*/inti,len,t;/*len为串长,t为正负标识*/longx=0;len=strlen(p);if(P10D{t=-l;len-;p++;}elset=l;/*以下完成数字字符串转换为一个数字*/while(*p)x=x*10-48+(*p++);returnx*t;main()/*主函数*/{chars[6J;longn;printfCTnterastring:

13H);gets(s);n=fun(s);printfC%ld

14';n);NONO();)

15NONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chars[20];longn;fp=fopen("c:\\test\\in.dat","r");wf=fopen("c:\\test\\out.dat",“w”);for(i=0;i<10;i++){fscanf(fp,H%sM,s);n=fun(s);fprintf(wf,"%ld

16",n);)fclose(fp);fclose(wf);}注意:由于NONO()这个函数是改卷人用的,与考生没有什么关系,故卜面从第2套试题开始均省略NONO()※※※※※※※※※※※※※※※※※※※※※※※※※第02套:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,inta,doublef)/**********found**********/-1—fp;charch;

17fp=fopen(Hfilel.txtn,nwn);fprintf(fp,M%s%d%f

18",s,a,f);fclose(fp);fp=fopen(nfilel.txtn,V);printf("

19Theresult:

20

21u);ch=fgetc(fp);/**********found**********//**********f^)und**********/putchar(_3_);ch=fgetc(fp);}putcharC^n1);fclose(fp);main(){chara[10]=MHello!H;intb=12345;doublec=98.76;fun(a,b,c);解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE*。第二处:判断文件是否结束,所以应填:fp。第三处:显示读出的字符,所以应填:ch。给定程序MODH.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s){inti,j;for(i=0,j=0;!='()';i++)if(s[i]>='O'&&s[i]v='9')/**********f^)und**********/s[j]=s[iJ;/**********found**********/s|j]="\O";

22)main(){chariteml80J;printf(M

23Enterastring:M);gets(item);printf(M

24

25Thestringis:\"%s\"

26”,item);fun(item);printf(M

27

28Thestringofchangingis:\"%s\"

29"jtem);)解题思路:第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j来控制新字符串的位置,所以应改为:s[j++]=s[i];。第二处:置新字符串的结束符,所以应改为:s[j]=vy;.请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,二维数组中的数据为:WWWWSSSSHHHH则字符串中的内容应是:WSHWSHWSHo注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineM3#defineN4voidfun(chars[][N],char*b)(inti,j,n=O;for(i=0;i

30printf("Thematrix:

31");for(i=0;i

32");)fun(w,a);printf("TheAstring:

33");puts(a);printf("

34

35");NONO();}解题思路:本题是把二维数组中的字符数据按列存放到一个字符串中。1.计算存放到一维数组中的位置。2.取出二维数组中的字符存放到一维数组(已计算出的位置)中。参考答案:voidfun(chars[][N],char*b)inti,j,n=O;for(i=0;i#defineN5typedefstructstudent{longsno;charname[10J;floatscore[3];}STU;voidfun(char*filename,STUn)

36{FILE*fp;/**********found**********/fp=fopen(_l_,Mrb+n);fseek(_2_,-lL*sizeof(STU),SEEK_END);/**********tound**********/fwrite(&n,sizeof(STU),1,_3—);fclose(fp);)main(){STUt[N]={{10001,MMaChaoM,91,92,77},{10002,nCaoKaiM,75,60,88},{10003JLiSi”,85,70,78},{10004JFangFang”,90,82,87},{10005,"ZhangSan",95,80,88));STUn={10006,HZhaoSi'\55,70,68},ss[N];inti,j;FILE*fp;fp=fopen(Mstudent.datn,Mwb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen(Mstudent.datn,"rb*');fread(ss,sizeof(STU),N,fp);fclose(fp);printf("

37Theoriginaldata:

38

39M);for(j=0;j

40No:%ldName:%-8sScores:M,ss[j].sno,ss|j].name);for(i=0;i<3;i++)printf(M%6.2fss|jj.score[ij);printf(H

41M);)fun(Hstudent.datH,n);printf(M

42Thedataaftermodifing:

43

44M);fp=fopen(',student.dat,','Yb1');fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=O;j

45No:%ldName:%-8sScores:H,ss[j].sno,ss|j].name);for(i=0;i<3;i++)printf(M%6.2fM,ss[j].score[i]);printf(H

46K);解题思路:本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。

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

48

49THELIST:

50

51HEAD");while(p){printf(M->%dH,p->data);p=p->next;)printf(M

52H);

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

54*');gets(line);num=fun(line);printf(uThenumberofwordis:%d

55

56",num);NONO();解题思路:本题是统计字符串中的单词数。

571.利用while循环语句和指针变量,当字符为空格时,则单词数k加1。2.循环结束返回k。参考答案:intfun(char*s)(intk=1;while(*s){if(*s==**)k++;s++;)returnk;※※※※※※※※※※※※※※※※※※※※※※※※※第04套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename){FILE*fp;inti,j;STUs[NJ,t;/**********tound**********/fp=fopen(filename,_1_);

58fread(s,sizeof(STU),N,fp);fclose(fp);for(i=0;i

59

60Theoriginaldata:

61

62");for(j=0;jvN;j++){printf(M

63No:%ldName:%-8sScores:H,t[j].sno,t|j].name);for(i=0;i<3;i++)printf(M%6.2fn,t[j].score[i]);printf("

64");}fun(Mstudent.datM);printf(n

65

66Thedataaftersorting:

67

68M);fp=fopen(Mstudent.dat",nrbH);fread(ss,sizeof(STU),5,fp);fclose(fp);for(j=0;j

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

70");)}

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

72Enterastring:");gets(s);printf("

73Thestring\"%s\"

74",s);

75printf("

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

77Thestringafterinsert:\"%s\"

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

79");for(i=0;i

80":n%4dH,age[iJ);printf(H

81

82H);fun(age,d);for(i=0;i<10;i4-+)printf("%4d一%4d:%4d

83M,i*10,i*10+9,d[iJ);printfCOver100:%4d

84,,,d[10J);NONO(d);)

85解题思路:本题是统计各年龄段的人数。1.初始化各年龄段人数为0。2.使用for循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于10,则存入d[10]中(大于110岁的人)。参考答案:voidfun(int*a,int*b)(inti,j;for(i=0;i10)b[M-1]++;elseb[j]++;}Idoublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);※※※※※※※※※※※※※※※※※※※※※※※※※第05套:给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*s,inta,double0(/**********found**********/

86_1—fp;charstr(100],strl[100],str2[100J;intal;doublefl;fp=fopen(nfilel.txtn,Hwn);fprintf(fp,H%s%d%f

87",s,a,f);/**********found**********/—2_;fp=fopen(,,filel.txtH,V);/**********found**********/fscanf(_3—,,,%s%s%sn,str,strl,str2);fclose(fp);al=atoi(strl);fl=atof(str2);printf(M

88Theresult:

89

90%s%d%f

91u,str,al,fl);)main(){chara[10]=MHello!M;intb=12345;doublec=98.76;fun(a,b,c);解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE*。第二处:关闭刚写入的文件,所以应填:fclose(fp)。第三处:从文件中读出数据,所以应填:fp»给定程序M0DI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(mW10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include

92#defineN10typedefstructss{charnum[10J;ints;}STU;STU*fun(STUa[],intm){STUb[NJ,*t;inti,j,k;/**********found**********/t=(STU*)calloc(sizeof(STU),m)for(i=0;ib|jj.s)j=i;t(k)=b(j);b[jJ.s=O;returnt;outresult(STUa[J,FILE*pf){inti;for(i=0;i

93'\a[i].num,a[i].s);fprintf(pf,M

94

95M);}main(){STUa[NJ={{“AOI”,81},{“A02”,89},{“A03”,66},{“A04”,87},{“A05”,77},{“A06”,90},{HA07M,79},{“A08”,61},{“AO9”,8O},{”A10n,71}};STU*pOrder;inti,m;printf(M*****TheOriginaldata*****

96M);outresult(a,stdout);printf("

97Givethenumberofthestudentswhohavebetterscore:*');scanf(H%d",&m);while(m>10)

98{printf(M

99Givethenumberofthestudentswhohavebetterscore:");scanf(n%d",&m);)pOrde=fun(a,m);printf(M*****THERESULT*****

100K);printf("Thetop:

101");for(i=0;i

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

103

104Thedataafterdeleted:

105n);for(i=0;i

106

107n);NONO();}解题思路:

108本题是删除已排序过数组中的相同数。1.取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。2.如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制,接着把这个数重新存入匕如果相同,则取下一数。参考答案:intfun(inta[],intn)(inti,j=1,k=a[OJ;for(i=1;idoublefl(doublex){returnx*x;}doublef2(doublex,doubley){returnx*y;}/**********f^)und**********/_1_fun(inti,doublex,doubley){if(i==D/**********found**********/return_2_(x);else/**********found**********/

109return_3_(x,y);}main(){doublexl=5,x2=3,r;r=fun(l,xl,x2);r+=fun(2,xl,x2);printf(M

110xl=%f,x2=%f,x1*x1+x1*x2=%f

111

112M,x1,x2,r);解题思路:本题是根据给定的公式来计算函数的值。第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:doubleo第二处:当i等于1时,则返回fl函数的值,所以应填:fl。第三处:如果i不等于1,则返回f2函数的值,所以应填:已。给定程序MODH.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********found*********不/charfun(char*s,char*t){intsl=O,tl=O;char*ss,*tt;ss=s;tt=t;while(*ss){sl++;/**********found**********/(*ss)++;)while(*tt){tl++;/**********f^^und*********¥/(*tt)++;)if(tl>sl)returnt;elsereturns;)main()

113{chara[80J,b[80],*p,*q;inti;printf("

114Enterastring:n);gets(a);printf(H

115Enterastringagain:");gets(b);printf(n

116Thelongeris:

117

118V,%s\M

119,,,fun(a,b));}解题思路:第,处:试题要求返回字符串的首地址,所以应改为:char*fun(char*s,char*t)第二处:取字符串指针SS的下一个位置,所以应改为:SS++;。第三处:取字符串指针tt的下一个位置,所以应改为:U++;。请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHIJKABCo注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN80voidfun1(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/(inti;chart;t=w[OJ;for(i=0;i

120printf(MTheoriginalstring:

121'*);puts(a);printf(M

122

123Enterm:");scanf(”%d”,&m);fun(a,m);printf(u

124Thestringaftermoving:

125u);puts(a);printf(n

126

127M);NONO();解题思路:本题是考察字符串的操作。1.由于函数funl是将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符串。2.利用循环for语句来操作多少个字符(m)需要循环左移。参考答案:voidfunl(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/(inti;chart;t=w[0J;for(i=0;i

128注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includetypedefstruct{intnum;charname[9J;charsex;struct{intyear,month,day;)birthday;floatscore[3J;}STU;/**********f^)und**********/voidshow(STU1){inti;printf(n

129%d%s%c%d-%d-%dM,tt.num,tt.name,tt.sex,tt.birthday.year,tt.birthday.month,tt.birthday.day);for(i=0;i<3;i++)/**********found**********/printf(H%5.ir,—2_);printf("

130M);}main(){STUstd={1/'Zhanghua'/M;1961,10,8,76.5,78.0,82.0};printf("

131Astudentdata:

132u);/**********f^)und**********/show(3);}解题思路:本题是利用结构体变量存储了一名学生的信息。第一处:tt变量在函数体fun已经使用,所以应填:tt。第二处:利用循环分别输出学生的成绩数据,所以应填:tt.score[i]。第三处:函数的调用,所以应填:std。给定程序MODH.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[l]中的数对调。

133请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN20intfun(int*a,intn){inti,m,t,k;for(i=0;i<2;i++){/**********found**********/m=0;for(k=i+l;ka[m])k=m;t=a[i];a[i]=a[m];a[m]=t;main(){intx,b[NJ={11,5,12,0,3,6,9,7,10,8},n=10,i;for(i=0;i

134M);fun(b,n);for(i=0;i

135M);}解题思路:第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:m=i;。第二处:通过内循环来找出最大的一个数的位置k,所以应改为:if(a[k]>a[m])m=k;。请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n22)位的整数,函数求出w的低n-1位的数作为函数值返回。例如:w值为5923,则函数返回923:w值为923则函数返回23。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includeunsignedfun(unsignedw)

136{unsignedx;printf(''Enteraunsignedintegernumber:");scanf("%u”,&x);printf(MTheoriginaldatais:%u

137n,x);if(x<10)printfC'Dataerror!n);elseprintf(nTheresult:%u

138M,fun(x));NONO();)解题思路:本题是考察考生怎样获取一个符合要求的无符号整数。本题是应用if条件语句首先判断给出的数是几位数,再模相应的值,最后得出的余数就是结果。参考答案:unsignedfun(unsignedw)(if(w>10000)w%=10000;elseif(w>1000)w%=1000;elseif(w>100)w%=100;elseif(w>10)w%=10;returnw;}※※※※※※※※※※※※※※※※※※※※※※※※※第08套:给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includetypedefstruct{intnum;charname[9];floatscore[3J;

139}STU;voidshow(STUtt){inti;printf(M%d%s:H,tt.num,tt.name);for(i=0;i<3;i++)printf(n%5.1f\tt.score[ij);printf(H

140M);)/**********found**********/voidmodify(1*ss,floata){inti;for(i=0;i<3;i++)/**********f^)und**********/ss->2*=a;)main(){STUstd={1;'Zhanghuan,76.5,78.0,82.0};floata;printf("

141Theoriginalnumberandnameandscores:

142n);show(std);printf(H

143Inputanumber:");scanf(H%f\&a);/**********found**********/modify(_3—,a);printf("

144Aresultofmodifying:

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

146#includelongfun(intk)/************found************/ifk>0/************tound************/elseif(k=0)returnIL;}main(){intk=10;printf(M%d!=%ld

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

148{inta[N][N],n,i,j;printf(H*****Thearray*****

149M);for(i=0;i

150H);)don=rand()%!0;while(n>=3);printf(Mn=%4d

151

152);fun(a,n);printf(*******THERESULT*****

1530);for(i=0;i

154H);}NONO();)解题思路:本题是利用两重循环给二维数组左下三角元素中的值乘以n。参考答案:intfun(inta[][N],intn)(inti,j;for(i=0;i

155不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;p=h;while(p){/**********tound**********//**********f^)und**********/{if(p->data>q->data){t=p->data;p->data=q->data;q->data=t;}q=q->next;p=_3_;))NODE*creatlist(inta[J){NODE*h,*p,*q;inti;h=NULL;for(i=0;idata=a[i];q->next=NULL;if(h==NULL)h=p=q;else{p->next=q;p=q;}returnh;voidoutlist(NODE*h){NODE*p;

156p=h;if(p==NULL)printf(nThelistisNULL!

157n);else{printf(M

158Head");do{printf(n->%dH,p->data);p=p->next;}while(p!=NULL);printf(n->End

159M);))main(){NODE*head;inta[N]={0,10,4,298,6);head=creatlist(a);printf(M

160Theoriginallist:

161n);outlist(head);fun(head);printf("

162Thelistafterinverting:

163n);outlist(head);)解题思路:本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的next指针,因此应填写:p.nexto第二处:判断内循环q指针是否结束,所以应填:q。第二处:外循环控制变量p指向自ci的next指针,所以应填:p.next。给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其它字符不变。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*s)

164(/**********found***********/while(*s!=@,){if(*s>=*A,&*s<=Z'II*s>=,a,&&*sv='z){if(*s==,Z,)*s='A';elseif(*s=='z*)*s='a*;else*s+=1;}/**********found***********/(*s)++;)}main(){chars[8OJ;printf("

165Enterastringwithlength<80.:

166

167");gets(s);printf(M

168Thestring:

169

170M);puts(s);fun(s);printf(H

171

172TheCords:

173

174");puts(s);)解题思路:第一处:使用while循环来判断字符串指针s是否结束,所以应改为:while(*s)o第二处:取字符串指针s的下一个位置,所以应改为:S++;。请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把F标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,-维数组中的内容应为:5,6,7,8,9,10,1,2,3,4»注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN80voidfun(int*w,intp,intn)(}main(){inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);inti,p,n=15;

175printf(MTheoriginaldata:

176n);for(i=0;i

177

178Enterp:,,);scanf(,,%d,,,&p);fun(a,p,n);printf(M

179Thedataaftermoving:

180M);for(i=0;i

181

182n);NONO();)解题思路:本题是考察一维数组的操作。1.定义一维数组中间变量b,把n值后面数组中的内容存入b中。2.再把m前的数组中的内容存入b中。3.最后把数组b的内容依次存放到w中。参考答案:voidfun(int*w,intp,intn)(inti,j=0,b[N];for(i=p+1;i#defineN3intfun(int(*a)[NJ){inti,j,m1,m2,row,colum;m1=m2=0;

183for(i=0;i

184u);for(i=0;i

185M);for(i=0;i

186M);}if(fun(x))printf(uTheArrayisamagicsquare.

187u);elseprintf(HTheArrayisn'tamagicsquare.

188H);}解题思路:第一处:行列变量row和colum的值初始化为0。第二处:两个条件只要有一个不满足就返回0,所以应填:II.第三处:如果矩阵是“幻方”,则返回1。给定程序MODH.C中fun函数的功能是:根据整型形参m,计算如下公式的值。111t=123m例如,若主函数中输入5,则应输出-0.283333o请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intm)(doublet=1.0;

189inti;for(i=2;i<=m;i++)/**********f^)und**********/t=1.0-1/i;/**********tound**********/main()(intm;printf(*'

190Pleaseenter1integernumbers:

191");scanf("%d",&m);printf("

192

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

194H,str);NONO();}解题思路:本题是考察考生怎样利用字符串指针来删除字符串的空格字符。在函数开始处把指针p先指

195向字符串str以及位置变量i置0,然后采用while循环和字符串指针p来处理的,每循环一次来判断指针p所指的字符是否为空格,如果不是空格,则把该字符写到str字符串中,位置由i来捽制,如果是空格,则不处理,继续取下一字符,直至字符串结束为止,最后再把字符串结束符写到位置为i的str上,再通过形参str返回。参考答案:intfun(char*str)(char*p=str;inti=0;while(*p){if(*p!='')str[i++]=*p;P++;}str[i]=0;※※※※※※※※※※※※※※※※※※※※※※※※※第11套:给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2,请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5typedefstructnode{

196intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/**********f^)und**********/p=h->_l/**********found**********/if(p==—2—)return;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;/**********found**********/P=q;q=_3.h->next=p;NODE*creatlist(inta[J){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;idata=a[i];q->next=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)printf("ThelistisNULL!

197n);else{printf("

198Head");do{printf(M->%dn,p->data);p=p->next;}while(p!=NULL);printf(M->End

199n);))main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf(H

200Theoriginallist:

201H);

202outlist(head);fun(head);printf(M

203Thelistafterinverting:

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

205printf("

206Pleaseenterstringa:");gets(a);printf("

207Pleaseentersubstringb:*');gets(b);m=fun(a,b);printf(M

208Theresultis:m=%d

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

210H);fun(w,a);printf(nTheAstring:

211M);

212printf(M%sM,a);printf(M

213

214M);NONO();解题思路:本题是考察字符串的操作。使用for循环以及C语言函数strcal依次连接起来。参考答案:#include#defineM3#defineN20voidfun(charchar*b)(/*以下代码仅供参考*/inti;*b=0;for(i=0;i#include#defineN5typedefstructnode{intdata;structnode*next;}NODE;/**********found*********不/_1_*fun(NODE*h)

215{NODE*p,*q,*r;p=h;if(p==NULL)returnNULL;q=p->next;p->next=NULL;while(q)/**********found**********/q->next=p;p=q;/**********tound**********/q=_3.returnp;NODE*creatlist(inta[J){NODE*h,*p,*q;inti;h=NULL;for(i=0;idata=a[i];q->next=NULL;if(h==NULL)h=p=q;else{p->next=q;p=q;})returnh;}voidoutlist(NODE*h){NODE*p;p=h;if(p==NULL)printf(MThelistisNULL!

216H);else{printf(M

217Head");do{printf(',->%dn,p->data);p=p->next;}while(p!=NULL);printf(M->End

218M);))main()

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

220Theoriginallist:

221H);outlist(head);head=fun(head);printf(M

222Thelistafterinverting:

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

224Pleaseenterstrings:");gets(s);fun(s,t);printf("

225Theresultis:%s

226",t);I解题思路:

227第一处:根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%2IIs[i]%2==0).第二处:当字符串处理结束后,应该补上字符串的结束符,那么字符串t的位置是由i来控制,所以应改为:请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。函数fun中给出的语句仅供参考。例如,二维数组中的数据为:333333334444444455555555则一维数组中的内容应是:334455334455334455334455。注意:部分源程序在文件PR0G1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(ints[][10],intb[],int*n,intmm,intnn)(/*以下代码仅供参考*/inti,j,np=O;/*np用作b数组下标*/*n=np;)main(){intw[10][l0]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf(MThematrix:

228H);for(i=0;i<3;i++){for(j=0J<4;j++)printf(H%3d\w[i][j]);printf(M

229M);)fun(w,a,&n,3,4);printf("TheAarray:

230H);for(i=0;i

231

232n);

233NONO();解题思路:本题是把二维数组中的数据按行存放到一维数组中。1.计算存放到一维数组中的位置。2.取出二维数组中的数据存放到一维数组(已计算出的位置)中。参考答案:voidfun(int(*s)(10J,int*b,int*n,intmm,intnn)(/*以下代码仅供参考*/inti,j,np=O;/*np用作b数组下标*/for(i=0;i#include#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h)

234{NODE*p,*q;intt;while(p){/**********f^)und**********/q=_2_;while(q){/**********found**********/if(p->data_3_q->data){t=p->data;p->data=q->data;q->data=t;}q=q->next;}p=p->next;NODE*creatlist(inta[J){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;idata=a[i];q->next=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)printf("ThelistisNULUN");else{printf("

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

236M);main(){NODE*head;inta[N]={0,10,4,2,8,6};

237head=creatlist(a);printf("

238Theoriginallist:

239H);outlist(head);fun(head);printf(M

240Thelistaftersorting:

241n);outlist(head);)解题思路:本题是考察使用链表方法,对链表的结点数据进行升序排列。第一处:使用结构指针P,来控制链表的结束,p必须指向h结构指针的next指针,来定位P的初始位置。所以应填写:h->nexto第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以应填写:p->nexto第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:>(或>=)。给定程序M0DI1.C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includetypedefstructaa{intdata;structaa*next;}NODE;fun(NODE*h){intmax=-1;NODE*p;/***********found**********/p=h;while(p){if(p->data>max)max=p->data;

242/***********found**********/p=h->next;}returnmax;}outresult(ints,FILE*pf){fprintf(pf,M

243Themaxinlink:%d

244H,s);)NODE*creatlink(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;)p->next=NULL;returnh;)outlink(NODE*h,FILE*pf){NODE*p;p=h->next;fprintf(pf,M

245THELIST:

246

247HEAD");while(p){fprintf(pf,M->%dn,p->data);p=p->next;)fprintf(pf,n

248n);main(){NODE*head;intm;head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf(M

249THERESULT:

250n);outresult(m,stdout);)解题思路:程序中是使用while循环语句和结合结构指针p来找到数据域中的最大值。第一处:p指向形参结构指针h的next指针,所以应改为:p=h->next;o第二处:p指向自己的下一个结点,所以应改为:p=p->next,

251请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,二维数组中的数据为:333333334444444455555555则一维数组中的内容应是:333333334444444455555555。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#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,55}},ij;inta[100J={0},n=0;printf(HThematrix:

252M);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(H%3d';w[i][j]);printf(n

253H);fun(w,a,&n,3,4);printf(nTheAarray:

254H);for(i=O;i

255

256M);NONO();)解题思路:本题是把二维数组中的数据按行存放到一维数组中。L计算存放到一维数组中的位置。2.取出二维数组中的数据存放到一维数组(已计算出的位置)中。参考答案:voidfun(int(*s)[10J,int*b,int*n,intmm,intnn)(

257inti,j,k;for(i=0;i

258H);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(n%3dM,w[i][jJ);printf(M

259n);)fun(w,a,&n,3,4);printf(MTheAarray:

260M);for(i=0;i

261

262");NONO();※※※※※※※※※※※※※※※※※※※※※※※※※第14套:给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在_2_处使f指向函数fl,在_3_处使f指向函数已。当调用正确时,程序输出:x1=5.000000,x2=3.000000,xl*xl+xl*x2=40.000000请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefl(doublex){returnx*x;}doublef2(doublex,doubley){returnx*y;}

263doublefun(doublea,doubleb)(/**********found**********/-1—(*f)();doublerl,r2;/**********f^)und**********/f=_2_;/*pointfountionfl*/rl=f(a);/**********f^)und**********/f=_3_;/*pointfountionf2*/r2=(*f)(a,b);returnrl+r2;}main(){doublexl=5,x2=3,r;r=fun(xl,x2);printf("

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

265H,x1,x2,r);)解题思路:本题主要是考察用函数指针指向要调用的函数。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:定义函数指针的类型,所以应填:double..第二处:使f指向函数fl,所以应填:fl。第三处:使f指向函数f2,所以应填:f2。给定程序M0DI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并目.作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includetypedefstructaa{intdata;structaa*next;}NODE;

266intfun(NODE*h){intsum=0;NODE*p;/***********found**********/p=h;while(p){if(p->data%2==0)sum+=p->data;/***********f^)und**********/p=h->next;)returnsum;}NODE*creatlink(intn){NODE*h,*p,*s,*q;inti,x;h=p=(NODE*)malloc(sizeof(NODE));for(i=1;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;)outlink(NODE*h,FILE*pf){NODE*p;p=h->next;fprintf(pf,n

267

268THELIST:

269

270HEADM);while(p){fprintf(pf",p->data);p=p->next;}fprintf(pf;,

271n);)outresult(ints,FILE*pf){fprintf(pf,"

272Thesumofevennumbers:%d

273u,s);}main(){NODE*head;inteven;

274head=creatlink(12);head->data=9000;outlink(head,stdout);even=fun(head);printf(M

275Theresult:

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

277

278M);puts(s);if(fun(s))printf(MYES

279n);elseprintf(HNO

280M);NONO();)解题思路:本题是考察如何判断一个字符串是回文字符串,回文是指顺读和倒读都一样的字符串。可以利用for循环语句来判断,如果前后不一致,则不是回文字符串。参考答案:intfun(char*str)(inti,j=strlen(str);

281for(i=0;i

282

283M);puts(s);if(fun(s))printf(MYES

284n);elseprintf(nNO

285n);NONO();※※※※※※※※※※※※※※※※※※※※※※※※※第15套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖原数据,其它学生数据不变:若找不到,则什么都不做。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN5typedefstructstudent{longsno;charname[10J;floatscore[3];}STU;voidfun(char*filename,longsno){FILE*fp;STUn;inti;fp=fopen(filename,"rb4-n);/**********found**********/{fread(&n,sizeof(STU),1,fp);/**********f^)und**********/if(n.sno2sno)break;{for(i=0;i<3;i++)n.score[i]+=3;/**********found**********/fseek(_3_,-lL*sizeof(STU),SEEK_CUR);

286fwrite(&n,sizeof(STU),1,fp);fclose(fp);main(){STUt[N]={{10001,MMaChaoM,91,92,77},{10002,“CaoKai”,75,60,88},{10003,“LiSi”,85,70,78},{10004;TangFangn,90,82,87},{10005,MZhangSanM,95,80,88}},ss[N];inti,j;FILE*fp;fp=fopen(,,student.dat,\Mwb");fwrite(t,sizeof(STU),N,fp);fclose(fp);printf(M

287TheoriginaldataAn");fp=fopen(,,student.dat,,»Mrbn);fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j

288No:%ldName:%-8sScores:n,ss[j].sno,ss|jj.name);for(i=0;i<3;i++)printf(M%6.2fn,ss[jj.score[i]);printf(M

289H);}fun(Hstudent.datH,10003);fp=fopen(Mstudent.datn,nrbM);fread(ss,sizeof(STU),N,fp);fclose(fp);printf(M

290Thedataaftermodifing:

291n);for(j=O;j

292No:%ldName:%-8sScores:n,ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf(H%6.2fM,ss[j].score[i]);printf(M

293M);})解题思路:本题是考察如何从指定文件中找出指定学号的学生数据,并进行适当的修改,修改后重新写回到文件中该学生的数据匕即用该学生的新数据覆盖原数据。第一处:判断读文件是否结束,所以应填:fpO第二处:从读出的数据中判断是否是指定的学号,其中学号是由形参sno来传递的,所以应

294填:==o第三处:从已打开文件fp中重新定位当前读出的结构位置,所以应填:fPo给定程序M0DI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序。然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……o待排序的字符串已在主函数中赋予。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include#defineN80voidinsert(char*aa){inti,j,n;charch;/**********found**********/n=strlen[aa];for(i=l;i=0)&&(ch

295u,a);insert(a);printf(MThestringaftersorting:%s

296

297M,a);}解题思路:第一处:函数应该使用圆括号,所以应改为:n=strlen(aa)第二处:变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aa[i];。

298N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN8structslist{doubles;structslist*next;);typedefstructslistSTREC;doublefun(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=0;returnh;)outlist(STREC*h){STREC*p;p=h->next;printf(',head,');do{printf(M->%2.0f\p->s);p=p->next;)while(p!=0);printf(H

299

300H);main(){doubles[N]={85,76,69,85,91,72,64,87),max;STREC*h;h=creat(s);outlist(h);max=fun(h);

301printf("max=%6.1f

302n,max);NONO();)解题思路:本题是考察如何从链表中求出学生的最高分。我们给出的程序是利用while循环语句以及临时结构指针p变量来求出最高分。1.将链表中的第1个值赋给变量max。2.将链表指针p的初始位置指向h的next指针(h->next)o3.判断p指针是否结束,如果结束,则返回max,否则做下一步。4.判断max是否小于p->s,如果小于,则max取p->s,否则不替换。5.取p->next赋值给p(取下一结点位置给p),转3继续。参考答案:doublefun(STREC*h){doublemax=h->s;STREC*p;p=h->next;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*)malloc(sizeof(STREC));p->s=0;while(is=s[ij;i++;p->next=q;p=q;p->next=O;returnh;)outlist(STREC*h)

303{STREC*p;p=h->next;printf(uhead");do{printf(n->%2.0f\p->s);p=p->next;}while(p!=0);printf(H

304

305n);)※※※※※※※※※※※※※※※※※※※※※※※※※第16套:给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,n,len=0;for(i=0;in)n=len;for(i=0;i

306");for(i=0;i

307",ss[i]);

308printf(n

309M);fun(ss);printf(MTheresultis:

310M);for(i=0;i

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

312PleaseenteranEnglishsentencewithin63letters:'*);gets(chrstr);d=strlen(chrstr);chrstrldj='';

313chrstr[d+1]=0;printf(M

314

315Beforechanging:

316%s",chrstr);fun(chrstr);printf("

317Afterchanging:

318%s*chrstr);解题思路:第一处:关键字int错写成INT。第二处:该行括号没有配对,所以只要加上一个右括号即可。请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa.注意:部分源程序在文件PR0G1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#includeintfun(char*s,intnum)main()chars[10];prinlf("输入7个字符的字符串gets(s);fun(s,7);printf(u

319%sH,s);NONO();解题思路:本题是考察考生如何对字符串中的字符按降序进行排序。给出的程序是使用双重for循环以及冒泡法进行排序的,结果仍存放在原先的字符串上。参考答案:intfun(char*s,intnum)(charch;inti,j;for(i=1;iv6;i++)for(j=i+1;j<6;j++){if(*(s+i)<*(s+j)){ch=*(s+j);*(s+j)=*(s+i);*(s+i)=ch;

320※※※※※※※※※※※※※※※※※※※※※※※※※第17套:程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includestructstudent{longsno;charname[10J;floatscore[3];};voidfun(structstudenta1],intn)/**********found**********/inti,j;/**********found**********/for(i=0;i<_2_;i++)for(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("

321

322Theoriginaldata:

323

324");for(j=0;j<4;j++){printf("

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

326");}fun(s,4);printf("

327

328Thedataaftersorting:

329

330");for(j=0;j<4;j++){printf("

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

332printf("

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

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

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

336

337");}解题思路:第•处:在语句后缺少分号,所应改为:q=p+i;o第二处:保留字while写错,所应改为:

338while(q>p)o学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth)(}main(){STRECs[N]={{"GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85},{“GA00「',96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{MGA015”,85},{“GA013”,94},{“GA012\64},{HGA014M,91},{MGA0ir',90J,{”GA017”,64},{”GAO18M,64},{MGA016*72});STRECh[N],tt;FILE*out;inti,j,n,low,heigh,t;printf(MEnter2integernumberlow&heigh:");scanf("%d%d,',&low,&heigh);if(heigh

339'\low,heigh);for(i=0;i

340,,,h[i].num,h[i].s);printf(M

341H);out=fopen(,,c:\\test\\out.dat,,,,'wn);n=fun(s,h,80,98);fprintf(out?,%d

342,,,n);for(i=0;ih[j].s){tt=h[i];h[i]=h[j];h|j]=tt;}

343for(i=0;i

344,',h[i].s);fprintf(out?,

345M);fclose(out);}解题思路:本题是把符合条件的学生记录存入到另一个结构体,最后通过主函数进行输出。1.符合条件的学生人数存在变量j(初始值为0)中,最后返回其值。2.利用for循环语句,依次判断是否符合条件,如果符合,则存入另一个记录体中,人数j加1。参考答案:intfun(STREC*a,STREC*b,int1,inth)(inti,j=0;for(i=0;i=1&&a[ij.s<=h)b[j++]=a[i];returnj;)※※※※※※※※※※※※※※※※※※※※※※※※※第18套:给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asdl23fgh543df,处理后新字符串为:asdfghdfl23543。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includechar*fun(char*s){inti,j,k,n;char*p,*1;n=strlen(s)+1;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,))){

346/**********f^)und**********/tlj]=—;j++;}else{p[k]=s[i];k++;}for(i=0;i<_2_;i++)t|j+i]=pli];/**********f^)und**********/t[j+k]=_3_;returnt;)main(){chars[80J;printf(nPleaseinput:“);scanf(H%sH,s);printf(M

347Theresultis:%s

348H,fun(s));)解题思路:第一处:函数中申请了两个内存空间,其p是存放字母字符串,t是存放非字母字符串,根据条件可知,P依次存放字母字符串,其位置由j来控制,所以应填:s[i].第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:k。第三处:字符串处理好后必须添加字符串结束符,所以应填:AO'o给定程序MODH.C中函数fun的功能是:将s所指字符串中最后一次出现的与tl所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:"abcdabfabc",tl所指子串中的内容为:"ab”,t2所指子串中的内容为:“99”时,结果,在w所指的数组中的内容应为:"abcdabf99c"o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(char*s,char*tl,char*t2,char*w)inti;char*p,*r,*a;strcpy(w,s);/************f^)und************/while(w){p=w;r=tl;while(*r)/************************/IF(*r==*p){r++;p++;}elsebreak;if(*r==*\0')a=w;

349w++;r=t2;while(*r){*a=*r;a++;r++;}main()chars[100],tl[100],t2[100J,w[100J;printf(n

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

351Pleaseentersubstringtl:n);scanf(n%sn,tl);printf(n

352Pleaseentersubstringt2:n);scanf("%s",t2);if(str!en(t1)==strlen(t2)){fun(s,tl,t2,w);printf(n

353Theresultis:%s

354M,w);elseprintf(H

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

356M);解题思路:while(*w)o第一处:判断w指针所指的值是否是结束符,应改为:第二处:if错写成If。函数fun的功能是:将s所指字符串中ASCH值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后t所指的数组中的内容应是:"BDF24"。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*s,chart[])()main()(chars[100],til00];printf("

357PleaseenterstringS:n);scanf(M%sM,s);fun(s,t);printf(u

358Theresultis:%s

359H,t);NONO();

360解题思路:本题是从一个字符串按要求生成另一个新的字符串。我们使用foi•循环语句来解决这个问题。参考答案:voidfun(char*s,chartlJ)(inti,j=0;for(i=0;i#includestructstudent{longsno;charname[10J;floatscore[3];};/**********found**********/_1_fun(structstudent*a){inti;a->sno=10002;strcpy(a->name,MLiSiH);/**********found**********/for(i=0;i<3;i-H-)2+=1;/**********found**********/return_3.main(){structstudents={i0001,"ZhangSan1,,95,80,88},*t;inti;printf(u

361

362Theoriginaldata:

363M);

364printf(u

365No:%ldName:%s

366Scores:u,s,sno,s.name);for(i=0;i<3;i++)printf("%6.2f",s.score[i]);printf(H

367M);t=fun(&s);printf(M

368Thedataaftermodified:

369n);printf("

370No:%ldName:%s

371Scores:n,t->sno,t->name);for(i=0;i<3;i++)printf(H%6.2fn,t->score[i]);printf(M

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

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

374TheNstring:

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

376Thelongeststring:

377n);puts(longest);)解题思路:第一处:要求返回字符串的首地址,所以应改为:char*fun(char(*sq)[M])。

378第二.处:返回一个由变量sp控制的字符串指针,所以应改为:relurnsp;。函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的卜位和千位上。例如,当a=45,b=12o调用该函数后,c=2415o注意:部分源程序存在文件PROG1.C中。数据文件INDAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,long*c)()main(){inta,b;longc;printf(HInputa,b:M);scanf(',%d%d",&a,&b);fun(a,b,&c);printf(uTheresultis:%ld

379'\c);NONO();解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)*c=(b%10)*1000+(a/l0)*100+(b/10)*10+a%10;}※※※※※※※※※※※※※※※※※※※※※※※※※第20套:给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定

380所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:4630324061745154826,平均值为:30.500000移动后的输出为:3061715264632404548请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN10doublefun(double*x){inti,j;doubleav,y[NJ;av=0;/**********'f^und**********/for(i=0;i

381K);printf(M

382Theaverageis:%f

383",fun(x));printf(M

384Theresult:

385H,fun(x));for(i=0;i

386M);

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

388Pleaseenterastring:");gets(si);

389fun(si,numl);for(i=0;i<5;i++)printf("%dM,numl[i]);printf(M

390n);}解题思路:第一处:num初始化错误,应为:num[k]=0;o第二处:由于s是指针型变量,所以应改为:switches)。请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:二维数组中的值为13579299946999813570则函数值为61o注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineM4#defineN5intfun(inta[M][N])(}main(){intaa[M][N]={{1,3,5,7,9),{2,999,4},{6,999,8},{1,3,570}};inti,j,y;clrscr();printf(MTheoriginaldatais:

391n);for(i=0;i

392M);}y=fun(aa);printf(M

393Thesum:%d

394H,y);printf(H

395M);NONO();

396)解题思路:本题是统计二维数组周边元素值之和,但要注意的是不要重复计算四个角上的元素值,结果作为函数值返|可。参考答案:intfun(inta[MJ[N])(inttot=0,i,j;for(i=0;i#include#defineN10doublefun(double*x){inti,j;doubles,av,y[NJ;

397s=0;for(i=0;iav){/**********f^^und**********/yl_2_]=xli];xlij=-l;}for(i=0;i

398H);printf(M

399Theaverageis:%f

400",fun(x));printf("

401Theresult:

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

403H);}解题思路:第一处:计算N个数的平均值,所以应填:s/N。第二处:利用for循环语句,把数组x中大于平均值的数,依次存放到数组y中,同时把数组x上的该数置为-1,其中位置由变量j来控制,所以应填:j++。第三处:再利用循环把不是-1的数,依次仍存放到数组y中,所以应填:-1。给定程序MODH.C的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。例如,若输入:Iamastudenttotaketheexamination.,则应输出:IAmAStudentToTakeTheExamination.»请改正程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/************f^)und************/include/************found************/

404upfst(charp){intk=0;for(;*p;p++)if(k){if(*p=»')k=0;}elseif(*p!=1,){k=1;*p=toupper(*p);}}main(){charchrstr[81J;printf(H

405PleaseenteranEnglishtextline:");gets(chrstr);printf(n

406

407Beforechanging:

408%sn,chrstr);upfst(chrstr);printf(H

409Afterchanging:

410%s

411",chrstr);}解题思路:第一处:包含头文件的标识错误,在include前漏写了#。第二处:由于传入的参数是字符串,所以应为upfst(char*p)。程序定义了NXN的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的So例如:a数组中的值为1012791II97451a=l2383II145682115914II则返回主程序后s的值应为:3.375。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include

412#defineN5doublefun(intw[][NJ)(}main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5,23,8,3,1,4,5,6,8,2,59,1,4,1};intij;doubles;printf(n*****Thearray*****

413H);for(i=0;i

414");)s=fun(a);printf(*******THERESULT*****

415u);printf(HThesumis:%lf

416M,s);NONO();}解题思路:本题是统计二维数组周边元素值的平均值,但要注意的是不要重复计算四个角上的元素值。参考答案:doublefun(intw[](N])(inti,j,n=0;doublesum=0;for(i=0;i

417returnsum/n;)※※※※※※※※※※※※※※※※※※※※※※※※※第22套:给定程序中,函数fun的功能是:将自然数1〜10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,nw**))==NULL)return0;for(i=1;i<=10;i++)/**********found**********/fprintf(1,”%d%f

418",i,sqrt((double)i));printf("

419Succeed!!

420M);/**********found**********/2:printf(M

421Thedatainfile:

422H);/**********f^)und**********/if((fp=fopen(_3—,nrn))==NULL)return0;fscanf(fp,M%d%f\&n,&x);while(!feof(fp)){printf(M%d%f

423H,n,x);fscanf(fp,H%d%r,&n,&x);}fclose(fp);return1;}main(){charfname(]=,'myfile3.txtu;fun(fname);)解题思路:本题要求所求出的数写入到指定的文件中保存。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第•处:intfprintf(FILE*stream,constchar*format[.argument,•,,]);因此本处只能填写文件流的变量fPo第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)o第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出

424文件名,所以本处只能写文件名变量fname或者直接给出文件名"myfile3.dat"。给定程序M0DI1.C中fun函数的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includefun(intn,int*a){inti,j,p,t;for(j=0;ja[i])/************found************/t=i;if(p!=j){t=a[j];a|jj=alp];a[p]=t;}putarr(intn,int*z){inti;for(i=1;i<=n;i++,z++){printf(,'%4d'\*z);if(!(i%10))printf(H

425M);}printf(n

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

427

428Beforesorting%dnumbers:

429",n);putarr(n,aa);fun(n,aa);printf(H

430Aftersorting%dnumbers:

431H,n);putarr(n,aa);解题思路:第一处:for循环的终止值应该

432例如,当a=45,b=12时,调用该函数后,c=2514。注意:部分源程序存在文件PROG1.C中。数据文件INDAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,longc=(b%10)*1000+(a%10)*100+(b/l0)*10+(a/10);c)(}main(){inta,b;longc;printf(nInputa,b:n);scanf(,,%d,%d,,»&a,&b);fun(a,b,&c);printf(MTheresultis:%ld

433M,c);NONO();}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a卜位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)※※※※※※※※※※※※※※※※※※※※※※※※※第23套:给定程序中,函数fun的功能是:找出NXN矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4voidfun(int(*a)[N],int*b){intij;for(i=0;i

434/**********found**********/b[ij=_1—;for(j=l;j

435Thematrix:

436n);for(i=0;i

437H);}/**********found**********/fun(_3_);printf(H

438Theresultis:");for(i=0;i

439n);解题思路:第一处:把每列的第1值赋值给b[i],所以应填:a[O][i].第二处:如果b[i]值小于的值,则把a[j]国重新赋值给b[i]中,保存最大的值,所以应填:<.第三处:在主函数中,x是存放矩阵数据,y是存放每列的最大值,所以应填:x,y。给定程序M0DI1.C中函数fun的功能是:交换主函数中两个变量的值。例如:若变量a中的值原为8,b中的值为3。程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/*********found**********/intfun(intx,inty)(intt;/*********found**********/t=x;x=y;y=t;}main()(inta,b;

440a=8;b=3;fun(&a,&b);printf("%d,%d

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

442sum=fun(limit,aa);for(i=0;i

443M);printf(H%5dM,aa[ij);}NONO();)解题思路:本题是考察考生如何判断一个数是素数,再求出所有小于lim数的素数并存入数组aa中保存,最后由形参aa返回,素数的个数由函数值返回。参考答案:intfun(intlim,intaa[MAXJ)/*以下代码仅供参考*/intij,k=O;/*其中变量k用于统计素数个数*/for(i=2;i<=lim;i++)(/*以F完成判断aa数组中小于或等于lim的素数并统计个数*/for(j=2;j<=(i/2);j++)if(i%j==0)break;if(j>(i/2))aa[k++]=i;)returnk;※※※※※※※※※※※※※※※※※※※※※※※※※第24套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。例如:传给形参a的数据中,学号、姓名、和三门课的成绩依次是:10001、"ZhangSan'\95、80,88,修改后的数据应为:10002、"LiSi"、96、81,89。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includestructstudent{longsno;charname[10J;

444floatscore[3];};/**********found**********/_1_fun(structstudenta){inti;a.sno=10002;/**********f^)und**********/strcpy(_2_,"LiSi");/**********found**********/for(i=0;i<3;i++)_3_+=1;returna;)main(){structstudents={10001,"ZhangSanu,95,80,88},t;inti;printf("

445

446Theoriginaldata:

447n);printf(M

448No:%ldName:%s

449Scores:n,s.sno,s.name);for(i=0;i<3;i++)printf("%6.2fH,s.score[i]);printf(H

450M);t=fun(s);printf(M

451Thedataaftermodified:

452u);printf(H

453No:%ldName:%s

454Scores:n,t.sno,t.name);for(i=0;i<3;i++)printf(M%6.2fM,t.score[i]);printf(H

455M);}解题思路:本题是对结构体变量中的值进行修改并通过函数值返回。第一处:必须定义结构返回类型,所以应填:structstudento第二处:对姓名进行修改,所以应填:a.nameo第三处:分别对成绩增加1分,所以应填:a.score[i]o假定整数数列中的数不重复,并存放在数组中。给定程序MODI1.C中函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#defineN20fun(int*a,intn,intx)

456{intp=0,i;a[n]=x;while(x!=a[p])\TABp=p+1;/**********found**********/if(P==n)return-1;else{for(i=p;i

457H);fdr(i=0;i

458lnputx(todelete):");scanf(n%dH,&x);printf(MDelete:%d

459",x);n=fun(w,n,x);if(n==-l)printf(M***Notbefdund!***

460

461M);else{printf(MThedataafterdeleted:

462M);for(i=0;i

463

464H);})解题思路:第一处:条件语句中的小写p错写成大写P了。第二处:删除元素,应该是后面位置的元素值赋值给前面的位置上,所以应改为:a[i]=a[i+l];o学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注意:部分源程序在文件PROG1.C文件中。

465请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b)()main(){STRECs(N]={{"GA05”,85},{“GA03n,76},{“GA02”,69},{“GA04”,85},\TAB\TAB{nGA0r;91},{“GA07”,72},{“GA08”,64},{“GA06”,87},\TAB\TAB{"GA015”,85},{“GA013”,91},{MGA012M,64},{MGA014M,91),\TAB\TAB{“GA0U”,91},{“GA017”,64},{“GA018”,64},{“GA016”,72}};STRECh[NJ;inti,n;FILE*out;n=fun(s,h);printf(MThe%dlowestscore:

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

467,,,h[i].num,h[i].s);printf(M

468H);out=fopen(,,c:\\test\\out.dat,,,,'wn);fprintf(out,M%d

469H,n);for(i=0;i

470'\hli].s);fclose(out);}解题思路:本题是把符合条件的学生记录存入到另一个结构体,人数通过函数返回,记录由实参b返回。1.符合条件的学生人数存在变量j(初始值为0)中,最后返回其值。2.利用for循环语句,依次判断是否符合条件,如果成绩相等,则把记录存入b中,人数j加1;如果当前成绩a[i].s小于最低成绩min,那么人数重新初始化为0,把当前成绩存入最低成绩中,人数j加1。3.直至循环结束为止。参考答案:intfun(STREC*a,STREC*b)inti,j=0,min=a[0].s;for(i=0;ia[i].s){j=0;b[j++]=a[i];min=a[i].s;

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

472Notfound!

473M);else{printf(M

474Succeed!

475n);printf(M%s%d-%d-%d

476'\p.num,p.year,p.month,p.day);)

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

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

479Pleaseentersubstringt:");scanf("%s",t);m=fun(s,t);

480printf("

481Theresultis:m=%d

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

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

484Theresultis:%s

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

486※※※※※※※※※※※※※※※※※※※※※※※※※第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—)/**********f^)und**********/q=p->2:else{p=q;/示*********founcl*********豕/q=q->3:SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;p->next=O;returnh;)voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf(M

487ThelistisNULL!

488");

489else{printf(,'

490Headu);do{printf(,,->%d,,,p->data);p=p->next;}while(p!=NULL);printf(M->End

491n);))main(){SLIST*head;inta[N]={1,2,2,34,4,4,5);head=creatlist(a);printf(M

492Thelistbeforedeleting:

493K);outlist(head);fun(head);printf(M

494Thelistafterdeleting:

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

496for(j=0;j

497H);fun(a,m);printf("排序后的数据:");for(i=0;i

498H);}解题思路:第一处:语句后缺少分号。第二处:保存最小值的位置,所以应改为:P=i;o请编写一个函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:711142122283335424449注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineM100voidfun(intm,int*a,int*n)

499(}main(){intaa[M],n,k;fun(50,aa,&n);for(k=0;k

500n);elseprintf(,,%4dM,aa[k]);printf(n

501n);NONO();)解题思路:本题是考察考生对某个数能被其他的数整除方式,并把符合条件的数存放在数组a中。我们给出的程序是使用for循环语句以及取模的方式来解决这个问题的。参考答案:#include#defineM100voidfun(intm,int*a,int*n)(inti;*n=0;for(i=7;i<=m;i++)if((i%7==0)II(i%11==0))a[(*n)++]=i;※※※※※※※※※※※※※※※※※※※※※※※※※第27套:给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为10时,函数返回:9.612558o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intn){inti;doubles,t;

502for(i=1;i<=_2_;i++){t=2.0*i;/**********f^)und**********/s=s+(2.0*i-l)*(2.0*i+1)/_3_;)returns;)main(){intn=-l;while(n<0){printf("Pleaseinput(n>0):");scanf("%d",&n);}printf(M

503Theresultis:%f

504u,fun(n));)解题思路:第一处:根据公式可知,累加和变量s,应置0。第二处:for循环的终止值应为形参n。第三处:根据公式以及函数体中t变量内容,所以应填:t*t。给定程序M0DH.C中函数fun的功能是:统计substr所指子字符串在str所指字符串中出现的次数。例如,若字符串为aaasIkaaas,子字符串为as,则应输出2。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includefun(char*str,char*substr){inti,j,k,num=O;/************************/for(i=0,str[i],i++)for(j=i,k=0;substr[kJ==str|jJ;k++j+4-)/************found************/If(substr[k+l]=\0'){num++;break;}returnnum;}main()(charstr[80J,substr[80J;printf(MInputastring:H);gets(str);printf(MInputasubstring:'*);

505gets(substr);printf(n%d

506n,fun(str,substr));}解题思路:第,处:循环for语句中应有分号。第二处:if错写成If。请编写一个函数fun,它的功能是:根据以卜.公式求元的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):n11x21x2x3Ix2x3x4lx2x...xn—=1+—+++++233x53x5x73x5x7x93x5x...x(2n+l)程序运行后,如果输入精度0.0005,则程序输出为3.14…。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(doubleeps)()main(){doublex;printf(MInputeps:");scanf(H%lf\&x);printf(u

507eps=%lf,PI=%lf

508H,x,fun(x));NONO();)解题思路:本题是根据公式进行计算。参考答案:doublefun(doubleeps)(doubles=l,t=l./3;intn=l;while(t>=eps){s+=t;n++;t=t*n/(2.0*n+l);}return(s*2.0);}main(){doublex;printf("Inputeps:");scanf(M%lf\&x);printf("

509eps=%lf,PI=%lf

510M,x,fun(x));NONO();}※※※※※※※※※※※※※※※※※※※※※※※※※第28套:给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdt7o输出结果为:4。

511请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,int*t){inti,n;n=0;/**********found**********/for(i=0;—1—!=NULL;i++)/**********f^)und**********/if(s[i]>=<0'&&sli]<=—2—)n++;/**********found**********/_3—;}main(){chars[8O]="abcdef35adgh3kjsdf7”;intt;printf("

512Theoriginalstringis:%s

513n,s);fun(s,&t);printf(M

514Theresultis:%d

515M,t);I解题思路:第一处:在for循环中终止值要判断字符串是否结束符,所以应填:s[i]。第二处:判断是否是数字,所以应填:9。第三处:字符串中数字字符出现的次数n,并存放在形参t所指的变量中,所以应填:*t=n。给定程序M0DI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(int*x,inty)(intt;/***************************/

516t=x;x=y;/**************found**************/retum(y);}main()inta=3,b=8;printf("%d%d

517",a,b);b=fun(&a,b);printf("%d%d

518",a,b);}解题思路:第一处:由于x是整型指针变量,所以地址不能赋值给整型变量,因此必须取x地址上的值,所以应改为t=*x;*x=y;。第二处:已交换后的值存放在t中,所以返回值应为retum(t);。请编写函数fun,它的功能是:求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(int*a,int*n)main(){intaa[1000],n,k;fun(aa,&n);for(k=0;k

519n);elseprintf(n%5d'\aa[k]);NONO();)解题思路:本题是利用for循环语句以及取模%运算来得出符合条件的整数并存入a所指的数组。参考答案:voidfun(int*a,int*n)inti;*n=0;for(i=7;i<1000;i++)if(((i%7)==0II(i%11)==0)&&(i%77)!=0)a[(*n)++]=i;

520※※※※※※※※※※※※※※※※※※※※※※※※※第29套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、"ZhangQi",93、85、87,修改后输出t中的数据应为:10004、"LiJie"、93、85、87。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includestructstudent{longsno;charname[10];floatscore[3];};voidfun(structstudent*b){inti;/**********found**********/b_l_=10004;/**********found**********/strcpy(b_2_,MLiJien);}main(){structstudentt={10002,uZhangQiM,93,85,87};inti;printf(M

521

522Theoriginaldata:

523");printf(H

524No:%ldName:%s

525Scores:n,t.sno,t.name);for(i=0;i<3;i++)printf(n%6.2fn,t.score[i]);printf(H

526M);/**********f^)und**********/fun(_3_);printf("

527Thedataaftermodified:

528");

529printf("

530No:%ldName:%s

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

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

533n,x,fun(x,1.0));}

534解题思路:第一处:第二个变量定义的保留字double写错。第二处:变量xO错写成xo了。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN12typedefstruct{charnum[10J;doubles;}STREC;doublefun(STREC*a,STREC*b,int*n)()main(){STRECs[N]={{HGA05M,85}4',GA03M,76},{nGA02M,69),{,,GA04n,85},\TAB\TAB{HGA0r;91},{UGA07M,72},{HGA08n,64},{nGA06M,87},\TAB\TAB{“GA09”,60},{“GA11”,79},{MGA12”,73},{“GA10”,90}};STRECh[N],t;HLE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf(MThe%dstudentdatawhichishigherthan%7.3f:

535'

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

537M,h[i].num,h[i].s);printf(H

538M);out=fopen(,,c:\\test\\out.dat,',,,wn);fprintf(out,|,%d

539%7.3An,

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

541H,h[i].s);fclose(out);}

542解题思路:本题是计算平均分并把高于平均分的记录存入结构体数组中,最后平均分t通过函数值返回,人数n和符合条件的记录b由形参传回。1.利用for循环计算平均分t。2.利用for循环把高于平均分的学生记录存入b中,人数*n加lo参考答案:doublefun(STREC*a,STREC*b,int*n)doublet=0;inti;*n=0;for(i=0;it)b[(*n)++]=a[i];returnt;}※※※※※※※※※※※※※※※※※※※※※※※※※第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(structstudenta)

543{structstudentb;inti;/**********tound**********/b=1;b.sno=10002;strcpy(_2_,MLiSiH);printf(M

544Thedataaftermodified:

545”);printf(M

546No:%ldName:%s

547Scores:**,b.sno,b.name);/**********f^)und**********/for(i=0;i<3;i++)printf(H%6.2fn,b._3_);printf(M

548H);}main(){structstudents={iOOOl/'ZhangSan0,95,80,88);inti;printf(M

549

550Theoriginaldata:

551");printf("

552No:%ldName:%s

553Scores:n,s.sno,s.name);for(i=0;i<3;i++)printf(H%6.2fn,s.score[i]);printf(M

554H);fun(s);)解题思路:本题是对结构体变量中的值进行修改。第一处:要修改的结构体变量是由形参a来传递的,所以应填:ao第二处:对结构体中的成员name进行替换,所以应填:b.nameo第三处:分别输出结构体中的成绩,所以应填:scored。给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母co请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s){inti,j;for(i=j=0;s[i]!=AO';i++)if(s[i]!='c')

555\TABs[j]=s[i];s[i]=AO';main(){chars[80J;printf(MEnterastring:*');gets(s);printf(MTheoriginalstring:");puts(s);fun(s);printf("Thestringafterdeleted:");puts(s);printf(M

556

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

558*q=\0';main(){chars[81],*p;intn=0;printf('*Enterastring:

559M);gets(s);fun(s);printf(MThestringaftermoveing:

560H);puts(s);NONO();解题思路:本题是考察字符串的移动。具体操作请看参考源程序。参考答案:voidfun(char*a)(/*以下代码仅供参考*/char*p,*q;intn=0;p=a;while(*p=='*')/*统计串头'*'个数n*/{n++;p++;}q=a;/*向前复制字符串,请填写相应的语句完成其功能*/while(*p){*q=*p;p++;q++;}for(;n>0;n-)/*在串尾补n个卬*/*q++='*';*q='0';}※※※※※※※※※※※※※※※※※※※※※※※※※第31套:给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII

561码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlswo请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,char*p){inti,j,n,x,t;n=0;for(i=0;s[i]!=\0';i++)n++;for(i=1;is[j])t=j;if(t!=i){x=s[i];s[i]=s[t];s[t]=x;}}for(i=l,j=0;i

562Theoriginalstringis:%s

563",s);fun(s,p);printf(u

564Theresultis:%s

565M,p);解题思路:第一处:取外循环的控制变量,所以应填:t=i。第二处:内循环的起始变量,应该是i+2,所以应填:i。第三处:新字符串处理完后应添加字符串结束符,所以应填:Wo给定程序MODI1.C中函数fun的功能是:用下面的公式求兀的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:Hill21-++...4357例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:

566#include#includefloatfun(floatnum){ints;floatn,t,pi;t=l;pi=O;n=l;s=l;/**************fV)und**************/while(t>=num)(pi=pi+t;n=n+2;s=-s;/**************found**************/t=s%n;}pi=pi*4;returnpi;}main(){floatnl,n2;printf(MEnterafloatnumber:");scanf(M%f,&nl);n2=fun(n1);printf(H%6.4f

567

5682);}解题思路:第一处:要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)。第二处:t是s除以n的值,而不是取余数,所以应改1=$/11;。请编写一个函数voidfun(chara口,charb[],intn),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为:Word»注意:部分源程序在文件PROG1.C中。

569请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineLEN20voidfun(chara[],charb[],intn)(}main(){charstrl[LEN],str2[LEN];intn;printf(HEnterthestring:

570H);gets(strl);printf("Enterthepositionofthestringdeleted:");scanf(n%dM,&n);fun(strl,str2,n);printf(uThenewstringis:%s

571M,str2);NONO();)解题思路:本题是利用字符串拷贝和字符串连接来生成新的字符串。参考答案:voidfun(chara[J,charb[],intn)stmcpy(b,a,n);bln]=0;strcat(b,a+n+1);}※※※※※※※※※※※※※※※※※※※※※※※※※第32套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!

572给定源程序:#include#include#defineN5#defineM10/**********f^)und**********/voidfun(char(*ss)_1_,intk){inti=0;/**********f^)und*********¥/while(i<_2_){ss[i]lkj=_3_;i++;))main(){charx[N][M]={”Create",“Modify”「Sort”,“skip”,“Delete”};inti;printf(n

573Theoriginalstring

574

575");for(i=O;i

576H);fun(x,4);printf("

577Thestringafterdeleted:

578

579n);for(i=0;i

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

581doublefun(doubleeps){doubles,t;intn=l;s=0.0;/***********************/t=0;while(t>eps){s+=t;t=t*n/(2*n+l);n++;retum(s);)main(){doublex;printf(n

582Pleaseenteraprecision:");scanf(H%ir,&x);printf(H

583eps=%lf,Pi=%lf

584

585H,x,fun(x));解题思路:第一处:初始化t的值,根据程序中的计算程序和试题的要求得出,t应为1。第二处:根据公式兀/2得出,所以返回时应原有s的基础上乘以2作为返回值。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于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的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a,intn)(/*以下代码仅供参考*/inti=O,j,k=O;

586while(a[k]==**,)k++;/*k为统计*字符个数*/if(k>n){i=n;j=k;/*以下完成将下标为k至串尾的字符前移k-n个位置*/))main(){chars[81J;intn;printf("Enterastring:

587M);gets(s);printf(HEntern:H);scanf(n%dn,&n);fun(s,n);printf(nThestringafterdeleted:

588M);puts(s);NONO();解题思路:本题是考察字符串的操作。利用for循环来判断a|j]的字符是否是字符串结束符,如果不是字符串结束符,则把a[j]的字符依次存放到a[i]。其中,变量i是n的初始值,变量j是字符串前导的*号数。参考答案:voidfun(char*a,intn)(/*以下代码仅供参考*/inti=O,j,k=O;while(a[k]='*')k++;/*k为统计*字符个数*/if(k>n)(i=n;j=k;/*以下完成将下标为k至串尾的字符前移k-n个位置*/for(;a[j]1=0;j++)ali++]=a[j];a[ij=0;※※※※※※※※※※※※※※※※※※※※※※※※※

589第33套:给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(char*source,char*target){FILE*fs,*ft;charch;if((fs=fopen(source,1))==NULL)return0;if((ft=fopen(target,nwM))==NULL)return0;printf(M

590Thedatainfile:

591M);ch=fgetc(fs);/**********f^)und*********¥/while(!feof(2)){putchar(ch);/**********tound**********/fputc(ch,3);ch=fgetc(fs);)fclose(fs);fclose(ft);printf(H

592

593n);returnI;)main(){charsfname[20]=Mmyfile1",tfname[20J="myfile2n;FILE*myf;inti;charc;myf=fopen(sfname,,'wu);printf(°

594Theoriginaldata:

595M);for(i=1;i<30;i++){c='A,+rand()%25;fprintf(myf,,,%c,,,c);printf(H%cM,c);}fclose(myf);printf("

596

597H);if(fun(sfname,tfname))printfC^Succeed!");elseprintf(,'Fail!M);

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

599Pleaseenters:");scanf(,,%ld'\&s);fun(s,&t);

600printf("Theresultis:%ld

601H,t);}解题思路:第一处:判断相等的条件是==。第二处:整除的符号是A函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的卜位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在C数的百位和个位上。例如,当a=45,b=12时,调用该函数后,c=5142o注意:部分源程序存在文件PROG1.C中。数据文件INDAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,long*c)(}main(){inta,b;longc;printf(°Inputa,b:n);scanf(n%d,%dH,&a,&b);fun(a,b,&c);printf(nTheresultis:%ld

602n,c);NONO();}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(a%10)*1000+(b/10)*100+(a/10)*l0+(b%l0);※※※※※※※※※※※※※※※※※※※※※※※※※第34套:

603用筛选法可得到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],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i

604Theprimenumberbetween2to%d

605n,n);for(i=2;i<=n;i++)/**********found**********/if(a[i]!=_3_){count++;printf(count%15?t'%5d',:H

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

607Thenumberofprimeis:%d

608M,r);解题思路:第一处:所有2的倍数的数从数表中删去,所以应填:a[i],第二处:找出下一个不是的a[i],所以应填:a[i]»第三处:输出素数,只要判断a[i]不是0就是素数,所以应填:0,

609给定程序MODH.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(intajnt*b,int*c){inti,j,d,y;for(i=3;i<=a/2;i=i+2){/**************found**************/Y=l;for(j=2;j<=sqrt((double)i);j++)if(i%j==O)y=0;if(y==l){d==a-i;for(j=2;j<=sqrt((double)d);j++)if(d%j==O)y=0;if(y==i){*b=i;*c=d;}main(){inta,b,c;do{printf(M

610Inputa:");scanf("%d”,&a);}while(a%2);fun(a,&b,&c);printf(M

611

612%d=%d+%d

613”,a,b,c);解题思路:第一处:变量y错写成丫。第二处:给变量d进行赋值,所以应改为:d=a-i;o请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。

614部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn)()main(){intn;doubles;printf(u

615Inputn:0);scanf(n%dH,&n);s=fun(n);printf(',

616

617s=%f

618,,,s);NONO();)解题思路:本题是计算n(包括n)以内能被5或9整除的所有自然数的倒数之和。参考答案:doublefun(intn)(inti;doublesum=0.0;for(i=1;i<=n;i++)if(i%5==0IIi%9==0)/*被5或9整除*/sum+=1.0/i;returnsum;※※※※※※※※※※※※※※※※※※※※※※※※※第35套:给定程序中,函数fun的功能是建立一个NXN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2:第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为:1111112221123211222111111请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

619注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN7voidfun(int(*a)_1_){inti,j,k,m;if(N%2==0)m=N/2;elsem=N/2+1;for(i=0;i

620Theresultis:

621M);for(i=0;i

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

623)main()(intb,n;printf("

624Pleaseenteranumberandabase:

625'f);scanf("%d%dn,&n,&b);fun(n,b);printf(H

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

627charss[10J[81],*ps;intn,i=0;printf("输入若干个字符串:");gets(sslij);puts(sslij);while(!strcmp(ss[i],,,****H)==O)i++;gets(ss[i]);puts(ss[i]);)n=i;fun(ss,n,&ps);printf("

628max=%s

629",ps);NONO();}解题思路:本题是考察考生怎样从已输入的字符串中找出长度最大的字符串。求字符串的长度可以使用strlen函数。参考答案:fun(char(*a)[81],intnum,char**max)(/*以下代码仅供参考*/inti,k=O,maxlen;/*k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长*/maxlen=strlen(a[k]);for(i=l;imaxlen){maxlen=strlen(a[ij);k=i;}}*max=a[k];)※※※※※※※※※※※※※※※※※※※※※※※※※

630第36套:给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(int*a);voidoutlist(SLIST*);voidfun(SLIST*h,int*n){SLIST*p;/**********found**********/―1—=0;p=h->next;while(p){(*n)++;/**********tound**********/p=p->_2_;)}main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48},num;head=creatlist(a);outlist(head);/**********tound**********/fun(3,&num);printf(',

631number=%d

632,,,num);}SLIST*creatlist(inta[])

633{SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;p->next=O;returnh;)voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf(nThelistisNULL!

634°);else{printf(H

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

636M);}}解题思路:本题是要求统计出带有头结点的单向链表中结点的个数。第一处:对n所指的存储单元进行初始化,所以应填:*n。第二处:指向p的下一个结点,所以应填:nexto第三处:函数调用,在主函数中已经给出了head,所以应填:heado给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为:"abcdabfabcdx",t中的内容为:"ab"时,输出结果应是:abcdx。当字符串中的内容为:"abcdabfabcdx",t中的内容为:"abd"时,则程序输出未找到信息:notbefound!o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:

637#include#includechar*fun(char*s,char*t)char*p,*r,*a;/************found************/a=Null;while(*s){p=s;r=t;while(*r)/************************/if(r==p){r++;p++;}elsebreak;if(*r==,\O')a=s;s++;returna;main()chars[100J,tll00],*p;printf(M

638PleaseenterstringS:");scanf(H%sH,s);printf(M

639Pleaseentersubstringtscanf(M%sH,t);p=fun(s,t);if(p)printf("

640Theresultis:%s

641",p);elseprintf(H

642Notfound!

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

644printf(M

645PleaseenterstringS:n);scanf(n%sH,s);fun(s,t);printf("

646Theresultis:%s

647H,t);NONO();}解题思路:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。参考答案:voidfun(char*s,chart[J)(inti,j=0;for(i=0;i#include#defineN5#defineM15voidfun(char(*ss)[MJ,char*substr){inti,find=0;/**********found**********/for(i=0;i<_1_;i++)/**********f^)und**********/if(strstr(ss[i],_2_)!=NULL){find=l;puts(ss[ij);printf(H

648H);}/**********found**********/

649if(find==_3_)printf("

650Don'tfound!5");)main(){charx[N][M]={,,BASIC,,,MClangwageM,,'Java\MQBASIC'V,Access0),str[M];inti;printf("

651Theoriginalstring

652

653M);for(i=0;i

654H);printf(M

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

656}/************f^)und************/returni;)main(){intxl,x2,x3J;printf(HInputxlx2x3:");scanf(1,%d%d%d,,,&x1,&x2,&x3);printf(nxl=%d,x2=%d,x3=%d

657M,x1,x2,x3);j=fun(xl,x2,x3);printf(nTheminimalcommonmultipleis:%d

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

659H);gets(s);t=f=s;while(*t){t++;m++;}Iwhile(*t==*'){t—;tn++;)while(*f==**'){f++;fn++;}

660fun(s,m,fn,tn);printf(MThestringafterdeleted:

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

662{inti,j;j=0;for(i=0;i

663Theoriginaldata:

664");for(i=0;i

665H);n=fun(b,N);printf("

666Thenumberofodd:%d

667'

668);printf(M

669Theoddnumber:

670H);for(i=0;i

671M);)解题思路:第一处:判断a[i]是否是奇数,若是,则仍保留在原数组中a[j],所以应填:1。第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:j++o第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:jo给定程序M0DI1.C中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给numl和num2分别输入49和21,则输出的最大公约数为7:若给numl和num2分别输入27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:

672#includeintfun(inta,intb){intr,t;if(a

673

674'

675um1,num2);a=fun(num1,num2);printf(nThemaximuncommondivisoris%d

676

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

678printf(uEnterastring:

679M);gets(s);fun(s);printf(MThestringafterdeleted:

680");puts(s);NONO();}解题思路:本题是考察字符串的操作。1.利用循环扫描字符串中所有的字符是否是如果不是田,则把这些字符存放字符串a首地址开始的位置上。2.最后给字符串a加上结束符。参考答案:voidfun(char*a)intj=0;char*p=a;while(*p){if(*p!=***)a[j++]=*p;a|jJ=0;※※※※※※※※※※※※※※※※※※※※※※※※※第39套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5#defineM10intfun(char(*ss)[MJ,intk)

681{inti,j=0,len;/**********found**********/for(i=0;i<_1_;i++){len=strlen(ss[i]);/**********f^)und**********/if(len<=_2_)/**********found**********/strcpy(ss[j++],_3_);}returnj;}main()(charx[N][M]={,,Beijing,V,ShanghaiM,,,Tianjing'V,Nanjing,V'WuhanM);inti,f;printf(M

682Theoriginalstring

683

684K);for(i=O;i

685H);f=fun(x,7);printf(MThestringwitchlengthislessthanorequalto7:

686");for(i=0;i

687M);}解题思路:本题是根据给定的字符串数组中删除串长大于某个值的字符串。第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N,第二处:串长由形参k来传递,所以应填:匕第三处:如果字符串ss[i]的串长小于k,则该字符串仍存在原字符串数组中,位置由变量j来控制,所以应填:ss[i]。给定程序M0DI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则c中的字符串应为:aBcdeFgHo请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:

688#include#includevoidfun(char*p,char*q,char*c)(/************found************/intk=1;/************found************/while(*p!=*q){if(*pv*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++;main(){chara[10]=MaBCDeFgH';b[10]=MABcdM,c[80]={^};fun(a,b,c);printf("Thestringa:");puts(a);printf(',Thestringb:");puts(b);printf(MTheresult:");puts(c);}解题思路:第一处:存放字符串初始位置也是从0开始存放的,由于k是控制c字符串的位置值,所以k值应为0。第二处:判断两个字符串中是否有字符串结束符产生,所以应改为:while(*pII*q),而不是两字符串中对应位置的值不相等。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:

689#includevoidfun(char*a)(/*以下代码仅供参考*/inti=0,k;while(a[i]='*')i++;k=i+l;while(a[i]!='\0')/*以下程序段实现非*字符前移*/a[i+l]=W;main(){chars[81];printf(MEnterastring:

690M);gets(s);fun(s);printf("Thestringafterdeleted:

691");puts(s);NONO();}解题思路:本题是考察字符串的操作。1.使用while循环语句求出字符串前导*号的个数。2.使用while循环语句判断a[i]是否是字符串结束符标志,如果不是字符串结束标志,则再判断是否是字符*号,如果不是*号,则把a[i]字符存入a[k]中,如果是*号则跳过该*号,直至字符串结束为止。参考答案:voidfun(char*a)(/*以下代码仅供参考*/inti=0,k;while(a[i]='*')i++;k=i;while(a[i]!='\0')/*以下程序段实现非*字符前移*/(

692if(a[i]!=***)a[k++]=a[i];i++;}a[k]±\0';※※※※※※※※※※※※※※※※※※※※※※※※※第40套:给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*next;}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){/**********found**********/q=一2一;p=p->next;)s->next=p;

693/**********found**********/q->next=3;SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=O;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf(M

694ThelistisNULL!

695M);else{printf(M

696HeadH);do{printf(H->%d",p->data);p=p->next;}while(p!=NULL);printf(M->End

697M);))main(){SLIST*head;intx;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf(M

698Thelistbeforeinserting:

699n);outlist(head);printf(M

700Enteranumber:");scanf(H%dM,&x);fun(head,x);printfC'XnThelistafterinserting:

701");oullist(head);}解题思路:本题是要求在一个有序的链表中插入一个数,插入后各结点仍然是有序的。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:在函数fun的开始处,已经对结构指针s分配了内存,其中data是一个整型变量,实际要求填入一个整型数据。根据本题要求在一个链表插入一个整型数,该数已通过函数的形参x传入,因此应填X。第二处:使用一个while循环找出要插入一个数的位置,在循环体中q实际上保留当前链表位置的临时变量,如果x>p->data时,那么再移动链表指针到卜•个结果,再进行判断是否符合

702条件,如果仍大于,则仍q保留链表p的位置。因此,此处应填p。第三处:当找到结点位置后,就要插入这个数,完成插入过程。由于函数体中分配了结构指针s,s的next指针已经指向了p,所以,当前位置q的next指针就应该指向指针s完成链表的链接。因此,此处应填s。给定程序MODI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includelongfun(longnum)(/************tound************/longk;do{k*=num%10;/************found************/num\=10;}while(num);return(k);)main(){longn;printf(n\Pleaseenteranumber:");scanf(n%ld'\&n);printf(n

703%ld

704n,fun(n));)解题思路:第处:由于在k定义时没有赋初值,所以k是一个随机数,根据试题要求,k应赋值为1。第二处:整除的符号是A请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。例如:若有5门课程的成绩是:90.5,72,80,61.5,55则函数的值为:71.80o注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

705给定源程序:#includefloatfun(float*a,intn)main(){floatscore[30]={90.5,72,80,61.5,55},aver;aver=fun(score,5);printf(M

706Averagescoreis:%5.2f

707'\aver);NONO();}解题思路:本题是使用循环来计算平均值且结果由函数值返回。参考答案:floatfun(float*a,intn)(inti;floatave=0.0;for(i=0;i#defineN10doublefun(doublex[],double*av){inti,j;doubled,s;for(i=0;i

708/**********f^)und**********/d=32767;for(i=0;i

709Theaverageis:%f

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

711Pleaseentern:");scanf(M%dM,&n);printf("A%d=%f

712”,n,fun(n));)解题思路:

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

714M);for(i=0;i

715M);)dom=rand()%10;while(m>=3);printf(Mm=%4d

716M,m);fun(a,m);printf('THERESULT

717M);for(i=0;i

718M);)NONO();)解题思路:本题是利用两重循环给二维数组右上三角元素中的值乘以m»参考答案:intfun(inta[J[N],inttn)

719(inti,j;for(i=0;ivoidfun(char*s){inti,j=0,k=0;chartl[8OJ,t2[8OJ;for(i=0;s[i]!='\0';i++)/**********f^)und**********/elsetl[k++]=s[i];t2Lj]=0;tHk]=0;/**********found**********/for(i=0;i

720Theoriginalstringis:%s

721",s);fun(s);printf(u

722Theresultis:%s

723M,s);解题思路:t2是存放数字字符串,H是存放非数字字符串。第一处:t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j++。第二处:利用for循环把tl字符串添加到原字符串s中,所以应填:s[i]=tl[i]。第三处:利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所以应填:jo给定程序MODH.C中函数fun的功能是:用冒泡法对6个字符串按由小到大

724的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineMAXLINE20fun(char*pstr[6J){inti,j;char*p;for(i=0;i<5;i++){/**************found**************/for(j=i+l,j<6,j++)(if(strcmp(*(pstr+i),*(pstr+j))>0)p=*(pstr+i);/**************found**************/*(pstr+i)=pstr+j;*(pstr+j)=p;main(){inti;char*pstr[6],str[6][MAXLINE];for(i=0;i<6;i++)pstr[i]=strli];printf("

725Enter6string(1stringateachline):

726");for(i=0;i<6;i++)scanf("%s",pstr[i]);fun(pstr);printf("Thestringsaftersorting:

727");for(i=0;i<6;i++)printf("%s

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

729你编写的若干语句。给定源程序:#include#include#defineM81intfun(char*ss,charc)()main(){chara[MJ,ch;printf(u

730Pleaseenterastring:");gets(a);printf(u

731Pleaseenterachar:*');ch=getchar();printf(u

732Thenumberofthecharis:%d

733n,fun(a,ch));NONO();}解题思路:本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数ent加1,直至字符串结束为止,最后由函数返回。参考答案:intfun(char*ss,charc)(intent=0;char*p=ss;while(*p){if(*p==c)cnt++;p++;}returnent;※※※※※※※※※※※※※※※※※※※※※※※※※第43套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的申,找到后返回该串在字符串数组中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include

734#include#defineN5#defineM8intfun(char(*ss)[M],char*t){inti;/**********f^)und**********/for(i=0;i<_1_;i++)/**********found**********/if(strcmp(ss[iJ,t)==O)return_2_;return-1;main(){charch[N][M]={,,if';,while,'/'switch",''int'VYo^htlM];intn,i;printf("

735Theoriginalstring

736

737H);for(i=0;i

738H);printf("

739Enterastringforsearch:");gets(t);n=fun(ch,t);/**********f^)und**********/if(n==_3_)prinlf("

740Don'tfound!

741n);elseprintf(H

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

743给定源程序:#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&&al==5)){b[i]=k;i++;}returnk;main(){inta[100],k,m;m=fun(a);printfC'Theresultis:

744)for(k=0;k

745M);)解题思路:第一处:取当前变量k的十位数字上的数,所以应改为:a2=k/10;。第二处:要求统计个数并存入变量i中,最后返回i,所以应改为:returni;。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a)()main(){chars[81J;printf(MEnterastring:

746H);gets(s);fun(s);printfC'Thestringafterdeleted:

747");puts(s);NONO();

748解题思路:本题是考察字符串的移动。1,使用while循环语句和字符串指针p扫描出尾部的*号。2,定义两个字符串中间变量s和3其中s是存放*号后面的字符串,I是存放*号字符串。3.最后利用字符串拷贝和连接,重新组成字符串a。参考答案:voidfun(char*a)char*p=a;while(*p)p+4-;p-;while(*p=='**)p—;p++;*p=o;※※※※※※※※※※※※※※※※※※※※※※※※※第44套:函数fun的功能是进行数字字符转换。若形参ch中是数字字符O〜9,则'0'转换成9,T转换成8,2转换成7,……,9转换成O;若是其它字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********f^)und**********/1fun(charch)/**********f^)und**********/if(ch>='0'&&-2_)/**********found**********/return'9'-(ch-3);returnch;}main(){charcl,c2;printfC'ViTheresult:

749u);cl=2;c2=fun(cl);printf(Mcl=%cc2=%c

750",cl,c2);cl=8;c2=fun(cl);printf(Hcl=%cc2=%c

751",cl,c2);cl='a';c2=fun(cl);printf("cl=%cc2=%c

752",cl,c2);

753解题思路:第一处:要求返回处理好的字符,所以应填:char。第二处:判断该字符是否是数字,所以应填:ch<=9。第三处:只要减去'0'的ASCII值,即可得到要求的结果,所以应填:’0'。给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:ABCDEFGHIJKo请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includevoidfun(char*p,char*b){inti,k=0;while(*p){i=l;while(i<=3&&*p){/**********found**********/b[k]=p;k++;p++;i++;}if(*p)(/**********f^)und**********/b[k++]="”;))b[k]=AO';)main(){chara[80],b[80];printf(MEnterastring:");gets(a);printf("Theoriginalstring:");puts(a);fun(a,b);printf("

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

755

756");}解题思路:第一处:把指针p所指的值赋值给b[k]中。第二处:把空格字符赋值给b[k++]中,而不是一个空格的字符串。N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625o注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include

757#defineN8structslist{doubles;structslist*next;);typedefstructslistSTREC;doublefun(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=0;returnh;outlist(STREC*h){STREC*p;p=h->next;printfC^ead1');do{printf(M->%4Jf\p->s);p=p->next;}while(p!=0);primf(”

758

759");)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

760n,ave);NONO();}解题思路:

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

762{intb[N]={9,l,4,2,3,6,5,8,7},i,n;printf(u

763Theoriginaldata:

764");for(i=0;i

765");n=fun(b,N);printf(u

766Thenumberofeven:%d

767”,n);printf(u

768Theeven:

769M);for(i=0;i

770");}解题思路:第一处:判断a[i]是否是偶数,若是,则仍保留在原数组中a[j],所以应填:a[i]%2o第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:a|j]o第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:j。给定程序M0DI1.C中函数fun的功能是:按以下递归公式求函数值。r10(n=l)fun(n)=H1-fun(n-l)+2(n>l)例如,当给n输入5时,函数值为18:当给n输入3时,函数值为14。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include/************************/fun(n){intc;/************found************/if(n=l)c=10;elsec=fun(n-l)+2;retum(c);}main(){intn;printfC'Entern:");scanf(M%dH,&n);printf(MTheresult:%d

771

772u,fun(n));

773)解题思路:第一处:形参n没有定义类型,所以应改为:fun(intn)。第二处:判断相等的符号是==。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于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[81J;intn;printf(HEnterastring:

774M);gets(s);printf(nEntern:");scanf("%d\&n);fun(s,n);printf(HThestringafterdeleted:

775");puts(s);NONO();)解题思路:本题是考察字符串的操作。L使用while循环语句和字符串指针p扫描出尾部的*号。2.找出字符串最右边字母后出现r的第1位置。3.使用while循环来处理右边*是否大于n个,若大于,则取n个阳。4.最后给字符串加上结束符。

776参考答案:voidfun(char*a,intn)(char*p=a;intj=0;while(*p)p++;p-;/*字符串的长度*/while(*p=='*')p・・;/*字符串右的'*'*/P++;while(j#include#defineN5#defineM8voidfun(char(*ss)[M]){char*ps[N],*tp;inti,j,k;for(i=0;i

777if(strlen(ps[k])

778Thestringaftersortingbylength:

779

780");for(i=0;i

781Theoriginalstring

782

783");for(i=0;i

784");fun(ch);}解题思路:本题是按字符串的长短进行排序。第一处:外循环每循环一次,k应保存当前的i值,所以应填:io第二处:使用内循环对i+1后面的字符串长度进行比较,所以应填:ps[j]o第三处:交换内容,所以应填:tp。已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。例如,当n=10时,程序的输出结果应为:23.197745.请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/************fovind************/fun(intn){doublesum,sO,si,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;sO=0.0;sI=0.0;s2=1.0;for(k=4;k<=n;k++){s=s0+si+s2;sum+=sqrt(s);

785sO=si;si=s2;s2=s;returnsum}main(){intn;printfC'InputN=H);scanf(H%dM,&n);printf(M%f

786\fun(n));解题思路:第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。第二处:该行缺少分号.编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当n=10,x=0.3时,函数值为1.349859。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(doublex,intn)(}main()(printf("%f

787",fun(0.3,10));NONO();解题思路:本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后把s作为函数值返回。其中,jc函数是计算阶乘的。参考答案:#include#includelongjc(intn)longs=1;

788inti;for(i=1;i<=n;i++)s*=i;returns;}doublefun(doublex,intn)(doubles=1.0,y=x;inti;for(i=1;i<=n;i++){s+=y/(double)jc(i);y*=x;}returns;)※※※※※※※※※※※※※※※※※※※※※※※※※第47套:给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter'a*:3timesletter's':3times请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includevoidfun(char*s){intk[26]={0},n,i,max=0;charch;while(*s){if(isalpha(*s)){/**********f^)und**********/ch=tolower(_1_);n=ch-'a*;/**********tound**********/k[nJ+=_2_;S++;/**********found**********/

789if(max

790Aftercount:

791M);for(i=0;iv26;i++)if(k[i]==max)printf("

792letterV%cV:%dtimes

793"j+'a',k[i]);}main(){chars[81];printf("

794Enterastring:

795

796");gets(s);fun(s);)解题思路:本题是找出字符串中出现频率最高的字母并统计出其次数。第一处:将当前字母转换为小写字母,所以应填:*s。第二处:把该字母出现的个数累加到指定的数组中,所以应填:1。第三处:如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填:k[n]o给定程序M0DI1.C中函数fun的功能是:求S的值。例如,当k为10时,函数值应为:1.533852。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/************found************/voidfun(intk){intn;floats,w,p,q;n=1;s=1.0;while(n<=k){w=2.0*n;p=w-1.0;q=w+1.0;s=s*w*w/p/q;n++;)

797/************************/returns}main()(printf("%f

798",fun(10));)解题思路:第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。第二处:缺少分号。编写函数fun,它的功能是:计算并输出下列级数和:I11S=++…+1x22x3n(n+l)例如,当n=10时,函数值为:0.90909k注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn)(}main()/*主函数*/(printf("%f

799",fun(10));NONO();)解题思路:本题是根据公式计算结果。使用for循环语句进行计算。但要注意的是:在除法运算中,如果除数和被除数都是整数,所以所除的结果也是整数,因此1应取实数或进行实型的类型转换。参考答案:doublefun(intn)(doubles=0.0;inti;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));returns;

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

801Enterastring:

802

803");gets(s);n=fun(s);printf("

804Theresultis:%d

805

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

807returnm;/************unci************/main()(printf("%d

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

809",fun(1000));NONO();解题思路:本题是求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。参考答案:doublefun(intn)doublesum=0.0;inti;for(i=21;i<=n;i++)if((i%3==0)&&(i%7==0))sum+=i;returnsqrt(sum);}※※※※※※※※※※※※※※※※※※※※※※※※※第49套:给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCH码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。

810例如,形参s所指的字符串为:Abc@lx56*.程序执行后t所指字符数组中的字符串应为:A@156*.请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(char*s,char*t){intn=0;while(*s){if(*s<97){/**********nd**********/*(t+n)=_l_;n++;}2.*(t+n)=O;/**********found**********/return_3_;}main(){chars[81],t[81];intn;printf("

811Enterastring:

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

813Thereare%dletterwhichASCIIcodeislessthan97:%s

814",n,t);)解题思路:本题是根据条件组成新的字符串并统计出符合条件的个数n。第一处:把符合条件的当前字符存放到t字符串中,所以应填:*s。第二处:到字符串下一个位置,所以应填:S++。第三处:返回符合条件的字符个数n,所以应填:n。给定程序MODH.C中函数fun的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,

815196.579,196.763所得平均值为:195.838745,在平均值以上的实数个数应为:5请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(floatx[J,intn)(/************found************/intj,c=0,floatxa=0.0;for(j=O;j

816H,xa);for(j=O;jxa)C++;returnc;main(){floatx[100J={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763);printf("%d

817”,fun(x,8));)解题思路:第一处:两种类型变量定义之间应该用分号,所以应改为:intj,c=0;floatxa=0.;。第二处:在C语言中,大于等于应表达为>=。编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数目要求m>n。m!P=n!(m-n)!例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件PR0G1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

818你编写的若干语句。给定源程序:#includefloatfun(intm,intn)()main()/*主函数*/(printf("P=%f

819",fun(12,8));N0N0();}解题思路:本题是计算阶乘。参考答案:#includelongjc(intm)longs=1;inti;for(i=1;i<=m;i++)s=s*i;returns;floatfun(intm,intn){floatp;p=1.O*jc(m)/jc(n)/jc(m-n);returnp;)※※※※※※※※※※※※※※※※※※※※※※※※※第50套:给定程序中,函数fun的功能是:有NXN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵:123456789

820计算结果为10065010149请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4/**********found**********/voidfun(int(*t)—1—){inti,j;for(i=1;i

821Theoriginalarray:

822M);for(i=0;i

823H);}fun(t);printf("

824Theresultis:

825");for(i=0;i

826");))解题思路:第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:中田]。第三处:右上三角元素置为0,所以应填:用]国。给定程序MODH.C中函数fun的功能是:计算函数

827F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。例如,当x的值为9、y的值为11、z的值为15时,函数值为-3.50o请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:

828#include#include#include/************found************/#defineFU(m,n)(m/n)floatfun(floata,floatb,floatc){floatvalue;value=FU(a+b,a-b)+FU(c+b,c-b);/************tound************/Return(Value);main(){floatx,y,z,sum;printf("Inputxyz:");scanf(M%f%f%f',&x,&y,&z);printf(,,x=%f,y=%f,z=%f

829,,,x,y,z);if(x==ylly==z){printf(,,Dataerror!

830M);exit(0);}sum=fun(x,y,z);printf(MTheresultis:%5.2f

831H,sum);)解题思路:第一处:define定义错误,所以应改为:#defineFU(m,n)((m)/(n))o第二处:return错写成Return,变量value错写成Value。规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include

832main(){chars[81J;printf("Enterastring:

833M);gets(s);fun(s);printf(MThestringafterdeleted:

834");puts(s);NONO();)解题思路:本题是考察字符串的操作。1.利用循环扫描出字符串左边第1个字符不是的字符。2.再利用循环把以后的字符依次移动原字符串首地址开始存放。3.最后给字符串a加上结束符。参考答案:voidfun(char*a)(intj=0;char*p=a;while(*p=='*')p++;while(*p){a[j++]=*p;p++;)a[jJ=O;}※※※※※※※※※※※※※※※※※※※※※※※※※第51套:给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.,函数的返回值为6。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。

835不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(char*s){intn=0,flag=O;while(*s!=W){if(*s!=,1&&flag==O){/**********found**********/_1_;flag=l;}/**********f^)und**********/if(*s=='')flag=_2_;/**********found**********/—3_;}returnn;}main(){charstr[81J;intn;printf("

836Enteralinetext:

837n);gets(str);n=fun(str);printf(M

838Thereare%dwordsinthistext.

839

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

841给定源程序:#include#defineN20intfun(float*s,intn,float*aver){floatave,t=0.0;intcount=0,k,i;for(k=0;k

842Pleaseenterm:");scanf(M%dH,&m);printf(n

843Pleaseenter%dmark:

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

845Thenumberofstudents:%d

8460,fun(s,m,&aver));printf(nAve=aver);)解题思路:第一处:应求累加和,而不赋值,所以应改为t+=s[k];。第二处:ave不需要取地址,直接赋给*aver就可以了。请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:

847#includeintfun(intk=pos;s,intt,int*k)()main()(inta[l0]={876,675,896,101,301,401,980,431,451,777),k;fun(a,10,&k);printf(M%d,%d

848”,k,a[k]);NONO();)解题思路:本题是考察考生如何在指定的数组找出最大元素值的F标,通过形参*k返回到主程序中。给出的程序是使用for循环语句进行处理的,在循环之前,首先把数组的第一个元素值赋给最大值变量max,位置pos为0,然后通过循环依次判断下一元素值是否大于最大值max,如果大于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后执行语句*k=pos就可以实现返回了。参考答案:intfun(int*s,intt,int*k)(inti,pos=0,max=*s;for(i=1;i

849给定源程序:#include#defineN4voidfun(int(*t)[NJ){inti,j,x;/**********f^)und*********¥/for(i=0;i<1;i++)(/**********tound**********/X=t[i][—2—];for0=N-l;j>=l;j-)/**********found**********/t[i][一3—]=x;main(){intt[][N]={21,12,13,24,25,16,47,38,2911,32,54,42,21,33,10},i,j;printf(MTheoriginalarray:

850M);for(i=0;i

851M);}fun(t);printf(M

852Theresultis:

853H);for(i=0;i

854K);)}解题思路:第一处:函数fun是对NXN矩阵进行操作,for循环的终止值为N。第二处:把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:N-lo第三处:第1列元素值使用x替换,由于C语言的下标是从0开始的,所以应填:0。例如,若q的值为:50.0,则函数值为:49.394948。请改正程序中的错误,使程序能输出正确的结果。

855注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(doubleq){intn;doubles,t;n=2;s=2.0;while(s<=q)t=s;/************unci************/s=s+(n+l)/n;n++;printf("n=%d

856",n);/************fbund************/returns;main()printf(n%f

857H,fun(50));}解题思路:第一处:如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以应改为:s+=(float)(n+l)/n;()第二处:返回结果错误,应改为:returnt;»编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(l)=lF(n)=F(n-l)+F(n-2)例如:当t=1000时,函数值为:1597。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(intt)main()/*主函数*/{intn;n=1000;printf(Mn=%d,f=%d

858',,n,fun(n));NONO();)解题思路:本题是考察考生用递推算法来求出斐波那契数列中每项的值。给出的程序就是用变量f、ro和fi

859来表示递推的过程,给变量ro和fi最初分别置数列中第1项和第2项的值。和1,然后进入循环,执行语句f=fO+fl:将所得和值存入f中,这就是数列的第3项,把门的值移入K)中,将f的值移入fi中,为求数列的下一列作好准备:接着进入下一次循环,通过语句f=n)+fi求得数列的第4项,不断重复以上步骤,每重复一次就依次求得数列的下一项,直至某项满足要为止。参考答案:intfun(intt)(intfO=0,fl=1,f;do{f=fO+fl;fO=fl;fl=f;}while(f#includedoublefun(doublex){doublef,t;intn;f=1.0+x;/**********found**********/t=1;n=1;do{n++;/**********found**********/t*=(-1.0)*x/_2—;

860/**********tound**********/while(3>=le-6);returnf;main(){doublex,y;x=2.5;y=fun(x);printf(H

861Theresultis:

862n);printf(Mx=%-12.6fy=%-12.6f

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

864Inputxandy:");scanf(M%ld%ldH,&x,&y);t=fun(x,y,&r);

865printf(M

866

867x=%d,y=%d,r=%ld,last=%ld

868

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

870u,s);NONO();)解题思路:本题是根据给定的公式进行计算。具体操作请看答案程序中的说明。参考答案:doublefun(doublex)intn=l;/*循环计数doublesn=1;/*累计数*/doublexn=l,xnl=0;/*x的n值,以及x的n-1值;*/while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/xn=xn*x*(0.5-n+l)/n;/*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/n+=l;sn+=xn;/*sn累力□上xn*/)retum(sn);)

871※※※※※※※※※※※※※※※※※※※※※※※※※第54套:给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(int*);voidoutlist(SLIST*);intfun(SLIST*h){SLIST*p;ints=0;p=h->next;while(p)(/**********found**********/s+=p->1;/**********tound**********/p=p->__2_;returns;main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48);head=creatlist(a);outlist(head);/**********tound**********/

872printf(n

873sum=%d

874,fun(3));)SLIST*creatlist(inta[J){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=0;returnh;)voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("ThelistisNULL!

875n);else{printf(M

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

877H);)I解题思路:本题是计算出带有头结点的单向链表中各结点数据域中值之和。第一处:累加数据域中的值,所以应填:data。第二处:指定p的下一个指针,所以应填:next。第三处:函数调用,在主函数中已经给出了head,所以应填:head。给定程序M0DI1.C中函数fun的功能是:将s所指字符串中出现的与tl所指字符串相同的子串全部替换成12所指字符串,所形成的新串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:"abcdabfab”,tl所指子串中的内容为:"ab",t2所指子串中的内容为:“99"时,结果在w所指的数组中的内容应为:"99cd99f99"o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

878给定源程序:#include#includeintfun(char*s,char*tl,char*t2,char*w)inti;char*p,*r,*a;strcpy(w,s);while(*w){p=w;r=tl;/************************/while(r)if(*r==*p){r++;p++;}elsebreak;if(*r==*\0'){a=w;r=t2;while(*r){/************tound************/*a=*r;a++;r++w+=strlen(t2);elsew++;main()(chars[l00],11[100],t2[100],w[100];printf("

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

880Pleaseentersubstringtl:");scanf("%s",tl);printf("

881Pleaseentersubstringt2:");scanf("%s",t2);if(strlen(tl)==strlen(t2)){fun(s,tl,t2,w);printf("

882Theresultis:%s

883",w);}elseprintf("Error:strlen(tl)!=strlen(t2)

884");}解题思路:第一处:判断字符串当前字符是否是字符串结束符,所以应改为:while(*r)o第二处:语句后缺少分号。函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。

885例如,当s所指字符串中的内容为:"ABCDEFGHIJK”,在t所指数组中的内容应是:"BDFHJ"«注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*s,chart[J)main()chars[100],t[100];printf("

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

887Theresultis:%s

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

889/**********found**********/lp=_l_;rp=s+strlen(s)-l;while((toupper(*lp)==toupper(*rp))&&(Ipvrp)){/**********tound**********/lp++;rp_2_;}/**********f^)und**********/if(lp

890\M%sVisaPalindrome.

891

892H,s);elseprintf(M

893V'%s\Hisn*taPalindrome.

894

8950,s);)解题思路:本题是判断字符串是否是“回文”。第一处:根据函数体fun中,对变量Ip的使用可知,Ip应指向形参s,所以应填:s。第二处:rp是指向字符串的尾指针,当每做一次循环rp指向就要指向前一个字符,所以应填:一。第三处:当Ip和rp相等时,则表示字符串是回文并返回1,否则就返回0,所以应填:return0«给定程序MODH.C中fun函数的功能是:求出以下分数序列的前n项之和。23581321I235813和值通过函数值返回Imain函数。例如,若n=5,则应输出:8.391667o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includefun(intn){inta=2,b=1,c,k;doubles=0.0;for(k=1;k<=n;k++){s=s+1.0*a/b;/***************************/

896c=a;a+=b;b+=c;)retum(s);}main(){intn=5;printf(n

897Thevalueoffunctionis:%lf

898n,fun(n));)解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double或float等定义。第二处:根据公式可知,在for循环内b的值应是c。请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。函数fun中给出的语句仅供参考。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(intm,intk,intxx[J)(/*以下代码仅供参考*/inti,j=l,t=m+l;while(j<=k)/*以下完成判断素数,并存放到数组XX中*/main()(intm,n,zz[1000];printf(H

899Pleaseentertwointegers:**);scanf("%d%d,\&m,&n);fun(m,n,zz);for(m=0;m

900printf(M%dM,zz[mj);printf(M

901n);NONO();}解题思路:本题是考察考生如何判断一个数是素数,再判断所求出的素数是否符合题义要求,如果符合,则存入指定的数组XX中保存,最后由形参XX返回。本题是用while循环语句分别求出5个符合题义的素数。其中,j是控制变量,m是所求素数要大于这个数目还要紧靠这个数,k是所求素数的个数,j是当前所求第几个素数。其中while循环体中的for循环语句是判断t是否是素数。参考答案:voidfun(intm,intk,intxx[j)(/*以下代码仅供参考*/inti,j=l,t=m+l;while(j<=k)(/*以下完成判断素数,并存放到数组xx中*/fbr(i=2;i

902注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includevoidWriteText(FILE*);voidReadText(FILE*);main(){FILE*fp;if((fp=fopen(,'myfile4.txt,,,,,w,'))==NULL){printf(Hopenfail!!

903H);exit(O);)WriteText(fp);fclose(fp);if((fp=fopen(,'myfile4.txt,,;,r,'))==NULL){printf(Mopenfail!!

904H);exit(O);)ReadText(fp);fclose(fp);voidWriteText(FILE—1_){charstr[81J;printfC'XnEnterstringwith-1toend:

905n);gets(str);while(strcmp(str,H-r')!=O){/**********found**********/fputs(2.fw):fputs("

906”,fw);gets(str);})voidReadText(FILE*fr){charstr[8l];printf(M

907Readfileandoutputtoscreen:

908u);fgets(str,81,fr);while(!feof(fr)){/**********tound**********/printf("%s",—3—);fgets(str,81,fr);)}解题思路:本题要求是把健盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。

909第一处:要求填写文件流的自变量名,在这个函数中,已有的语句fputs("

910",fw);分析可知:由于文件流变量fw在函数体没有定义过,所以本处应填*fw或fw[]。第二处:通过while循环语句,把健盘上输入的内容,要写入到指定的文件中,键盘上输入的内容已存入字符串str变量中,因此,本处应填写str。第三处:要把已存入文件中的内容,再从文件中读出且已存入字符串变量str中,最后在屏幕显示出来,因此,此处应填写str。给定程序M0DI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************^ound************/voidfun(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("%ld",&s);fun(s,&t);printf("Theresultis:%ld

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

913",c);NONO();

914解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);※※※※※※※※※※※※※※※※※※※※※※※※※第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所指数组中数据的个数。注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN9voidfun(inta[],intn){inti,j,max,min,px,pn,t;for(i=0;i3)

915{min=a[jj;pn=j;})if(pn!=i){t=a(i];a[i]=min;a[pnj=t;if(px==i)px=pn;)if(px!=i+l){t=a[i+l];a[i+lj=max;a[px]=t;}))main(){intb[N]={9,1,4,23658,7},i;printf("

916Theoriginaldata:

917M);for(i=0;i

918M);fun(b,N);printf("

919Thedataaftermoving:

920H);for(i=0;i

921");解题思路:第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给max和min变量,所以应填:a[i]»第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]=第三处:判断min是否大于a[j],若大于,则把a[j]赋值给min,所以应填:a[j]。给定程序M0DI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……例如,若给n输入7,该项的斐波拉契数值为:13。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includelongfun(intg)(/**********found**********/switch(g);

922{case0:return0;/**********found**********/case1;case2:return1;)return(fun(g-1)+fun(g-2));}main(){longfib;intn;printfC'Inputn:");scanf(n%dM,&n);printf(Mn=%d

923

924);fib=fun(n);printf(nfib=%d

925

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

927}main(){STRECs={“GA005”,85.5,76,69.5,85,91,72,64.5,87.5};inti;fun(&s);printf(MThe%s'sstudentdata:

928u,s.num);for(i=0;i

929”,s.s[i]);printf(M

930ave=%7.3f

931",s.ave);NONO();解题思路:本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。参考答案:voidfun(STREC*a)(inti;for(i=0;iave=a->ave+a->s[i];a->ave/=N;}※※※※※※※※※※※※※※※※※※※※※※※※※第58套:给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgho请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include

932#include#defineN80voidfun(char*s,intn,char*t){intlen,ij=0;len=strlen(s);/**********found**********/if(n>=len)strcpy(_1_);else{/**********found**********/for(i=len-n;i<=len-l;i++)t|j++J=_2_;/**********f^)und**********/t|j]=—3_;)}main(){chars[N],t[N];intn;printf("Enterastring:");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n,t);printf("Thestringt:");puts(t);)解题思路:本题是根据要求来复制字符串。第一处:当给定的长度n大于该字符串s的长度,那么把该字符串直接拷贝到t就可以了,所以应填:t,s。第二处:使用for循环语句,把最右边n个字符依次添加到t中,所以应填:s[i]。第三处:字符串操作结束,需要到t加一个字符串结束符,所以应填:Wo给定程序M0DI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intm){inti,k;for(i=m+1;;i++){for(k=2;k

933))voidmain()(intn;n=fun(20);printf(,,n=%d

934H,n);}解题思路:第一处:判断素数的条件是一个数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,35。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(intx,intpp[],int*n)()main(){intx,aa[1000],n,i;printf("

935Pleaseenteranintegernumber:

936n);scanf(,,%dH,&x);fun(x,aa,&n);for(i=0;i

937");NONO();}解题思路:本题是求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。参考答案:

938voidfun(intx,intpp[],int*n)(inti;*n=0;for(i=l;i<=x;i++)if((x%i==0)&&(i%2))pp[(*n)++]=i;)※※※※※※※※※※※※※※※※※※※※※※※※※第59套:给定程序中,函数fun的功能是:在3X4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如,有下列矩阵:12134781063597程序执行结果为:find:a[2][2]=9请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineM3#defineN4voidfun(int(*a)[NJ){inti=O,j,find=O,rmax,c,k;while((i

939if(find)printf(wfind:a[%d][%d]=%d

940M,i,c,a[i][c]);/**********found**********/_3_;}if(!find)printf(Mnotfound!

941n);)main(){intx[M][N],ij;printf("Enternumberforarray:

942°);for(i=0;i

943H);for(i=0;i

944

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

946/**************found**************/y-=1/(i*i);retum(y);)main(){intn=5;printf("

947Theresultis%lf

948",fun(n));)解题思路:第一处:使用for循环计算公式,必须计算到m,所以应改为for(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和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(intscore[J,intm,intbelow[])(}main(){inti,n,below[9];intscore[9J={10,20,30,40,50,60,70,80,90);n=fun(score,9,below);printf("

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

950解题思路:本题是计算平均成绩,再把低于平均成绩的分数存入依次数组below中。参考答案:intfun(intscore[],intm,intbelow[])(floatav=0.0;inti,j=0;for(i=0;iscoreli])below|j+4-J=score[iJ;returnj;※※※※※※※※※※※※※※※※※※※※※※※※※第60套:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includetypedefstruct{intnum;charname[10J;[PERSON;/**********f^)und**********/voidfun(PERSON—1_)/**********tound**********/__2_temp;if(std[O].num>std[1J.num){temp=std[OJ;std[O]=std[I];std[1J=temp;}if(std[0].num>std[2].num){temp=std[0];std[0]=std[2];std[2]=temp;}if(std[l].num>std[2].num){temp=std[lj;std[l]=std[2j;std[2]=temp;}main(){PERSONstdlJ={5;'Zhanghu,,,2;,WangLi';6;,LinMinH};inti;/**********found**********/fun(—3一);printf("

951Theresultis:

952n);for(i=0;i<3;i++)printf(,,%d,%s

953,',std[i].num,std[i].name);解题思路:本题是要求对结构体数组中的三个元索按num成员升序排列。

954第一处:由于在函数体fun中,已经使用了std变量,所以应填:*std。第二处:由于temp是存放交换记录的中间变量,所以应填:PERSON»第三处:函数的调用,所以应填:std。给定程序M0DI1.C中函数fun的功能是:将m(IWmWIO)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把3个串:"abc","CD","EF"连接起来,结果是"abcCDEF%请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(charstr[][10],intm,char*pt)(/************found************/Intk,q,i;for(k=0;k

955Pleaseenterm:M);scanf("%dM,&m);gets(s[0]);printf(*'

956Pleaseenter%dstring:

957H,m);for(h=0;h

958Theresultis:%s

959",p);}解题思路:第一处:保留字int错写成Int。

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

961n);for(i=0;i

962H);fun(a);printf(HTHERESULT

963M);for(i=0;i

964");}N0N0();)解题思路:本题是利用两重循环给二维数组左下三角元素中的值全部置成0。

965参考答案:intfun(inta[][NJ)(inti,j;for(i=0;i#includecharfun(charch)/**********found*********不/if((ch>=*a')1(ch<=*z'))returnch-'a'+'A';if(isupper(ch))/**********f^)und**********/returnch+R-2;/**********found**********/return3;)main(){charc1,c2;printf(M

966Theresult:

967H);cl='w';c2=fun(c1);printf(Mcl=%cc2=%c

968",cl,c2);

969cl=W';c2=fun(cl);printf(Mcl=%cc2=%c

970",cl,c2);cl=8;c2=fun(cl);printf(Mcl=%cc2=%c

971",cl,c2);}解题思路:第一处:判断形参Ch是否是小写字母,所以应填:&&o第二处:小写字母与大写字母的ASCII值相差为32,所以应填:’A,或65。第三处:返回处理后的形参ch,所以应填:ch。给定程序M0DI1.C中函数fun的功能是:给一维数组a输入任意4个整数,并按下例的规律输出。例如输入1、2、3、4,程序运行后将输出以下方阵。4123341223411234请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineM4/**************'found**************/voidfun(inta){inti,j,k,m;printf(MEnter4number:'*);for(i=0;i

972

973Theresult:

974

975u);for(i=M;i>0;i—){k=a[M-lJ;for(j=M-l;j>0;j-)/**************found**************/aa|jj=a|j-l];

976a[OJ=k;for(m=0;m

977M);))main(){inta[MJ;fun(a);printf("

978

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

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

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

982Theoriginalstringis:%s

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

984Theresultis:%s

985M,s);)解题思路:第一处:首先判断字符串的长度是奇数还是偶数,如果是奇数,则卜=『1,所以应填:1。第二处:取字符串最后一个奇数位的字符,并由变量C保存,所以应填:s[k].第三处:第1位奇数位用最一个奇数位字符替换,所以应填:C。

986给定程序MODH.C中fun函数的功能是:求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,intn){intj;longs=0,t=1;for(j=0;j

987Pleaseenteraandn:H);scanf(n%d%dn,&a,&n);printf(HThevalueoffunctionis:%ld

988u,fun(a,n));}解题思路:第一处:根据for循环计算t的值可知,变量t的初值不正确,应为0。第二处:每次循环都是取t除以10的值,而不是取余数,所以应改请编写一个函数voidfun(char*tt,intpp[]),统计在tt所指字符串中

989'a'到N26个小写字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*tt,intpp[J)main(){charaa[1000];intbb[26],k,n;printf(H

990Pleaseenteracharstring:n);scanf(H%sH,aa);fun(aa,bb);for(k=0;k<26;k++)printfC%d”,bb[kj);printf("

991”);NONO();}解题思路:本题是考察考生在给定的字符串中统计出26个小写字母的次数并存入到指定的数组中且由形参返回。其中数组下标的位置可以通过某一个字符的ASCII值减去97或直接减H也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为&-宣=1,就是实际存放的位置。参考答案:voidfun(char*tt,intpp[])(char*p=tt;inti;for(i=0;i<26;i++)pplij=0;while(*p){if(*p>=fa'&&*pv=Z)pp[*p■直]+=1;p++;

992※※※※※※※※※※※※※※※※※※※※※※※※※第63套:给定程序中,函数fun的功能是:有NXN矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵

993456789程序执行结果为001004007请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4{inti,j;/**********f^)und**********/for(i=0;i=0;j-)/**********tound**********/t[i][j+一2-]=t[i][j];/**********f^)und**********/for(j=0;j<-3—;j++)t[i][j]=O;))main(){intt[][N]={21,12,13,24,25,16,47,38,2911,32,54,42,21,33,10),i,j,m;printf("

994Theoriginalarray:

995M);for(i=0;i

996");)printf("Inputm(m<=%d):",N);scanf("%d",&m);fun(t,m);printf(H

997Theresultis:

998n);for(i=0;i

999");解题思路:第一处:for循环变量的增量,所以应填:i++。第二处:由于右移m个位置,所以应填:mo第三处:左边m列均置于0,所以for循环的终止值应为m。

1000给定程序MODH.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。若high的值为:100,则函数的值为:732。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(inthigh){intsum=0,n=0,j,yes;/************tound************/while((high>=2)&&(n<10){yes=1;for(j=2;j<=high/2;j++)if(high%j==O){/************f^)und************/yes=0;break)if(yes){sum+=high;n++;}high-;returnsum;main()printf(H%d

1001u,fun(100));}解题思路:第一处:括号没有匹配。Error:Whilestatementmissing)infunctionfun在函数fun中While语句缺少)。第二处:缺少分号。Error:Breakstatementmissing;infunctionfun在函数fun中break语句缺少;。这种题型只要通过编译即可发现程序的错误所在。编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。迭代步骤如下:

1002(I)取xl初值为0.0;(2)x0=xl,把xl的值赋给xO:(3)xl=cos(xO),求出一个新的xl:(4)若xO-xl的绝对值小于0,000001,执行步骤(5),否则执行步骤(2);(5)所求xl就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出结果Root=0.739085o注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includefloatfun()main()printf("Root=%f

1003M,fun());NONO();}解题思路:本题是根据给定的公式及条件来计算方程的一个实根。参考答案:floatfun()(floatxO,x1=0.0;do{x0=xl;xI=cos(x0);}while(fabs(xO-x1)>0.000001);returnx1;}※※※※※※※※※※※※※※※※※※※※※※※※※第64套:给定程序中,函数fun的功能是:将a所指3X5矩阵中第k列的元素左移到第0列,第k

1004列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例如,有下列矩阵:123451234512345若k为2,程序执行结果为345123451234512请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include

1005#defineN5voidfun(int(*a)[NJ,intk){inti,j,p,temp;/**********f^)und**********/for(p=1;p<=_1_;p++)for(i=0;i

1006

1007M);for(i=0;i

1008M);fun(x,2);printf(MThearrayaftermoving:

1009

1010n);for(i=0;i

1011H);解题思路:第•处:外循环P的终止变量的值,试题要求第k列左移,所以应填:ko第二处:矩阵共N列,所以应填:N-lo第三处:把存放在临时变量temp中的值,放到中,所以应填:temp。给定程序MODH.C中函数fun的功能是:根据形参m的值(2WmW9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入21若输入4则输出:I则输出:121123424124681369121481216请改正程序函数中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineM10inta[M][M]={0};/***************************/fun(int**a,intm){intj,k;

1012for(j=0;j

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

1014fun(a,b,&c);printf(uTheresultis:%ld

1015n,c);N0N0();)解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/l0);※※※※※※※※※※※※※※※※※※※※※※※※※第65套:给定程序中,函数fun的功能是:将a所指4X3矩阵中第k行的元素与第0行元素交换。例如,有下列矩阵:12345678910II12若k为2,程序执行结果为:789456123101112请在程序的下划线处填入正确的内容并把卜划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN3#defineM4voidfun(int(*a)[NJ,int_1_)/**********found**********/{temp=a[0J[i];/**********found**********/al0][i]=_3_;a[k][i]=temp;

1016main(){intx[M][N]={{123},{4,5,6},{7,8,9},{10,11,12)},i,j;printf(MThearraybeforemoving:

1017

1018M);for(i=0;i

1019

1020M);}fun(x,2);printf("Thearrayaftermoving:

1021

1022");for(i=0;i

1023

1024");)}解题思路:第一处:变量k在函数体fun中已经使用,所以应填:ko第二处:共N行,所以应填:No第三处:变量值交换,所以应填:给定程序MODH.C中函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。例如,若输入:edcba,则应输出:abcde。请改正程序中的错误,使它能统计出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(chart[])(charc;inti,j;/**********f^)und***********/for(i=strlen(t);i;i-)for(j=O;j

1025Pleaseenteracharacterstring:");gets(s);

1026printf(M

1027

1028Beforesorting:

1029

1030%s\,,H,s);fun(s);printf(n

1031Aftersortingdecendingly:

1032\"%s\"”,s);)解题思路:第一处:外for循环的初始值应是strlen⑴第二处:由于是按升序排序,所以应if(t|j]>t|j+l])o请编写一个函数fun,其功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入若bc4EFg”,则应输出“aBc4EFg”。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*ss)()voidmain(void)(chartt[51];printf(n

1033Pleaseenterancharacterstringwithin50characters:

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

1035

1036Afterchanging,thestring

1037\"%s\”“,tt);fun(tt);printf("

1038becomes

1039\"%s\"",tt);NONO();}解题思路:本题是考察考生在字符串指定位置上的字母转换为大写。给出的程序是由i来控制字符串所在的位置,字符串指针p是指向形参ss,再使用while循环语句对p进行控制来判断字符串是否结束,在循环体中使用if条件语句来判断位置i是否为奇数且p所指的当前字符是否为区至Z的字母,如果满足这两个条件,则把该小写字母转换成大写字符,小写字母与大写字母的差是32,所以只小写字母减去32,即可得到该字母的大写字母,且转换后的字母仍存放到原字符串的位

1040置上,转换结束后,最后通过形参ss返回已转换后的字符串。参考答案:voidfun(char*ss)(char*p=ss;inti=0;while(*p){if((i%2)&&(*p>='a'&&*p<='z'))*p-=32;p++;i++;)returnss;※※※※※※※※※※※※※※※※※※※※※※※※※第66套:给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返1可,并在main函数中输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includetypedefstruct{charname[10];intage;}STD;STDfun(STDstd[],intn){STDmax;inti;/**********found**********/max=1;for(i=1;i

1041max=fun(std,5);printf(M

1042Theresult:

1043u);/**********tound**********/printf("

1044Name:%s,Age:%d

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

1046",a,b);}解题思路:第一处:函数形参定义不正确,在定义第2个形参时,也应加上im。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int*a,im*b。第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*b;*b=*a;*a=t;o请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的

1047二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineM3#defineN4voidfun(intintpp[N])(}main(){intt[M][N]={{22,45,56,30),{19,33,45,38},{20,22,66,40}};intp[N],i,j,k;printf(MTheoriginaldatais:

1048n);for(i=0;i

1049M);fun(t,p);printf(n

1050Theresultis:

1051M);for(k=0;k

1052M);N0N0();)解题思路:本题是求出二维数组每列中最小元素,并依次放入pp所指一维数组中。参考答案:voidfun(inttt[M][N],intpp[N])(inti,j,min,k;for(i=0;i

1053if(min>tt[j]li]){\TABmin=tt[j][i];k=j;}pp[i]=tt[k][i];※※※※※※※※※※※※※※※※※※※※※※※※※第67套:给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN20voidfun(int*a){inti,x,n=0;x=rand()%20;while(n<_1_){for(i=0;i

1054M);for(i=0;i

1055M);

1056)printf(H

1057

1058n);解题思路:第一处:一共产生20个随机数,所以应填:No第二处:要求产生不同的20个整数,所以采用for循环对已产生的随机数进行比较,是否有相同数,如果有相同,则退出循环体,所以应填:breako第三处:当退出循环体还是进行判断,i和n的值是否相等,如果相等,则表示该随机整数不重复,可以存放到指定的数组中,所以应填:n。给定程序M0DI1.C中函数fun的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun()(inta[3][3],sum;inti,j;for(i=0;i<3;i++){for(j=O;j<3;j++)/*********found*>scanf("%d",a[i][j]);}for(i=0;i<3;i++)sum=sum+a[ij[i];printf("Sum=%d

1059",sum);}main()(fun();解题思路:

1060第一处:变量sum进行初始化,由于计算累加和,所以应为:sum=0;。第二处:读入整型数,应使用地址读入,所以应为:scanf("%d”,&a[i][j]);。编写程序,实现矩阵(3行3歹U)的转置(即行列互换)例如,输入下面的矩阵:100200300400500600700800900程序输出:100400700200500800300600900注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includeintfun(intarray[3][3])(}main()(inti,j;intarray[3][3]={{100,200,300),{400,500,600),{700,800,900});for(i=0;i<3;i++){for(j=0;j<3;j++)printf(n%7dn,array[i][j]);printf(M

1061M);)fun(array);printf('*Convertedarray:

1062H);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(M%7dM,array[i][j]);printf(H

1063M);NONO();解题思路:本题是解决矩阵的转置问题。参考答案:intfun(intarray⑶⑶)(intij,arr[3][3];memcpy(arr,array,9*sizeof(int));for(i=0;i<3;i++)fbr(j=O;j<3;j++)array[i][j]=arr[jJli];※※※※※※※※※※※※※※※※※※※※※※※※※第68套:

1064给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中•ss所指字符串数组中共有M个字符串,且串长#defineM5#defineN20/**********f^)und**********/intfun(char(*ss)1,int*n){inti,k=0,len=0;for(i=0;i

1065Theoriginalstringsare:

1066M);fdr(i=O;i

1067Thelengthoflongeststringis:%d

1068n,n);printf(M

1069Thelongeststringis:%s

1070M,ss[k]);}解题思路:第一处:形参ss的定义,它是一个字符串数组的定义,其宽度为N,所以应填:No第二处:

1071取第一个字符串的长度赋值给变量*n,所以应填:len。第三处:每循环一次,判断当前字符串的长度是否大于*n,如果大于,则*n=len。给定程序MODH.C中fun函数的功能是:根据形参m,计算如下公式的值。1111t1_____—234m例如,若输入5,则应输出2.283333o请改正程序中的错误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intm)doublet=1.0;inti;for(i=2;i<=m;i++)/**********found****t+=1.0/k;main()(intm;printf(H

1072Pleaseenter1integernumber:1');scanf(n%d'\&m);printf(n

1073Theresultis%lf

1074",fun(m));)解题思路:第一处:在此变量k没有定义过,再根据公式和for循环语句中所用的变量可知,这里的k实际上是io第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填returnt;。编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asdasasdfgasdaszx67asdmklo,子字

1075符串为:as,则应输出6。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(char*str,char*substr)main()charstr[81],substr[3];intn;printf("输入主字符串:");gets(str);printf("输入子字符串:”);gets(substr);puts(str);puts(substr);n=fun(str,substr);printf(Hn=%d

1076u,n);NONO();}解题思路:本题是统计一个字符串在另一个字符串中出现的次数。程序流程如下:1.利用sirstr函数,首先找到第一个出现的位置。2.利用while循环和sirstr依次查找所有出现的位置,并进行统计,并把统计结果作为函数值返回。strstr(constchar*sl,constchar*s2)是字符串s2在si中出现的位置,如果找到则返回位置指针。参考答案:intfun(char*str,char*substr)(intent=0;char*p=str,*q;while(*p){q=strstr(p,substr);if(q==NULL)break;p=q+strlen(substr);

1077cnt++;)returnent;)main()charstr[81],substr[3];intn;printf("输入主字符串:”);gets(str);printf("输入子字符串:");gets(substr);puts(str);puts(substr);n=fun(str,substr);printf(Mn=%d

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

1079/**********f^)und**********/d=d*10+*s-_1_;/**********found**********/—2_;}returnd;longfun(char*a,char*b)/**********tound**********/return_3.main(){charsl[N],s2[N];do{printf(nInputstringsi:");gets(s1);}while(strlen(s1)>N);do{printf("Inputstrings2:");gets(s2);)while(strlen(s2)>N);printf("Theresultis:%ld

1080n,fun(sl,s2));}解题思路:第一处:数字字符与其对应的数值相差48,所以应填:48o第二处:到字符串下一个位置,所以应填:S++。第三处:返回两个数字字符串经转换成数值的和,所以应填:ctod(a)+ctod(b)。给定程序MODH.C中fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBbl23CCccccd,则应输出结果:upper=6,lower=8。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/**********found**********/voidfun(char*s,inta,intb)while(*s)

1081{if(*s>='A'&&*s<='Z1)*a=a+1;if(*s>=&&*s<='z1)/**********found******'*b=b+1;s++;})main(){chars[l00J;intupper=0,lower=0;printf(M

1082Pleaseastring:“);gets(s);fun(s,&upper,&lower);printf(n

1083upper=%dlower=%d

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

1085

1086n,a);printf(MTheresult:%f

1087H,fun(a));

1088NONO();}解题思路:本题主要是考察考生保留小数点后两位数并对第三位进行四舍五入。方法是先把这个数乘以100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。参考答案:floatfun(floath)(longw;w=h*100+0.5;return(float)w/100;)※※※※※※※※※※※※※※※※※※※※※※※※※第70套:给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:4632404548请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN10doublefun(doublex[],double*y){inti,j;doubleav;/**********found**********/for(i=0;iav)y[_3_]=x[i];returnav;

1089main(){inti;doublex[N],y[N];for(i=0;i

1090M);printf(M

1091Theaverageis:%f

1092",fun(x,y));for(i=0;y[i]>=0;i++)printf(n%5.1fn,y[iJ);printf(H

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

1094printf(H

1095Theresultis%lf

1096M,fun(n));}解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或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]={{nA0r;81},{“A02”,89},{“A03”,66},{“A04”,87},{“A05”,77},{MA06\90},{HA07M,79},{MA08H,61},{,,A09M,80},{MA10M,71}},m;inti;printf(H*****Theoriginaldata*****

1097n);for(i=0;i

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

1099n);printf(nThelowest:%s,%d

1100,',m.num,m.s);NONO();}解题思路:

1101本题考察学生在一组记录中找出最低分。我们使用for循环语句来解决这个问题。参考答案:fun(STUa[],STU*s)inti,min=a[0].s,j=0;for(i=1;ia[i].s)(/*如果最低分min仍大于当前分*/j=i;/*记住位置*/min=a[i].s;/*把当前分赋值给min*/}*s=a[j];※※※※※※※※※※※※※※※※※※※※※※※※※第71套:给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的苜地址作为函数值返回。例如,s所指字符串为:asdl23fgh5##43df,处理后新字符串为:123543asdfgh##df。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#include#includechar*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i

1102main(){chars[80];printf(MPleaseinput:");scanf(M%sM,s);printf("

1103Theresultis:%s

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

1105charslL100],s2[100],t[200];printf("

1106Enterslstring:");scanf("%s",sl);printf("

1107Enters2string:");scanf("%s",s2);fun(si,s2,t);printf("

1108Theresultis:%s

1109",t);}解题思路:第一处:应该判断i是否小于j,所以应改为:while(i#includevoidfun(char*s,chart[])()main()chars[100],t[100];printf("

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

1111Theresultis:%s

1112M,t);NONO();解题思路:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。参考答案:voidfun(char*s,chart[J){inti,j=0;

1113for(i=0;idoublefun(doublee){inti;doubles,x;/**********f^)und**********/x=1.0;while(x>e){/**********found**********//**********tound**********/x=(2.0*i-l)/((_3_)*(2.0*i));s=s+x;

1114returns;main(){doublee=le-3;printf(M

1115Theresultis:%f

1116M,fun(e));}解题思路:第一处:根据公式以及下面的程序,可以得出i应为0。第二处:根据公式以及i的初值为0,所以应填:i++。第三处:根据公式要求,所以应填:2.0*i,给定程序M0DH.C中函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。例如,当s所指字符串为:"ABCD"时,贝Ut所指字符串中的内容应为:"ABCDDCBA"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/************f^^und************/voidfun(chars,chart)(inti,d;d=strlen(s);for(i=0;i

1117chars[100],tllOO];printf("

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

1119Theresultis:%s

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

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

1122Theresultis:%s

1123",t);NONO();

1124解题思路:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=1;idoublefun(doublee){inti,k;doubles,t,x;/**********tound**********//**********f^)und**********/while(x_2_e){s=s+k*x;k=k*(-1);t=2*i;/**********found**********/returns;main(){doublee=le-3;printf(M

1125Theresultis:%f

1126M,fun(e));)

1127解题思路:第一处:根据公式,首项应该是3.4,所以应填:3.o第二处:当x大于e时,循环体才会运行,所以应填:>o第三处:分子的值是2i+l,所以应填:2*i+l。给定程序M0DI1.C中函数fun的功能是:求出以下分数序列的前n项之和。和值通过函数值返1可到main函数。235813211235813例如,若n=5,则应输出:8.391667.请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/***********************/fun(intn){inta,b,c,k;doubles;s=0.0;a=2;b=1;for(k=1;k<=n;k++){/***********unci************/s=s+(Double)a/b;c=a;a=a+b;b=c;)returns;

1128{intn=5;printf(H

1129Thevalueoffunctionis:%lf

1130M,fun(n));}解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double或float等定义。第二处:double的第1个字母错写成大写D。请编写一个函数fun,它的功能是:求出一个2XM整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineM4fun(int()main(){intarr⑵[M]={5,8,3,45,76,412,82};printf(Hmax=%d

1131M,fun(arr));NONO();解题思路:本题是求出一个2XM整型二维数组中最大元素的值。参考答案:fun(int{inti,j,max=a[0][0];for(i=0;i<2;i++)for(j=0;j

1132if(max#defineN8typedefstruct{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i

1133Nopersonwasbomin%d

1134H,year);else

1135{printf(M

1136Thesepersonswerebornin%d

1137n,year);for(i=0;i

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

1139Pleaseenteranintegernumberbetween2and10000:");scanf(n%d",&k);printf(M

1140

1141Theprimefactor(s)of%dis(arek);for(j=2;j<=k;j++)if((!(k%j))&&(IsPrime(j)))printf(M

1142%4dM,j);printf(H

1143K);}解题思路:第一处:函数定义的行尾有多余的分号。第二处:条件判断缺少圆括号。

1144已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写函数fun,函数的功能是:找出成绩最高的学生记录,通过形参指针传回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s)()main(){STUa[N]={{"AOI”,81},{"A02',,89},{MA03\66},{HA04\87}4HA05,,,77},{“A06”,90},{nA07H,79},{“A08”,61},{“A09”,80},{“A10”,71}},m;inti;printf(u*****Theoriginaldata*****

1145");for(i=0;i

1146M,a[ij.num,a[i].s);fun(a,&m);printf(H*****THERESULT*****

1147**);printf(nThetop:%s,%d

1148,\m.num,m.s);NONO();解题思路:本题考察学生在一组记录中找出最高分。我们使用for循环语句来解决这个问题。参考答案:fun(STUa[J,STU*s)(inti,max=a[0].s,j=0;for(i=1;i

1149*s=a(j];)※※※※※※※※※※※※※※※※※※※※※※※※※第75套:给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按长度由短到长进行排序。ss所指字符串数组中共有M个字符串,且串长#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k,n[M];chart[NJ;for(i=0;in[j])—2—;if(k!=i){strcpy(t,ss[i]);strcpy(ss[i],ss[k]);/**********tound**********/strcpy(ss[kj,3);n[kj=nlij;main(){charss[M][N]={"shanghai0,nguangzhouH,,,beijing,',Htianjing",,,cchongqing,');inti;printf(M

1150Theoriginalstringsare:

1151M);for(i=0;i

1152H,ss[i]);printf(M

1153M);fun(ss);

1154printf(M

1155Theresult:

1156M);for(i=0;i

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

1158Pleaseenterastring:

1159");gets(s);printf(n

1160Pleaseenterthecharactertosearch:");c=getchar();fun(s,c);printf(H

1161Theresultis%s

1162",s);}解题思路:第一处:第1个形参应该是字符串类型,所以应改为:voidfun(char*str,charch)o第二处:应该是判断不相等,所以应改为:if(*str!=ch)。

1163第三次:置字符串结束符错误,所以应改为:str[l]=O;。请编一个函数fun(char*s),函数的功能是把s所指字符串中的内容逆置。例如:字符串中原有的字符串为:abcdefg,则调用该函数后,串中的内容为:gfedcbao注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN81fun(char*s)main(){chara[N];printf("Enterastring:");gets(a);printf("Theoriginalstringis:");puts(a);fun(a);printf(M

1164H);printf(MThestringaftermodified:puts(a);NONO();)解题思路:本题是考察考生如何对字符串中的字符进行逆序操作。给出的程序使用了一个临时变量b的字符串,使用for循环语句把原字符串的字符从尾部依次赋给临时变量b(从头开始)中,循环结束后,再把临时变量b的内容重新复制给原字符串变量即可。参考答案:fun(char*s)(charb[N];inti=0,j;memset(b,0,N);for(j=strlen(s)-1;j>=0;j-)b[i++]=s[jj;strcpy(s,b);}

1165※※※※※※※※※※※※※※※※※※※※※※※※※第76套:给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为10时,函数返回:-0.204491。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intn){inti,k;doubles,t;s=0;/**********found**********/for(i=1;i<=n;i++){/**********found**********/t=2s=s+k*(2*i-l)*(2*i+l)/(t*t);/**********f^)und**********/k=k*_3returns;main(){intn=-l;while(n<0){printf("Pleaseinput(n>0):");scanf(n%dM,&n);}printf(H

1166Theresultis:%An\fun(n));}解题思路:第一处:k是用来管理正负号的,公式中第一个值是正数,所以应填:1。第二处:根据公式,t是2i,所以应填:2*i。第三处:根据公式,第2个是负数,所以应填:(-1)。给定程序MODH.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回0。在main。函数中,若fun返回1输出YES,若fun返回0输出NO!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intm)

1167{intk=2;while(k<=m&&(m%k))/************found************/k++/************found************/if(m=k)return1;elsereturn0;}main(){intn;printf(H

1168Pleaseentern:M);scanf(w%dH,&n);if(fun(n))printf(MYES

1169M);elseprintf(MNO!

1170n);)解题思路:第一处:语句后缺少分号。第二处:条件判断相等的符号是==。请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的卜标。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(inta[J,intn,int*max,int*d)main(){inti,x[20],max,index,n=10;randomize();for(i=0;i

1171M);fun(x,n,&max,&index);

1172printf(MMax=%5d,Index=%4d

1173u,max,index);NONO();}解题思路:本题是找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。具体看参考源程序中的说明。参考答案:voidfun(inta[],intn,int*max,int*d)(inti;*max=a[0];*d=0;/*把数组的第1个元素值赋值给最大值变量*max*/for(i=1;iunsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n){t=n%10;/**********found**********//**********f^)und**********//**********found**********/n=—3.

1174returnx;main(){unsignedlongn=-l;while(n>99999999lln<0){printf(nPleaseinput(0

1175Theresultis:%ld

1176M,fun(n));)解题思路:第一处:判断t是否是偶数,所以应填:0。第二处:每操作一次,x必须乘以10,再加t,所以应填:10*x。第三处:每循环一次n的值缩小10倍,所以应填:n/10o给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(longs,long*t){intd;longsl=l;/************tound************/t=0;while(s>0){d=s%10;/************found************/if(d%2==0){*t=d*si+*t;\TABsi*=10;}s/=10;})main(){longs,t;clrscr();printf("

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

1178",t);}解题思路:第一处:由于t是一个指针变量,赋初值的方式应为:*t=0;。

1179第二处:d%2条件判断时应为不是0,所以应改为:if(d%2!=0)。编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到pl所指的字符串后。例如,分别输入下面两个字符串:FirstString—SecondString程序输出:FirstString-SecondString注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(charp1[],charp2[J)()main(){charsi[80],s2[40J;printf("Entersiands2:

1180n);scanf(M%s%sM,si,s2);printf(nsl=%s

1181M,sl);printf(Ms2=%s

1182M,s2);printf(nInvokefun(sl,s2):

1183n);fun(sl,s2);printf("Afterinvoking:、。“);printf(M%s

1184M,si);NONO();}解题思路:本题是不使用字符串库函数来实现两个字符串的连接。参考答案:voidfun(charp1[],charp2[J)(char*p=p1;while(*p)p++;while(*p2)*p++=*p2++;

1185*p=0;)※※※※※※※※※※※※※※※※※※※※※※※※※第78套:给定程序中,函数fun的功能是:将NXN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:123456789交换后为:32I456987请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4/**********f^)und**********/voidfun(int1,intn){inti,s;/**********f^)und**********//**********f^)und**********/main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10),i,j;printf(M

1186Theoriginalarray:

1187M);for(i=0;i

1188Theresultis:

1189M);for(i=0;i

1190H);}

1191)解题思路:第一处:在函数体fun中,已经使用了t整型数组,所以应填:第二处:要求填写for循环语句的初始值和终止值,所以应填:i=0;ihigh,查找结束。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#defineN10/************tound************/voidfun(inta[],intm){intlow=0,high=N-l,mid;while(low<=high){mid=(low+high)/2;if(ma[mid])low=mid+1;elsereturn(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

1192printf(HEnterm:");scanf(M%dM,&m);k=fun(a,m);if(k>=0)printf(',m=%d,index=%d

1193,',m,k);elseprintf(HNotbefound!

1194u);)解题思路:第一处:函数有返回值,不能定义为void,所以应改为:intfun(inta[],intm)。第二处:if错定成If。假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其它*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG*******。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(char*a,char*p)()main(){chars[81],*t;printf("Enterastring:

1195H);gets(s);t=s;while(*t)t++;t-;while(*t=='*,)t—;fun(s,t);printf(MThestringafterdeleted:

1196");puts(s);NONO();

1197解题思路:本题是考察字符串的操作。1.利用循环扫描出P指针左边的字符是否是如果不是*,则依次把这些字符移动原字符串a首地址开始存放。2.把p指针所指的字符串也依次存放到字符串a中。3.最后给字符串a加上结束符。参考答案:voidfun(char*a,char*p)(char*q=a;intj=0;while(*q&&q#include#defineM5#defineN20intfun(char(*ss)(NJ,int*n){inti,k=0,len=N;/**********found********fbr(i=0;i<1;i++)

1198{len=strlen(ss[i]);if(i==0)*n=len;/**********found********if(len2*n){*n=len;k=i;retum(3);)main(){charss[MJlNJ={''shanghai**,nguangzhoun,Beijing*',*,tianjing",,,chongqing,,);intn,k,i;printf(M

1199Theoriginalstringsare:

1200M);for(i=0;i

1201Thelengthofshorteststringis:%d

1202'

1203);printf(M

1204Theshorteststringis:%s

1205",ss[k]);解题思路:第一处:字符串数组共有M个字符串,所以在循环中终止值应填:Mo第二处:由于本题是取长度最短的字符串,、总是保存长度最短值,所以应填:第三处:其中k是保存长度最短的字符串所在的行下标,所以应填:ko给定程序MODH.C中函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。例如,若输入"Ab,cD",则输出"AB,CD”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includechar*fun(chartt[J)(inti;for(i=0;tt[i];i++)/**********found***********/if(('a,<=tt[i])11(tt[ijv=N))/**********found***********/tt[i]+=32;retum(tt);)

1206main()(chartt[81];printf("

1207Pleaseenterastring:");gets(tt);printf("

1208Theresultstringis:

1209%s",fun(tt));}解题思路:第一处:判断是小写字母,则条件应该是与的关系。第二处:小写字母的ASCII值减去32正好是其大写字母。请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入:17,则应输出:46891012141516。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(intm,int*k,intxx[J)(}main()(intm,n,zz[100J;printf(''

1210Pleaseenteranintegernumberbetween10and100:");scanf(M%dH,&n);fun(n,&m,zz);printf(H

1211

1212Thereare%dnon-primenumberslessthan%d:M,m,n);for(n=0;n

1213%4dM,zz[n]);NONO();)解题思路:本题是考察考生如何判断一个数不是素数,如果所给出的数是非素数目小于指定的数,那么这些数应存放到指定的数组XX中保存,最后由形参XX返回。在给出的程序中函数isP就是判断一个数是否是素数,若是非素数,则返回1,否则返回0。本题是用for(i=2;iintisP(intm)

1214intj,tag=0;for(j=2;junsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;/**********f^)und**********//**********found**********/while(_2_){t=s%10;if(t%2==0){x=x+t*i;i=_3_;}s=s/10;)

1215returnx;}main(){unsignedlongn="l;while(n>99999999lln<0){printf(MPleaseinput(0

1216Theresultis:%ld

1217H,fun(n));)解题思路:第一处:对变量i赋初值,根据i的使用规则来看,i应等于1。第二处:while循环要求计算后的s应大于0,所以应填:s。第三处:每循环一次,i要乘以10,所以应填:产10。给定程序MODH.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineM5/************nd************/intfun(intn,intxx[][]){inti,j,sum=0;printf("

1218The%dx%dmatrixAn",M,M);for(i=0;i

1219Thesumofallelementson2diagnalsis%d.",fun(M,aa));}解题思路:第一处:形参必须定义字符串数组的长度,所以应改为:intfun(intn,intxx[][M])。第二处:由于xx是整型的双维数组,不能用浮点型输出,所以应改为:printf("%d",xx[i][j]);o

1220函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12o调用该函数后,c=4251o注意:部分源程序存在文件PROG1.C中。数据文件INDAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,long*c)(}main(){inta,b;longc;printfC4nputa,b:n);scanf(,,%d%d,\&a,&b);fun(a,b,&c);printf(uTheresultis:%ld

1221”,c);NONO();解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/l0);※※※※※※※※※※※※※※※※※※※※※※※※※第81套:给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。

1222不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s){inti,j,n;for(i=0;s[i]!=AO';i++)/**********found*********不/if(s[i]>='0'_1—sli]<=,9,){n=0;/**********f^^und**********/while(s[i+l+n]!=2)n++;for(j=i+n+l;j>i;j-)/**********found**********/sU+l]=一3一;s|j+l]='*';i=i+l;main(){charsl80]=nba3a54cd23an;printf(H

1223Theoriginalstringis:%s

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

1225Theresultis:%s

1226M,s);)解题思路:第一处:判断是数字,应该使用“与",所以应填:&&。第二处:判断字符串是否是字符串结束符,所以应填:第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后一个位置,所以应填:s[j]o给定程序M0DI1.C中函数fun的功能是:根据整型形参m,计算如F公式的值。11I1y=1+-----+——+-----++——2*23*34*4m*m例如,若m中的值为:5,则应输出:1.46361k请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intm){doubley=1.0;

1227inti;for(i=2;i

1228Theresultis%lf

1229M,fun(n));解题思路:第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2;i<=m;i++)。第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改为y+=l./(i*i),请编写函数fun,函数的功能是:实现B=A+A:即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:123147456258789369程序输出:261061014101418注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta[3][3],intb[3][3J)(}main()/*主程序*/{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++)

1230printf("%7d",t[i][j]);printf("

1231");NONO();解题思路:本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。参考答案:voidfun(inta[3][3],intb[3][3])(intc⑶[3];inti,j;for(i=0;i<3;i++)for(j=0;j<3;j++){c[i][j]=a|j][i];/*矩阵的转置*/b[i]|j]=a[i][j]+c[i][j];※※※※※※※※※※※※※※※※※※※※※※※※※第82套:给定程序中,函数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、500。共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includefun(intx){intn,si,s2,s3,t;n=0;t=100;/*********nd**********/

1232while(t<=_l_){sl=t%10;s2=(_2_)%10;s3=t/100;/**********found**********/if(s1+s2+s3==_3_){printf(M%d”,t);n++;)t++;)returnn;)main(){intx=-l;while(x<0){printfC'Pleaseinput(x>0):");scanf(',%d,',&x);}printf(M

1233Theresultis:%d

1234M,fun(x));)解题思路:第一处:使用while循环找出100〜999之间所有整数,所以应填:999。第二处:s2是求十位数字,所以应填:t/10o第三处:各位数字之和为X,所以应填:Xo给定程序M0DI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************found************/voidfun(longs,longt){longsl=10;s/=10;

1235*t=s%10;/************tound************/while(s<0){s=s/100;*t=s%10*sl+*t;si=si*10;)}main(){longs,t;printf(M

1236Pleaseenters:");scanf(M%ldM,&s);fun(s,&t);printf("Theresultis:%ld

1237n,t);)解题思路:第一处:在函数fun体中,t是一个指针型变量,因此定义形参时也应定义指针。第二处:条件应该s>0,所以应改为:while(s>0)o学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN16typedefstruct{charnum[10J;ints;}STREC;intfun(STRECa[J)()main(){STRECs[N]={{"GAOO5H,85},{"GA003",76},{“GA002”,69},{"GA004",85},\TAB\TAB{MGA00r',91},{MGA007,',72},{',GA008M,64},{,,GA006n,87),\TAB\TAB{,,GA015,,,85),{',GA013,,,91},{HGA012M,64),{HGA014M,91),\TAB\TAB{"GA011”,66},{"GAO17\64},{nGAO18H,64},{UGAO16M,72}};inti;FILE*out;fun(s);printf(MThedataaftersorted:

1238");for(i=0;i

1239H);printf(M%s%4dM,s[i].num,s[i].s);

1240}printf(H

1241M);out=fopen("c:\\test\\out.dar'Jw");for(i=0;i

1242H);fprintf(out,M%4dM,s[i].s);}fprintf(out?,

1243M);fclose(out);}解题思路:本题是按结构体中成绩s进行降序排列,其结果仍存入当前结构体中。参考答案:#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STRECa[J)(STRECimp;inti,j;for(i=0;i

1244258、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;n=1t=100;/**********found字*********/while(t<=_2_){sl=t%10;s2=(t/10)%10;s3=t/100;if(sl+s2+s3=15){printf(n%dM,t);n++;_3_;}returnn;}main(){intx=-l;while(x>999llx<0){printf(MPleaseinput(0

1245Theresultis:%d

1246M,fun(x));}解题思路:第一处:符合条件的整数个数n,必须进行初始化,所以应填:0»第二处:找出xW999,所以应填:X。

1247第三处:循环控制变量t每循环一次t要加1,所以应填:t++。给定程序M0DI1.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。例如:当s所指的字符串为:"ABCDE"时,则t所指的字符串应为:"EDCBAABCDE"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*s,char*t)(/************f^)und************/inti;si=strlen(s);for(i=0;i

1248Pleaseenterstrings:n);scanf(M%sM,s);fun(s,t);printf("Theresultis:%s

1249",t);}解题思路:第一处:变量si没有定义。第二处:在C语言中,字符串开始位置从0开始的,所以应改为:=函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。例如,当a=45,b=12。调用该函数后,c=1425.注意:部分源程序存在文件PROG1.C中。数据文件INDAT中的数据不得修改。

1250请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,long*c)(}main()/*主函数*/{inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld

1251",c);NONO();}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)*c=(b/10)*1000+(a/l0)*100+(b%10)*10+(a%10);※※※※※※※※※※※※※※※※※※※※※※※※※第84套:函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。请在程序的卜.划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!

1252给定源程序:#includeintfun(inta,intb,intc){intt;/**********f^)und**********/t=(a>b)?(b>c?b:(a>c?c:1)):((a>c)?2:((b>c)?c:3));returnt;}main(){inta1=3,a2=5,a3=4,r;r=fun(al,a2,a3);printf("

1253Themiddlenumberis:%d

1254",r);}解题思路:第一处:给三个数进行比较大小,所以应填:a。第二处:给三个数进行比较大小,所以应填:a。第三处:给三个数进行比较大小,所以应填:bo给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a〜u,则将其转换为其后的第5个字母;若小写字母为v〜z,使其值减21o转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includecharfun(charc){if(c>=A'&&c<=T)/**************found**************/C=C+32;if(c>=,a,&&c<='u')

1255/**************found**************/c=c-5;elseif(c>='v,&&c<=,z')c=c-21;returnc;}main(){charc1,c2;printf(M

1256Enteraletter(A-Z):n);cl=getchar();if(isupper(cl)){c2=fun(cl);printf("

1257

1258Theletter\,%c\'changeto\'%cV

1259",c1,c2);)elseprintf(°

1260Enter(A-Z)!

1261M);)解题思路:第一处:变量c错写成大写C了。第二处:要求转换为其后的第5个字母,所以应改为:c=c+5;。请编写函数fun,其功能是:计算并输出例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(intn)()main(){intn;doubles;printf(M

1262

1263Inputn:");scanf(,'%d,\&n);s=fun(n);printf(M

1264

1265s=%f

1266

1267H,s);NONO();)解题思路:本题是根据公式计算多项式的值。注意变量的取值范围。参考答案:doublefun(intn)

1268(inti;doublefac=1.0;doublesum=1.0;for(i=2;i<=n;i++){fac+=sqrt(i);sum+=fac;}returnsum;}※※※※※※※※※※※※※※※※※※※※※※※※※第85套:给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和用话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的卜一划线处填入正确的内容并把F划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN5typedefstruct{intnum;charname[10J;chartel[10J;JSTYPE;voidcheck();/**********found**********/intfun(1*std)(/**********f^)und**********/-2_*fp;inti;if((fp=fopen(,,myfile5.dat,,,nwb,'))==NULL)retum(O);printf(M

1269Outputdatatofile!

1270H);for(i=0;i

1271fwrite(&std[i],sizeof(STYPE),13—);fclose(fp);return(1);)main(){STYPEs[10]={{l;'aaaaaV,llllir,},{l/,bbbbbn,',222222,,},{l,"ccccc',;,333333n),{1,“ddddd”,”444444"},“Jeeeee”,”555555”}};intk;k=fun(s);if(k==l){printfC^Succeed!,1);check();}elseprintf(MFail!n);voidcheck(){FILE*fp;inti;STYPEs[IOJ;if((fp=fopen(,,myfile5.dat',,,,rb,'))==NULL){printf(MFail!!

1272M);exit(O);}printf("

1273Readfileandoutputtoscreen:

1274n);printf("

1275numnametel

1276u);for(i=0;i

1277,,,s[i].num,s[i].name,s[i].tel);fclose(fp);}解题思路:本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:结构定义自变量,因此应填写STYPE。第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp已经给出,这样,此处只能填写FILE。每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以

1278只能填写文件流变量fp。给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:"ABCDE”时,则t中的字符串应为:"ABCDEEDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includevoidfun(char*s,char*t){inti,si;si=strlen(s);/************found************/for(i=0;i<=s1;i++)t[i]=s[i];for(i=0;i

1279Pleaseenterstrings:n);scanf("%sn,s);fun(s,t);printf(MTheresultis:%s

1280H,t);}解题思路:第一处:变量si错写成了si。第二处:新串t的字符串结束位置不正确,应该是两倍的S1距离。函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45,b=12时,调用该函数后,c=4152o注意:部分源程序存在文件PROG1.C中。数据文件INDAT中的数据不得修改。

1281请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includevoidfun(inta,intb,long*c)main(){inta,b;longc;printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%d

1282",c);NONO();)解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(a/10)*1000+(b/l0)*100+(a%10)*10+(b%10);※※※※※※※※※※※※※※※※※※※※※※※※※第86套:甲乙丙丁四人同时开始放鞭炮,甲每隔tl秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒。例如,若tl=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。请在程序的卜.划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include

1283/**********found**********/#defineOK(i,t,n)((—1—%t==0)&&(i/t

1284\r);解题思路:第一处:根据定义的要求,所以应填:i。第二处:for循环语句的增量,所以应填:t++。第三处:返回统计次数,所以应填:count。给定程序M0DI1.C中函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include/**************[ound**************/

1285{if(a+b>c&&b+c>a&&a+c>b){if(a==b&&b==c)return3;elseif(a==bllb==cIla==c)return2;/***************************/elseretrun1)elsereturn0;)main(){inta,b,c,shape;printf("

1286lnputa,b,c:");scanf("%d%d%d",&a,&b,&c);printf("

1287a=%d,b=%d,c=%d

1288",a,b,c);shape=fun(a,b,c);printf("

1289

1290Theshape:%d

1291",shape);)解题思路:第一处:函数有返回值,不能定义为void,所以应改为:intfun(inta,intb,intc)。第二处:语句后缺少分号。请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。注意:要求n的值大于2但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include

1292main(){intn;doublesum;printf(n

1293

1294lnputn:");scanf(H%d,',&n);sum=fun(n);printf(''

1295

1296sum=%f

1297

1298,',sum);NONO();)解题思路:本题是计算并输出3到n之间(含3和n)所有素数的平方根之和.参考答案:doublefun(intn)(inti,j=0;doubles=0;for(i=3;i<=n;i++){for(j=2;jintcl,c2,c3;voidfun(longn){cl=c2=c3=0;while(n){

1299/**********found**********/switch(1)(/**********f^)und**********/case1:cl++:2:/**********found**********/case2:c2++;3;case3:c3++;)n/=10;})main(){longn=1231I4350L;fun(n);printf(H

1300TheresultAn");printf(Mn=%ldcl=%dc2=%dc3=%d

1301",n,c1,c2,c3);}解题思路:第一处:取个位数上的数,所以n%10就可以得到个位数。第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填:breako第三处:同第二处。给定程序M0DI1.C中函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(unsignedn,int*zero){intcount=0,max=0,t;do{t=n%10;/**************found**************/if(t=O)

1302count++;if(max

1303lnputn(unsigned):");scanf(”%d”,&n);max=fun(n,&zero);printf("

1304Theresult:max=%dzero=%d

1305",max,zero);}解题思路:第一处:条件相等符号为==。第二处:由于zero是一个指针型变量,所以给它进行赋值时应带指针,因此应改为:*zero=count;<>请编写函数fun,其功能是:计算并输出下列多项式的值:111S=1+++…+1*21*2*31*2*3*...50例如,在主函数中从犍盘给n输入50后,输出为:s=1.718282。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn)main(){intn;doubles;printf(H

1306Inputn:");scanf(u%dH,&n);s=fun(n);printf(,'

1307

1308s=%f

1309

1310*',s);

1311NONO();}解题思路:本题是根据公式计算多项式的值。注意变量的取值范围。参考答案:doublefun(intn){doubles=0,t=l;inti;for(i=1;i<=n;i++){t*=i;s+=l./t;)returns;)※※※※※※※※※※※※※※※※※※※※※※※※※第88套:函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[l]中;再把a所指数组元素中的次大值放在a[2]中,把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中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN9/**********f^)und**********/voidfun(int1,intn){inti,j,max,min,px,pn,t;/**********f^)und**********/for(i=0;ia[jj){min=a[j];pn=j;}if(px!=i){t=a[i];a[i]=max;a[pxj=t;if(pn==i)pn=px;

1312if(pn!=i+1){t=a[i+l];a[i+l]=min;a[pnj=t;})main(){intb[N]={1,423,9,6,5,8,7},i;printf(M

1313TheoriginaldataAn");for(i=0;i

1314Thedataaftermoving:

1315H);for(i=0;i

1316");解题思路:第一处:形参a应定义指针整型变量,所以应填:*a。第二处:外for循环每次增量应该加2。第三处:内for循环的初始值应为:i+L给定程序M0DI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#defineSIZE20fun(double*s,double*w){intk,i;doublesum;for(k=2,i=0;i

1317)returnk;)main(){doublea[SIZE],b[SIZE/5];inti,k;k=fun(a,b);printf(uTheoriginaldata:

1318M);for(i=0;i

1319H);printf(H%4.0r,a[i]);)printf(H

1320

1321Theresult:

1322H);for(i=0;i

1323

1324n);解题思路:第一处:变量名书写错误,应为sum。第二处:由于%的优先级比+优先,所以必须加上括号,因此改为:if((i+l)%5==0)。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN8typedefstruct{charnum[10J;doubles;}STREC;

1325doublefun(STREC*a,STREC*b,int*n)()main(){STRECs[N]={{"GA05M,85},{“GA03”,76},{“GA02”,69},{“GA04”,85},{MGA01M,91},{HGA07M,72},{MGA08\64},(nGA06M,87});STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichislowerthan%7.3f:

1326H,n,ave);for(i=0;i

1327M,h[i].num,h[i].s);printf(M

1328M);out=fopen(Hc:\\test\\out.dat,'/'wH);fprintf(out,n%d

1329%7.3f

1330'

1331,ave);for(i=0;ih|j].s){t=h[i];h[i]=h|j];h[j]=t;}for(i=0;i

1332u,h[i].s);fclose(out);)解题思路:本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指的数组中。具体操作请看答案程序中的说明。参考答案:#include#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n)

1333(inti;doubleave=0.0;*n=0;for(i=0;i#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k=0,n,m,len;for(i=0;ivM;i++){len=strlen(ss[i]);if(i==0)n=len;if(len>n){/**********found****n=len;1=i;}}

1334for(i=0;ivM;i++)if(i!=k){m=n;len=strlen(ss[i]);/**********found**********/for(j=-2—;j>=0;j-)ss[i][m-]=ss[i][j];for(j=0;j

1335Theoriginalstringsare:

1336H);for(i=0;i

1337H,ss[i]);printf("

1338");fun(ss);printf("

1339Theresult:

1340n);for(i=0;i

1341",ss[i]);}解题思路:第一处:使用变量k来保存第几个字符串是最长的字符串,所以应填:ko第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len。第三处:左边用字符*补齐,所以应填:ss[i]U]«给定程序MODI1.C中函数fun的功能是:计算整数n的阶乘。请改正程序中的错误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(intn)doubleresult=1.0;while(n>l&&n<170)result*二一n;return;}main()

1342(intn;printf(MEnteraninteger:");scanf("%d",&n);printf(,'

1343

1344%d!=%lg

1345

1346,,,n,fun(n));}解题思路:第一处:--n是先减1,n--是后减1。本题应该先乘以n,再减1,才正确。第二处:返回计算结果,所以应填:result,编写函数fun,函数的功能是:从s所指的字符串中删除给定的字符。同一字母的大、小写按不同字符处理。若程序执行时输入字符串为:turbocandborlandc++从键盘上输入字符:n,则输出后变为:turbocadborladC++如果输入的字符在字符串中不存在,则字符串照原样输出。注意:部分源程序在文件PR0G1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includeintfun(chars[J,charc)()main()(staticcharstr[J="turbocandborlandC++”;charch;printf("原始字符串:%s

1347",str);printf("输入一个字符scanf(M%c",&ch);fun(str,ch);printf("str[]=%s

1348",str);NONO();)解题思路:

1349本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序是引用字符串指针p和while循环语句以及if条件判断语句进行处理的,新字符串的位置是由i来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程序中。参考答案:intfun(chars[],charc)(char*p=s;inti=0;while(*p){if(*p!=c)s[i++J=*p;P++;}s[ij=0;}※※※※※※※※※※※※※※※※※※※※※※※※※第90套:函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(intn){inti,j,count=0;printf("

1350Theprimenumberbetween3to%d

1351",n);for(i=3;i<=n;i++){/**********found**********/for(_1—;j=i){count++;printf(count%15?1,%5d,,:,,

1352%5d,,,i);})returncount;}main(){intn=20,r;r=fun(n);printf(M

1353Thenumberofprimeis:%d

1354",r);解题思路:

1355第一处:素数的条件是除1和其本身外不能整除该数,所以应填:2。第二处:判断i是否素数,所以应填:i。第三处:如果内循环for中所有数都不能整除i,那么i是素数且j大于等于i,所以应填:j。数列中,第一项值为3,后•项都比前一项的值增5:给定程序M0DI1.C中函数fun的功能是:计算前n(4#defineN20intfun(intn,int*a){intij,k,sum;/**************f^)und**************/sum=j==O;for(k=3,i=0;i

1356Entern(4

1357

1358Theresult:

1359u);for(i=0;i

1360

1361H);)解题思路:第一处:连续赋初值为0,中间使用条件相等符号了,所以应改为:sum=j=0;。第二处:条件相等符号为==。请编写函数fun,其功能是:计算并输出下列多项式的值:

1362例如,在主函数中从键盘给n输入8后,输出为:s=0.662872。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn)main(){intn;doubles;printf(M

1363Inputn:");scanf("%d”,&n);s=fun(n);printf(H

1364s=%f

1365,',s);NONO();)解题思路:本题是根据公式计算多项式的值。参考答案:doublefun(intn)(inti;doublesum=0.0;if(n>l&&n<=IOO){for(i=1;i<=n;i++)sum+=1.0/(2*i-l)-1.0/(2*i);}returnsum;}※※※※※※※※※※※※※※※※※※※※※※※※※第91套:函数fun的功能是:计算

1366请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includedoublefun(doublex){doublef,t;intn;/**********tound**********/f=1.0+—1—;t=x;n=1;do{n++;t*=x/2;/**********found**********/f+=―3—;}while(fabs(t)>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printfC

1367TheresultisAn");printf(Mx=%-12.6fy=%-12.6f

1368M,x,y);解题思路:第一处:根据公式可知,此处应填:Xo第二处:根据公式可知,此处应该除以n,所以应填:no第三处:计算的结果进行累加并赋值给变量f,所以应填:t。给定程序M0DI1.C中函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。

1369例如,7的5次方是16807,其低3位数的和值是15。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#includeintfun(intn,int*value){intd,s,i;d=0;s=0;for(i=1;i<=5;i++)d=d*n;*value=d;for(i=1;i<=3;i++){s=s+d%10;/**************found**************/d=d\10;}returns;}main(){intn,sum,v;do{printf(M

1370Entern(2=8);sum=fun(n,&v);printf(M

1371

1372Theresult:

1373value=%dsum=%d

1374

1375,,,v,sum);}解题思路:第一处:变量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的花括号中填入你编写的若干语句。

1376给定源程序:#include#includedoublefun(doublex[9])main(){doubles,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0};inti;printf(M

1377Theoriginaldatais:

1378n);fbr(i=0;i<9;i++)printf(M%6.1f',a[i]);printf(M

1379

1380H);s=fun(a);printf(Ms=%f

1381

1382,',s);NONO();}解题思路:本题是计算并输出给定数组中每相邻两个元素之平均值的平方根之和。参考答案:doublefun(doublex[9]){inti;doubleavg=0.0,sum=0.0;for(i=0;i<8;i++){avg=(x[i]+x[i+lJ)/2;sum+=sqrt(avg);)returnsum;)※※※※※※※※※※※※※※※※※※※※※※※※※第92套:函数fun的功能是:计算的前n项。若x=2.5,函数值为:12.182340。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includedoublefun(doublex,intn){doublef,t;inti;

1383f=1.0;/**********f^)und**********//**********found**********/for(i=2;i

1384TheresultisAn”);printf("x=%-12.6fy=%-12.6f

1385u,x,y);)解题思路:第一处:t是处理公式中每一项中间项,所以应填:1。第二处:根据公式可知,for循环变量的初始值应从1开始。第三处:每做一次循环均要除以变量i的值,所以应填:i。给定程序M0DI1.C中函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN100intfun(int*s,intn)j=0;for(i=100;i

1386if(a==b&&a=c)s|j++]=i;}returnj;)main(){inta[N],n,num=0,i;do{printf(M

1387Entern(<=1000):");scanf(n%dM,&n);}while(n>1000);num=fun(a,n);printf(H

1388

1389Theresult:

1390H);for(i=0;i

1391

1392n);)解题思路:第一处:k应该取循环变量i的值,所以应改为:k=i;o第二处:语句后缺少分号。请编写函数fun,其功能是:计算并输出给定10个数的方差:例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=l1.730729。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includedoublefun(doublex[10J)(}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(M

1393Theoriginaldatais:

1394M);for(i=0;i<10;i++)printf(H%6.1f,x[iJ);printf(M

1395

1396M);s=fun(x);printf(Ms=%f

1397

1398M,s);NONO();)

1399解题思路:本题是根据公式进行计算。参考答案:doublefun(doublex[10J)(inti;doubleavg=0.0,sum=0.0,abs=0.0,fc;for(i=0;i<10;i++)sum+=x[i];avg=sum/10;/*计算平均值*/for(i=0;i<10;i++)abs+=(x[i]-avg)*(x[i]-avg);fc=sqrt(abs/10);returnfc;※※※※※※※※※※※※※※※※※※※※※※※※※第93套:给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*p)

1400{SLIST*t,*s;t=p->next;s=p;while(t->next!=NULL){s=t;/**********found**********/t=t->1;}/**********found*********不/printfC1%d",—2_);s->next=NULL;/**********found**********/free(-3-);)SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=O;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf(M

1401ThelistisNULL!

1402M);else{printf(M

1403HeadH);do{printf(H->%d",p->data);p=p->next;}while(p!=NULL);printf(M->End

1404M);))main(){SLIST*head;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf(M

1405Outputfromhead:

1406M);outlist(head);printf(H

1407Outputfromtail:

1408n);while(head->next!=NULL){fun(head);printf(n

1409

1410n);printf(n

1411Outputfromheadagain:

1412");outlist(head);})

1413解题思路:本题是对已经建立的链表,通过调用一次函数就输出链表尾部的数据。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第•处:由于本题要求输出链表尾部的数据,函数是利用while循环语句找出链表尾部的指针并存入临时变量S中,那么每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过t指针变量进行操作的,因此,都要取t的next指针重新赋给t来实现,所以本处应填next«第二处:输出最后一个结点的数据,所以应填">data或(*t).data。第三处:输出出最后一个结点数据后,并把此结点删除了,程序要求释放内存,所以应填t。给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:dcba»请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include/************^ound************/fun(chara){if(*a){fun(a+l);/************found************/printf("%c"*a);)}main(){chars[IO]="abcd";printf("处理前字符串=%s

1414处理后字符串=",s);fun(s);printf("

1415");)解题思路:第一处:形参a应定义为字符串指针。第二处:语句中缺少逗号。请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入beijingshanghaivCR>(vCR>为回车键),函数将返回shanghaio注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

1416给定源程序:#includechar*fun(char*s,char*t)()main(){chara[20],b[20];printf("Input1thstring:");gets(a);printf("Input2thstring:");gets(b);printf("%s

1417",fun(a,b));NONO();}解题思路:本题是比较两个字符串的长度并按要求返回字符串。我们给出的程序是使用for循环来判断两个字符串中哪一个比较长或相等,循环的终止值为两个字符串中是否字符串结束符,如果有,则退出循环体。接下来再判断两个字符用是否同时出现结束符,则返回第一个字符串s,如果不没有同时出现,则判断哪一个字符串先有结束符,则按要求返回指定的字符串。参考答案:char*fun(char*s,char*t)(inti;char*p=s,*q=t;for(i=0;*p&&*q;i++){P++;q++;if(*p==0&&*q==0)returns;if(*p)returns;elsereturnt;※※※※※※※※※※※※※※※※※※※※※※※※※

1418第94套:函数fun的功能是:计算的前n项之和。若x=2.5,n=15时,函数值为:1.917914。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#includedoublefun(doublex,intn){doublef,t;inti;/**********f^)und**********/for(i=l;i

1419Theresultis:

1420");printf("x=%-12.6fy=%-12.6f

1421",x,y);解题思路:第一处:根据公式可知,变量f的初值为1。第二处:根据公式可知,此处是正负号的变换,所以应填:-1。第三处:计算的结果进行累加并赋值给变量f,所以应填:t。给定程序M0DI1.C中函数fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15o程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#includeintfun(){inti,j,k,sum=O;printf(n

1422Theresult:

1423

1424H);

1425/**************found**************/for(i=0;i<=3;i++){for(j=l;j<=5;j++){k=8-i-j;/**************fouT^d**************Iif(K>=0&&K<=6){sum=sum+1;printf(nred:%4dwhite:%4dblack:%4d

1426",ij,k);returnsum;)main(){intsum;sum=fun();printf(Msum=%4d

1427

1428,',sum);解题思路:第一处:外for循环的初始变量i的值应为1.第二处:变量k写成了大写K了。请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includedoublefun(intn)(}main(){intn;doubles;printf("Inputn:*');scanf("%d”,&n);s=fun(n);printf(,,s=%f

1429,',s);

1430NONO();}解题思路:本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后把s作为函数值返回。参考答案:doublefun(intn)(doubles=1;longt=1;inti;for(i=1;i<=n;i++){t=t*i;/*计算阶乘*/s+=l./t;/*计算每项的值并累加至变量s中*/}returns;/*返回多项式的值*/}※※※※※※※※※※※※※※※※※※※※※※※※※第95套:给定程序中,函数fun的功能是:计算NXN矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩阵:I23456789fun函数首先累加1、5,9,然后累加3、5、7,函数的返回值为30。请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4fun(intintn)

1431{inti,sum;/**********found**********/1一;for(i=0;i

1432Theoriginaldata:

1433n);for(i=0;i

1434K);)printf(nTheresultis:%dM,fun(t,N));}解题思路:第一处:变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:sum=0,,第二处:对主对角线元素值累加,所以应填:第三处:对反向对角线元素值累加,所以应填:例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#include#include

1435doublefunx(doublex){retum(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen)(/************^ound************/intr;r=(m+n)/2;/************tound************/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:

1436°);scanf(M%lf%lf,,&m,&n);root=fun(m,n);printf("root=%6.3f

1437H,root);)解题思路:第一处:变量r应该定义为实数型double或浮点型float变量。第二处:while必须先满足条件,才做循环体的内容,所以应改为:while(fabs(m-n)>0.001)o假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PR0G1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

1438给定源程序:#includevoidfun(char*a,char*h,char*p)()main(){chars[81],*t,*f;printf('*Enterastring:

1439M);gets(s);t=f=s;while(*t)t++;t-;while(*t=='*')t—;while(*f='*')f++;fun(s,f,t);printf("Thestringafterdeleted:

1440");puts(s);NONO();}解题思路:本题是考察字符串的操作。1.把r指针左边的字符仍存放字符串a首地址开始的位置上。2.把r指针和p指针中间的字符进行判断,其字符是否是卬,如果不是卬,则把这些字符放到第1步操作字符串a的后面。3.把p指针右边的字符放到第2步操作字符串a的后面。4.最后给字符串a加上结束符。参考答案:voidfun(char*a,char*h,char*p)(intj=0;char*q=a;while(*q&&q

1441if(*h!=*)a|j++J=*h;h++;)while(*p)a[j++]=*p++;a[j]=O;)※※※※※※※※※※※※※※※※※※※※※※※※※第96套:给定程序中,函数fun的功能是:有NXN矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第•行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:123456789计算结果为741852963请在程序的卜一划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN4voidfun(int(*t)[NJ){intj,r[N];for(j=0;j=0;—2—)

1442t[N-l][N-l-j]=t[j]lN-l];for(j=N-l;j>=0;j-)/**********f^)und**********/t[jJlN-lJ=rL—3—];}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf("

1443Theoriginalarray:

1444M);for(i=0;i

1445M);fun(t);printf(H

1446Theresultis:

1447M);for(i=0;i

1448H);解题思路:第一处:把第1列上的数存放到第1行上,所以应填:0。第二处:for循环的增量值,由于循环是从大到小递减,所以应填:j-.第三处:把临时数组中的元素成为最后一列,所以应填:j«给定程序M0DI1.C中函数fun的功能是:计算S=f(-n)+f(-n+l)+...+f(O)+f(l)+f(2)+...+f(n)的值。例如,当n为5时,函数值应为:10.407143。f(x)函数定义如下:r(x+l)/(x-2)x>0且xW2f(x)=-|0x=0或x=2l(x-1)/(x-2)x<0请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include

1449#include/************^^und************/f(doublex)(if(x==0.0llx==2.0)return0.0;elseif(x<0.0)return(x-l)/(x-2);elsereturn(x+1)/(x-2);doublefun(intn){inti;doubles=0.0,y;for(i=-n;i<=n;i++){y=f(l.O*i);s+=y;)/************f^)und************/returns)main()(printf("%f

1450",fun(5));}解题思路:第一处:由于返回值是实数型值,所以在函数名前加上double。第二处:语句后缺少分号。编写函数fun,它的功能是计算:s作为函数值返I可。在C语言中可调用log(n)函数求In(n)»log函数的引用说明是:doublelog(doublex)。例如,若m的值为:20,fun函数值为:6.506583。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:

1451#include#includedoublefun(intm)()main()NONO();解题思路:本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,循环结束后再对s求平方根,结果仍存入s中,最后返回s。参考答案:doublefun(intm)(doubles=0.0;inti;for(i=1;i<=m;i++)s+=log(1.0*i);s=sqrt(s);returns;※※※※※※※※※※※※※※※※※※※※※※※※※第97套:函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8,9,则逆置后依次为:9、8、7、6、5、4、3、2、1.形参n给出数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(inta[],intn){inti,t;/**********tound**********/for(i=0;i<1;i++)/**********found**********/ali]=aln-l-_2—];

1452/**********tound**********/main(){intb[9]={1,2,3,4,5,67,8,9},i;printf(M

1453TheoriginaldataAn");for(i=0;i<9;i++)printf(H%4d二b[i]);printf("

1454M);fun(b,9);printf("

1455Thedataafterinvert:

1456°);for(i=0;i<9;i++)printf(H%4d”,b[i]);printf(H

1457n);)解题思路:第一处:利用for循环语句,对数组中的各元素进行逆置,所以终止值为n/2。第二处:进行交换数组中元素的值,由于是依次是首和尾交换,所以应填:io第三处:使用中间变量I来交换的,所以应填:a[n-i-l]o给定程序M0DI1.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的卜进制整数。规定输入的字符串最多只能包含5位八进制数字字符。例如,若输入:77777,则输出将是:32767。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includeintfun(char*p){intn;n=*P-'o';p++;while(*p!=0){\TABn=n*8+*P-'o,;\TABp++;)

1458returnn;)main(){chars[6J;inti;intn;printf(MEnterastring(Ocataldigits):");gets(s);if(strlen(s)>5){printf(MError:Stringtoolonger!

1459

1460u);exit(0);}for(i=0;s[i];i++)if(s[i]<,01ls[i]>,7,){printf(MError:%cnotisocataldigits!

1461

1462'\s[i]);exit(O);}printf(MTheoriginalstring:“);puts(s);n=fun(s);printf(M

1463%sisconveredtointegernumber:%d

1464

1465u,s,n);)解题思路:第一和第二处:*p错写成*P,O错写成U。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include#defineN16typedefstruct{charnum[10];ints;}STREC;STRECfun(STREC*a,char*b)(

1466)main(){STRECs[N]={{,,GA005,1,85},{MGA003M,76},{uGA002n,69},{°GA004,1,85},\TAB\TAB{“GA00A,91),{,,GA007n,72},{HGA008M,64),{HGA006,1,87),\TAB\TAB{“GA015”,85},{“GA013”,91},{“GA012”,64},{”GA014191},\TAB\TAB{"GAO11”,77},{"GAO17\64},{nGAO18M,64},{UGAO16”,72}};STRECh;charm[10J;inti;FILE*out;printf(HTheoriginaldata:

1467n);for(i=0;i

1468H);printf(M%s%3d*',s[i].num,s[i].s);)printf(M

1469

1470Enterthenumber:M);gets(m);h=fun(s,m);printf(MThedata:");printf(M

1471%s%4d

1472H,h.num,h.s);printf(H

1473n);out=fopen(Hc:\\test\\out.dat,V'wn);h=fiin(s,HGA013M);fprintf(out,M%s%4d

1474M,h.num,h.s);fclose(out);)解题思路:本题是从学生记录体中找出给定的学号。具体操作请看答案程序中的说明。参考答案:STRECfun(STREC*a,char*b)STRECc;inti;c.num[O]=W;/*置初始空串*/c.s=-l;/*置成绩为-1*/for(i=0;i

1475※※※※※※※※※※※※※※※※※※※※※※※※※第98套:给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);voidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h->next;/**********tound**********/while(p!=1){n++;/**********tound**********/if(p->data==ch)return2:elsep=p->next;}return0;}main(){SLIST*head;intk;charch;chara[N]={,m,;pVgVaVwVxVr,;d,};head=creatlist(a);

1476outlist(head);printf(MEnteraletter:n);scanf(M%cn,&ch);/**********found**********/k=fun(-3-);if(k==0)printf(H

1477Notfound!

1478M);elseprintf(HThesequencenumberis:%d

1479",k);}SLIST*creatlist(char*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;)p->next=0;returnh;voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf(M

1480ThelistisNULL!

1481M);else{printf("

1482Head");do{printf(',->%c,,,p->data);p=p->next;}while(p!=NULL);printf(M->End

1483M);}}解题思路:本题是在给定的链表中要求找出指定的值。第一处:判断p是否结束,所以应填:NULLo第二处:在函数fun中,使用n来计算结点的位置,当找到ch值,则返回结点的位置n,所以

1484应填:returnno第三处:函数调用,在主函数中已经给出了head和ch,所以应填:head,cho给定程序M0DI1.C中函数fun的功能是:删除p所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用‘#'结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#includefun(char*p){inti,t;charc[8OJ;/************^ound************/For(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];/************tound************/c[t]=M\OM;strcpy(p,c);main(){charc,s[80J;inti=0;printf(MInputastring:M);c=getchar();while(c!='#1){s[i]=c;i++;c=getchar();}sliJ=*\O';fun(s);puts(s);)解题思路:第一处:保留字for错写成For。第二处:置字符串结束符错误,应该是:Wo请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上

1485的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入若bc4EFg”,则应输出“aBc4EFgE注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#includevoidfun(char*ss)()main(){chartt[81];printf("

1486Pleaseenteranstringwithin80characters:

1487u);gets(tt);printf("

1488

1489Afterchanging,thestring

1490V%s\,n\tt);fun(tt);printf("

1491becomes

1492\"%s\"

1493",tt);NONO();}解题思路:本题是考察考生对字母按要求进行转换。其中大小字母的ASCII值相差32o参考答案:voidfun(char*ss)(inti;for(i=1;i='a'&&ss[i]<='z')ss[ij-=32;※※※※※※※※※※※※※※※※※※※※※※※※※第99套:函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9,5、1、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结

1494果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#defineN9voidfun(inta[],intn){inti,t,p;/**********'found**********/p=(n%2==0)?n/2:n/2+_1_;for(i=0;i

1495Theoriginaldata:

1496");for(i=0;i

1497");fun(b,N);printf("

1498Thedataaftermoving:

1499");for(i=0;i

1500");)解题思路:第一处:如果n是奇数,则中间的元素不动,所以应填:1。第二处:使用for循环语句来交换数组元素的值,所以应填:i。第三处:使用中间变量t来交换的,所以应填:t。给定程序MODH.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,

1501输出结果应当是:a=55.0,b=34.0,c=12.0«请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。给定源程序:#includevoidfun(float*a,float*b,float*c)(/**********tound**********/float*k;if(*a<*b){k=*a;*a=*b;*b=k;}/**********found**********/if(*a>*c){k=*c;*c=*a;*a=k;}if(*b<*c){k=*b;*b=*c;*c=k;}main(){floata,b,c;printf(HInputabe:");scanf(M%f%f%f\&a,&b,&c);printf(Ma=%4.1f,b=%4.1f,c=%4.1f

1502

1503M,a,b,c);fun(&a,&b,&c);printf(Ma=%4.1f,b=%4.1f,c=%4.1f

1504

1505H,a,b,c);}解题思路:第一处:在函数fun体中,k是一个浮点型变量,所以应改为:floatk;o第二处:三个数比较大小,第1个条件是第1个比第2个小,则交换。第3个条件是第2个比第3个小,则也交换。第2个条件是应该第1和第3个小,则交换就符合题意了,所以应改为:if(*a<*c)o学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#defineN16typedefstruct{charnum[10];ints;}STREC;

1506intfun(STREC*a,STREC*b)main(){STRECs[N]={{"GA05”,85},{UGAO3”,76},{“GA02”,69},{“GA04”,85},\TAB\TAB{nGA0r\91},{“GA07”,72},{“GA08”,64},{“GA06”,87},\TAB\TAB{“GA015”,85},{“GA013”,91},{”GA012164},{“GA014”,91},\TAB\TAB{nGAO11",77},{HGAO17\64},{"GAO18",64},{UGAO16n,72}};STRECh[NJ;inti,n;FILE*out;n=fun(s,h);printf(nThe%dhighestscore:

1507H,n);for(i=0;i

1508,\h[iJ.num,h[i].s);printf(H

1509M);out=fopen("c:\\test\\out.dar'Jw");fprintf(out,M%d

1510H,n);for(i=0;i

1511u,h[i].s);fclose(out);)解题思路:本题是找出最高成绩,再把N名学生的成绩等于最高成绩的记录存入b所指的数组中。具体操作请看答案程序中的说明。参考答案:intfun(STREC*a,STREC*b)(inti,max=a[0].s,n=0;for(i=l;i

1512例如,s所指字符串为:baacda,c中的字符为:a,执行后s所指字符串为:baaaacdaa,请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#includevoidfun(char*s,charc){inti,j,n;/**********found**********/for(i=0;s[i]!=1;i++)if(s[i]==c)/**********tound**********/n=2while(s[i+1+n]!=\0*)n++;for(j=i+n+l;j>i;j-)s[j+l]=s[jj;/**********found**********/slj+l]=-3—;i=i+l;main(){charsl80]=,'baacda,,»c;printf("

1513Thestring:%s

1514",s);printf("

1515lnputacharacter:");scanf("%c",&c);fun(s,c);printf("

1516Theresultis:%s

1517",s);}解题思路:第一处:在for循环中终止值要判断字符串是否结束符,所以应填:第二处:n用于统计参数c后还有多少个字符,要对其进行初始化,所以应填:0。第三处:要求插入相同的字符c,所以应填:c。在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。给定程序MODI1.C中函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)=例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:

1518#includedoublefun(intx[J)(/************f^)und************/intsum=0.0;intc=0,i=0;while(x[i]!=0){if(x[i]>0){sum+=x[i];C++;}i++;sum\=c;returnsum;main(){intx[1000J;inti=0;printf(H

1519Pleaseentersomedata(endwith0):");do{scanf(M%dn,&x[i]);}while(x[i++]!=0);printf(M%An\fun(x));)解题思路:第一处:由于sum是存放实数值,因此不能定义为整型,所以应改为doublesum=0.0;或floalsum=0.0;o第二处:除的运算符是编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。111S=1+++...+1+21+2+31+2+3+...+n例如:若n的值为11时,函数的值为:1.833333注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#includefloatfun(intn)

1520(}main(){intn;floats;printf(u

1521PleaseenterN:n);scanf(n%dH,&n);s=fun(n);printf(Htheresultis:%f

1522*\s);NONO();)解题思路:本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量S中,最后返回S。参考答案:floatfun(intn)intfloats=0;for(i=1;i<=n;i++){t=0;for(j=l;jv=i;j++)t+=j;s=s+l./t;)returns;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭