《2013年计算机上机c语言考试题库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
第01套:给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入ー个数:27638496,新的数:为739。0^include 1Theresultis:%ld 2",n);}第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。第二处:判断是否是奇数,所以应填:〇〇第三处:最后通形参n来返回新数x,所以应填:X。给定程序MODI1.C中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。#include 3 4%d!=%lf 5 6",n,fun(n));)第一处:条件语句书写格式错误,应改为:if(n==0)〇第二处:语句后缺少分号。 7请编写ー个函数fun,它的功能是:将一个数字字符串转换为ー个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串”-1234”,则函数把它转换为整数值-1234o函数fun中给出的语句仅供参考。0^include 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 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的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。#include 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的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。#include 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 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:i 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 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 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 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 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 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;i 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 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 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;i 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的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。#include 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 111intm;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;i 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 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〇#include 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#include 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〇#include 135”,k,fun(k));) 136解题思路:第一处:条件判断缺少圆括号。第二处:判断相等的符号是==。程序定义了NXN的二维数组,并在主函数中|'|动赋值。清编写函数fun(inta[][N],intn),函数的功能是:使数组左下三角元素中的值乘以n.例如:若n的值为3,a数组中的值为197|397|a=|238I则返回主程序后a数组中的值应为|6981456|121518|#include 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 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;i 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#include 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 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 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#include 174Pleaseenter1integernumbers: 175*);scanf("%d",&m);printf(" 176 177Theresultis%lf 178”,fun(m));}第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为t-=l./io第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填returnt;。 179请编写ー个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入"asdafaaz67”,则输出为"asdafaaz67”。#include 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 181h->next=p;)NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;i 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 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 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 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#include 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〇#include 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 217{NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;i 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 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;i 240xl=%f,x2=%f,xl*xl+xl*x2=%f 241",xl,x2,r);}第一处:定义函数指针的类型,所以应填:doubleo第二处:使f指向函数门,所以应填:flo第三处: 242使f指向函数f2,所以应填:f2o给定程序MODILC是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。#include 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就不是回文。#include 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;i 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 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 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 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 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 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 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.#include p){*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中。ttinclude 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;i 306",h[i].s);fprintf(out," 307");fclose(out);}参考答案:intfun(STREC*a,STREC*b,int1,inth){inti,j=0;for(i=0;i 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 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 319PleaseenterstringS:");scanf("%s",s);fun(s,t);printf(" 320Theresultis:%s 321',t);N0N0();}参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=0;i 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 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#include 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 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、〇〇#include 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 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 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 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 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 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 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#include 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 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。^include 395”,a,b);}第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int*x,int*yo第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*X;*X=*y;*y=t:〇编写函数fun,函数的功能是求出小于或等于lim的所有素数并放在aa数组中,函数返回所求出的素数的个数。函数fun中给出的语句仅供参考。#include 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 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 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 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;i 422b[j++]=a[i];}returnj;}※※※※※※※※※※※※※※※※※※※※※派※※※第25套:人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。#include 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 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 433PleaseenterstringS:");scanf('%s”,s);fun(s,t);printf(* 434Theresultis:%s 435”,t);NONOO;}参考答案:voidfun(char*s,chart[])(inti,j=0;for(i=0;i 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;i 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 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 448");elseprintf("%4d",aa[k]);printf(" 449");NONO();参考答案:^include 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。#include 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 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〇^include 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。^include 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返回这些数的个数。#include 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 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 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 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;i 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。*include 495 496");}第一处:新字符串的位置值是由变量j来控制的,但程序中字符赋值后没有对j进行增量的语句,所以应改为:s[j++]=s[i];。第二处:对新字符串添加字符串结束符,由于程序中使用变量j对新字符串来控制的,所以应改为:s[j]=0;。假定输入的字符串中只包含字母和・号。请编写函数fun,它的功能是:将字符串中的前导・号全部移到字符串的尾部。函数fun中给出的语句仅供参考。例如,字符串中的内容为:*******A*BC*DEF*G****,移动后,字符串中的内容应当是:A*BC*DEF*G***********〇在编写函数时,不得使用C语言提供的字符串函数。#include 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^include 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 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 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 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 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语言提供的字符串函数。ttinclude 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 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〇#include 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^include 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的素数,并统计素数的个数作为函数值返回。#include 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 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。#include 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 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 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 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 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;i 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 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 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 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#include 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<,#include 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 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。#include 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#include 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 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 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 617for(i=0;i 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,则输出应该是:〇〇^include 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#include 630Averagescoreis:%5.2f 631”,aver);NONO();)参考答案:floatfun(float*a,intn)(inti;floatave=0.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#include 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 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;j 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 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 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 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放十位数。#include 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语言提供的字符串函数。^include 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';若是其它字符则保持不变;并将转换后的结果作为函数值返回。^include 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^include 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 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 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。#include 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语言提供的字符串函数。^include 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 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 705",fun(n));}第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。第二处:该行缺少分号。 706编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当n=10,x=0.3时,函数值为1.349859。#include 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 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 715”,fun(10));}第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。第二处:缺少分号。编写函数fun,它的功能是:计算并输出下列级数和:111S-■++,,,+1X22X3n(n+l)例如,当n=10时,函数值为:0.909091〇#include 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 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。#include 724”,fun(500));}第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个=。第二处:经过编译可知,"{"和"}"没有配対,所以在横线处加上"}"。编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为 725函数值返回。例如若n为1000时,程序输出应为:s=153.909064c^include 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#include 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#include 732”,xa);for(j=0;j 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文件中。ttinclude 734”,fun(12,8));NONOO;}参考答案:#include 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