2013年计算机上机c语言考试题库

2013年计算机上机c语言考试题库

ID:82949778

大小:304.70 KB

页数:191页

时间:2023-09-25

上传者:灯火阑珊2019
2013年计算机上机c语言考试题库_第1页
2013年计算机上机c语言考试题库_第2页
2013年计算机上机c语言考试题库_第3页
2013年计算机上机c语言考试题库_第4页
2013年计算机上机c语言考试题库_第5页
2013年计算机上机c语言考试题库_第6页
2013年计算机上机c语言考试题库_第7页
2013年计算机上机c语言考试题库_第8页
2013年计算机上机c语言考试题库_第9页
2013年计算机上机c语言考试题库_第10页
资源描述:

《2013年计算机上机c语言考试题库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第01套:给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入ー个数:27638496,新的数:为739。0^includevoidfun(unsignedlong*n){unsignedlongx=0,i;intt;i=l;while(*n){t=*n%_1_;if(t%2!=_2_){x=x+t*i;i=i*10;}*n二・n/10;)*n=—3—;}main(){unsignedlongn=-l;while(n>99999999||n<0){printf("Pleaseinput(0

1Theresultis:%ld

2",n);}第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。第二处:判断是否是奇数,所以应填:〇〇第三处:最后通形参n来返回新数x,所以应填:X。给定程序MODI1.C中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。#includedoublefun(intn){doubleresult=1.0;ifn==0return1.0;while(n>1&&n<170)result*=n-ーreturnresult;}main(){intn;printf("InputN:");scanf("%d",&n);printf("

3

4%d!=%lf

5

6",n,fun(n));)第一处:条件语句书写格式错误,应改为:if(n==0)〇第二处:语句后缺少分号。

7请编写ー个函数fun,它的功能是:将一个数字字符串转换为ー个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串”-1234”,则函数把它转换为整数值-1234o函数fun中给出的语句仅供参考。0^include#includelongfun(char*p){inti,len,t;/♦len为串长,t为正负标识・/longx=0;len=strlen(p);if(p[〇]ニニ’」){t=-l;len—;p++;}elset=l;/・以下完成数字字符串转换为ー个数字・/returnx*t;)mainO/・主函数・/{chars[6];longn;printf("Enterastring:

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

9",n);NONO();}NONO(){/・本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/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,"%s",s);n=fun(s);fprintf(wf,"%ld

10",n);)fclose(fp);fclose(wf);}参考答案:#include#includelongfun(char*p)(inti,len,t;/*len为串长,t为正负标识・/longx=0;len=strlen(p);if(p[O]—"){t=-l;len—;p++;}elset=l;/・以下完成数字字符串转换为ー个数字・/while(*p)x=x*10-48+(*p++);returnx*t;

11)main()/・主函数・/{chars[6];longn;printf("Enterastring:

12*);gets(s);n=fun(s);printf("%ld

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

14”,n);)fclose(fp);fclose(wf);}注意:由于NONO()这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开始均省略NONO()※※※※※※※※※※※※※※※※※※※※※※※派※第02套:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。#includevoidfun(char*s,inta,doublef)(-1—fp;charch;fp=fopenCfilel.txt","w");fprintf(fp,"%s%d%f

15”,s,a,f);fclose(fp);fp=fopen(*filel.txt*,'r");printf(*

16Theresult:

17

18");ch=fgetc(fp);while(!feof(—2—)){putchar(_3_);ch=fgetc(fp);}putchar('

19);fclose(fp);)main(){chara[10]=*Hello!*;intb=12345;doublec=98.76;fun(a,b,c);

20}第一处:定义文本文件类型变量,所以应填:FILE*o第二处:判断文件是否结束,所以应填:fpo第三处:显示读出的字符,所以应填:Cho给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。#includevoidfun(char*s){inti,j;for(i=0,j=0;s[i]!='、〇';i++)if(s[i]>='0'&&s[i]<='9')s[j]=s[i];s[ホ〃、。〃;}main(){charitem[80];printf(*

21Enterastring:);gets(item);printf("ヽn

22Thestringis:ヽ"%s\"

23”,item);fun(item);printf("ヽn

24Thestringofchangingis:ヽ"%s\"

25”,item);)第一处:要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j来控制新字符串的位置,所以应改为:s[j++]=s[i];。第二处:置新字符串的结束符,所以应改为:s[j]='\O';.请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到ー个字符串中。例如,二维数组中的数据为:WWWWSSSSHHHH则字符串中的内容应是:WSHWSHWSHo#include#defineM3#defineN4voidfun(chars[][N],char*b)(inti,j,n=0;for(i=0;i

26*);for(i=0;i

27");

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

29");puts(a);printf("

30

31");N0N0();参考答案:voidfun(chars[][N],char*b)(inti,j,n=0;for(i=0:ittdefineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;fp=fopen(—1—,"rb+”);fseek(_2_,-lL*sizeof(STU),SEEK_END);fwrite(&n,sizeof(STU),1,—3—);fclose(fp);)main(){STUt[N]={{10001,"MaChao”,91,92,77},{10002,"CaoKai”,75,60,88},{10003,"LiSi",85,70,78},“0004,"FangFang”,90,82,87},{10005,"ZhangSan”,95,80,88}};STUn二(10006,"ZhaoSi”,55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student,dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student,dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("

32Theoriginaldata:

33

34");

35for(j=0;j

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

37");}fun("student,dat*,n);printf("

38Thedataaftermodifing:

39

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

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

42");)}第一处:从指定的文件中读出数据,所以应填:filenameo第二处:读取文件fp的最后一条记录,所以应填:fpo第三处:再把读出的记录,写入文件fp指定的位置上,所以应填:fPo给定程序M0DI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋〇到nr1的值。#include^includetypedefstructaa{intdata;structaa*next;}NODE;NODE*Creatlink(intn,intm){NODE*h=NULL,*p,*s;inti;p=(NODE)malloc(sizeof(NODE));h=p;p->next=NULL;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;)returnp;)outlink(NODE*h){NODE*p;p=hー〉next;printf("

43

44THELIST:

45

46HEAD〃);while(p){printf('ー〉%d",p->data);

47p=p-〉next;)printf("

48");)main(){NODE*head;head=Creatlink(8,22);out1ink(head);)第一处:指向刚分配的结构指针,所以应改为:p=(NODE*)malloc(sizeof(NODE));第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用P,是因为p的位置已经发生了变化,所以应改为返回h。请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数位返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。#include#include#defineN80intfun(char*s)(}main(){charline[N];intnum=0;printf("Enterastring:

49");gets(1ine);num二fun(line);printflThenumberofwordis:%d

50

51^,num);NONOO;)1.利用while循环语句和指针变量,当字符为空格时,则单词数k加1。2.循环结束返回k。参考答案:intfun(char*s){intk=1;while(*s){if(*sニニ,')k++;s++;)returnk;)※※※※※※※※※※※※※※※※※※※※※※派※※第04套:程序或过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的

52文件内容。#include#defineN5typedefstructstudent(longsno;charname[10];floatscore[3];}STU;voidfun(char*fi1ename){FILE*fp;inti,j;STUs[N],t;fp二fopen(filename,_1_);fread(s,sizeof(STU),N,fp);fclose(fp);for(i=0;iくN-1;i++)for(j=i+l;j

53

54Theoriginaldata:

55

56");for(j=0;j

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

58");)fun("student,dat");printf("

59

60Thedataaftersorting:

61

62");fp=fopen("student,dat","rb");fread(ss,sizeof(STU),5,fp);fclose(fp);for(j=0;j

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

64");)}第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)

65从文件中读出,所以应填:"rb"。第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:>〇第三处:把已排序的结构数据,重新写入文件,所以应填:fwriteo给定程序MOD".C中函数fun的功能是:在字符串的最前端加入n个・号,形成新串,并且覆盖原串Q注意:字符串的长度最长允许为79。#include^includevoidfun(chars[],intn)(chara[80],*p;inti;s=p;for(i=0;i

66Enterastring:");gets(s);printf(*

67Thestring\*%s\*

68*,s);printf(*

69Entern(numberof*):つ;scanf&n);fun(s,n);printf(*

70Thestringafterinsert:ヽ"%s\"

71",s);)解题思路:第一处:指针p应指向s,所以应改为:p=s:〇第二处:死循环,当dowhile循环执行ー次,临时变量p应该指向字符串的下一位置,所以应改为:while(*p++):〇请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中:要求函数把〇至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[l]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。#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);}

72main(){intage[N],i,d[M];for(i=0;i

73");for(i=0;i

74":"%4d",age[i]);printf("

75

76");fun(age,d);for(i=0;i<10;i++)printf("%4d—-%4d:%4d

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

78",d[10]);NONO(d);}参考答案:voidfun(int*a,int*b)(inti,j;for(i=0;i10)b[M-1]++;elseb[j]++;doublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}※※※※※※※※※※※※※※※※※※※※※※※派※第05套:给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕ho^include^includevoidfun(char*s,inta,doublef){_1—fp;charstr[100],strl[100],str2[100];intal;doublefl;fp=fopen("filel.txt","w");fprintf(fp,"%s%d%f

79",s,a,f);—2—;fp=fopen("filel.txt","r");fscanf(—3—,"%s%s%s",str,strl,str2);fclose(fp);al=atoi(strl);fl=atof(str2);printf("

80Theresult:

81

82%s%d%f

83",str,al,fl);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);)解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE・。

84第二处:关闭刚写入的文件,所以应填:fclose(fp)o第三处:从文件中读出数据,所以应填:fPo给定程序M0DI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(mW10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。#include#include#include#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;t=(STU*)calloc(sizeof(STU),m)for(i=0;ib[j].s)j=i;t(k)=b(j);b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i

85",a[i].num,a[i].s);fprintf(pf,*

86

87*);)main(){STUa[N]={{"A01",81},{“A02”,89},{〃A03〃,66},{“A04”,87},{"A05〃,77},{"A06",90},{"A07",79},{*A08",61},{"A09",80],{"A10",71));STU*pOrder;inti,m;printf("*****TheOriginaldata*****

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

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

90Givethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);)pOrder=fun(a,m);printf("*****THERESULT*****

91*);printf("Thetop:

92");for(i=0;i

93*»pOrderfi].num,pOrder[i].s);free(pOrder);)解题思路:第一处:语句最后缺少分号。第二处:应该使用方括号,而不是圆括号。像此类,使用编译,即可发现。请编写函数fun,函数的功能是:删去ー维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,ー维数组中的数据是:2223445666677899101010。删除后,数组中的内容应该是:2345678910。#include#defineN80intfun(inta[],intn)()main()

94{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;printf(""Theoriginaldata:

95);for(i=0;i

96

97Thedataafterdeleted:

98");for(i=0;iくn;i++)printf("%3d”,a[i]);printf("

99

100");N0N0();)参考答案:intfun(inta[],intn){inti,j=1,k=a[0];for(i=1;idoublefl(doublex){returnx*x;}doublef2(doublex,doubley){returnx*y;}_1_fun(inti,doublex,doubley){if(i==Dreturn2(x);elsereturn3(x,y);)main(){doublexl=5,x2=3,r;r=fun(l,xl,x2);r+=fun(2,xl,x2);printf('

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

102

103”,xl,x2,r);解题思路:本题是根据给定的公式来计算函数的值。第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:doubleo第二处:当i等于1时,则返回fl函数的值,所以应填:门。第三处:如果i不等于1,则返回f2函数的值,所以应填:f2。

104给定程序M0DILC中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。#includecharfun(char*s,char*t){intsl=0,tl=0;char*ss,*tt;ss=s;tt=t;while(*ss){sl++;(*ss)++;)while(*tt){tl++;(*tt)++;)if(tl>sl)returnt;elsereturns;)main(){chara[80],b[80],*p,inti;printf("

105Enterastring:つ;gets(a);printf(*

106Enterastringagain:");gets(b);printf("

107Thelongeris:

108

109ヽ"%s\"

110”,fun(a,b));}第一处:试题要求返回字符串的首地址,所以应改为:char*fun(char*s,char*t)第二处:取字符串指针ss的下ー个位置,所以应改为:SS++;。第三处:取字符串指针tt的下ー个位置,所以应改为:tt++;。请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHIJKABCo#include#include#defineN80voidfunl(char*w)/*本函数的功能是将字符串中字符循环左移ー个位置・/(inti;chart;t=w[0];for(i=0;i111intm;printf("Theoriginalstring:

112");puts(a);printf('

113

114Enterm:つ;scanf("%d",&m);fun(a,m);printf(*

115Thestringaftermoving:

116*);puts(a);printf("

117

118);NONO();)参考答案:voidfunl(char*w)/*本函数的功能是将字符串中字符循环左移ー个位置・/(inti;chart;t=w[0];for(i=0;itypedefstruct{intnum;charname[9];charsex;struct{intyear,month,day;}birthday;floatscore[3];}STU;voidshow(STU1){inti;printf("

119%d%s%c%d-%d-%d”,tt.num,tt.name,tt.sex,tt.birthday,year,tt.birthday,month,tt.birthday,day);for(i=0;i<3;i++)printf("%5.If",2);printf("

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

121Astudentdata:

122");show(3);)第一处:tt变量在函数体fun已经使用,所以应填:tto

123第二处:利用循环分别输出学生的成绩数据,所以应填:tt.score[i]o第三处:函数的调用,所以应填:stdo给定程序MODI1.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[〇]中的数对调、次最大数和中的数对调。#include^defineN20intfun(int*a,intn){inti,m,t,k;for(i二〇;iく2;i++){m=0;for(k=i+l;ka[m])k=m;t=a[i];a[i]=a[m];a[m]=t;})main(){intx,b[N]={ll,5,12,0,3,6,9,7,10,8},n=10,i;for(i=0;i

124");fun(b,n);for(i=0;i

125");}第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:m=i;o第二处:通过内循环来找出最大的ー个数的位置k,所以应改为:if(a[k]>a[m])m=k;o请编写ー个函数unsignedfun(unsignedw),w是ー个大于10的无符号整数,若w是n(n22)位的整数,函数求出w的低nT位的数作为函数值返回。例如:w值为5923,则函数返回923:w值为923则函数返回23〇#includeunsignedfun(unsignedw){}main(){unsignedx;printf("Enteraunsignedintegernumber:;scanf1%u,&x);printf(ATheoriginaldatais:%u

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

127",fun(x));NONO();)参考答案:unsignedfun(unsignedw)(if(w>10000)w畑10000;elseif(w>1000)w%-1000;

128elseif(w>100)w加100;elseif(w>10)w%=10;returnw;}※※※※※※※※※※※※※※※※※※※※※※※派※第08套:给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以ー个系数a。0#includetypedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:,tt.num,tt.name);for(i=0;i<3;i++)printf("%5.If”,tt.score[i]);printfC

129");)voidmodify(1*ss,floata){inti;for(i=0;i<3;i++)ss->2*=a;)main(){STUstd={1,"Zhanghua",76.5,78.0,82.0};floata;printf("

130Theoriginalnumberandnameandscores:

131丿;show(std);printf("

132lnputanumber:);scanf("%f",&a);modify(_3_,a);printf("

133Aresultofmodifying:

134");show(std);}第一处:实参SS是ー个结构型指针变量,所以应填:STU。第二处:该学生的各科成绩都乘以ー个系数a,所以应填:score[i]。第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。给定程序MODI1.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如:若k=10,则应输出:3628800〇#includelongfun(intk)(ifk>0return(k*fun(k-l));elseif(k=0)returnIL;)main(){intk=10;printf("%d!=%ld

135”,k,fun(k));)

136解题思路:第一处:条件判断缺少圆括号。第二处:判断相等的符号是==。程序定义了NXN的二维数组,并在主函数中|'|动赋值。清编写函数fun(inta[][N],intn),函数的功能是:使数组左下三角元素中的值乘以n.例如:若n的值为3,a数组中的值为197|397|a=|238I则返回主程序后a数组中的值应为|6981456|121518|#include^include#defineN5intfun(inta[][N],intn)(}main(){inta[N][N],n,i,j;printf(zz*****Thearray*****

137");for(i=0;i

138");}don=rand()%10;while(n>=3);printfCn=%4d

139”,n);fun(a,n);printf("在***THERESULT*****

140");for(i=0;i

141");NONO();)参考答案:intfun(inta[][N],intn){inti,j;for(i=0;i#include^defineN6typedefstructnode{intdata;structnode*next;}NODE;

142voidfun(NODE*h){NODE*p,*q;intt;P=h;while(p){q=_1—;while(_2_){if(p->data>q->data){t=p->data;p->data=q->data;q->data=t;)q=q->next;}P=_3_;NODE*creatlist(inta[]){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(*ThelistisNULL!

143");else{printf(*

144Head");do{printf(“ー〉%d”,pー〉data);p二p->next;}while(p!=NULL);printf("->End

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

146Theoriginallist:

147");outlist(head);fun(head);printf("

148Thelistafterinverting:

149");outlist(head);}第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向P的next指针,因此应填写:p.next〇第二处:判断内循环q指针是否结束,所以应填:qo第三处:外循环控制变量p指向自己的next指针,所以应填:p.nexto给定程序MODILC中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其它字符不变。#include

150#includevoidfun(char*s)(while(*s!=@'){if(*s>=,A,&*sくニ'Z'I*s>='a'&&*s<='z'){if(*s=='Z')*s='A';elseif(*sニニ'z')*s二'a';else*s+二1;}(*s)++;}}main(){chars[80];printf("

151Enterastringwithlength<80.:

152

153");gets(s);printf("

154Thestring:

155

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

157

158TheCords:

159

160つ;puts(s);)第一处:使用while循环来判断字符串指针s是否结束,所以应改为:while(*s)。第二处:取字符串指针s的下ー个位置,所以应改为:S++;。请编写函数fun,函数的功能是:移动ー维数组中的内容;若数组中有n个整数,要求把下标从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〇#include#defineN80voidfun(int*w,intp,intn)()main(){inta[N]={l,2,3,4,5,6,7,8,9,10,11,12,13,14,15);inti,p,n=15;printf("Theoriginaldata:

161");for(i=0;i

162

163Enterp:");scanf("%d",&p);fun(a,p,n);printf("

164Thedataaftermoving:

165");for(i=0;i

166

167");NONO();}参考答案:voidfun(int*w,intp,intn){inti,j=0,b[N];for(i=p+1;i

168for(i=0;i<=p;i++)b[j++]=w[i];for(i=0;i#defineN3intfun(int(*a)[N]){inti,j,ml,m2,row,colum;ml二m2二0;for(i=0;i

169*);for(i=0;i

170);for(i=0;i

171");}if(fun(x))printf("TheArrayisamagicsquare.

172");elseprintf("TheArrayisn'tamagicsquare.

173");}第一处:行列变量row和colum的值初始化为〇。第二处:两个条件只要有一个不满足就返回。,所以应填:||o第三处:如果矩阵是“幻方”,则返回1。给定程序M0DI1.C中fun函数的功能是:根据整型形参m,计算如下公式的值。11123m例如,若主函数中输入5,则应输出・0.283333a#includedoublefun(intm){doublet=1.0;inti;for(i=2;i<=m;i++)t=1.0-1/i;main()intmprintf(A

174Pleaseenter1integernumbers:

175*);scanf("%d",&m);printf("

176

177Theresultis%lf

178”,fun(m));}第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为t-=l./io第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填returnt;。

179请编写ー个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入"asdafaaz67”,则输出为"asdafaaz67”。#include#includeintfun(char*str)()main()(charstr[81];intn;printf(*Inputastring:");gets(str);puts(str);fun(str);printf("***str:%s

180”,str);N0N0();)参考答案: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〇#include^include^defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/P=/if(p==_2_)return;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;P=q;q=_3_;}

181h->next=p;)NODE*creatlist(inta[]){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!

182");else{printf("

183Head");do{printf(“ー)%d”,p->data);p=p->next;}while(p!=NULL);printf("->End

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

185Theoriginallist:

186/z);outlist(head);fun(head);printf(*

187Thelistafterinverting:

188");outlist(head);}第・处:使用结构指针P,来控制链表的结束,P必须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h->nexto第二处:判断p指针是否结束,所以应填写:〇〇第三处:q指向原q的next指针,所以应填:r。给定程序MODH.C中函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。#include#include#defineN80

189intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){P=s;/****r=p;while(*r)if(*r-*p){r++;p++;}elsebreak;/****if(*r=0)n++;s++;}returnn;}main(){chara[N],b[N];intm;printf(*

190Pleaseenterstringa:");gets(a);printf('

191Pleaseentersubstringb:");gets(b);m=fun(a,b);printf('

192Theresultis:m=%d

193”,m);)第一处:程序中子串是由变量t来实现的,再根据下面while循环体中语句可知,所以应改为:r=t;〇第二处:是判断相等的条件,所以应改为:if(*r=0)。请编写函数fun,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。例如,字符串数组中的M个字符串为AAAABBBBBBBCC则合并后的字符串的内容应是:AAAABBBBBBBCCo提示:strcat(a,b)的功能是将字符串b复制到字符串a的串尾上,成为ー个新串。#include♦♦defineM3♦♦defineN20voidfun(chara[M][N],char*b)(inti;*b=0;}main(){char={"AAAA","BBBBBBB","CC"},a[100];inti;printf〈Thestring:

194/z);

195for(i=0;i

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

197");printf("%s",a);printf("

198

199");N0N0();)参考答案:voidfun(chara[M][N],char*b)(inti;*b二〇;for(i=0;i♦♦include♦♦defineN5typedefstructnode{intdata;structnode*next;}NODE;_1_*fun(NODE*h){NODE*p,*q,*r;P=h;if(p==NULL)returnNULL;q=p->next;p->next=NULL;while(q)(r=q->_2_;q->next=p;P=q;q=—3—;)returnp;}NODE*creatlist(inta[]){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;

200if(p==NULL)printf(*ThelistisNULL!

201");else{printf("

202Headつ;do{printf(“ー)%d”,p->data);p=p->next;}while(p!=NULL);printf("->End

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

204Theoriginallist:

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

206Thelistafterinverting:

207");outlist(head);}第一处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE・。第二处:中间变量r用来保存q的next指针,所以应填:next。第三处:q指向原q的next指针,所以应填:r。给定程序MODI1.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。例如,字符串中的数据为:AABBCCDDEEFF,则输出应当是:ABBCDDEFFo#includettinclude^defineN80voidfun(char*s,chart[]){inti,j=0;for(i=0:i

208Pleaseenterstrings:;gets(s);fun(s,t);printf('

209Theresultis:%s

210,t);}第一处:根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%2||s[i]%2==0)o第二处:当字符串处理结束后,应该补上字符串的结束符,那么字符串t的位置是由i来控制,所以应改为:t[j]=0;o请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到ー维数组中。函数fun中给出的语句仅供参考。

211例如,二维数组中的数据为:333333334444444455555555则ー维数组中的内容应是:334455334455334455334455〇#includevoidfun(ints[][10],intb[],int*n,intmm,intnn)(inti,j,np=0;/*np用作b数组下标・/*n=np;}main(){intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf("Thematrix:

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

213");fun(w,a,&n,3,4);printf(,zTheAarray:

214^);for(i=0;i

215

216*);N0N0();)参考答案:voidfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j,np=0;/*np用作b数组下标・/for(i=0;i^include^defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;P=_1—;while(p){q=_2_;while(q){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[])

217{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!

218");else{printf("

219Headつ;do{printf(“ー>%d”,p->data);p=p->next;}while(p!=NULL);printf(*->End

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

221Theoriginallist:

222");outlist(head);fun(head);printf(*

223Thelistaftersorting:

224");outlist(head);)第一处:使用结构指针P,来控制链表的结束,P必须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h->nexto第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以应填写:p->nexto第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:>(或>=)。给定程序M0DILC是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。#include#includetypedefstructaa{intdata;structaa*next;}NODE;fun(NODE*h){intmax二一1;NODE*p;

225p=h;while(p){if(p->data>max)max=p-〉data;p=h->next;)returnmax;)outresult(ints,FILE*pf){fprintf(pf,*

226Themaxin1ink:%d

227',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/

228THELIST:

229

230HEADつ;while(p){fprintf(pf,“ー〉%d,p->data);p=p->next;}fprintf(pf,"

231");)main(){NODE*head;intm;head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf(*

232THERESULT:

233");outresult(m,stdout);}第一处:p指向形参结构指针h的next指针,所以应改为:p=h-〉next;。第二处:p指向自己的下ー个结点,所以应改为:p=pー〉next,请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到ー维数组中,ー维数组中数据的个数存放在形参n所指的存储单元中。例如,二维数组中的数据为:333333334444444455555555则ー维数组中的内容应是:333333334444444455555555O#include

234voidfun(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}},i,j;inta[100]={0},n=0;printf("Thematrix:

235/z);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(*%3d*,w[i][j]);printf('

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

237*);for(i=0;i

238

239");N0N0();}参考答案:voidfun(int(*s)[10],int*b,int*n,intmm,intnn)(inti,j,k;for(i=0;idoublefl(doublex){returnx*x;}doublef2(doublex,doubley){returnx*y;}doublefun(doublea,doubleb)(_1_(*f)0;doublerl,r2;f=_2_;/*pointfountionfl♦/rl=f(a);f=_3_;/*pointfountionf2♦/r2=(*f)(a,b);returnrl+r2;}main(){doublexl=5,x2=3,r;r=fun(xl,x2);printf('

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

241",xl,x2,r);}第一处:定义函数指针的类型,所以应填:doubleo第二处:使f指向函数门,所以应填:flo第三处:

242使f指向函数f2,所以应填:f2o给定程序MODILC是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。#include#includetypedefstructaa{intdata;structaa*next;}NODE;intfun(NODE*h){intsum=0;NODE*p;P=h;while(p){if(p->data%2==0)sum+=p->data;p二h->next;}returnsum;}NODE*creatlink(intn){NODE*h,*p,*s,*q;inti,x;h=p=(NODE*)malloc(sizeof(NODE));for(i=l;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%16;s->next=p->next;p->next=s;p=p->next;}p->next=NULL;returnh;}outlink(NODE*h,FILE*pf){NODE*p;p=h->next;fprintf(pf,"ヽn

243THELIST:

244

245HEAD");while(p){fprintf(pf,"->%d",p->data);p=p->next;}fprintf(pf,"

246");}outresult(ints,FILE*pf){fprintf(pf,"

247Thesumofevennumbers:%d

248",s);)main(){NODE*head;inteven;head=creatlink(12);head->data=9000;out1ink(head,stdout);even=fun(head);printf("

249Theresult:

250");outresult(even,stdout);)第一处:试题要求不计算头结点,所以应改为:p=h->next;第二处:指向p的下ー个结点来实现循环,所以应改为:p=p->next;请编写函数fun,函数的功能是:判断字符串是否为回文?若是,函数返回1,主函数中输出:YES,否则返回〇,主函数中输出N0。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。#includettdefineN80intfun(char*str)

251(}main(){chars[N];printf("Enterastring:");gets(s);printf("ヽn

252〃);puts(s);if(fun(s))printf("YES

253");elseprintf("N0

254");NONOO;)参考答案:intfun(char*str){inti,j=strlen(str);for(i=0;iWdefineN5typedefstructstudent(longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,longsno){FILE*fp;STUn;inti;fp=fopen(filename,*rb+*);while(!feof(_1_)){fread(&n,sizeof(STU),1,fp);if(n.sno_2_sno)break;}if(!feof(fp)){for(i=0;i<3;i++)n.score[i]+=3;fseek(_3_,-lL*sizeof(STU),SEEK_CUR);fwrite(&n,sizeof(STU),1,fp);)fclose(fp);)

255main(){STUt[N]={{10001,"MaChao”,91,92,77},{10002,“CaoKai”,75,60,88},“0003,"LiSi”,85,70,78},“0004,"FangFang”,90,82,87},{10005,"ZhangSan”,95,80,88}},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);printf("

256Theoriginaldata:

257");fp=fopenCstudent.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j

258");}fun("student,dat",10003);fp=fopen("student,dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("

259Thedataaftermodifing:

260");for(j=0;j

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

262");}第一处:判断读文件是否结束,所以应填:fp。第二处:从读出的数据中判断是否是指定的学号,其中学号是由形参sno来传递的,所以应填:第三处:从已打开文件fp中重新定位当前读出的结构位置,所以应填:fp。给定程序MODI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序。然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。待排序的字符串已在主函数中赋予。#include#include#defineN80voidinsert(char*aa){inti,j,n;charch;n=strlen[aa];for(i=l;i=0)&&(ch

263}aa[j+l]=ch;main(){chara[N]二"QWERTYUIOPASDFGHJKLMNBVCXZ”;inti;printf("Theoriginalstring:%s

264",a);insert(a);printf("Thestringaftersorting:%s

265

266",a);}解题思路:第一处:函数应该使用圆括号,所以应改为:n=strlen(aa);.第二处:变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aa[i];。N名学生的成绩已在主函数中放入ー个带头节点的链表结构中,h指向链表的头节点。请编写函数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(*->%2.Of”,p->s);p=p->next;}while(p!=0);printf("

267

268");}main(){doubles[N]={85,76,69,85,91,72,64,87},max;STREC*h;h=creat(s);outlist(h);max=fun(h);printf("max=%6.lf

269",max);NONO();}参考答案:doublefun(STREC*h)(

270doublemax二hー〉s;STREC*p;p=h->next;while(p){if(p->s>max)max=p->s;p二p->next;}returnmax;}※※※※※※※※※※※※※※※派※※※※※※※※※第16套:给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符・补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长くN。^include#include#defineM5^defineN20voidfun(char(*ss)[N]){inti,j,n,len=0;for(i=0;in)n=len;}for(i=0;i

271");for(i=0;i

272",ss[i]);printf("

273");fun(ss);printf("Theresultis:

274");for(i=0;i

275",ss[i]);)第一处:利用for循环语句取当前字符串的长度,所以应填:ss[i]。第二处:在字符串的右边填字符・,其开始位置是n+j,其中n是该字符串本身的长度,j是循环控制变量,所以应填:n+jo第三处:字符串处理结束应置字符串结束符,其位置是n+j+1,所以应填:1。给定程序MODI1.C中fun函数的功能是:将p所指字符串中每个单词的最后ー个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。

276例如,若输入“Iamastudenttotaketheexamination.",则应输出"IaMAstudenTtOtakEthEexamination."〇#include#includevoidfun(char*p){intk=0;for(;*p;p++)if(k)if(pニニ,,)k=0;#(p-1)=toupper(*(p-1))}}elsek=1;}main()(charchrstr[64];intd;print—

277PleaseenteranEnglishsentencewithin63letters:つ;gets(chrstr);d=strlen(chrstr);chrstr[d]=;chrstr[d+l]=0;printf(*

278

279Beforechanging:

280%s,chrstr);fun(chrstr);printf(*

281Afterchanging:

282%s,chrstr);)第一处:关键字int错写成INT。第二处:该行括号没有配对,所以只要加上一个右括号即可。请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa〇#include#include^includeintfun(char*s,intnum)(}main(){chars[10];printf(〃输入7个字符的字符串:〃);gets(s);fun(s,7);printf("

283%s”,s);

284NONO();}参考答案:intfun(char*s,intnum)(charch;inti,j;for(i=1;i<6;i++)for(j=i+1;j<6;j++){if(*(s+i)く*(s+j)){ch=*(s+j);#(s+j)=*(s+i);#(s+i)=ch;※※※※※※※※※※※※※※派※※※※※※※※※※第]7套:程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典(从小到大)排序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include#includestructstudent{longsno;charname[10];floatscore[3];);voidfun(structstudenta[],intn)(_1—t;inti,j;for(i=。;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},“0003,“CaoKai”,75,60,88},“0004,"FangFang”,90,82,87}};inti,j;printf("ヽn

285Theoriginaldata:

286

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

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

289");}fun(s,4);printf(*

290

291Thedataaftersorting:

292

293");for(j=0;j<4;j++)

294{printf(*

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

296");}第一处:t是ー个临时变量,主要是存放学生数据的结构变量,所以应填:structstudent.第二处:利用两重for循环进行排序操作,排序的终止条件应该是总人数减1,所以应填:n-1。第三处:对姓名进行比较大小,所以应填:a[i].name,a[j].name.给定程序M0DI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上:并将该字符前的原字符向后顺序移动.例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH.#includefun(char*p){charmax,*q;inti=0;max=p[i];while(p[i]!=0){if(maxp){*q=*(q-l);q-;}p[0]=max;}main(){charstr[80];printf〈'Enterastring:つ;gets(str);printf("

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

298Thestringaftermoving:");puts(str);printf]

299

300");}第一处:在语句后缺少分号,所应改为:q=p+i;.第二处:保留字while写错,所应改为:while(q>p).学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生大数由函数值返回.例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。ttincludettdefineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth)(}main(){STRECsN={{"GA005”,85},{〃GA003”,76},{〃GA002”,69},{"GA004〃,85},{"GAOO/,96},{"GA007”,72},{"GA008”,64},{"GA006”,87},{*GA015*,85},{*GA013*,94},{*GA012*,64},{*GA014*,91},{"GA011”,90},{"GA017〃,64},{"GA018〃,64},{"GA016”,72}};STRECh[N],tt;FILE*out;inti,j,n,low,heigh,t;

301printf("Enter2integernumberlow&heigh:");scanf("%d%d",&low,feheigh);if(heigh

302",low,heigh);for(i=0;i

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

304");out=fopen("c:\\test\\out.dat","w");n=fun(s,h,80,98);fprintf(out,"%d

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

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

307");fclose(out);}参考答案:intfun(STREC*a,STREC*b,int1,inth){inti,j=0;for(i=0;i=1&&a[i].s<=h)b[j++]=a[i];returnj;}※※※※※※※※※※※※※※※※※※※※※※※派※第18套:给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asdl23fgh543df,处理后新字符串为:asdfghdfl23543。#include^include#includechar*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+l;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));尸〇;k=0;for(i=0;i-a)&&(s[i]<-z*))|I((s[i]>-A*)&&(s[i]<-Z*))){1—;j++;}else{p[k]=s[i];k++;}}for(i=0;i<_2_;i++)t[j+i]=p[i];t[j+k]=_3_;returnt;

308}main(){chars[80];printf("Pleaseinput:つ;scanf("%s”,s);printf("

309Theresultis:%s

310",fun(s));}第一处:函数中申请了两个内存空间,其p是存放字母字符串,t是存放非字母字符串,根据条件可知,P依次存放字母字符串,其位置由j来控制,所以应填:s[i]。第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:ko第三处:字符串处理好后必须添加字符串结束符,所以应填:‘、〇'。给定程序MODILC中函数fun的功能是:将s所指字符串中最后一次出现的与tl所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:"abcdabfabc”,tl所指子串中的内容为:"ab”,t2所指子串中的内容为:“99〃时,结果,在w所指的数组中的内容应为:“abcdabf99c”。#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==‘、〇')a=w;w++;}t2;while(*r){*a=*r;a++;r++;}}main(){chars[100],tl[100],t2[100],w[100];printf(*

311PleaseenterstringS:");scanf('%s”,s);printf('

312Pleaseentersubstringtl:");scanf("如",tl);printf("

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

314Theresultis:%s

315',w);}elseprintf('

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

317");}第一•处:判断w指针所指的值是否是结束符,应改为:while(*w)。第二处:if错写成If。函数fun的功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t

318所指的数组中。例如,若s所指字符串中的内容为:〃ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。最后t所指的数组中的内容应是:”BDF24”。#include#includevoidfun(char*s,chart[]){)main()(chars[100],t[100];printf('

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

320Theresultis:%s

321',t);N0N0();}参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=0;i#includestructstudent{longsno;charname[10];floatscore[3];};_1_fun(structstudent*a){inti;a->sno=10002;strcpy(a->name,"LiSi);for(i=0;i<3;i++)_2_+=1;return_3—;}mainO{structstudents={10001,"ZhangSan”,95,80,88),*t;inti;

322printf("

323

324Theoriginaldata:

325");printf("

326No:%ldName:%s

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

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

329Thedataaftermodified:

330");printf("

331No:%ldName:%s

332Scores:",t->sno,tー〉name);for(i=0;i<3;i++)printf("%6.2f",t->score[i]);printf("

333");)第一处:必须定义结构指针返回类型,所以应填:structstudent・〇第二处:分别对成绩增加1分,所以应填:a->score[i]。第三处:返回结构指针a,所以应填:ao给定程序M0DILC中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入ー个字符串数组中。#include^include#defineN5ttdefineM81fun(char(*sq)[M]){inti;char*sp;sp=sq[0];for(i=0;iくN;i++)if(strlen(sp)

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

335TheNstring:

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

337Thelongeststring:

338");puts(longest);}第一处:要求返回字符串的首地址,所以应改为:char*fun(char(*sq)[M])〇第二处:返回一个由变量sp控制的字符串指针,所以应改为:returnsp;。函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的十位和千位上。例如,当a=45,b=12。调用该函数后,c=2415o#includevoidfun(inta,intb,long*c){)main(){inta,b;longc;

339printf("Inputa,b:");scanf("%d%d,z,&a,&b);fun(a,b,&c);printf("Theresultis:%ld

340,c);N0N0();)参考答案:voidfun(inta,intb,long*c)(*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;}※※※※※※※※※※※※※※※※※※※※※※派※※第20套:给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:4630324061745154826,平均值为:30.500000移动后的输出为:3061715264632404548^include#include#defineN10doublefun(double*x){inti,j;doubleav,y[N];av=0;for(i=0;i

341");printf("

342Theaverageis:%f

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

344Theresult:

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

346");}第一处:求出N个数的平均值,所以应填:N。

347第二处:利用for循环语句,把数组x中小于平均值的数,依次存放到数组y中,其中位置由变量j来控制,所以应填:j++。第三处:i是while循环体的控制变量,每做一次循环均要加L给定程序MODILC中函数fun的功能是:统计字符串中各元音字母(即:A、E、I、〇、U)的个数。注意:字母不分大、小写。例如:若输入:THIsisaboot,则输出应该是:1、〇、2、2、〇〇#includefun(char*s,intnum[5]){intk,i=5;for(k=0;k=0)num[i]++;})main(){charsi[81];intnuml[5],i;printf(*

348Pleaseenterastring:");gets(si);fun(si,numl);for(i=0;i<5;i++)printf("%d*,numl[i]);printf('

349");)第一处:num初始化错误,应为:num[k]=0:〇第二处:由于s是指针型变量,所以应改为:switch(*s)。请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:二维数组中的值为13579299946999813570则函数值为61〇#include^defineM4^defineN5intfun(inta[M][N])main(){intaa[M][N]={{1,3,5,7,9},(2,9,9,9,4),(6,9,9,9,8),(1,3,5,7,0});inti,j,y;clrscr();

350printf("Theoriginaldatais:

351");for(i=0;i

352");}y=fun(aa);printf("

353Thesum:%d

354*,y);printf("

355");NONO();}参考答案:intfun(inta[M][N])inttot=0,i,jfor(i=0;i#includettdefineN10doublefun(double*x){inti,j;doubles,av,y[N];s=0;for(i=0;iav){y[_2_]=x[i];x[i]=-l;}for(i=0;i

356");printf("

357Theaverageis:%f

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

359Theresult:

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

361");}第一处:计算N个数的平均值,所以应填:s/N。第二处:利用for循环语句,把数组x中大于平均值的数,依次存放到数组y中,同时把数组x上的该数置为ー1,其中位置由变量j来控制,所以应填:j++。第三处:再利用循环把不是ー1的数,依次仍存放到数组y中,所以应填:给定程序MODI1.C的功能是:读入ー个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。例如,若输入:Iamastudenttotaketheexamination.,则应输出:IAmAStudentToTakeTheExamination.〇^include#includeincludeupfst(charp){intk=0;for(;*p;p++)if(k){if(*p==*')k=0;}elseif(*p!=''){k=1;*p=toupper(*p);})main(){charchrstr[81];printf(,z

362PleaseenteranEnglishtextline:);gets(chrstr);printfl

363

364Beforechanging:

365%s,chrstr);

366upfst(chrstr);printfl

367Afterchanging:

368%s

369,chrstr);)第一处:包含头文件的标识错误,在include前漏写了#。第二处:由于传入的参数是字符串,所以应为upfst(char*p)。程序定义了NXN的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。例如:a数组中的值为|01279||19745|a=|23831||45682||59141|则返回主程序后s的值应为:3.375〇#include#include配efineN5doublefun(intw[][N]){)main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;doubles;printf(z/*****Thearray*****

370);for(i=0;i

371");}s=fun(a);printf("*****THERESULT*****

372");printf("Thesumis:%lf

373",s);N0N0();}参考答案:doublefun(intw[][N])(inti,j,n=0;doublesum=0;for(i=0;i

374#include#includeintfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,"w"))=NULL)return0;for(i=l;i<=10;i++)fprintf(1,"%d%f

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

376Succeed!!

377");―2—;printf("

378Thedatainfile:

379");if((fp=fopen(_3—,"r"))ニニNULL)return0;fscanf(fp,"%d%f",&n,&x);while(!feof(fp)){printf("%d%f

380",n,x);fscanf(fp,"%d%f",&n,&x);}fclose(fp);return1;}main(){charfname口=“myfile3.txt”;fun(fname);1第一处:intfprintf(FILE*stream,constchar*format[,argument,•,,]);因此本处只能填写文件流的变量fp。第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)。第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出文件名,所以本处只能写文件名变量fname或者直接给出文件名"myfile3.dat-0给定程序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。#include#includefun(intn,int*a){inti,j,p,t;for(j=0;ja[i])t=i;if(p!=j){t=a[j];a[j]=a[p];a[p]=t;}putarr(intn,int*z){inti;for(i=1;i<=n;i++,z++){printf("%4d",*z);if(!(i%10))printf("

381");

382}printf('

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

384

385Beforesorting%dnumbers:

386",n);putarr(n,aa);fun(n,aa);printf("

387Aftersorting%dnumbers:

388",n);putarr(n,aa);}第一处:for循环的终止值应该くn或者是く二nT。第二处:使用临时变量P来保存最小值位置i,所以应改为:p=i;。函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12时,调用该函数后,c=2514o#includevoidfun(inta,intb,long*c)main(){inta,b;longc;printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld

389",c);NONO();)参考答案:voidfun(inta,intb,long*c){*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);}※※※※※※※※※※※※※※※※※※※※※※派※※第23套:给定程序中,函数fun的功能是:找出NXN矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的ー维数组中。#include^defineN4voidfun(int(*a)[N],int*b){inti,j;for(i=0;i

390printf("

391Thematrix:

392");for(i=0;i

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

394");1第一处:把每列的第1值赋值给b[i],所以应填:a[0][i]o第二处:如果b[i]值小于a[j]小]的值,则把a[j][i]重新赋值给b[i]中,保存最大的值,所以应填:<〇第三处:在主函数中,x是存放矩阵数据,y是存放每列的最大值,所以应填:x,yo给定程序MODILC中函数fun的功能是:交换主函数中两个变量的值。例如:若变量a中的值原为8,b中的值为3。程序运行后a中的值为3,b中的值为8。^includeintfun(intx,inty)(intt;t=x;x=y;y=t;}main(){inta,b;a=8;b=3;fun(&a,&b);printf(*%d,%d

395”,a,b);}第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int*x,int*yo第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*X;*X=*y;*y=t:〇编写函数fun,函数的功能是求出小于或等于lim的所有素数并放在aa数组中,函数返回所求出的素数的个数。函数fun中给出的语句仅供参考。#include^defineMAX100intfun(intlim,intaa[MAX]){inti,j,k=0;/*其中变量k用于统计素数个数・/for(i=2;i<=lim;i++){

396/・以下完成判断aa数组中小于或等于lim的素数并统计个数・/}returnk;)main(){intlimit,i,sum;intaa[MAX];printf("输入ー个整数”);scanf("%d",&limit);sum=fun(1imit,aa);for(i=0;i

397");printf("%5d",aa[i]);}N0N0();}参考答案:intfun(intlim,intaa[MAX])inti,j,k二〇;/・其中变量k用于统计素数个数・/for(i=2;i++)/・以下完成判断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〇#include#includestructstudent{longsno;charname[10];floatscore[3];};—1—fun(structstudenta){inti;a.sno=10002;

398strcpy(_2_,"LiSi");for(i=0;i<3;i++)_3_+=1;returna;}main(){structstudents={10001,*ZhangSan*,95,80,88},t;inti;printf("ヽn

399Theoriginaldata八n");printf('

400No:%ldName:%s

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

402");t=fun(s);printf(*

403Thedataaftermodified:

404");printf("

405No:%ldName:%s

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

407");本题是对结构体变量中的值进行修改并通过函数值返回。第一处:必须定义结构返回类型,所以应填:structstudento第二处:对姓名进行修改,所以应填:a.name〇第三处:分别对成绩增加1分,所以应填:a.score[i]o假定整数数列中的数不重复,并存放在数组中。给定程序MODI1.C中函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。^include配efineN20fun(int*a,intn,intx){intp=0,i;a[n]=x;while(x!=a[p])p=p+1;/if(P==n)return-1;else{for(i=p;i

408");for(i=0;iくn;i++)printf("%5d",w[i]);printf(*

409lnputx(todelete):つ;scanf("%d",&x);printf("Delete:%d

410”,x);n=fun(w,n,x);if(n==-l)printf(“科・Notbefound!***

411

412");

413else{printf("Thedataafterdeleted:

414");for(i=0;iくn;i++)printf("%5d",w[i]);printf("

415

416");))第~・处,条件语句中的小写D错写成大写P了。第二处;而除元素,应该是后面位置的元素值赋值给前面的位置上,所以应改为:a[i]=a[i+l];〇学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止ー个,函数返回分数最低的学生的人数。#include^defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b)main(){STRECs[N]={{*GA05*,85},{*GA03*,76},{*GA02*,69},{*GA04\85}»{"GA01〃,91},{"GA07",72},{"GA08",64},{"GA06",87},{*GA015*,85},{*GA013*,91},{*GA012*,64},{*GA014*,91},{"GA011”,91},{"GA017”,64},{“GA018”,64},{"GA016”,72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printfC*The%dlowestscore:

417',n);for(i=0;i

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

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

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

421”,h[i].s);fclose(out);}参考答案: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;}elseif(min==a[i].s)

422b[j++]=a[i];}returnj;}※※※※※※※※※※※※※※※※※※※※※派※※※第25套:人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。#include#include^defineN8typedefstruct{charnum[10];intyear,month,day;}STU;_1fun(STU*std,char*num){inti;STUa={”,9999,99,99};for(i=0;i

423Notfound!

424");else{printf("

425Succeed!

426");printf("%s%d-%d-%d

427,p.num,p.year,p.month,p.day);))第一处:从返回值来看,是返回一个结构型的值,所以应填:STUo第二处:判断结构变量中的编号num是否相等,所以应填:stu[i].numo第三处:返回编号相等的记录值,所以应填:std[i]。给定程序M0DILC中函数fun的功能是:从s所指字符串中,找出与t所指字符串相同的子串的个数作为函数值返回。例如,当s所指字符串中的内容为:"abcdabfab",t所指字符串的内容为:"ab",则函数返回整数3。#include#includeintfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){P=s;r=t;while(*r)if(*r==*p){r++;p++}elsebreak;if(r=='、〇')n++;s++;returnn;

428main()(chars[100],t[100];intm;printf(*

429PleaseenterstringS:*);scanf('%s”,s);printf(*

430Pleaseentersubstringt:");scanf(飞s”,t);m=fun(s,t);printf(*

431Theresultis:m=%d

432”,m);)第一处:语句后缺少分号。第二处:判断r的当前字符是否是字符串结束符,所以应改为:if(*r==0)。函数fun的功能是:将s所指字符串中ASCロ值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG12345”,其中字符B的ASCII码值为偶数、…、字符2的ASCH码值为偶数、…都应当删除,其它依此类推。最后t所指的数组中的内容应是:"ACEG135”。#include#includevoidfun(char*s,chart[])main()(chars[100],t[100];printf(*

433PleaseenterstringS:");scanf('%s”,s);fun(s,t);printf(*

434Theresultis:%s

435”,t);NONOO;}参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=0;i#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;free(_1__);q=p->一2—;

436}else{P=q;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=0;returnh;)voidoutlist(SLIST*h){SLIST*p;p=h->next;if(pニニNULL)printfC

437ThelistisNULL!

438");else{printf("

439Head");do{printf('ー〉%d”,pー〉data);p=pー〉next;}while(p!=NULL);printf("ー〉End

440");))main(){SLIST*head;inta[N]二{1,2,2,3,4,4,4,5};head二creatlist(a);printf("

441Thelistbeforedeleting:

442");outlist(head);fun(head);printf("

443Thelistafterdeleting:

444");outlist(head);第一处:释放q指针所指的内存空间,应填q。第二处:q指针指向p的next指针,重新完成链接,应填next。第三处:两个结点的值不相同,那么q就指向q的next指针,应填next。给定程序MODILC中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。#include#defineN20voidfun(inta[],intn){inti,j,t,p;for(j=0;j

445for(i=0;i

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

447");}第一处:语句后缺少分号。第二处:保存最小值的位置,所以应改为:P=i;o请编写ー个函数fun,它的功能是:求出I到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:711142122283335424449#include^defineM100voidfun(intm,int*a,int*n)(}main(){intaa[M],n,k;fun(50,aa,&n);for(k=0;k

448");elseprintf("%4d",aa[k]);printf("

449");NONO();参考答案:^includettdefineM100voidfun(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.612558»#includedoublefun(intn){inti;doubles,t;s=_l_;for(i=l;i<=_2_;i++){t=2.0*i;s=s+(2.0*i-l)*(2.0*i+l)/_3_;}returns;}main(){intn=-l;while(n<0)

450{printf("Pleaseinput(n>0):");scanf("%d",&n);}printf(*

451Theresultis:%f

452",fun(n));}第一处:根据公式可知,累加和变量s,应置〇。第二处:for循环的终止值应为形参n。第三处:根据公式以及函数体中t变量内容,所以应填:t*to给定程序MODI1.C中函数fun的功能是:统计substr所指子字符串在str所指字符串中出现的次数。例如,若字符串为aaasIkaaas,子字符串为as,则应输出2。#includefun(char*str,char*substr){inti,j,k,num=0;for(i=0,str[i],i++)for(j=i,k=0;substr[k]==str[j];k++,j++)If(substr[k+l]==‘、〇'){num++;break;returnnum;main()(charstr[80],substr[80];printf("Inputastring:*);gets(str);printf("Inputasubstring:*);gets(substr);printf("%d

453",fun(str,substr));)第一处:循环for语句中应有分号。第二处:if错写成If。请编写ー个函数fun,它的功能是:根据以下公式求五的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):Ji11X21X2X31X2X3X41X2X-Xn—=14——I1HF-i233X53X5X73X5X7X93X5X-X(2n+l)程序运行后,如果输入精度0.0005,则程序输出为3.14…。#include#includedoublefun(doubleeps){)main(){doublex;printf("Inputeps:");scanf(*%1f",&x);printf("

454eps=%lf,PI=%lf

455",x,fun(x));NONOO;}参考答案:doublefun(doubleeps)(doubles=l,t=l./3;intn=l;while(t>=eps){s+=t;n++;t=t*n/(2.〇・n+1);}return(s*2.0);)第28套:给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t

456所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7o输出结果为:4〇^includevoidfun(char*s,int*t){inti,n;n=0;for(i=0;1!=NULL;i++)if(s[i]>=0*&&s[i]<=—2—)n++;#3—;}main(){chars[80]=*abcdef35adgh3kjsdf7*;intt;printf(*

457Theoriginalstringis:%s

458”,s);fun(s,&t);printf(*

459Theresultis:%d

460',t);}第一处:在for循环中终止值要判断字符串是否结束符,所以应填:s[i]。第二处:判断是否是数字,所以应填:‘9’。第三处:字符串中数字字符出现的次数n,并存放在形参t所指的变量中,所以应填:*t=no给定程序M0DILC中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。^includeintfun(int*x,inty){intt;t=x;x=y;return(y);)main(){inta=3,b=8;printf("%d%d

461”,a,b);b=fun(&a,b);printf("刎%d

462”,a,b);)第一处:由于x是整型指针变量,所以地址不能赋值给整型变量,因此必须取x地址上的值,所以应改为t=・x;*x=y;〇第二处:已交换后的值存放在t中,所以返回值应为return(t);。请编写函数fun,它的功能是:求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。#includevoidfun(int*a,int*n)main(){intaa[1000],n,k;fun(aa,&n);for(k=0;k

463if((k+1)%10==0)printf("

464")elseprintf("%5d”,aa[k]);NONO();)参考答案: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;)第29套.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、“ZhangQi"、93、85、87»修改后输出t中的数据应为:10004、"LiJie"ヽ93、85>87〇#include^includestructstudent(longsno;charname[10];floatscore[3];};voidfun(structstudent*b){inti;b_l_=10004;/strcpy(b_2_,“Lijie");}main(){structstudentt={10002,"ZhangQi”,93,85,87};inti;printf(*

465

466Theoriginaldata:

467");printf("

468No:%ldName:%s

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

470");fun(—3—);printf("

471Thedataaftermodified:

472");printf("

473No:%ldName:%s

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

475");}第一处:对学号进行更改,所以应填:ー〉no。第二处:对姓名进行更改,所以应填:ー〉name。第三处:对函数的调用,所以应填:&t。给定程序M0D1LC中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:1axl=—(xO+-)2xO例如,a为2时,平方根值为:1.414214。#include#includedoublefun(doublea,dounlexO){doublexl,y;xl=(xO+a/xO)/2.0;

476if(fabs(xl-xo)>0.00001)y=fun(a,xl);elsey=xl;returny;)main(){doublex;printf(*Enterx:つ;scanf&x);printf("Thesquarerootof%lfis%lf

477”,x,fun(x,1.〇));)第一处:第二个变量定义的保留字double写错。第二处:变量xO错写成xo了。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。^include#defineN12typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n)(}main(){STRECs[N]={{〃GA05”,85},{"GA03”,76},{〃GA02”,69},{"GA04〃,85},{"GA01”,91},{"GA07",72},{"GA08”,64},{"GA06",87},{"GA09〃,60},{"GA11”,79},{"GA12",73},{"GA10”,90}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichishigherthan%7.3f:

478”,n,ave);for(i=0;i

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

480");out=fopen(*c:\\test\\out.dat*,*w*);fprintf(out,”对、n%7.3f

481”,n,ave);for(i=0;i

482",h[i].s);fclose(out);)参考答案: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〇0#include#includestructstudent{longsno;

483charname[10];floatscore[3];};voidfun(structstudenta){structstudentb;inti;b=_1_;b.sno=10002;strcpy(_2_,“LiSi");printf("

484Thedataaftermodified:

485");printf("

486No:%ldName:%s

487Scores:",b.sno,b.name);for(i=0;i<3;i++)printf("%6.2f〃,b._3_);printf("

488");}main(){structstudents={10001,"ZhangSan",95,80,88);inti;printfi'

489

490Theoriginaldata:

491");printf(*

492No:%ldName:%s

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

494");fun(s);第一处:要修改的结构体变量是由形参a来传递的,所以应填:ao第二处:对结构体中的成员name进行替换,所以应填:b.name〇第三处:分别输出结构体中的成绩,所以应填:score[i]o给定程序M0DH.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。*includevoidfun(char*s){inti,j;for(i=j=0;s[i]!二‘、〇’;i++)if(s[i]!='c')s[j]=s[i];s[i]='\0';}mainO{chars[80];printf(*Enterastring:");gets(s);printf("Theoriginalstring:");puts(s);fun(s);printf("Thestringafterdeleted:");puts(s);printf("

495

496");}第一处:新字符串的位置值是由变量j来控制的,但程序中字符赋值后没有对j进行增量的语句,所以应改为:s[j++]=s[i];。第二处:对新字符串添加字符串结束符,由于程序中使用变量j对新字符串来控制的,所以应改为:s[j]=0;。假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:将字符串中的前导・号全部移到字符串的尾部。函数fun中给出的语句仅供参考。例如,字符串中的内容为:*******A*BC*DEF*G****,移动后,字符串中的内容应当是:A*BC*DEF*G***********〇在编写函数时,不得使用C语言提供的字符串函数。#includevoidfun(char*a)(char*p,*q;intn=0;P=a;

497while(*p==,*')/・统计串头'*'个数n*/{n++;p++;}q=a;/・向前复制字符串,请填写相应的语句完成其功能・/for(;n>0;n―)/・在串尾补n个'*'*/*q++=,ボ;*q='\0';)main(){chars[81],*p;intn=0;printf("Enterastring:

498");gets(s);fun(s);printf("Thestringaftermoveing:

499");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码大小递增排序,并将排序后下标为奇数的字符取出,存入形参P所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda»执行后p所指字符数组中的字符串应为:aachjlswo^includevoidfun(char*s,char*p){inti,j,n,x,t;n=0;for(i=0;s[i]!=,\0';i++)n++;for(i=l;is[j])t=j;if(t!=i)

500{x=s[i];s[i]=s[t];s[t]=x;})for(i=l,j=0;i

501Theoriginalstringis:%s

502',s);fun(s,p);printf(*

503Theresultis:%s

504*,p);}第一处:取外循环的控制变量,所以应填:t=io第二处:内循环的起始变量,应该是i+2,所以应填:i。第三处:新字符串处理完后应添加字符串结束符,所以应填:‘、。'。给定程序MODILC中函数fun的功能是:用下面的公式求”的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:n1111-+-+4357例如,程序运行后,输入0.0001,则程序输出3.1414。#include#includefloatfun(floatnum){ints;floatn,t,pi;t=l;pi=0;n=l;s=l;while(t>=num)(pi=pi+t;n=n+2;s=—s;t=s%n;)pi=pi*4;returnpi;}main(){floatnl,n2;printflEnterafloatnumber:");scanf("%f”,&nl);n2=fun(nl);printf("%6.4f

505”,n2);)第一处:要判断t的最后ー项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)〇

506第二处:t是s除以n的值,而不是取余数,所以应改t=s/n;。请编写ー个函数voidfun(chara[],charb[],intn),其功能是:删除ー个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为:Wordottinclude#include^defineLEN20voidfun(chara[],charb[],intn)(}main(){charstrl[LEN],str2[LEN];intn;printflEnterthestring:

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

508”,str2);N0N0();)参考答案:voidfun(chara[],charb[],intn){strncpy(b,a,n);b[n]=0;strcat(b,a+n+1);)※※派※※※※※※※※※※※※※※※※※※※※※※第32套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include#include#defineN5WdefineM10voidfun(char(*ss)—1—,intk){inti=0;while(i<_2—){ss[i][k]=_3_;i++;})main(){charx[N][M]={"Create","Modify","Sort","skip","Delete"};inti;

509printf("

510Theoriginalstring

511

512");for(i=0;i

513");fun(x,4);printf("

514Thestringafterdeleted:

515

516");for(i=0;i

517");}第一处:函数的定义,试题中已用M作为字符串的长度,所以应填:Mo第二处:利用while循环,分别对字符串数组中的每个字符串置字符串结束符,程序中已经给定了N个字符串,所以应填:No第三处:置字符串结束符,所以应填:〇(或’、〇’)。给定程序MODILC中函数fun的功能是:根据以下公式求ワ值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。n1121231234—=1+—+—X—+—X—X—+—X—X—X-F23353573579#include#includedoublefun(doubleeps){doubles,t;intn=l;s=0.0;t=0;while(t>eps){s+=t;t=t*n/(2*n+l);n++;}return(s);}main(){doublex;printf(*

518Pleaseenteraprecision1つ;scanf&x);printf(*

519eps=%lf,Pi=%lf

520

521”,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语言提供的字符串函数。ttincludevoidfun(char*a,intn)

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

523");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf("rFhestringafterdeleted:

524");puts(s);NONO();)参考答案:voidfun(char*a,intn)(inti=0,j,k=O;while(a[k]==,**)k++;/*k为统计・字符个数・/if(k>n)(i=n;j=k;for(;a[j]!=0;j++)a[i++]=a[j];a[i]=0;}}第33套:给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,冃标文件名放在变量tfname中。#include#includeintfun(char*source,char*target){FILE*fs,*ft;charch;if((fs=fopen(source,1))==NULL)return0;if((ft=fopen(target,"w"))ニニNULL)return0;printf("

525Thedatainfile:

526");ch二fgetc(fs);while(!feof(2))

527{putchar(ch);fputc(ch,3);ch=fgetc(fs);)fclose(fs);fclose(ft);printf("

528

529");return1;}main(){charsfname[20]="myfilei",tfname[20]="myfile2";FILE*myf;inti;charc;myf=fopen(sfname,"w");printf(*

530Theoriginaldata:

531");for(i=l;i<30;i++){c=,A*+rand()%25;fprintf(myf,*%c*,c);printf(*%c*,c);}fclose(myf)jprintfC'

532

533");if(fun(sfname,tfname))printf("Succeed!");elseprintf("Fail!");}第一处:要求打开ー个读方式的源文件,因此可以填上"r"或"r+"。打开读文件操作的流是fs。第二处:用while循环来判断源文件是否已读到文件结束符,intfeof(FILE*stream)»因此,此处只能填写fs。第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft,因此,此处只能填写fto给定程序M0DI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:8642〇#includevoidfun(longs,long*t){intd;longsl=l;*t=0;while(s>0){d=s%10;if(d%2=0){*t=d*sl+*t;si*=10;}s\=10;main(){longs,t;printf("

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

535",t);}第一处:判断相等的条件是二。

536第二处:整除的符号是/。函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的ト位和个位数依次放在c数的卜位和千位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45,b=12时,调用该函数后,c=5142o^includevoidfun(inta,intb,long*c)(}main(){inta,b;longc;printf("Inputa,b:;scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld

537",c);NONO();)参考答案:voidfun(inta,intb,long*c)(*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);)※※※※※※※※※※※※※※※※※※※※※※※派※第34套:用筛选法可得到2〜n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成〇):接着从数表中找下ー个非O数,并从数表中删去该数的所有倍数;依此类推,直到所找的下ー个数等于n为止。这样会得到ー个序列:2,3,5,7,11,13,17,19,23,……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。#includeintfun(intn){inta[10000],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i

538Theprimenumberbetween2to%d

539",n);for(i=2;i<=n;i++)if(a[i]!=3){count++;printf(count%15?*%5d*:*

540%5d*,a[i]);}returncount;}

541main(){intn=20,r;r=fun(n);printft

542Thenumberofprimeis:%d

543',r);}第一处:所有2的倍数的数从数表中删去,所以应填:a[i].第二处:找出下一个不是的a[i],所以应填:a[i]o第三处:输出素数,只要判断a[i]不是〇就是素数,所以应填:〇〇给定程序M0DI1.C中函数fun的功能是:为ー个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。#include♦♦includevoidfun(inta,int*b,int*c){inti,j,d,y;for(i=3;i<=a/2;i=i+2){Y=1;for(j=2;j<=sqrt((double)i);j++)if(i%j==0)y=0;if(y=l){d==a-i;for(j=2;j<=sqrt((double)d);j++)if(d%j==O)y二〇;if(y=l){*b=i;*c=d;}main(){inta,b,c;do{printf("

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

545

546%d=%d+%d

547”,a,b,c);}第一处:变量y错写成丫。第二处:给变量d进行赋值,所以应改为:d=a-i;o请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。#includedoublefun(intn)()main(){intn;doubles;printf("

548lnputn:");scanf("刎",&n);s=fun(n);printf("

549

550s=%f

551",s);NONOO;参考答案:doublefun(intn)inti;

552doublesum=0.0;for(i=l;i<=n;i++)if(i%5==0IIi%9==0)/・被5或9整除・/sum+=l.0/i;returnsum;)第35套:给定程序中,函数fun的功能是建立一个NXN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为:1111112221123211222111111#include#defineN7voidfun(int(*a)—1—){inti,j,k,m;if(N%2==0)m=N/2;elsem=N/2+l;for(i=0;i

553Theresultis:

554");for(i=0;i

555");第一处:建立一个NXN的矩阵,所以应填:[N]o第二处:j的起始变量值应i。第三处:也应该填写i+1。给定程序M0DI1.C中函数fun的功能是:将十进制正整数m转换成k(2くkく9)进制数,并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。#include#includevoidfun(intm,intk)(intaa[20],i;

556for(i=0;m;i++)(aa[i]=m/k;m/=k;)for(;i;i-)printf("%d”,aa[i]);)main()(intb,n;printf("

557Pleaseenteranumberandabase:

558");scanf("%d%d”,&n,&b);fun(n,b);printf("

559");)第一处:应该取模而不是整除,所以应为:aa[i]=m%k;o第二处:输出aa的位置不正确,所以应为:printf('%d”,aa[iT])编写ー个函数,从num个字符串中找出最长的ー个字符串,并通过形参指针max传回该串地址。(注意:主函数中用・***作为结束输入的标志,函数fun中给出的语句仅供参考。)#include#includefun(char(*a)[81],intnum,char**max){inti,k=0,len,maxlen;/♦k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长・/maxlen=strlen(a[k]);for(i=l;i

560n=i;fun(ss,n,&ps);printf("

561max二%s

562”,ps);NONO();)参考答案:fun(char(*a)[81],intnum,char**max){inti,k=0,maxlen;/*k为a数组中最长串所在元素的下标,初始为〇,maxlen为其串长・/maxlen=strlen(a[k]);for(i=l;iくnum;i++)(/*以下完成查找最长串・/if(strlen(a[i])>maxlen){maxlen=strlen(a[i]);k=i;)}*max=a[k];}※※※※※※※※※※※※※※※※※※※※※※※派※第36套:给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。#include^include^defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(int*a);voidoutlist(SLIST*);voidfun(SLIST*h,int*n){SLIST*p;1=0;p二h->next;while(p){(*n)++;P=P">一2一;))main(){SLIST*head;

563inta[N]={12,87,45,32,91,16,20,48),num;head=creatlist(a);outlist(head);fun(3,&num);printf("

564number二%d

565”,num);}SLIST*creatlist(inta[]){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!

566");else{printf("

567Head");do{printf(“ー)%d”,p->data);p=p->next;}while(p!=NULL);printf("->End

568");})第一处:对n所指的存储单元进行初始化,所以应填:*n。第二处:指向p的下ー个结点,所以应填:nexte第三处:函数调用,在主函数中已经给出了head,所以应填:heado给定程序M0DILC中函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为:"abcdabfabcdx”,t中的内容为:〃ab”时,输出结果应是:abcdxo当字符串中的内容为:"abcdabfabcdx”,t中的内容为:"abd”时,则程序输出未找到信息:notbefound!〇^include#includechar*fun(char*s,char*t)(char*p,*r,*a;a二Null;while(*s){p=s;r=t;while(*r)if(r=p)

569{r++;p++;}elsebreak;if(*r==‘、〇')a=s;s++;}returna;}main()(chars[100],t[100],*p;printf(*

570PleaseenterstringS:scanf("%s”,s);printf(*

571Pleaseentersubstringtscanf("%s”,t);p=fun(s,t);if(p)printf〈'nTheresultis:%s

572',p);elseprintf('

573Notfound!

574);)第一处:指向空指针错误,Null应NULL。第二处:比较指针位置的值是否相等,所以应改为:if(*rニニ・p)。函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:”246”。#include#includevoidfun(char*s,chart[])main()(chars[100],t[100];printf("

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

576Theresultis:%s

577",t);NONO();}参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=0;i

578所有字符串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长小于M。程序中库函数strstr(si,s2)的功能是在si串中查找s2子串,若没有,函数值为0,若有,为非。。^include#includettdefineN5配efineM15voidfun(char(*ss)[M],char*substr){inti,find=O;for(i=0;i<_1_;i++)if(strstr(ss[i],_2_)!=NULL){find=l;puts(ss[i]);printf('

579");}if(find==_3_)printf("

580Don'tfound!

581^);)main(){charx[N][M]={"BASIC","Clangwage","Java","QBASIC","Access"),str[M];inti;printf("

582Theoriginalstring

583

584");for(i=0;i

585");printf("

586Enterastringforsearch:"ノ;gets(str);fun(x,str);}第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:No第二处:查找子串,子串由形参substr传递,所以应填:substro第三处:试题要求,若没有找到,函数值为〇,所以应填:〇〇给定程序MODI1.C中函数fun的功能是:求三个数的最小公倍数。例如,给主函数中的变量xl、x2、x3分别输入15112,则输出结果应当是:330o#includefun(intx,y,z){intj,t,n,m;j=1;t=j%x;m=j%y;n=j%z;while(t!=0||m!=0||n!=0){j=j+1;t=j%x;m=j%y;n=j%z;)returni;main(){intxl,x2,x3,j;printf("Inputxlx2x3:");scanf("%d%d%d",&xl,&x2,&x3);

587printf("xl=%d,x2=%d,x3=%d

588”,xl,x2,x3);j=fun(xl,x2,x3);printiifheminimalcommonmultipleis:%d

589',j);}第一处:函数中形参的定义不正确,应改为:fun(intx,inty,intz)〇第二处:程序中三个数的最小公倍数是用j处理的,所以应返回j的值。假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:只删除字符串前导和尾部的・号,串中字母之间的・号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导・号的个数,形参e给出了字符串中最后・号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:A*BC*DEF*G<,#includevoidfun(char*a,intn,inth,inte){)main(){chars[81],*t,*f;intm=0,tn=0,fn=0;printf("Enterastring:

590*);gets(s);t=f=s;while(*t){t++;m++;}t-Iwhile(*t-*'){t-;tn++;}while(*f==){f++;fn++;}fun(s,m,fn,tn);printf(*Thestringafterdeleted:

591");puts(s);NONO();}参考答案:voidfun(char*a,intn,inth,inte)(char*p=a;intj=0,len=0;while(*p){p++:len++;}while(j〈len-h-e){a[j]=a[h+j];j++;}'a[j]=0;}第38套:函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[l],a[2],……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7»返回值为5。

5920^include^defineN9intfun(inta[],intn){inti,j;j二〇;for(i=0;i

593Theoriginaldata:

594");for(i=0;i

595");n=fun(b,N);printf〈XnThenumberofodd:%d

596",n);printf(*

597Theoddnumber:

598");for(i二〇;i

599");}第一处:判断a[i]是否是奇数,若是,则仍保留在原数组中a[j],所以应填:1。第二处:数组a中的元素位置由j来控制,每增加一个元素,贝む加1,所以应填:j++。第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:j。给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给numl和num2分别输入49和21,则输出的最大公约数为7;若给numl和num2分别输入27和81,则输出的最大公约数为27。#includeintfun(inta,intb){intr,t;if(a

600

601*,numl,num2);a=fun(numl,num2);

602printf("Themaximuncommondivisoris%d

603

604",a);)第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t:〇第二处:返回值错误,应改为:return(b);〇假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:删除字符串中所有的・号。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFGo#includevoidfun(char*a)(}main(){chars[81];printf("Enterastring:

605");gets(s);fun(s);printf("Thestringafterdeleted:

606'z);puts(s);NONO();)参考答案:voidfun(char*a)(intj=0;char*p=a;while(*p){if(*p!='*')a[j++]=・p;P++;}a[j]=0;)第39套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。^include#include#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;for(i=0;i<_1_;i++){len=strlen(ss[i]);if(len<=_2_)strcpy(ss[j++],3—);}returnj;}main(){charx[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};

607inti,f:printf("

608Theoriginalstring

609

610");for(i=0;i

611");f=fun(x,7);printf("Thestringwitchlengthislessthanorequalto7:

612"):for(i=0;i

613");}第・处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N.第二处:串长由形参k来传递,所以应填:k。第三处:如果字符串ss[i]的串长小于k,则该字符串仍存在原字符串数组中,位置由变量j来控制,所以应填:ss[i]。给定程序MODI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则c中的字符串应为:aBcdeFgHo^include#includevoidfun(char*p,char*q,char*c)(intk=1;while(*p!=*q){if(*p<*q)c[k]=*q:elsec[k]=*p;if(*p)p++;if(*q)q++;k++;)}main(){chara[10]="aBCDeFgH",b[10]="ABcd",c[80]=ハ0’};fun(a,b,c);printf("Thestringa:");puts(a):printf("Thestringb:");puts(b);printf("Theresult:");puts(c);}第一处:存放字符串初始位置也是从。开始存放的,由于k是控制c字符串的位置值,所以k值应为〇。第二处:判断两个字符串中是否有字符串结束符产生,所以应改为:while(*pII*q),而不是两字符串中对应位置的值不相等。假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:除了字符串前导的・号之外,将串中其它・号全部删除。在编写函数时,不得使用c语言提供的字符串函数。函数fun中给出的语句仅供参考。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。#includevoidfun(char*a)(inti=0,k;while(a[i]=**)i++;

614k=i+l;while(a[i]!=\0*)/*以下程序段实现非・字符前移・/(}a[i+l]=\0f;)main(){chars[81];printflEnterastring:

615");gets(s);fun(s);printfiThestringafterdeleted:

616);puts(s);N0N0();)参考答案:voidfun(char*a)(inti=0,k;while(a[i]==*3i++;k=i;while(a[i]!=‘、〇')(if(a[i]!='*')a[k++]=a[i];i++;}a[k]二‘、〇';}※※※※※※※※※※※※※※※※※※※※※※※派※第40套:给定程示中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*h,intx){SLIST*p,*q,*s;s=(SLIST*)malloc(sizeof(SLIST));s->data=1;q=h;p=h->next;while(p!=NULL&&x>p->data){q=2;p=p->next;)sー〉next二p;q->next=3;}SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));

617for(i=0;inext=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h-〉next;if(p==NULL)printf("

618ThelistisNULL!

619");else{printf("

620Head");do{printf("ー〉%d”,pー〉data);p=p-〉next;}while(p!=NULL);printf("->End

621");)}main(){SLIST*head;intx;inta[N]={ll,12,15,18,19,22,25,29);head=creat1ist(a);printf("

622Thelistbeforeinserting:

623");outlist(head);printf("

624Enteranumber:");scanf("%d",&x);fun(head,x);printf("

625Thelistafterinserting:

626");outlist(head);)第一处:在函数fun的开始处,已经对结构指针s分配了内存,其中data是ー个整型变量,实际要求填入ー个整型数据。根据本题要求在ー个链表插入一个整型数,该数已通过函数的形参x传入,因此应填X。第二处:使用ー个while循环找出要插入ー个数的位置,在循环体中q实际上保留当前链表p位置的临时变量,如果x〉pー〉data时,那么再移动链表指针到下ー个结果,再进行判断是否符合条件,如果仍大于,则仍q保留链表P的位置。因此,此处应填P。第三处:当找到结点位置后,就要插入这个数,完成插入过程。由于函数体中分配了结构指针S,s的next指针已经指向了p,所以,当前位置q的next指针就应该指向指针s完成链表的链接。因此,此处应填s。给定程序M0DI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:〇〇^includelongfun(longnum)(longk;do{k・二num%10;num\=10;}while(num);return(k);)

627main(){longn;printf('\Pleaseenteranumber:*);scanf(*%ld*,&n);printf("

628%ld

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

630Averagescoreis:%5.2f

631”,aver);NONO();)参考答案:floatfun(float*a,intn)(inti;floatave=0.0;for(i=0;i#defineN10doublefun(doublex[],double*av){inti,j;doubled,s;s=0;for(i=0;i

632Theaverageis:%f

633',av);printf(*m=%5.If",m);printf("

634");)第一处:计算好的平均值通过形参av返回,所以应填:*avo第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。第三处:返回该数,所以应填:x[j]。给定程序M0DH.C中函数fun的功能是:根据整型形参n,计算如下公式的值。例如,若n=10,则应输出:0.617977c#includeintfun(intn){floatA=1;inti;for(i=2;i

635}main(){intn;printf(*

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

637”,n,fun(n));}第一处:函数的返回是浮点型数,所以应改为:floatfun(intn)〇第二处:for的终止条件应是i〈二n。程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m〇例如:若m的值为2,a数组中的值为11971|21814a=|238I则返回主程序后a数组中的值应为2616|456|4512|#include^include#defineN5intfun(inta[][N],intm){)main(){inta[N][N],m,i,j;printf(''*****Thearray*****

638〃);for(i=0;i

639");)dom=rand()%10;while(m>=3);printf("m=%4d

640”,m);fun(a,m);printf("THERESULT

641");for(i=0;i

642");)NONO();)参考答案:intfun(inta[][N],intm)(inti,j;for(i=0;i

643for(j=i;jvoidfun(char*s){inti,j=0,k二〇;chartl[80],t2[80];for(i=0;s[i]!='、0';i++)if(s[i]>=,0'&&s[i]<=,9')(t2[j]=s[i];1;)elsetl[k++]=s[i];t2[j]=0;tl[k]=O;for(i=0;i

644Theoriginalstringis:%s

645',s);fun(s);printf(*

646Theresultis:%s

647*,s);)第一处:t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j++。第二处:利用for循环把tl字符串添加到原字符串s中,所以应填:s[i]=tl[i]。第三处:利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所以应填:J给定程丿冋0DI1.C屮函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。#include#include^defineMAXLINE20fun(char*pstr[6]){inti,j;char*p;for(i=0;i<5;i++){for(j=i+1,j<6,j++)(if(strcmp(*(pstr+i),*(pstr+j))>0){p=*(pstr+i);*(pstr+i)=pstr+j;*(pstr+j)=p;

648main(){inti;char*pstr[6],str[6][MAXLINE];for(i=0;i<6;i++)pstr[i]=str[i];printf("

649Enter6string(lstringateachline):

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

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

652”,pstr[i]);)第一处:for循环语句中缺少分号。第二处:应该把pstr+j位置上的值赋值给・(pstr+i)上,所以应改为:*(pstr+i)二*(pstr+j)请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串:123412132,输入字符为:1,则输出:3。#include#include#defineM81intfun(char*ss,charc)()main(){chara[M],ch;printf("

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

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

655Thenumberofthecharis:%d

656",fun(a,ch));NONO();}参考答案:intfun(char*ss,charc){intent=0;char*p=ss;while(*p){if(*p==c)cnt++;p++;)returnent;)第43套:给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返回一屋ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

657#include#include^defineN5#defineM8intfun(char(*ss)[M],char*t){inti;for(i=0;i<_1—;i++)if(strcmp(ss[i],t)==0)return_2—;return-1;}main(){charch[N][M]二{"if","while","switch","int","for'},t[M];intn,i;printf〈XnTheoriginalstring

658

659");for(i=0;i

660");printf("

661Enterastringforsearch:");gets(t);n=fun(ch,t);if(n==_3_)printf("

662Don*tfound!

663");elseprintf("

664Thepositionis%d.

665",n);)第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:No第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:厶第三处:如果没有发现,则显示没有找到信息,所以应填:-1。给定程序M0DH.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中al放个位数,a2放十位数。#includefun(int*b){intk,al,a2,i=0;for(k=10;k<=55;k++){a2=k/10;al=k-a2*10;if((k%3==0&&a2==5)||(k%3ニニ〇&&al==5)){b[i]=k;i++;})returnk;)main(){inta[100],k,m;m=fun(a);printf(Theresultis:

666");for(k=0;k

667");}第一处:取当前变量k的十位数字上的数,所以应改为:a2=k/10;o第二处:要求统计个数并存入变量i中,最后返回i,所以应改为:returni;。

668假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:将字符串尾部的・号全部删除,前面和中间的・号不删除。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。^includevoidfun(char*a){}main(){chars[81];printfC*Enterastring:

669*);gets(s);fun(s);printf("Thestringafterdeleted:

670");puts(s);N0N0();}参考答案:voidfun(char*a){char*p=a;while(*p)p++;p-;while(*p='ギ)p一;p++;*p=0;}第44套:函数fu;的功能是进行数字字符转换。若形参ch中是数字字符’0'〜‘9’,则'0,转换成'9','1,转换成'8','2,转换成'7',…ハ,,9,转换成'0';若是其它字符则保持不变;并将转换后的结果作为函数值返回。^include1fun(charch)Fif(ch>=0'&&—2—)return'9'"(ch-3);returnch;}main(){charcl,c2;printf("

671Theresult:

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

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

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

675",cl,c2);)第一处:要求返回处理好的字符,所以应填:char〇第二处:判断该字符是否是数字,所以应填:ch*'9'。第三处:只要减去‘0’的ASCII值,即可得到要求的结果,所以应填:’0'。给定程序MODILC中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三

676个字符之后插入一个空格。例如,在调用fun函数之前给a输入字符串:ABCDEFGHUK,调用函数之后,字符数组b中的内容则为:ABCDEFGHIJKO^includevoidfun(char*p,char*b){inti,k=0;while(*p){i=l;while(i<=3&&*p){b[k]=p;k++;p++;i++;}if(*p)(b[k++]ゴ})b[k]ハ0';)main(){chara[80],b[80];printf("Enterastring:つ;gets(a);printf("Theoriginalstring:");puts(a);fun(a,b);printf("

677Thestringafterinsertspace:");puts(b);printf('

678

679");}第一处:把指针p所指的值赋值给b[k]中。第二处:把空格字符赋值给b[k++]中,而不是ー个空格的字符串。N名学生的成绩已在主函数中放入ー个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。#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("->%4.If",p->s);p=p->next;}while(p!=0);printf("

680

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

682",ave);N0N0();

683}参考答案:#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。#includeWdefineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i

684Theoriginaldata:

685");for(i=0;i

686");n=fun(b,N);printf("

687Thenumberofeven:%d

688",n);printfl

689Theeven:

690");for(i=0;i

691");)第一处:判断a[i]是否是偶数,若是,则仍保留在原数组中a[j],所以应填:a[i]%2〇第二处:数组a中的元素位置由j来控制,每增加一个元素,贝リj加1,所以应填:a[j]。第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:j。给定程序M0DILC中函数fun的功能是:按以下递归公式求函数值。厂10(n=l)fun(n)=T1-fun(n-1)+2(n>l)例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。#includefun(n){intc;if(n=l)c=10;elsec=fun(n-l)+2;return(c);1main(){intn;printf(*Entern:");scanf("%d*,&n);

692printf("Theresult:%d

693

694",fun(n));)第一处:形参n没有定义类型,所以应改为:fun(intn)o第二处:判断相等的符号是:。假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:使字符串中尾部的・号不得多于n个;若多于。个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的・号不删除。例如,字符串中的内容为:****A*BC*DEF*G*******,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****:若n的值为7,则字符串中的内容仍为:****A*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。^includevoidfun(char*a,intn)(}main(){chars[81];intn;printf〈Enterastring:

695*);gets(s);printf(*Entern:つ;scanf("d”,&n);fun(s,n);printf("Thestringafterdeleted:

696/z);puts(s);N0N0();}参考答案: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

697for(i=0;iくN-1;i++){k=_1_;for(j=i+l;j

698Thestringaftersortingbylength:

699

700*);for(i=0;i

701Theoriginalstring

702

703");for(i=0;i

704");fun(ch);}第一处:外循环每循环一次,k应保存当前的1值,所以应填:i。第二处:使用内循环对i+1后面的字符串长度进行比较,所以应填:ps[j]o第三处:交换内容,所以应填:tpo已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。例如,当n=10时,程序的输出结果应为:23.197745。#include#includefun(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=sO+si+s2;sum+=sqrt(s);sO=si;si=s2;s2=s;)returnsum}main(){intn;printf("InputN=");scanf("%d",&n);printf("%f

705",fun(n));}第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。第二处:该行缺少分号。

706编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当n=10,x=0.3时,函数值为1.349859。#include^includedoublefun(doublex,intn)(}main(){printf("%f

707”,fun(0.3,10));N0N0();)参考答案:longjc(intn)(longs=1;inti;for(i=1;i<=n;i++)s*=i;returns;)doublefun(doublex,intn)(doubles=1.0,y=x;inti;ford=1;i<=n;i++){s+=y/(double)jc(i);y♦=x;)returns;}※※※※※※※※※※※※※※※※※※※※※※派※※第47套:给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter'a':3timesletter's':3times^include#include#includevoidfun(char*s){intk[26]={0},n,i,max=0;charch;while(*s)

708{if(isalpha(*s)){ch=tolower(_1_);n=ch-'a';k[n]+=_2_;)s++;if(max

709");for(i=0;i<26;i++)if(k[i]==max)printf(*

710letterヽ'%c\':%dtimes

711*,i+'a',k[i]);}main(){chars[81];printf(*

712Enterastring:

713

714);gets(s);fun(s);)第一处:将当前字母转换为小写字母,所以应填:*so第二处:把该字母出现的个数累加到指定的数组中,所以应填:1。第三处:如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填:k[n]〇给定程序MODI1.C中函数fun的功能是:求S的值。例如,当k为10时,函数值应为:1.533852。#include#includevoidfun(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++;}returns}main()(printf("%f

715”,fun(10));}第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。第二处:缺少分号。编写函数fun,它的功能是:计算并输出下列级数和:111S-■++,,,+1X22X3n(n+l)例如,当n=10时,函数值为:0.909091〇#includedoublefun(intn)}mainO/・主函数・/(printf("%f

716”,fun(10));NONO();参考答案:doublefun(intn)(doubles=0.0;inti:

717for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));returns;)※※※※※※※※派※※※※※※※※※※※※※※※※第48套:给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为:abs5defl26jkm8,程序执行后的输出结果为:22。#include#include#includeintfun(char*s){intsum=0;while(*s){if(isdigit(*s))sum+=*s-—1—;—2_;}return_3_;}main(){chars[81];intn;printf(*

718Enterastring:

719

720");gets(s);n=fun(s);printf(*

721Theresultis:%d

722

723",n);)第一处:‘0’字符对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填:480第二处:到字符串下一个位置,所以应填:s++。第三处:返回累加和sum,所以应填:sum。给定程序M0DI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。#includeintfun(intk){intm=0,mc=O,j;while((k>=2)&&(me<10))(if((k%13=0)II(k%17=0)){m=m+k;mc++;}k—;)returnm;main()(printf("%d

724”,fun(500));}第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个=。第二处:经过编译可知,"{"和"}"没有配対,所以在横线处加上"}"。编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为

725函数值返回。例如若n为1000时,程序输出应为:s=153.909064c^include^includedoublefun(intn)(}.mainO/・主函数・/(printf("s=%f

726",fun(1000));NONOO;}参考答案: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所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如,形参s所指的字符串为:Abc@lx56*,程序执行后t所指字符数组中的字符串应为:A@156*o#includeintfun(char*s,char*t){intn=0;while(*s){if(*s<97){*(t+n)=—1—;n++;}_2_;}*(t+n)=O;return_3—;}main(){chars[81],t[81];intn;printf('

727Enterastring:

728,z);gets(s);n=fun(s,t);printf(*

729Thereare%dletterwhichASCIIcodeislessthan97:%s

730”,n,t);}第一处:把符合条件的当前字符存放到t字符串中,所以应填:*So第二处:到字符串下ー个位置,所以应填:s++。第三处:返回符合条件的字符个数n,所以应填:n。给定程序MODI1.C中函数fun的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763所得平均值为:195.838745,在平均值以上的实数个数应为:5

731#includeintfun(floatx[],intn){intj,c=0,floatxa=0.0;for(j=0;j

732”,xa);for(j=0;jxa)c++;returnc;}main(){floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};printf("%d

733”,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文件中。ttincludefloatfun(inttn,intn)(}mainO/・主函数・/(printf("P=%f

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

735voidfun(int(*t)1){inti,j;for(i=l;i

736Theoriginalarray:

737*);for(i=0;i

738");)fun(t);printf(*

739Theresultis:

740");for(i=0;i

741");))第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]o第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]o第三处:右上三角元素置为〇,所以应填:t[j][i]o给定程序MODILC中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)Wfj1〇其中x和y的值不等,z和y的值不等。例如,当x的值为9、y的值为11、z的值为15时,函数值为-3.50〇^include#include#include^defineFU(m,n)(m/n)floatfun(floata,floatb,floatc){floatvalue;value=FU(a+b,a-b)+FU(c+b,c-b);Return(Value);}main(){floatx,y,z,sum;printf(*Inputxyz:");scanf(*%f%f%f*,&x,&y,&z);printf(*x=%f,y=%f,z=%f

742”,x,y,z);if(x==yIIy==z){printf(*Dataerror!

743*);exit(0);}sum=fun(x,y,z);printf("Theresultis:%5.2f

744",sum);)第一处:define定义错误,所以应改为:^defineFU(m,n)((m)/(n))〇第二处:return错写成Return,变量value错写成Value。

745规定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:将字符串中的前导・号全部删除,中间和尾部的・号不删除。例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****O在编写函数时,不得使用C语言提供的字符串函数。#includevoidfun(char*a){}main(){chars[81];printf(Enterastring:

746*);gets(s);fun(s);printf("Thestringafterdeleted:

747/Zノ;puts(s);N0N0();)参考答案:voidfun(char*a)(intj=0;char*p=a;while(*p=,*,)p++;while(*p){a[j++]=*p;p++;)a[j]=0;}※※※※※※※※※※※※※※※※※※※※※※※派※第51套:给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.»函数的返回值为6。#includeintfun(char*s){intn=0,flagニ〇;while(*s!=‘、〇'){if(*s!=,'&&flag==0){_1_;flag=l;)if(*sニニ’')flag=_2_;_3_;)returnn;)main(){charstr[81];intn;printf("

748Enteralinetext:

749*);gets(str);n二fun(str);printf('

750Thereare%dwordsinthistext.

751

752",n);}解题思路:本题是统计字符串中包含的单词个数。第一处:单词个数用变量n来统计,当当前字母不是空格且flag状态标志为。时,则单词数就加1,将状态标志flag置为1,所以应填:n++»

753第二处:当当前字符是空格时,flag状态标志置。,所以应填:0。第三处:到字符串下一个位置,所以应填:S++o给定程序MOD".C中函数fun的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:80.5607290.59851.58864则低于平均分的学生人数为:4(平均分为:75.5625)«#include^defineN20intfun(float*s,intn,float*aver){floatave,t=0.0;intcount=0,k,i;for(k=0;k

754Pleaseenterm:);scanf("%d",&m);printf(

755Pleaseenter%dmark:

756',m);for(i=0;i

757Thenumberofstudents:%d

758",fun(s,m,&aver));printf("Ave=%f

759",aver);}解题思路:第一处:应求累加和,而不赋值,所以应改为t+=s[k];。第二处:ave不需要取地址,直接赋给・aver就可以了。请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980#includeintfun(int*s,intt,int*k)(}main()inta[10]={876,675,896,101,301,401,980,431,451,777},k;fun(a,10,&k);printf("%d,%d

760”,k,a[k]);N0N0();

761)解题思路:本题是考察考生如何在指定的数组找出最大元素值的下标,通过形参・k返回到主程序中。给出的程序是使用for循环语句进行处理的,在循环之前,首先把数组的第一个元素值赋给最大值变量max,位置pos为〇,然后通过循环依次判断下一元素值是否大于最大值max,如果大于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后执行语句*k二pos就可以实现返回了。参考答案:intfun(int*s,intt,int*k)(inti,pos=0,max=*s;for(i=1;i^defineN4voidfun(int(*t)[N]){inti,j,x;for(i=0;i<1;i++){x=t[i][2];for(j=N-l;j>=l;j-)t[i][j]=t[i][j-1];t[i][_3_]=x;}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf(,zTheoriginalarray:

762zz);for(i=0;i

763printf(*

764Theresultis:

765");for(i=0;i

766");)}解题思路:第一•处:函数fun是对NXN矩阵进行操作,for循环的终止值为N。第二处:把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:N-lo第三处:第1列元素值使用x替换,由于C语言的下标是从。开始的,所以应填:〇〇例如,若q的值为:50.0,则函数值为:49.394948。#includedoublefun(doubleq){intn;doubles,t;n=2;s=2.0;while(s<=q)(t=s;s=s+(n+l)/n;n++;)printf("n=%d

767,n);returns;}main(){printf("%f

768”,fun(50));)解题思路:第一处:如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以应改为:s+=(float)(n+l)/n;o第二处:返回结果错误,应改为:returnt;。编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的ー个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(l)=lF(n)=F(n—1)+F(n—2)例如:当t=1000时,函数值为:1597。^include#includeintfun(intt)(}main()/・主函数・/{intn;n=lOOO;printf(*n=%d,f=%d

769*,n,fun(n));NONO();

770)解题思路:本题是考察考生用递推算法来求出斐波那契数列中每项的值。给出的程序就是用变量f、fO和fl来表示递推的过程,给变量fO和fl最初分别置数列中第1项和第2项的值〇和1,然后进入循环,执行语句f=fO+fl;将所得和值存入ド中,这就是数列的第3项,把门的值移入川中,将f的值移入fl中,为求数列的下一列作好准备;接着进入下一次循环,通过语句f=fO+fl求得数列的第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;t=_1—;n=1;do{n++;t*=(T.0)*x/—2_;f+=t;}while(3>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printf(*

771Theresultis:

772");printf("x=%-12.6fy=%-12.6f

773”,x,y);}解题思路:第一处:根据公式可知,变量t的值为X。第二处:根据公式可知,此处应该除以n,所以应填:no第三处:根据试题中条件的要求,所以应填:fabs(t)o给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。#include

774longfun(intx,inty,long*p){inti;longt二1;for(i=l;i

775lnputxandy:〃);scanf("%ld%ld”,&x,&y);t=fun(x,y,&r);printf('

776

777x二%d,y=%d,r=%ld,last二%ld

778

779”,x,y,r,t);)解题思路:第一处:错误在for循环语句上,根据试题要求,终止条件应该是i«y。第二处:要取低3位的值时,应模1000取余数,而不是整除1000取商。例如,在主函数中从键盘给x输入0.21后,输出为:s二L100000。^include#includedoublefun(doublex)()main(){doublex,s;printf("Inputx:");scanf("%lf",&x);s=fun(x);printf("s=%f

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

781※※※※※※※※※※※※※※※※※※※※※※※派※第54套:给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。#include^include^defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(int*);voidoutlist(SLIST*);intfun(SLIST*h){SLIST*p;intsニ〇;p=h->next;while(p)(s+=p->_1_;P=p->一2—;)returns;)main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48);head=creatlist(a);outlist(head);/printf('

782sum二%d

783”,fun(3));SLIST*creatlist(intaロ){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!

784");else{printf("

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

786*);

787解题思路:本题是计算出带有头结点的单向链表中各结点数据域中值之和。第一处:累加数据域中的值,所以应填:datao第二处:指定p的下ー个指针,所以应填:next〇第三处:函数调用,在主函数中已经给出了head,所以应填:head〇给定程序M0DILC中函数fun的功能是:将s所指字符串中出现的与tl所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:“abcdabfab”,tl所指子串中的内容为:〃ab”,t2所指子串中的内容为:〃99”时,结果在w所指的数组中的内容应为:〃99cd99f99”。#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='、〇'){a=w;r=t2;while(*r){*a=*r;a++;r++w+=strlen(t2);}elsew++;}}main()(chars[100],tl[100],t2[100],w[100];printf(*

788PleaseenterstringS:");scanf('%s”,s);printf('

789Pleaseentersubstringtl:");scanf("%s”,tl);printf(*

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

791Theresultis:%s

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

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

794#include#includevoidfun(char*s,chart[])(}main()(chars[100],t[100];printf("

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

796Theresultis:%s

797",t);N0N0();)解题思路:本题是从ー个字符串按要求生成另ー个新的字符串。我们使用for循环语句来解决这个问题。参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=1;i#include^includeintfun(char*s){char*lp,*rp;lp=_1_;rp-s+strlen(s)-l;while((toupper(*lp)==toupper(*rp))&&(lp

798\'%s\isaPalindrome.

799

800〃,s);elseprintf("

801、%s\isn'taPalindrome.

802

803*,s);}解题思路:本题是判断字符串是否是“回文”。第一处:根据函数体fun中,对变量Ip的使用可知,Ip应指向形参s,所以应填:s。第二处:rp是指向字符串的尾指针,当每做一次循环rp指向就要指向前一个字符,所以应填:第三处:当1P和rp相等时,则表示字符串是回文并返回1,否则就返回〇,所以应填:return〇〇给定程序M0DI1.C中fun函数的功能是:求出以下分数序列的前n项之和。23581321——,——,——,——,——,——,1235813和值通过

804函数值返回main函数。例如,若n=5,则应输出:8.391667〇#includefun(intn){inta=2,b=1,c,k;doubles=0.0;for(k=1;k<=n;k++){s=s+1.0*a/b;c=a;a+=b;b+=c;return(s);main(){intn=5;printf("

805Thevalueoffunctionis:%lf

806*,fun(n));}解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double或float等定第二处:根据公式可知,在for循环内b的值应是c。请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。函数fun中给出的语句仅供参考。ttincludevoidfun(intm,intk,intxx[])(inti,j=l,t=m+l;while(j<=k)(/・以下完成判断素数,并存放到数组xx中・/mainO(intm,n,zz[1000];printf('

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

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

809※※※※※※※※※※※※※※派※※※※※※※※※※第56套:给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用ー1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。〇#include#include#includevoidWriteText(FILE*);voidReadText(FILE*);main(){FILE*fp;if((fp二fopen("myfile4.txt","w"))ニニNULL){printf("openfail!!

810");exit(0);}WriteText(fp);fclose(fp);if((fp=fopenCzmyfile4.txt","r"))==NULL){printf("openfail!!

811");exit(0);}ReadText(fp);fclose(fp);)voidWriteText(FILE—1—){charstr[81];printf("

812EnterstringwithTtoend:

813");gets(str);while(strcmp(str,"-1")!=0){fputs(2,fw);fputs("

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

815Readfileandoutputtoscreen:

816");fgets(str,81,fr);while(!feof(fr)){printf("%s",3);fgets(str,81,fr);}解题思路:本题要求是把键盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:要求填写文件流的自变量名,在这个函数中,已有的语句fputs("

817",fw);分析可知:由于文件流变量fw在函数体没有定义过,所以本处应填・fw或fw[].第二处:通过while循环语句,把键盘上输入的内容,要写入到指定的文件中,键盘上输入的内容已存入字符串str变量中,因此,本处应填写str。第三处:要把已存入文件中的内容,再从文件中读出且己存入字符串变量str中,最后在屏幕显示出来,因此,此处应填写str。

818给定程序MOD".C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:7531。#includevoidfun(longs,longt){longsl=10;#t=s%10;while(s>0){s=s/100;#t=s%10*si+*t;si=sl*100;main(){longs,t;printf(*

819Pleaseenters:");scanf(“机d”,&s);fun(s,&t);printf("Theresultis:%ld

820",t);)解题思路:第一处:在函数fun中使用了・t,但在函数定义时没有使用・t,所以应改为:voidfun(longs,long*t)〇第二处:每循环一次,si的值就乘以!0,所以应改为:sl=sl*10:〇***************************************************函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12时,调用该函数后,c=1524o#includevoidfun(inta,intb,long*c)()main(){inta,b;longc;printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld

821”,c);NONO();}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(

822♦c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);}※※※※※※※※派※※※※※※※※※※※※※※※※第57套:函数fun的功能是:把形参a所指数组中的最小值放在元素a[〇]中,接着把形参a所指数组中的最大值放在a[l]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3]:其余以此类推。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7i则按规则移动后,数据排列为:1,9、2、8、3,7、4、6、5O形参n中存放a所指数组中数据的个数。注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。#includettdefineN9voidfun(inta[],intn){inti,j,max,min,px,pn,t;for(i=0;i3){min=a[j];pn=j;}}if(pn!=i){t=a[i];a[i]=min;a[pn]=t;if(px=i)px=pn;}if(px!=i+1){t=a[i+l];a[i+l]=max;a[px]=t;}}}main(){intb[N]={9,1,4,2,3,6,5,8,7},i;printf("

823Theoriginaldata;

824");for(i=0;i

825");fun(b,N);printf("

826Thedataaftermoving:

827");for(i=0;i

828");}解题思路:第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给max和min变量,所以应填:a[i!〇第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]o第三处:判断min是否大于a[j],若大于,则把赋值给min,所以应填:a[j]o

829给定程序MODILC中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……例如,若给n输入7,该项的斐波拉契数值为:13。#includelongfun(intg)(switch(g);{case0:return0;case1;case2:return1;}return(fun(g-1)+fun(g-2));}main(){longfib;intn;printf("Inputn:");scanf("%d",&n);printf("n=%d

830",n);fib=fun(n);printf("fib=%d

831

832",fib);}解题思路:第一处:switch后有多余的分号。第二处:case1后没有返回语句,也应该为return1J〇所以应改为:case1:return1;case2:return1;0某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。#include^defineN8typedefstruct{charnum[10];doubles[N];doubleave;}STREC;voidfun(STREC*a)main(){STRECs={"GA005”,85.5,76,69.5,85,91,72,64.5,87.5};inti;fun(&s);printf("The%s'sstudentdata:

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

834”,s.s[i]);printf(zr

835ave=%7.3f

836”,s.ave);NONO();)解题思路:

837本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。参考答案: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^include#include^defineN80voidfun(char*s,intn,char*t){intlen,i,j=0;len=strlen(s);if(n>=len)strcpy(_1);else{for(i=len-n;i<=len-l;i++)t[j++]=—2—;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]o第三处:字符串操作结束,需要到t加一个字符串结束符,所以应填:‘、。‘。给定程序MODI1.C中函数fun的功能是:找出ー个大于形参用且紧随用的素数,并作为函数值返回。#includeintfun(intm){inti,k;

838for(i=m+1;;i++){for(k=2;k

839”,n);}解题思路:第一处:判断素数的条件是一个数i除自身或1除外不被任何数k整除的数,如果ー个数i被另一个数k取模,模值等于零,那么这个不是素数并退出循环体,所以应改为if(i%k二二0)。第二处:如果i不被循环中任一个k值不整除,那么循环结束后k的值应该等于i,所以应改为if(k=i)或if(k>=i)也可以。请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为:35,则有4个数符合要求,它们是:1,5,7,35〇#includevoidfun(intx,intpp[],int*n)(}main(){intx,aa[1000],n,i;print—

840Pleaseenteranintegernumber:

841*);scanf("%d",&x);fun(x,aa,&n);for(i=0;i

842");NONO();解题思路:本题是求出能整除形参X且不是偶数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数的个数通过形参n返回。参考答案:voidfun(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]=90include#defineM3^defineN4voidfun(int(*a)[N]){inti=0,j,find=0,rmax,c,k;

843while((i

844",i,c,a[i][c]);―3—;1if(!find)printf("notfound!

845");}main(){intx[M][N],i,j;printf("Enternumberforarray:

846");for(i=0;i

847");for(i=0;i

848

849");}fun(x);)解题思路:本题是在矩阵中找出在行上最大、在列上最小的那个元素。第一处:找出行上最大的数,并该位置j(列)保存在C中,所以应填:jo第二处:使用while循环语句和控制变量find,如果该数不是列是最小数,那么把find置0,所以应填:〇〇第三处:i是while的控制变量,所以每做一次循环,该数均要加1,所以应填:i++。给定程序MODILC中函数fun的功能是:根据整型形参m的值,计算如下公式的值。111t二12*23*3m*m例如,若m中的值为:5,则应输出:0.536389。#includedoublefun(intm){doubley=1.0;inti;for(i=2;i

850{intn=5;printf("

851Theresultis%lf

852”,fun(n));}解题思路:第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2;i<=m;i++)。第二处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为y-=l./(i*i)om个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为:10、20、30、40〇#include#includeintfun(intscore[],intm,intbelow口)()main(){inti,n,below[9];intscore[9]={10,20,30,40,50,60,70,80,90};n=fun(score,9,below);printf("

853Belowtheaveragescoreare:");for(i=0;iscore[i])below[j++]=score[i];returnj;}※※※※※※※※※※※※※※※※※※※※※※※派※第60套:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。#includetypedefstruct{intnum;charname[10];}PERSON;voidfun(PERSON_1—)(

8542temp;if(std[0].num>std[l].num){temp=std[0];std[0]=std[l];std[l]=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[l];std[l]=std[2];std[2]=temp;})main(){PERSONstd[]={5,"Zhanghu”,2,"WangLi”,6,"LinMin"};inti;fun(—3—);printf("

855Theresultis:

856");for(i=0;i<3;i++)printfC*%d,%s

857”,std[i].num,std[i].name);)解题思路:本题是要求对结构体数组中的三个元素按num成员升序排列。第一处:由于在函数体fun中,已经使用了std变量,所以应填:*stdo第二处:由于temp是存放交换记录的中间变量,所以应填:PERSONo第三处:函数的调用,所以应填:std0给定程序MODILC中函数fun的功能是:将m(lWmWlO)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把3个串:"abc","CD〃,"EF”连接起来,结果是"abcCDEF”。^include#includeintfun(charstr[][10],intm,char*pt){Intk,q,i;for(k=0;k

858Pleaseenterm:");scanf("%d",&m);gets(s[0]);printf(,z

859Pleaseenter%dstring:

860,z,m);for(h=0;h

861Theresultis:%s

862',p);)

863解题思路:第一处:保留字int错写成Int。第二处:字符数组的字符串书写格式错误。程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),函数的功能是:使数组左下三角元素中的值全部置成〇〇例如:a数组中的值为1197110971a=1238则返回主程序后a数组中的值应为1008|456||000|#include#include#defineN5intfun(inta[][N])()main(){inta[N][N],i,j;printf(〃*****Thearray*****

864");for(i=0;i

865");}fun(a);printf("THERESULT

866");for(i=0;i

867");}NONO();}解题思路:本题是利用两重循环给ニ维数组左下三角元素中的值全部置成0。参考答案:intfun(inta[][N]){inti,j;for(i=0;i^includecharfun(charch)(if((ch>=a)—1—(chくニ'z'))returnch-'a'+'A';if(isupper(ch))returnch+'a,-2;return3;}

868main(){charcl,c2;printf("

869Theresult:

870");cl='w';c2=fun(cl);printf("cl=%cc2=%c

871",cl,c2);cl二'W';c2=fun(cl);printf("cl=%cc2=%c

872",cl,c2);cl='8';c2二fun(cl);printf("cl=%cc2=%c

873",cl,c2);解题思路:第一处:判断形参Ch是否是小写字母,所以应填:&&。第二处:小写字母与大写字母的ASC口值相差为32,所以应填:‘A'或65。第三处:返回处理后的形参ch,所以应填:Cho给定程序M0DILC中函数fun的功能是:给ー维数组a输入任意4个整数,并按下例的规律输出。例如输入1、2、3、4,程序运行后将输出以下方阵。4123341223411234#include#defineM4voidfun(inta){inti,j,k,m;printf("Enter4number:");for(i=0;i

874

875Theresult:

876

877");for(i=M;i>0;i—){k=a[M-l];for(j=M-l;j>0;j—)aa[j]=a[j-l];a[0]=k;for(m=0;m

878");}}main(){inta[M];fun(a);printf("

879

880");)解题思路:第一处:在函数fun体中,a是ー个整型数组,所以形参a应定义为指针型整数变量。第二处:变量书写错误,aa应为a。请编写ー个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n的值不大于10000

881例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。#includeintfun(intn)(}main(){intn,sum;printf("Inputn:");scanf("%d",&n);sum=fun(n);printf("sum或d

882”,sum);NONO();}解题思路:本题是考察考生怎样利用循环来求出ー个数n的所有(除1和自身外)因子i并求出它们的和s作为函数值返回。判断因子的条件是:n%i==0,(i是大于1且小于n中所有的正整数)。参考答案:intfun(intn)(ints=0,i;for(i=2;ivoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!='、〇';i++)n++;if(n%2==0)k=n-—1—;elsek=n_2;c=2;for(i=k-2;i>=l;i=i-2)s[i+2]=s[i];s[l]=3;)main(){chars[80]="abcdefgh”;printf("

883Theoriginalstringis:%s

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

885Theresultis:%s

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

887给定程序MODILC中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函数。#includelongfun(inta,intn){intj;longs=0,t=1;for(j=0;j

888Pleaseenteraandn:");scanf("%d%d”,&a,&n);printf("Thevalueoffunctionis:%ld

889",fun(a,n));}解题思路:第一处:根据for循环计算t的值可知,变量t的初值不正确,应为〇。第二处:每次循环都是取t除以10的值,而不是取余数,所以应改t=t/10;。请编写ー个函数voidfun(char*tt,intppロ),统计在tt所指字符串中‘a‘到‘z'26个小写字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000#include#includevoidfun(char*tt,intpp[])()main(){charaa[1000];intbb[26],k,n;printf("

890Pleaseenteracharstring:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26;k++)printf("%d",bb[k]);printf("

891");NONO();)解题思路:本题是考察考生在给定的字符串中统计出26个小写字母的次数并存入到指定的数组中且由形参返回。其中数组下标的位置可以通过某ー个字符的ASCI!值减去97或直接减’a,也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为‘b'-'a'=1,就是实际存放的位置。

892参考答案:voidfun(char*tt,intpp[])char*p=tt;inti;for(i=0;i<26;i++)pp[i]=0;while(*p){if(*p>='a'&&*p<='z')pp[*p-’a']+=1p++;※※※※※※※※※※※※※※※※※※※※※派※※※第63套:给定程序中,函数fun的功能是:有NXN矩阵,根据给定的值,将每行元素中的值均右移m个位置,左边置为〇。例如,N=3,m=2,有下列矩阵123456789程序执行结果为001004007#includettdefineN4voidfun(int(*t)[N],intm){inti,j;for(i=0;i=0;j—)t[i][j+_2—]=t[i][j];for(j=0;j<3;j卄)t[i][j]=O;))oiain(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;printf("

893Theoriginalarray:

894);for(i=0;i

895");}printf(*Inputm(m<=%d):",N);scanf("%d",&m);fun(t,m);printf("

896Theresultis:

897");for(i=0;i

898");

899)解题思路:第一处:for循环变量的增量,所以应填:i++。第二处:由于右移m个位置,所以应填:mo第三处:左边m列均置于0,所以for循环的终止值应为m。给定程序M0DI1.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。若high的值为:100,则函数的值为:732〇#include#includeintfun(inthigh){intsum=0,n=0,j,yes;while((high>=2)&&(n<10){yes=1;for(j=2;j<=high/2;j++)if(high%j==0){yes=0;break|if(yes){sum+=high;n++;}high一;)returnsum;)main()(printf("%d

900”,fun(100));}解题思路:第一处:括号没有匹配。Error:Whilestatementmissing)infunctionfun在函数fun中While语句缺少)。第二处:缺少分号。Error:Breakstatementmissing;infunctionfun在函数fun中break语句缺少;这种题型只要通过编译即可发现程序的错误所在。编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。迭代步骤如下:(1)取xl初值为0.0;(2)x0=xl,把xl的值赋给x0;(3)xl=cos(x0),求出ー个新的xl;(4)若x0-xl的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);(5)所求x!就是方程cos(x)-x=0的ー个实根,作为函数值返回。程序将输出结果Root=0.739085〇#include#includefloatfun()main()printf(*Root=%f

901*»funO);NONOO;}解题思路:本题是根据给定的公式及条件来计算方程的ー个实根。

902参考答案:floatfun()(floatxO,xl=0.0;do{x0=xl;xl=cos(xO);}while(fabs(x0-xl)>0.000001);returnxl;)※※※※※※※※派※※※※※※※※※※※※※※※※第64套:给定程序中,函数fun的功能是:将a所指3X5矩阵中第k列的元素左移到第〇歹リ,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例如,有下列矩阵:123451234512345若k为2,程序执行结果为345123451234512#includeWdefineM3^defineN5voidfun(int(*a)[N],intk){inti,j,p,temp;for(p=l;p<=_1—;p++)for(i=0;i

903

904/z);for(i=0;i

905");}fun(x,2);printf(zzThearrayaftermoving:

906

907zz);for(i=0;i

908");

909解题思路:第一处:外循环P的终止变量的值,试题要求第k列左移,所以应填:ko第二处:矩阵共N列,所以应填:N-lo第三处:把存放在临时变量temp中的值,放到a[i][NT]中,所以应填:temp〇给定程序M0DI1.C中函数fun的功能是:根据形参m的值(2WmW9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入2|若输入4则输出:则输出121123424|2468|36912|481216#include^defineM10inta[M][M]={0};fun(int**a,intm){intj,k;for(j=0;j

910");)}解题思路:第一处:在函数体fun中可知,a是ー个字符串数组型变量,所以应改为:fun(inta[][M],intm)〇第二处:根据输出的结果可知,应改为:a[j][k]=(k+l)*(j+D;。函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12。调用该函数后,c=5241o#includevoidfun(inta,intb,long*c)(}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d/z,&a,&b);fun(a,b,&c);printf("Theresultis:%ld

911",c);N0N0();}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。

912取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10);)※※※※※※※※※※※※※※※※※※※※※※※派※第65套:给定程序中,函数fun的功能是:将a所指4X3矩阵中第k行的元素与第〇行元素交换。例如,有下列矩阵:123456789101112若k为2,程序执行结果为:789456123101112#include#defineN3#defineM4voidfun(int(*a)[N],int—1—){inti,j,temp;for(i=0;i<_2_;i++){temp=a[0][i];a[0][i]=_3_;a[k][i]=temp;main(){intx[M][N]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}},i,j;printf(^Thearraybeforemoving:

913

914*);for(i=0;i

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

916

917");for(i=0;i

918");})解题思路:

919第一处:变量k在函数体fun中已经使用,所以应填:ko第二处:共N行,所以应填:No第三处:变量值交换,所以应填:a[k][i]o给定程序M0DILC中函数fun的功能是:读入一个字符串(长度V20),将该字符串中的所有字符按ASCII码升序排序后输出。例如,若输入:edcba,则应输出:abcdeo#includevoidfun(chart[])(charc;inti,j;for(i=strlen(t);i;i-)for(j=0;j

920Pleaseenteracharacterstring:");gets(s);printf(*

921

922Beforesorting:

923ヽ"%s\,s);fun(s);printf(A

924Aftersortingdecendingly:

925\"%s\"",s);)解题思路:第一处:外for循环的初始值应是strlen(t)-lo第二处:由于是按升序排序,所以应if(t[j]>t[j+l])o请编写ー个函数fun,其功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4EFg”,则应输出"aBc4EFg”。#include#includevoidfun(char*ss)()voidmain(void)(chartt[51];printft

926Pleaseenterancharacterstringwithin50characters:

927z,);

928gets(tt);printf('

929

930Afterchanging,thestring

931ヽ"%s\,tt);fun(tt);printf(*

932becomes

933ヽ"%s\,tt);N0N0();}解题思路:本题是考察考生在字符串指定位置上的字母转换为大写。给出的程序是由i来控制字符串所在的位置,字符串指针p是指向形参ss,再使用while循环语句对p进行控制来判断字符串是否结束,在循环体中使用if条件语句来判断位置i是否为奇数且p所指的当前字符是否为‘a‘至'z’的字母,如果满足这两个条件,则把该小写字母转换成大写字符,小写字母与大写字母的差是32,所以只小写字母减去32,即可得到该字母的大写字母,且转换后的字母仍存放到原字符串的位置上,转换结束后,最后通过形参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所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。^includetypedefstruct{charname[10];intage;}STD;STDfun(STDstd[],intn){STDmax;inti;max=1;for(i=l;i

934Theresult:

935");printf(*

936Name:%s,Age:%d

937”,3,max.age);}解题思路:本题是从结构体中找出年龄最大的记录。第一处:给存放最大者max赋初值,所以应填:*stdo

938第二处:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age。第三处:输出最大者的姓名和年龄,所以应填:max.nameo给定程序MODI1.C中函数fun的功能是:实现两个整数的交换。例如给a和b分别输入:60和65,输出为:a=65b=60#includevoidfun(inta,b){intt;t=b;b=a;a=t;)main(){inta,b;printf("Entera,b:");scanf("%d,%d",&a,&b);fun(&a,&b);printf("a=%db=%d

939",a,b);)解题思路:第一处:函数形参定义不正确,在定义第2个形参时,也应加上into由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int*a,int*b。第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*b;*b=*a;*a=t;〇请编ー个函数voidfun(inttt[M][N],intpp[N]),tt指向ー个M行N列的二维数组,求出ニ维数组每列中最小元素,并依次放入PP所指ー维数组中。二维数组中的数已在主函数中赋予。^include^defineM3^defineN4voidfun(inttt[M][N],intpp[N])main(){intt[M][N]={{22,45,56,30},(19,33,45,38},(20,22,66,40}};intp[N],i,j,k;printf("Theoriginaldatais:

940");for(i二〇;i

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

942Theresultis:

943");for(k=0;k

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

945for(j=1;jtt[j][i]){min=tt[j][i];k=j;}pp[i]=tt[k][i];}}※※※※※※※※※※※※※※※※※※※※※※派※※第67套:给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置〇)。#includeくstdlib.h>SdefineN20voidfun(int*a){inti,x,n=0;x=rand()%20;while(n<_1_){for(i=0;i

946");for(i=0;i

947");}printf("

948

949");}解题思路:第一处:一共产生20个随机数,所以应填:N,第二处:要求产生不同的20个整数,所以采用for循环对已产生的随机数进行比较,是否有相同数,如果有相同,则退出循环体,所以应填:break〇第三处:当退出循环体还是进行判断,i和n的值是否相等,如果相等,则表示该随机整数不重复,可以存放到指定的数组中,所以应填:no给定程序MOD".C中函数fun的功能是:先从键盘上输入ー个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。#includeintfun()(inta[3][3],sum;inti,j;for(i=0;i〈3;i++){for(j=0;j<3;j++)scanf("%d",a[i][j]);}for(i=0;i<3;i++)

950sum=sum+a[i][i];printf("Sum=%d

951”,sum);}main()(fun();}解题思路:第一处:变量sum进行初始化,由于计算累加和,所以应为:sum=0;。第二处:读入整型数,应使用地址读入,所以应为:scanf(-d”,&a[i][j]);。编写程序,实现矩阵(3行3歹リ)的转置(即行列互换)例如,输入下面的矩阵:100200300400500600700800900程序输出:100400700200500800300600900#includeintfun(intarray[3][3])(}main()(inti,j;intarray[3][3]={{100,200,300},{400,500,600),{700,800,900}};for(i二〇;iく3;i++){for(j=0;j<3;j++)printf("%7d”,array[i][j]);printf('

952");)fun(array);printf〈Convertedarray:

953");for(i二〇;iく3;i++){for(j=0;j<3;j++)printf("%7d”,array[i][j]);printf("

954");)NONO();}

955解题思路:本题是解决矩阵的转置问题。参考答案:intfun(intarray[3][3]){inti,j,arr[3][3];memcpy(arr,array,9*sizeof(int));for(i=0;i<3;i++)for(j=0;j<3;j++)array[i][j]=arr[j][i];)※※※※※※※※※※※※※※※※※※※※※※※派※第68套:给定程鬲中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长くN。#include^defineM5^defineN20intfun(char(*ss)1,int*n){inti,k=0,len=0;for(i=0;i*n){—3—;k二i;})return(k);}main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};intn,k,i;printfl

956Theoriginalstringsare:

957");for(i=0;i

958Thelengthoflongeststringis:%d

959,n);printf("

960Thelongeststringis:%s

961",ss[k]);}解题思路:第一处:形参ss的定义,它是ー个字符串数组的定义,其宽度为N,所以应填:No第二处:取第一个字符串的长度赋值给变量・n,所以应填:leno第三处:每循环一次,判断当前字符串的长度是否大于・n,如果大于,贝ヮ*n二len。给定程庁:MODILC中fun函数的功能是:根据形参m,计算如下公式的值。1111t=1+H+++234m例如,若输入5,则应输出2.283333〇♦♦includedoublefun(intm){doublet=1.0;inti;for(i=2;i<=m;i++)t+=1.0/k;}main()(

962intm;printf(A

963Pleaseenter1integernumber:*);scanf("%d",&m);printf(*

964Theresultis%lf

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

966",n);NONO();}解题思路:本题是统计ー个字符串在另ー个字符串中出现的次数。程序流程如下:1.利用strstr函数,首先找到第一个出现的位置。2.利用while循环和strstr依次查找所有出现的位置,并进行统计,并把统计结果作为函数值返回。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);

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

968",n);NONO();)※※※※※※※※※※※※※※※※※※※※※※派※※第69套:给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。例如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。^include#include#include^defineN9longctod(char*s){longdニ〇;while(*s)if(isdigit(*s)){d=d*10+*s-—1_;_2_:)returnd;)longfun(char*a,char*b)(return_3—;}main(){charsl[N],s2[N];do{printf("Inputstringsi:");gets(si);)while(strlen(sl)>N);do{printf("Inputstrings2:");gets(s2);}

969while(strlen(s2)>N);printf("Theresultis:%ld

970",fun(si,s2));)解题思路:第一处:数字字符与其对应的数值相差48,所以应填:480第二处:到字符串下一个位置,所以应填:s++。第三处:返回两个数字字符串经转换成数值的和,所以应填:ctod(a)+ctod(b)。给定程序M0DI1.C中fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入:AAaaBBbl23CCccccd,则应输出结果:upper=6,lower=8〇^includevoidfun(char*s,inta,intb)(while(*s){if(*s>='A'&&*s<='Z')*a=a+l;if(*s>='a'&&*sくニ'z')*b二b+1;s++;)}main(){chars[100];intupper二〇,lower二〇;printf(,z

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

972upper二%dlower二%d

973”,upper,lower);)解题思路:第一处:在等式右边应写・a。第二处:在等式右边应写・b。请编ー个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567,则函数返回!234,570000:实型数为1234.564,则函数返回1234.560000。#includefloatfun(floath)(}main(){floata;printf("Entera:");scanf("%f",&a);printf(ATheoriginaldatais:");printf("%f

974

975",a);printf("Theresult:%f

976",fun(a));NONO();

977)解题思路:本题主要是考察考生保留小数点后两位数并对第三位进行四舍五入。方法是先把这个数乘以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^includeくstdlib.h>^defineN10doublefun(doublex[],double*y){inti,j;doubleav;av=_1_;for(i=0;iav)y[_3_]=x[i];y[j]=T;returnav;)main(){inti;doublex[N],y[N];for(i=0;i

978Theaverageis:%f

979”,fun(x,y));for(i=0;y[i]>=0;i++)printf(*%5.Ify[i]);printf('

980");)解题思路:第一处:计算平均值时,需对变量av进行初始化为〇。第二处:利用for循环计算其平均值,所以应填:x[i]/No第三处:把数组x中元素值大于平均值的数依次存放到形参y所指的数组中其中位置由变量j来控制,所以应填:j++。给定程序M0DILC中函数fun的功能是:根据整型形参m,计算如下公式的值。1111y=++++100*100200*200300*300m*m例如,若m=2000,则应输出:0.0001600

981#includefun(intm){doubley=0,d:inti;for(i=100,i<=m,i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}main(){intn=2000;printf("

982Theresultisfun(n));}解题思路:第・处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double等定义。如果使用float则精度不够,所以在这里不能使用float定义。第二处:在for循环中,两个“;”不可省略,在此把“;”错写成已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。^include#includettdefineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s)main(){STUa[N]={{*A01*,81}({"A02”,89},{"A03",66},{"A04",87},{"A05”,77},{"A06",90},{"A07”,79},{"A08”,61},{"A09",80},{"A10",71}},m;inti;printf("*****Theoriginaldata*****

983");for(i=0;i

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

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

986",m.num,m.s);N0N0();}解题思路:本题考察学生在ー组记录中找出最低分。我们使用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];

987)※※※※※※※※※※※※※※※※※※※※※※派※※第?1套:给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asdl23fgh5##43df,处理后新字符串为:123543asdfgh##df。#include#include#include#includechar*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+l;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i

988Theresultis:%s

989",fun(s));)解题思路:第一处:函数中申请了两个内存空间,其P是存放数字字符串,t是存放非数字字符串,根据条件可知,P依次存放数字字符串,其位置由」来控制,所以应填:上第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:ko第三处:最后返回p的首地址即可,所以应填:Po给定程序M0DI1.C中函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为"abcdefg”,b所指字符串中的内容为"1234”时,c所指数组中的内容应该为4b3c2dlefg〃;而当a所指字符串中的内容为〃1234〃,b所指字符串中的内容为"abcdefg”时,c所指数组中的内容应该为“lg2f3c4dcba”。#include#includevoidfun(char*a,char*b,char*c)(inti,j;charch;i=0;j=strlen(b)-l;while(i>j){ch=b[i];b[i]=b[j];b[j]=ch;i++;j—;}while(*a||*b){

990If(*a){*c=*a;c++;a++;}if(*b){*c=*b;c++;b++;}}*c=0;)main()(charsl[100],s2[100],t[200];printf("

991Entersistring:つ;scanf("版”,si);printf("

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

993Theresultis:%s

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

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

996Theresultis:%s

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

998}※※※※※※※※※※※※※※※※※※※※※※派※※第72套.给定程鬲中,函数fun的功能是计算下式例如,若形参e的值为le-3,函数的返回值2.735678。#includedoublefun(doublee){inti;doubles,x;s=0;i=_l_;x=l.0;while(x>e){—2_;x=⑵0*i-l)/((_3_)*⑵〇・i));s=s+x;}returns;}main(){doublee=le-3;printf("

999Theresultis:紅'n”,fun(e));)解题思路:第一处:根据公式以及下面的程序,可以得出i应为0。第二处:根据公式以及i的初值为0,所以应填:i++。第三处:根据公式要求,所以应填:2.0*i。给定程序M0D1LC中函数fun的功能是:将s所指字符串的正序和反序进行连接,形成•个新串放在t所指的数组中。例如,当s所指字符串为:"ABCD"时,则t所指字符串中的内容应为:"ABCDDCBA”。#include^includevoidfun(chars,chart)inti,d;d=strlen(s);for(i=0;i

1000PleaseenterstringS:");scanf(飞s”,s);fun(s,t);printf("

1001Theresultis:%s

1002”,t);}解题思路:第一处:从函数体fun中可知,两个均为字符指针型变量,应改为:voidfun(char*s,char

1003*t),第二处:字符串结束位置错误,应改为:t[2*d]=0;。函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为:"ABCDEFG12345”,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:"135”。#includeSincludevoidfun(char*s,chart[])(}main()(chars[100],t[100];printf("

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

1005Theresultis:%s

1006",t);NONO();}解题思路:本题是从ー个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=1;idoublefun(doublee){inti,k;doubles,t,x;s=0;k=l;i=2;x=_l_/4;while(x—2—e){s=s+k*x;k=k*(-1);t=2*i;

1007x=_3_/(t*t);i++;)returns;}main(){doublee=le-3;printf("

1008Theresultis:%f

1009”,fun(e));)解题思路:第一处:根据公式,首项应该是3.4,所以应填:3.o第二处:当x大于e时,循环体オ会运行,所以应填:>〇第三处:分子的值是2i+l,所以应填:2*1+1〇给定程序M0DI1.C中函数fun的功能是:求出以下分数序列的前n项之和。和值通过函数值返回到main函数。235813211235813例如,若n=5,则应输出:8.391667c♦♦includefun(intn){inta,b,c,k;doubles;s=0.0;a=2;b=1;for(k=1;k<=n;k++){s=s+(Double)a/b;c=a;a=a+b;b=c;}returns;}main(){intn=5;printf("

1010Thevalueoffunctionis:%lf

1011*,fun(n));}解题思路:第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double或float等定义。第二处:double的第1个字母错写成大写Do请编写ー个函数fun,它的功能是:求出ー个2XM整型二维数组中最大元素的值,并将此值返回调用函数。^include配efineM4fun(inta[][M]){)main(){intarr[2][M]={5,8,3,45,76,-4,12,82);printf(*max=%d

1012,fun(arr));N0N0();)解题思路:

1013本题是求出ー个2XM整型二维数组中最大元素的值。参考答案:fun(inta[][M])(inti,j,max=a[0][0];for(i=0;i<2;i++)for(j=0;jttdefineN8typedefstruct{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i

1014Nopersonwasbornin%d

1015",year);else{printf("

1016Thesepersonswerebornin%d

1017",year);for(i=0;i

1018”,k[i].num,k[i].year,k[i].month,k[i].day);}}解题思路:本题是从给定的人员数据中找出年龄相同的记录存入k中,并返回符合条件的人数。第一处:断结构变量中的编号year是否相等,所以应填:std[i].year。第二处:把符合条件的记录依次存入实参k中,所以应填:std[i]o第三处:返回符合满足条件的人数,所以应填:n。给定程序MODILC的功能是:读入ー个整数k(2WkW10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、Ik#includeIsPrime(intn);{inti,m;m=1;for(i=2;i

1019main(){intj,k;printfl

1020Pleaseenteranintegernumberbetween2and10000:");scanf(%a”,&k);printf("ヽn

1021Theprimefactor(s)of%dis(are):",k);for(j=2;j<=k;j++)if((!(k%j))&&(IsPrime(j)))printf("

1022%4d”,j);printf<

1023");}解题思路:第一处:函数定义的行尾有多余的分号。第二处:条件判断缺少圆括号。已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写函数fun,函数的功能是:找出成绩最高的学生记录,通过形参指针传回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。#include#include#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s)main(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{“A06〃,90},{"A07”,79},{“A08”,61},{“A09〃,80},{“A10”,71}},m;inti;printf("*****Theoriginaldata*****

1024");for(i=0;i

1025”,a[i].num,a[i].s);fun(a,&m);printf("*****THERESULT*****

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

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

1028#include#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k,n[M];chart[N];for(i=0;in[j])2;if(k!=i){strcpy(t,ss[i]);strcpy(ss[i],ss[k]);strcpy(ss[k],3);n[k]=n[i];main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};inti;printf("

1029Theoriginalstringsare:

1030");for(i=0;i

1031",ss[i]);printf(

1032");fun(ss);printf("

1033Theresult:

1034");for(i=0;i

1035",ss[i]);)解题思路:本题是要求按字符串的长短进行排序。第一处:内循环赋初值,应填:i+1。第二处:找出最短的ー个长度,所以应填:m=jo第三处:交换字符串,所以应填:to给定程序M0DI1.C中函数fun的功能是:判断ch中的字符是否与str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。^include#inc1udevoidfun(charstr,charch){while(*str&&*str!=ch)str++;if(*str==ch){str[0]=ch;str[l]=’0';}}main()

1036{chars[81],c;printf("

1037Pleaseenterastring:

1038);gets(s);printf(A

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

1040Theresultis%s

1041',s);}解题思路:第一处:第1个形参应该是字符串类型,所以应改为:voidfun(char*str,charch)〇第二处:应该是判断不相等,所以应改为:if(*str!=ch)。第三次:置字符串结束符错误,所以应改为:str[l]=0;.请编ー个函数fun(char*s),函数的功能是把s所指字符串中的内容逆置。例如:字符串中原有的字符串为:abcdefg)则调用该函数后,串中的内容为:gfedcbao#includettinclude^defineN81fun(char*s)(}main(){chara[N];printf(AEnterastring:);gets(a);printf("Theoriginalstringis:");puts(a);fun(a);printf("

1042");printf("Thestringaftermodified:つ;puts(a);N0N0();}解题思路:本题是考察考生如何对字符串中的字符进行逆序操作。给出的程序使用了一个临时变量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[j];strcpy(s,b);}※※※※※※※※※※※※※※※※※※※※※※派※※第76套:给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为的时,函数返回:-0.204491o^includedoublefun(intn){inti,k;doubles,t;s=0;k=_l_;for(i=l;i<=n;i++){t=_2_;s=s+k*(2*i-l)*(2*i+l)/(t*t);k=k*3;returns;main(){intn=-l;while(n<0){printf("Pleaseinput(n>0):");scanf("%d",&n);}printf("

1043Theresultis:%f

1044",fun(n));)

1045解题思路:第一处:k是用来管理正负号的,公式中第一个值是正数,所以应填:1。第二处:根据公式,t是2i,所以应填:2*io第三处:根据公式,第2个是负数,所以应填:(-1)。给定程序M0DI1.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回〇。在!nain()函数中,若fun返回1输出YES,若fun返回〇输出N0!。#includeintfun(intm){intk=2;while(k<=m&&(m%k))k++if(m=k)return1;elsereturn0;}main(){intn;printf("

1046Pleaseentern:");scanf("%d",&n);if(fun(n))printf("YES

1047");elseprintf("NO!

1048");}解题思路:第一处:语句后缺少分号。第二处:条件判断相等的符号是ニニ。请编写ー个函数fun,它的功能是:找出ー维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。^include#includevoidfun(inta[],intn,int*max,int*d)()main(){inti,x[20],max,index,n=10;randomize();for(i=0;i

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

1050”,max,index);NONO();)解题思路:本题是找出ー维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。具体看参考源程序中的说明。参考答案:voidfun(inta[],intn,int*max,int*d)(inti;*max=a[0];*d=0;/・把数组的第1个元素值赋值给最大值变量・max*/for(i=1;i

1051)}※※※※※※※※※※※※※※※※※※※※※派※※※第7?套.给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输入ー个整数:27638496,函数返回值为:64862»#includeunsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n){t=n%10;if(t%2==_l_)x=_2_+t;n=_3_;}returnx;}main(){unsignedlongn=-l;while(n>99999999||n<0){printf("Pleaseinput(0

1052Theresultis:%ld

1053",fun(n));}解题思路:第一处:判断t是否是偶数,所以应填:〇〇第二处:每操作一次,x必须乘以10,再加t,所以应填:10*x。第三处:每循环一次n的值缩小10倍,所以应填:n/10»给定程序M0D11.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当S中的数为:87653142时,t中的数为:753I〇^includevoidfun(longs,long*t){intd;longsl=l;t=0;while(s>0){d=s%10;if(d%2==0){*t=d*si+*t;si*=10;}s/=10;})main(){longs,t;

1054clrscr();printf(*

1055Pleaseenters:);scanf1%ld”,&s);fun(s,&t);printf("Theresultis:%ld

1056*,t);}解题思路:第一处:由于t是ー个指针变量,赋初值的方式应为:*t=0;o第二处:d%2条件判断时应为不是〇,所以应改为:if(d%2!ニ〇)。编写ー个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把P2所指的字符串连接到P1所指的字符串后。例如,分别输入下面两个字符串:FirstString--SecondString程序输出:FirstString--SecondString#includevoidfun(charpl[],charp2[])main(){charsi[80],s2[40];printftEntersiands2:

1057");scanf("%s%s”,si,s2);printf("sl=%s

1058”,si);printf("s2=%s

1059”,s2);printf("Invokefun(sl,s2):

1060")fun(si,s2);printf("Afterinvoking:

1061");printf("%s

1062",si);NONO();解题思路:本题是不使用字符串库函数来实现两个字符串的连接。参考答案:voidfun(charpl[],charp2[]){char*p二pl;while(*p)p++;while(*p2)*p++=*p2++;*p=0;※※※※※※※※※※※※※※※※※※※※※※※派※第78套:给定程序中,函数fun的功能是:将NXN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若№3,有下列矩阵:123456789交换后为:321456987^include#defineN4voidfun(int1,intn){inti,s;for(2;i++){s=t[i][i];t[i][i]=t[i][n-i-1];t[i][n-l-i]=3;

1063main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf("

1064Theoriginalarray:

1065);for(i=0;i

1066");)fun(t,N);print—

1067Theresultis:

1068");for(i=0;i

1069");)解题思路:第一处:在函数体fun中,已经使用了t整型数组,所以应填:tロ[N]。第二处:要求填写for循环语句的初始值和终止值,所以应填:i=0;iくn°第三处:交换变量的值,根据循环体中的语句可知,S是存放交换的中间变量,所以应填:So由N个有序整数组成的数列已放在ー维数组中,给定程序M0DILC中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回ー1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowくhigh),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,査找结束。#include#defineN10voidfun(inta[],intm){intlow=0,high=N_l,mid;while(low<=high){mid=(low+high)/2;if(ma[mid])low=mid+l;elsereturn(mid);}return(-1);)main(){inti,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;printfCa数组中的数据如下:");for(i=0;i=0)printf("m=%d,index=%d

1070",m,k);elseprintf("Notbefound!

1071");}

1072解题思路:第一处:函数有返回值,不能定义为void,所以应改为:intfun(inta[],intm)〇第二处:if错定成If。假定输入的字符串屮只包含字母和・号。请编写函数fun,它的功能是:除了尾部的・号之外,将字符串中其它・号全部删除。形参p已指向字符串中最后的ー个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG*******〇#includevoidfun(char*a,char*p)main(){chars[81],*t;printf(*Enterastring:

1073");gets(s);t=s;while(*t)t++;t--;while(*t==,*')t-;fun(s,t);printf("Thestringafterdeleted:

1074");puts(s);NONO();)解题思路:本题是考察字符串的操作。1.利用循环扫描出p指针左边的字符是否是'*',如果不是‘*',则依次把这些字符移动原字符串a首地址开始存放。2.把p指针所指的字符串也依次存放到字符串a中。3.最后给字符串a加上结束符。参考答案:voidfun(char*a,char*p){char*q=a;intj=0;while(*q&&q#include#defineM5

1075#defineN20intfun(char(*ss)[N],int*n){inti,k=0,len=N;for(i=0;i<_1_;i++){len=strlen(ss[i]);if(i==0)*n=len;if(len2*n){*n=len;k=i;return(3);}main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};intn,k,i;printf("

1076Theoriginalstringsare:

1077");for(i=0;i

1078Thelengthofshorteststringis:%d

1079",n);printf("

1080Theshorteststringis:%s

1081",ss[k]);}解题思路:第一处:字符串数组共有M个字符串,所以在循环中终止值应填:Mo第二处:由于本题是取长度最短的字符串,加总是保存长度最短值,所以应填:<〇第三处:其中k是保存长度最短的字符串所在的行下标,所以应填:匕给定程序M0D1LC中函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"0#include#includechar*fun(chartt[]){inti;for(i=0;tt[i];i++)if(('a'<=tt[i])||(tt[i]<='z))tt[i]+=32;return(tt);)main()(chartt[81];printf("

1082Pleaseenterastring:"ノ;gets(tt);printf("

1083Theresultstringis:

1084%s",fun(tt));)解题思路:

1085第一处:判断是小写字母,则条件应该是与的关系。第二处:小写字母的ASCII值减去32正好是其大写字母。请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入:17,则应输出:46891012141516〇#includevoidfun(intm,int*k,intxx[])main()intm,n,zz[100];printf("

1086Pleaseenteranintegernumberbetween10and100:);scanf("%d",&n);fun(n,&m,zz);printf(A

1087

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

1089%4d”,zz[n]);N0N0();}解题思路:本题是考察考生如何判断ー个数不是素数,如果所给出的数是非素数且小于指定的数,那么这些数应存放到指定的数组XX中保存,最后由形参XX返回。在给出的程序中函数isP就是判断ー个数是否是素数,若是非素数,则返回1,否则返回〇。本题是用れバ匸2;江!1Iは++)循环语句分别判断i是否为非素数,如果i是非素数,则把该数i存入数组xx中。其中,i是控制变量,m是试题给出的整数。参考答案:#includeintisP(intm)(intj,tag=0;for(j=2;junsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;

1090s=n;i=_1—;while(—2—){t=s%10;if(t%2=0){x=x+t*i;i=_3_;}s=s/10;)returnx;}main(){unsignedlongn=T;while(n>99999999||n<0){printf("Pleaseinput(0

1091Theresultis:%ld

1092”,fun(n));}解题思路:第一处:对变量i赋初值,根据i的使用规则来看,i应等于1。第二处:while循环要求计算后的s应大于〇,所以应填:s。第三处:每循环一次,i要乘以10,所以应填:i*10。给定程序M0DI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。^includettdefineM5intfun(intn,intxx[][]){inti,j,sum=0:printf("

1093The%dx%dmatrix:Xn",M,M);for(i=0:i

1094");)for(i=0;i

1095Thesumofallelementson2diagnalsis%d.",fun(M,aa));}解题思路:

1096第一处:形参必须定义字符串数组的长度,所以应改为:intfun(intn,intxx[][M])〇第二处:由于xx是整型的双维数组,不能用浮点型输出,所以应改为:printf("%d”,xx[i][j]);0函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12o调用该函数后,c=4251»#includevoidfun(inta,intb,long*c)(}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld

1097",c);NONOO;}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);※※※※※※※※※※※※※※※※※※※※※派※※※第81套:给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个・号。例如,形参s所指的字符串为:def35adh3kjsdf7=执行结果为:def3*5*adh3*kjsdf7・。Sincludevoidfun(char*s){inti,j,n;for(i-0;s[i]!='、〇’;i++)if(s[i]>=‘〇'—1_s[i]<='9'){n=0;while(s[i+l+n]!=—2_)n++;for(j=i+n+l;j>i;j-)s[j+l]=—3—;s[j+l]=*':i=i+l;}}main(){chars[80]="ba3a54cd23a";printf("

1098Theoriginalstringis:%s

1099",s);fun(s):printf("

1100Theresultis:%s

1101",s);解题思路:第一处:判断是数字,应该使用“与‘’,所以应填:&&。第二处:判断字符串是否是字符串结束符,所以应填:'、〇‘。第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后ー个位置,所以应填:S[j]o给定程序MODILC中函数fun的功能是:根据整型形参m,计算如下公式的值。1111y=1+++++2*23*34*4m*m

1102例如,若m中的值为:5,则应输出:1.463611c#includedoublefun(intm){doubley=1.0;inti;for(i=2;i

1103Theresultisfun(n));}解题思路:第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2;i<=m;i++)。第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改为y+=l./(i*i)〇请编写函数fun,函数的功能是:实现B=A+A',即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:123147456258789369程序输出:261061014101418#includevoidfun(inta[3][3],intb[3][3])(}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++)printf("%7d",t[i][j]);printf("

1104");NONO();}解题思路:本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。矩阵转置实现上就是原行元素位变为列元素值,原列元素值变为行元素值。参考答案:voidfun(inta[3][3],intb[3][3])(intc[3][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的功能是:找出10〇〜999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。例如,当x值为5时,10〇〜999之冋各位上数字之和为5的整数有:104、113、122、131、140、

1105203、212、221、230、302、311、320、401、410、500.共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。Sincludefun(intx){intn,si,s2,s3,t;n=0;t=100;while(t<=_1_){sl=t%10;s2=(_2_)%10;s3=t/100;if(si+s2+s3==_3_){printf("%d",t);n++;}t++;}returnn;}main(){intx=l;while(x<0){printf("Pleaseinput(x>0):");scanf("%d",&x);}printf("

1106Theresultis:%d

1107",fun(x));}解题思路:第一处:使用while循环找出10〇〜999之间所有整数,所以应填:999。第二处:s2是求十位数字,所以应填:t/10。第三处:各位数字之和为X,所以应填:X。给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642〇^includevoidfun(longs,longt){longsl=10;s/=10;*t=s%10;while(s<0){s=s/100;*t=s%10*sl+*t;si=si*10;main(){longs,t;printf("

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

1109”,t);}解题思路:第一处:在函数fun体中,t是ー个指针型变量,因此定义形参时也应定义指针。第二处:条件应该s>0,所以应改为:while(s>0)o

1110学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。#include^defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STRECa[])(}main(){STRECs[N]={{"GA005”,85},{"GA003”,76},{"GA002”,69},{"GA004”,85},{"GA001”,91},{"GA007”,72},{"GA008”,64},{"GA006”,87},{"GA015”,85},{"GA013”,91},{"GA012”,64},{"GA014〃,91},{"GA0U”,66},{"GA017”,64},{"GA018”,64},{"GA016”,72}};inti;FILE*out;fun(s);printf(^Thedataaftersorted:

1111");for(i=0;i

1112*);printf(*%s%4ds[i].num,s[i].s);)printf("

1113");out=fopen(*c:\\test\\out.dat*,;for(i=0;i

1114");fprintf(out,"%4d”,s[i].s);)fprintf(out,"

1115");fclose(out);}解题思路:本题是按结构体中成绩s进行降序排列,其结果仍存入当前结构体中。参考答案:#include^defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STRECa[])(STRECtmp;inti,j;for(i=0;ifun(intx){intn,si,s2,s3,t;n=_1_;t=100;

1116while(t<=_2_){sl=t%10;s2=(t/10)%10;s3=t/100;if(sl+s2+s3==15){printf(*%d",t);n++;_3_;)returnn;)main(){intx=-l;while(x>999||x<0){printf("Pleaseinput(0

1117Theresultis:%d

1118",fun(x));}解题思路:第一处:符合条件的整数个数n,必须进行初始化,所以应填:〇〇第二处:找出xく999,所以应填:xo第三处:循环控制变量t每循环一次t要加1,所以应填:t++。给定程序MODI1.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。例如:当s所指的字符串为:"ABCDE"时,则t所指的字符串应为:"EDCBAABCDE"。#include#includevoidfun(char*s,char*t)(inti;si=strlen(s);for(i=0;i

1119Pleaseenterstrings:);scanf("%s",s);fun(s,t);printf("Theresultis:%s

1120",t);)解题思路:第一处:变量si没有定义。第二处:在C语言中,字符串开始位置从〇开始的,所以应改为:t[i]=s[sl-i-l];0函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方

1121式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和卜位上。例如,当a=45,b=12o调用该函数后,c=1425o#includevoidfun(inta,intb,long*c)(}mainO/・主函数・/{inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b):fun(a,b,&c);printf("Theresultis:%ld

1122",c);NONO();}解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法:a/10取a个位数字的方法:a%10参考答案:voidfun(inta,intb,long*c)(*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);}※※※※※※※※※※※※※※※※※※※※※※※派※第84套:函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。0000ttincludeintfun(inta,intb,intc)(intt;t=(a>b)?(b>c?b:(a>c?c:—1—)):((a>c)?—2—:((b>c)?c:—3—));returnt;}main(){intal=3,a2=5,a3=4,r;r=fun(al,a2,a3);printf("

1123Themiddlenumberis:%d

1124',r);)解题思路:第一处:给三个数进行比较大小,所以应填:ao第二处:给三个数进行比较大小,所以应填:ao第三处:给三个数进行比较大小,所以应填:b0给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a〜u,

1125则将其转换为其后的第5个字母;若小写字母为v〜z,使其值減210转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母bottinclude#includecharfun(charc){if(c>=Af&&c<=7:)C=C+32;if(c>=,a'&&cく二'u')c=c-5;elseif(c>=,v'&&c<='z')c=c-21;returnc;}main(){charcl,c2;printf("

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

1127

1128Theletter\'%c\'changetoヽ'%c\'

1129',cl,c2);)elseprintf("

1130Enter(A-Z)!

1131");)解题思路:第一处.变量c错写成大写C了。第二处;要求转换为其后的第5个字母,所以应改为:c=c+5;。请编写函数fun,其功能是:计算并输出例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。#include#includedoub1efun(intn)(}main(){intn;doubles;printf(

1132

1133lnputn:");scanf("%d",&n);s=fun(n);printf("

1134

1135s二%f

1136

1137",s);N0N0();}解题思路:本题是根据公式计算多项式的值。注意变量的取值范围。参考答案:doublefun(intn)inti;doublefac=l.0;doublesum=1.0;for(i=2;i<=n;i++){fac+=sqrt(i);sum+=fac;)returnsum;)※※※※※※※※※※※※※※※※※※※※※※※派※

1138第85套:给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为ー个数据块写到名为myfile5.dat的二进制文件中。#include^include#defineN5typedefstruct{intnum;charname[10];chartel[10];JSTYPE;voidcheck();intfun(1*std){_2_*fp;inti;if((fp=fopen(*myfile5.dat","wb"))=NULL)return(0);printf("

11390utputdatatofile!

1140");for(i=0;i

1141");exit(0);}printf("

1142Readfileandoutputtoscreen:

1143");printf(*

1144numnametel

1145");for(i=0;i

1146*,s[i].num,s[i].name,s[i].tel);}fclose(fp):}

1147解题思路:本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:结构定义自变量,因此应填写STYPE。第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp已经给出,这样,此处只能填写FILE。每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以只能填写文件流变量fp。给定程序MOD".C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:"ABCDE”时,则t中的字符串应为:"ABCDEEDCBA”。^includeSincludevoidfun(char*s,char*t){inti,si;si=strlen(s);for(i=0;i<=sl;i++)t[i]=s[i];for(i=0;i

1148Pleaseenterstrings:);scanf('%s”,s);fun(s,t);printf(*Theresultis:%s

1149,t);}解题思路:第一处:变量si错写成了si。第二处:新串t的字符串结束位置不正确,应该是两倍的S1距离。函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45,b=12时,调用该函数后,c=4152o^includevoidfun(inta,intb,long*c)(}main(){inta,b;longc;printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%d

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

1151※※※※※※※※※※※※※※※※※※※※※※※派※第86套:甲乙丙丁四人同时开始放鞭炮,甲每隔tl秒放一次,乙每隔t2秒放一次,丙每隔t3秒放ー次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒。例如,若tl=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。#include^define0K(i,t,n)((1%t==0)&&(i/t

1152*,r);解题思路:第一处:根据定义的要求,所以应填:i。第二处:for循环语句的增量,所以应填:t++。第三处:返回统计次数,所以应填:count。给定程序MODH.C中函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。#include#includevoidfun(inta,intb,intc){if(a+b>c&&b+c>a&&a+c>b){if(a=b&&b==c)return3;elseif(a=b||b==c||a=c)return2;elseretrun1}elsereturn0;)main(){inta,b,c,shape;printf("

1153lnputa,b,c:つ;scanf("%d%d%d”,&a,&b,&c);printf("

1154a或d,b=%d,c二%d

1155”,a,b,c);shape=fun(a,b,c);printf(*

1156

1157Theshape:%d

1158”,shape);}

1159解题思路:第一处:函数有返回值,不能定义为void,所以应改为:intfun(inta,intb,intc)〇第二处:语句后缺少分号。请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270c注意:要求n的值大于2但不大于100。#include#includedoublefun(intn)()main(){intn;doublesum;printf(*

1160

1161lnputn:つ;scanf("%d",&n);sum二fun(n);printf('

1162

1163sum二%f

1164

1165",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){switch(1)(case1:cl++;2;case2:c2++;3;case3:c3++;

1166}n/=10;}}main(){longn=123114350L;fun(n);printf('

1167Theresult:

1168");printf("n=%ldcl二%dc2=%dc3=%d

1169”,n,cl,c2,c3);)解题思路:第一处:取个位数上的数,所以n%10就可以得到个位数。第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填:break〇第三处:同第二处。给定程序M0DI1.C中函数fun的功能是:统计ー个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。#includeintfun(unsignedn,int*zero){intcount=0,max=O,t;do{t=n%10;if(t=0)count++;if(max

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

1171Theresult:max=%dzero二%d

1172”,max,zero);}解题思路:第一处:条件相等符号为=。第二处:由于zero是ー个指针型变量,所以给它进行赋值时应带指针,因此应改为:*zero二count;〇请编写函数fun,其功能是:计算并输出下列多项式的值:111S=1+++・・・+1*21*2*31*2*3*-50例如,在主函数中从键盘给n输入50后,输出为:s=l.718282c注意:要求n的值大于1但不大于100。#includedoublefun(intn)

1173{}main(){intn;doubles;printf(*

1174lnputn:");scanf("%d〃,&n);s=fun(n);printf('

1175

1176s=%f

1177

1178",s);N0N0();1解题思路:本题是根据公式计算多项式的值。注意变量的取值范围。参考答案:doublefun(intn)doubles二〇,t=l;inti;for(i=l;i<=n;i++){t・二i;s+=1./1;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所指数组中数据的个数。0000#include#defineN9voidfun(int1,intn){inti,j,max,min,px,pn,t;for(i=0;ia[j]){min=a[j];pn=j;}}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn==i)pn=px;

1179}if(pn!=i+1){t=a[i+l];a[i+l]=min;a[pn]=t;}}}main(){intb[N]={l,4,2,3,9,6,5,8,7},i;printfl

1180Theoriginaldata:

1181〃);for(i=0;i

1182");fun(b,N);printf("

1183Thedataaftermoving:

1184");for(i=0;i^defineSIZE20fun(double*s,double*w){intk,i;doublesum;for(k=2,i=0;i

1185");for(i=0;i

1186");printf("納.Of",a[i]);}printf("

1187

1188Theresult:

1189");

1190for(i=0;i

1191

1192");}解题思路:第一处:变量名书写错误,应为sum。第二处:由于%的优先级比+优先,所以必须加上括号,因此改为:if((i+l)%5==0)。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。#include^defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}main(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{〃GA04〃,85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06”,87}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf(Z/The%dstudentdatawhichislowerthan%7.3f:

1193”,n,ave);for(i=0;i

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

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

1196%7.3f

1197”,n,ave);for(i=0;ih[j].s){t=h[i];h[i]=h[j];h[j]=t;}for(i=0;i

1198”,h[i].s);fclose(out);)解题思路:本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指的数组中。具体操作请看答案程序中的说明。参考答案:#include#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n)(inti;doubleave=0.0;*n=0;for(i=0;i

1199returnave;/*返回平均值・/)※※※※※※※※※※※※※※※※※※※※※※※派※第89套:给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符・补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长くN。^include#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k=0,n,m,len;for(i=0;in){n=len;1=i;)}for(i=0;i=0;j—)ss[i][m-]=ss[i][j];for(j=0;j

1200Theoriginalstringsare:

1201");for(i=0;i

1202",ss[i]);printf("

1203");fun(ss);printf("

1204Theresult:

1205");for(i=0;i

1206",ss[i]);)解题思路:第一处:使用变量k来保存第几个字符串是最长的字符串,所以应填:ko第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len。第三处:左边用字符・补齐,所以应填:ss[i][j]。给定程序MODIl.C中函数fun的功能是:计算整数n的阶乘。#includedoublefun(intn)(doubleresult=l.0;while(n>l&&n<170)result*=一n;return;}main()(intn;printf〈'Enteraninteger:");scanf("%d",&n);

1207printf("

1208

1209%d!=%lg

1210

1211”,n,fun(n));}解题思路:第一・处:一n是先减1,n一是后减1。本题应该先乘以n,再减1,オ正确。第二处:返回计算结果,所以应填:result〇编写函数fun,函数的功能是:从s所指的字符串中删除给定的字符。同一字母的大、小写按不同字符处理。若程序执行时输入字符串为:turbocandborlandc++从键盘上输入字符:n,则输出后变为:turbocadborladC++如果输入的字符在字符串中不存在,则字符串照原样输出。#includettincludeintfun(chars[],charc)(}main()(staticcharstrロ=,turbocandborlandc++”;charch;printf("原始字符串:%s

1212",str):printf("输入ー个字符:");scanf("%c",&ch);fun(str,ch);printf("str[]=%s

1213",str);N0N0();}解题思路:本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序是引用字符串指针P和while循环语句以及if条件判断语句进行处理的,新字符串的位置是由i来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程序中。参考答案:intfun(chars[],charc)(char*p=s;inti=0;while(*p){if(*p!=c)s[i++]=*p;p++;}s[i]=0;)※※※※※※※※※※※※※※※※※※※※※※派※※第90套:函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。#include

1214intfun(intn){inti,j,count=0;printf("

1215Theprimenumberbetween3to%d

1216”,n);for(i=3;i<=n;i++){for(_1;j=i){count++;printf(count%15?"%5d":"

1217%5d”,i);})returncount;}main(){intn=20,r;r=fun(n);printfl

1218Thenumberofprimeis:%d

1219”,r);}解题思路:第一处:素数的条件是除1和其本身外不能整除该数,所以应填:2。第二处:判断i是否素数,所以应填:i。第三处:如果内循环for中所有数都不能整除i,那么i是素数且j大于等于i,所以应填:j。数列中,第一项值为3,后ー项都比前ー项的值增5:给定程序M0DILC中函数fun的功能是:计算前n(4くnく50)项的累加和;每累加一次把被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数。例如,当n的值为20时,该数列为3,8,13,18,23,28,……,93,98〇符合此条件的累加值应为42,126,366,570,1010o#includeSdefineN20intfun(intn,int*a){inti,j,k,sum;sum=j==0;for(k=3,i=0;iくn;i++,k+=5){sum=sum+k;if(sum%4=2)a[j++]=sum;returnj;}main(){inta[N],d,n,i;printf("

1220Entern(4

1221

1222Theresult:

1223");for(i=0;i

1224

1225");}

1226解题思路:第一处:连续赋初值为0,中间使用条件相等符号了,所以应改为:sum二产。;。第二处:条件相等符号为=。请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入8后,输出为:s=0.662872。注意:要求n的值大于1但不大于100。#includedoublefun(intn){}main(){intn;doubles;printf('

1227lnputn:");scanf("刎〃,&n);s=fun(n);printf("

1228s=%f

1229',s);NONO();}解题思路:本题是根据公式计算多项式的值。参考答案:doublefun(intn)(inti;doublesum=0.0;if(n>l&&n<=100){for(i=l;i<=n;i++)sum+=l.0/(2*i-l)-l.0/(2*i);}returnsum;1※※※※※※※※※※※※※※※※※※※※※※派※※第91套:函数fun的功能是:计算。000^include^includedoublefun(doublex){doublef,t;intn;f=1.0+_1_;

1230t=x;n=1;do{n++;t*=x/_2_;f+=3;}while(fabs(t)>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printf('

1231Theresultis:

1232");printf("x=%T2.6fy=%-12.6f

1233”,x,y);)解题思路:第一处:根据公式可知,此处应填:Xo第二处:根据公式可知,此处应该除以n,所以应填:no第三处:计算的结果进行累加并赋值给变量f,所以应填:to给定程序M0D1LC中函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是!6807,其低3位数的和值是15〇#include#includeintfun(intn,int*value){intd,s,i;d=0;s=0;for(i=l;i<=5;i++)d=d*n;*value=d;for(i=l;i<=3;i++){s=s+d%10;d=d\10;)returns;)main(){intn,sum,v;do{printf("

1234Entern(2=8);sum=fun(n,&v);printf("ヽn

1235Theresult:

1236value=%dsum=%d

1237

1238”,v,sum);

1239}解题思路:第一处:变量d的初始值应为10第二处:整除的符号是/。请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9个元素依次为12.〇、34.〇、4.〇、23.〇、34.〇、45.〇、18.〇、3.0,11.0,输出应为:s=35.951014=^includeSincludedoublefun(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(*

1240Theoriginaldatais:

1241");for(i=0;i<9;i++)printf("蜘.If",a[i]);printf("

1242

1243");s=fun(a);printf("s=%f

1244

1245",s);NONO();}解题思路:本题是计算并输出给定数组中每相邻两个元素之平均值的平方根之和。参考答案:doublefun(doublex[9])(inti;doubleavg=0.0,sum=0.0;for(i=0;i<8;i++){avg=(x[i]+x[i+l])/2;sum+=sqrt(avg);}returnsum;}※※※※※※※※※※※※※※※※※※※※※※※派※第92套:函数fun的功能是:计算的前n项。若产2.5,函数值为:12.182340。#includedoublefun(doublex,intn){doublef,t;inti;f=1.0;t=-1―;for(i=2;i

1246returnf;)main(){doublex,y;x=2.5;y=fun(x,12);printf(*

1247Theresultis:

1248");printf("x=%T2.6fy=%T2.6f

1249”,x,y);}解题思路:第一处:t是处理公式中每ー项中冋项,所以应填:1。第二处:根据公式可知,for循环变量的初始值应从1开始。第三处:每做一次循环均要除以变量i的值,所以应填:i。给定程序M0DI1.C中函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。#include^defineN100intfun(int*s,intn){inti,j,k,a,b,c;j=0;for(i=100;i

1250Entern(<=1000):;scanf("%d",&n);}while(n>1000);num=fun(a,n);printf(*

1251

1252Theresult:

1253");for(i=0;i

1254

1255〃);}解题思路:第一处: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=U.730729。#include♦♦includedoublefun(doublex[10]){}main(){doubles,x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.

12560,90.0,56.0};inti;printf(*

1257Theoriginaldatais八n");for(i=0;i<10;i++)printf("%6.If”,x[i]);printf("

1258

1259");s=fun(x);printf("s=%f

1260

1261",s);N0N0();}参考答案:doublefun(doublex[10]){inti;doubleavg=0.0,sum=0.0,abs=0.0,fc;for(i=。;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函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。#include♦♦include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*p){SLIST*t,*s;t=p->next;s=p;while(t->next!=NULL){s=t;t=t->1;printf(,z%d"ヽ2);s-〉next二NULL;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=0;returnh;)voidoutlist(SLIST*h){SLIST*p;p=hー〉next;if(pニニNULL)printf("

1262ThelistisNULL!

1263");else{printf("

1264Head");

1265do{printf("ー〉%d”,p-〉data);p二p-〉next;}while(p!=NULL);printf("ー〉End

1266");})main(){SLIST*head;inta[N]={ll,12,15,18,19,22,25,29);head二creatlist(a);printf(*

1267Outputfromhead:

1268");outlist(head);printf("

1269Outputfromtail:

1270");while(head->next!=NULL){fun(head);printft'n

1271");printf("

1272Outputfromheadagain:

1273");outlist(head);))第一处:由于本题要求输出链表尾部的数据,函数是利用while循环语句找出链表尾部的指针并存入临时变量s中,那么每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过t指针变量进行操作的,因此,都要取t的next指针重新赋给t来实现,所以本处应填next〇第二处:输出最后ー个结点的数据,所以应填tー〉data或(粒).data。第三处:输出出最后ー个结点数据后,并把此结点删除了,程序要求释放内存,所以应填t。给定程序M0DILC中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:dcbao#includefun(chara){if(*a){fun(a+1);printf(*%c**a);main(){chars[10]="abcd";printf("处理前字符串=%s

1274处理后字符串ゴ,s);fun(s);printf('

1275");}第一处:形参a应定义为字符串指针。第二处:语句中缺少逗号。请编写ー个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入bcijingshanghai(くCR>为回车键),函数将返回shanghai。注意:部分源程序存在文件PR0G1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。0#include

1276char*fun(char*s,char*t)(}main(){chara[20],b[20];printflInput1thstring:*);gets(a);printf("Input2thstring:");gets(b);printf("%s

1277",fun(a,b));NONO();}参考答案: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)returnsif(*p)returns;elsereturnt:※※※※※※※※※※※※※※※※※※※※※※※派※第94套:函数fun的功能是:计算的前n项之和。若x=2.5,n=15时,函数值为:1.917914。0000^include#includedoublefun(doublex,intn){doublef,t;inti;f=1;t=-1;for(i=l;i

1278Theresultis:

1279");printf("x=%T2.6fy=%T2.6f

1280”,x,y);)第一处:根据公式可知,变量f的初值为1。第二处:根据公式可知,此处是正负号的变换,所以应填:-1。第三处:计算的结果进行累加并赋值给变量f,所以应填:t。给定程序MODI1.C中函数fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为

1281ー组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是!50程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。#includeintfun(){inti,j,k,sum=0;printf("

1282Theresult:

1283

1284〃);for(i=0;i<=3;i++){for(j=l;j<=5;j++){k=8-i-j;if(K>=0&&K<=6){sum=sum+1;printf(*red:%4dwhite:%4dblack:%4d

1285”,i,j,k);}Ireturnsum;}main(){intsum;sum=fun();printf("sum=%4d

1286

1287",sum);)第一处:外for循环的初始变量i的值应为10第二处:变量k写成了大写K了。请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。^includedoublefun(intn)()main(){intn;doubles;printf("Inputn:");scanfぐ'%d",&n);s=fun(n);printf("s=%f

1288",s);NONO();参考答案:doublefun(intn){doubles=l;longt=l;inti;for(i=l;i<=n;i++){t=t*i;/・计算阶乘・/s+=l./t;/・计算每项的值并累加至变量s中・/)returns;/*返回多项式的值・/}

1289※※※※※※※※※※※※※※※※※※※※※※派※※第95套:给定程序中,函数fun的功能是:计算NXN矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若№3,有下列矩阵:123456789fun函数首先累加1、5、9,然后累加3、5、7,函数的返回值为30。#includettdefineN4fun(intt[][N],intn){inti,sum;—1一;for(i=0;i

1290Theoriginaldata:

1291/z);for(i=0;i

1292");}printf("Theresultis:%d",fun(t,N));}第一处:变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:sum=0o第二处:对主对角线元素值累加,所以应填:t[i][i]o第三处:对反向对角线元素值累加,所以应填:t[i][n-iT]。例如,若给m输入ー100,给n输入90,则函数求得的ー个根值为2.000。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。0^include#includedoublefunx(doublex){return(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen)(intr;r=(m+n)/2;

1293while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r;elsen=r;r=(m+n)/2;)returnr;}main(){doublem,n,root;printf("Entermn:

1294");scanf("%lf%lf",&m,&n);root=fun(m,n);printf("root=%6.3f

1295",root);第一处:变量r应该定义为实数型double或浮点型float变量。第二处:while必须先满足条件,才做循环体的内容,所以应改为:while(fabs(m-n)>0.001)〇假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:除了字符串前导和尾部的・号之外,将串中其它・号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后ー个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG*******・。在编写函数时,不得使用C语言提供的字符串函数。#includevoidfun(char*a,char*h,char*p)(}main(){chars[81],*t,*f;printf("Enterastring:

1296");gets(s);t=f=s;while(*t)t++;tーー;while(*t==,*')t-;while(*f==,*')f++;fun(s,f,t);printf("Thestringafterdeleted:

1297");puts(s);N0N0();)参考答案:voidfun(char*a,char*h,char*p)(intj=0;char*q=a;while(*q&&q

1298}while(*p)a[j++]=*p++;a[j]=0;)※※※※※※※※※※※※※※※※※※※※※※※派※第96套:给定程序中,函数fun的功能是:有NXN矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若№3,有下列矩阵:123456789计算结果为741852963#includettdefineN4voidfun(int(*t)[N]){intj,r[N];for(j=0;j=0;—2—)t[N-l][N-l-j]=t[j][N-l]:for(j=N-l;j>=0;j")/t[j][N-l]=r[_3_];}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf('

1299Theoriginalarray:

1300*);for(i=0;i

1301*);}fun(t);printf('

1302Theresultis:

1303");for(i=0;i

1304");第一处:把第1列上的数存放到第1行上,所以应填:0。

1305第二处:for循环的增量值,由于循环是从大到小递减,所以应填:jー。第三处:把临时数组中的元素成为最后一列,所以应填:j»给定程序MODI1.C中函数fun的功能是:计算S=f(-n)+f(-n+1)+,••+f(0)+f(1)+f(2)+-+f(n)的值。例如,当n为5时,函数值应为:10.407143。f(x)函数定义如下:n(x+l)/(x-2)x>0且xW2f(x)=T0x=0或x=2J(xT)/(x-2)x<0#include#includef(doublex)if(x==0.0IIx==2.0)return0.0;elseif(x<0.0)return(xT)/(x-2);elsereturn(x+1)/(x-2);}doublefun(intn){inti;doubles=0.0,y;for(i=-n;i<=n;i++){y=f(1.0*i);s+=y;)returns)main(){printf("%f

1306”,fun(5));}解题思路:第一处:由于返回值是实数型值,所以在函数名前加上double。第二处:语句后缺少分号。编写函数fun,它的功能是计算:s作为函数值返回。在C语言中可调用log(n)函数求!n(n)。log函数的引用说明是:doublelog(doublex)〇例如,若m的值为:20,fun函数值为:6.506583〇#include#includedoublefun(intm)(}main(){printf("%f

1307”,fun(20));N0N0();

1308参考答案:doublefun(intm)(doubles=0.0;inti;for(i=1;i<=m;i++)s+=log(l.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给出数组中数据的个数。#includevoidfun(inta[],intn){inti,t;for(i=0;i<1;i++)(t=a[i];a[i]=a[n-l-2];3=t;main(){intb[9]={l,2,3,4,5,6,7,8,9},i;printf(*

1309Theoriginaldata:

1310〃);for(i=0;i<9;i++)printf(*%4d”,b[i]);printf("

1311");fun(b,9);printf("

1312Thedataafterinvert:

1313");for(i=0;i<9;i++)printf("%4d",b[i]);printf("

1314");}第一处:利用for循环语句,对数组中的各元素进行逆置,所以终止值为n/2。第二处:进行交换数组中元素的值,由于是依次是首和尾交换,所以应填:io第三处:使用中间变量t来交换的,所以应填:a[n-i-l]o给定程序MODI1.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。例如,若输入:77777,则输出将是:32767〇#includeintfun(char*p){intn;n=*P-o;p++;

1315while(*p!=0){n=n*8+*P」〇';p++;returnn;main(){chars[6];inti;intn;printf(*Enterastring(Ocataldigits):つ;gets(s);if(strlen(s)>5){printflError:Stringtoolonger!

1316

1317");exit(〇);}for(i=0;s[i];i++)if(s[i]ぐO'||s[i»7,){printf("Error:%cnotisocataldigits!

1318

1319",s[i]);exit(0);}printf("Theoriginalstring:");puts(s);n=fun(s);printf("

1320%sisconveredtointegernumber:%d

1321

1322",s,n);)解题思路:第一和第二处:*p错写成・P,’0'错写成‘。‘。学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置T,作为函数值返回。(用于字符串比较的函数是strcmp)o#include#includettdefineN16typedefstruct{charnum[10];ints;}STREC;STRECfun(STREC*a,char*b)main(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85),{"GA001",91},{"GA007",72},{*GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{*GA012",64},{"GA014",91},{"GA011",77},("GA017",64},{*GA018",64},{"GA016",72}};STRECh;charm[10];inti;FILE*out;printf("Theoriginaldata:

1323");for(i=0;i

1324");printf("%s%3d",s[i].num,s[i].s);}printf("

1325

1326Enterthenumber:");gets(m);h=fun(s,m);printf("Thedata:");printf("

1327%s%4d

1328",h.num,h.s);printf("

1329");out=fopen("c:\\test\\out.dat","w");h二fun(s,"GA013”);fprintf(out,*%s%4d

1330”,h.num,h.s);

1331fclose(out);}参考答案:STRECfun(STREC*a,char*b)(STRECc;inti;c.num[0]=‘、0';/・置初始空串・/c.s=-1;/・置成绩为ー1*/for(i=0;i^include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);voidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h->next;while(p!=1){n++;if(p->data==ch)return2;elsep=p->next;}return0;}main(){SLIST*head;intk;charch;chara[N]={,m','p,,g,,,a,,,w,x','r,,d,};head=creat1ist(a);

1332outlist(head);printf("Enteraletter:");scanf("%c",&ch);k=fun(3);if(k==0)printf("

1333Notfound!

1334");elseprintf("Thesequencenumberis:%d

1335",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("

1336ThelistisNULL!

1337");else{printf("

1338Head");do{printf("->%c",p->data);p=pー〉next;}while(p!=NULL);printf(*->End

1339");))解题思路:本题是在给定的链表中要求找出指定的值。第一处:判断P是否结束,所以应填:NULLo第二处:在函数fun中,使用n来计算结点的位置,当找到ch值,则返回结点的位置n,所以应填:returnn。第三处:函数调用,在主函数中已经给出了head和ch,所以应填:head,cho给定程序M0DI1.C中函数fun的功能是:删除p所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用‘#‘结束输入。#include♦♦include♦♦includefun(char*p){inti,t;charc[80];For(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];

1340〇〃;strcpy(p,c);}main(){charc,s[80];inti=0;printf("Inputastring:");c=getchar();while(c!=,#'){s[i]=c;i++;c=getchar();}s[i]=、0';fun(s);puts(s);}第一处:保留字for错写成For。第二处:置字符串结束符错误,应该是:‘、。'。请编写ー个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4EFg〃,则应输出"aBc4EFg"°#include#includevoidfun(char*ss){)main(){chartt[81];printf("

1341Pleaseenteranstringwithin80characters:

1342");gets(tt);printfl

1343

1344Afterchanging,thestring'n\"%s\"",tt);fun(tt);printf('

1345becomes

1346ヽ'%s\

1347”,tt);NONO();}参考答案:voidfun(char*ss)(inti;for(i=1;i='a'&&ss[i]<=9z9)ss[i]-=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〇#include

1348^defineN9voidfun(inta[],intn){inti,t,p;p=(n%2==0)?n/2:n/2+1for(i=0;i

1349Theoriginaldata:

1350");for(i=0;i

1351");fun(b,N);printf("

1352Thedataaftermoving:

1353");for(i=0;i

1354");)第一处:如果n是奇数,则中间的元素不动,所以应填:1。第二处:使用for循环语句来交换数组元素的值,所以应填:i。第三处:使用中间变量t来交换的,所以应填:to给定程序M0DILC中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.〇〇#includevoidfun(float*a,float*b,float*c){float*k;if(*a<*b){k=*a;*a=*b;*b=k;}if(*a>*c){k=*c;*c=*a;*a=k;}if(*b<*c){k二*b;*b二*c;*c=k;}}main(){floata,b,c;printf("Inputabc:");scanf("%f%f%f",&a,&b,&c);printf("a=%4.If,b=%4.If,c=%4.lf

1355

1356",a,b,c);fun(&a,&b,&c);printf("a二%4.If,b=%4.If,c=%4.lf

1357

1358",a,b,c);解题思路:

1359第一处:在函数fun体中,k是ー个浮点型变量,所以应改为:floatk;o第二处:三个数比较大小,第1个条件是第1个比第2个小,则交换。第3个条件是第2个比第3个小,则也交换。第2个条件是应该第1和第3个小,则交换就符合题意了,所以应改为:if(*a<*c)〇学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止ー个,函数返回分数最高的学生的人数。#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){)main(){STRECs[N]={{"GA05〃,85},{"GA03”,76},{〃GA02”,69},{"GA04",85},{"GA01",9",{"GA07”,72},{"GA08”,64},{"GA06”,87},{"GA015”,85},{"GA013”,91},{"GA012”,64},{"GA014”,91},{"GA011”,77},{"GA017”,64},{"GA018”,64},{"GA016”,72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf("The%dhighestscore:

1360',n);for(i=0;i

1361”,h[i].num,h[i].s);printf('

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

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

1364”,h[i].s);fclose(out);)参考答案:intfun(STREC*a,STREC*b){inti,max=a[0].s,n=0;for(i=1;ivoidfun(char*s,charc){inti,j,n;for(i=0;s[i]!=1;i++)if(s[i]==c){n=_2_;while(s[i+l+n]!=‘、〇')n++;for(j=i+n+l;j>i;j-)s[j+l]=s[j];s[j+l]=—3—;i=i+l;))main(){chars[80]="baacda”,c;printf("

1365Thestring:%s

1366',s);printf(*

1367lnputacharacter:");scanf("%c",&c);fun(s,c);printf("

1368Theresultis:%s

1369',s);)解题思路:第一处:在for循环中终止值要判断字符串是否结束符,所以应填:‘、。‘。

1370第二处:n用于统计参数c后还有多少个字符,要对其进行初始化,所以应填:〇〇第三处:要求插入相同的字符c,所以应填:c。在主函数中从键盘输入若干个数放入数组中,用〇结束输入并放在最后ー个元素中。给定程序M0DI1.C中函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)o例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。#includedoublefun(intx[])(intsum=0.0;intc=0,i=0;while(x[i]!=0){if(x[i]>0){sum+=x[i];c++;}i++;}sum\=c;returnsum;

1371main(){intx[1000];inti=0;printfl

1372Pleaseentersomedata(endwith0):つ;do{scanf(*%d*,&x[i]);}while(x[i++]!=0);printf(飞f

1373",fun(x));}第一处:由于sum是存放实数值,因此不能定义为整型,所以应改为doublesum=0.0;或floatsumニ〇.0:〇第二处:除的运算符是编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入口11S=1+++1+2+3+...+n函数的值为:1.8333331+21+2+3例如:若n的值为!1时,^includefloatfun(intn)()main(){intn;floats;printf(*

1374PleaseenterN:");scanf("%d",&n);s=fun(n);printf(*theresultis:%f

1375”,s);NONO();参考答案:floatfun(intn)inti,j,t;floats=0;for(i=l;i<=n;i++){t=0;for(j=l;j<=i;j++)t+=j;s=s+l./t;returns;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭