您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计第九-十一章习题参考答案
C语言第九章参考答案1.选择题:123456789012ADCDBBCDDCBB2.填空题:(1)指针或者地址(2)110(3)①char*p;②p=&ch;③scanf(%c,p);④*p='a';⑤printf(%c,*p);(4)10(5)0、7(6)ab(7)abcdcd(8)7ㄩ1(9)void(*p)(int*,int*);(10)r+b[k](11)'\0'、n++;(12)aegi3.改错题:(1)第一处改正:*sub=x-y第二处改正:scanf(%f%f,&x,&y);第三处改正:calc(x,y,&add,&sub);(2)第一处:charswap(char*p1,char*p2)改为voidswap(char*p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2=\0改为*p2='\0'(4)第一处:char*fun(char*str,chart)改为char*fun(char*str,char*t)第二处:s=NuLL改为s=NULL;第三处:if(r==p)改为if(*r==*p)(5)第一处:fun(int**b,intn)改为fun(int(*b)[N],intn)第二处:b[j][k]=k*j改为b[j][k]=(k+1)*(j+1)4编程题(1)/*习题9-4-1*/voidmove(intarray[20],intn,intm);main(){intnumber[20],n,m,i;printf(Howmanynumbers?);/*共有多少个数*/scanf(%d,&n);printf(Input%dnumbers:\n,n);/*输入n个数*/for(i=0;in;i++)scanf(%d,&number[i]);printf(Howmanyplaceyouwanttomove?);/*后移多少个位置*/scanf(%d,&m);move(number,n,m);/*调用move函数*/printf(Now,theyare:\n);for(i=0;in;i++)printf(%d,number[i]);}voidmove(intarray[20],intn,intm)/*循环后移函数*/{int*p,array_end;array_end=*(array+n-1);for(p=array+n-1;parray;p--)*p=*(p-1);*array=array_end;m--;if(m0)move(array,n,m);/*递归调用,当循环次数m减至0时,停止调用*/}(2)/*习题9-4-2*/#includestdio.h#includestring.h#defineTOTAL6intmseek(char*str[],charxstr[],intn){inti;for(i=0;in;i++){if(strcmp(str[i],xstr)==0)return1;}return0;}main(){char*name[TOTAL]={Lining,Linshan,Tianyuan,Zhangqiang,Haipo,Fangbing};charxname[20];printf(enteraname:);gets(xname);if(mseek(name,xname,TOTAL))printf(Found!\n);elseprintf(Notfound!\n);}(3)/*习题9-4-3*/#includestdio.h#includestring.hvoidfun(char*str,intnum[4]){inti;for(i=0;i4;i++)num[i]=0;while(*str!='\0'){if(*str='a'&&*str='z'||*str='A'&&*str='Z')num[0]++;elseif(*str=='')num[1]++;elseif(*str='0'&&*str='9')num[2]++;elsenum[3]++;str++;}}#defineN80main(){intstring[N];intn[4],i;gets(string);fun(string,n);for(i=0;i4;i++)printf(%d\t,n[i]);}(4)/*习题9-4-4*//*调试时,可这样输入数据:*//*11121314152122232425313233343541424344455152535455*/#includestdio.hmain(){inta[5][5],*p,i,j;voidchange(int*p);printf(Inputmatrix:\n);for(i=0;i5;i++)/*输入矩阵*/for(j=0;j5;j++)scanf(%d,&a[i][j]);p=&a[0][0];/*使p指向0行0列元素*/change(p);/*调用函数,实现交换*/printf(Now,matrix:\n);for(i=0;i5;i++)/*输出已交换的矩阵*/{for(j=0;j5;j++)printf(%4d,a[i][j]);printf(\n);}}voidchange(int*p)/*交换函数*/{inti,j,temp;int*pmax,*pmin;pmax=p;pmin=p;for(i=0;i5;i++)/*找最大值和最小值的地址,并赋给pmax,pmin*/for(j=0;j5;j++){if(*pmax*(p+5*i+j))pmax=p+5*i+j;if(*pmin*(p+5*i+j))pmin=p+5*i+j;}temp=*(p+12);/*将最大值换给中心元素*/*(p+12)=*pmax;*pmax=temp;temp=*p;/*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i5;i++)/*找第二最小值的地址赋给pmin*/for(j=0;j5;j++)if(((p+5*i+j)!=p)&&(*pmin*(p+5*i+j)))pmin=p+5*i+j;temp=*pmin;/*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i5;i++)/*找第三最小值的地址赋给pmin*/for(j=0;j5;j++)if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin*(p+5*i+j)))pmin=p+5*i+j;/*将第三最小值换给左下角元素*/temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i5;i++)/*找第四最小值的地址赋给pmin*/for(j=0;j5;j++)if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin*(p+5*i+j)))pmin=p+5*i+j;temp=*pmin;/*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;}(5)/*习题9-4-5*//*可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/#includestdio.hvoidavcour1(floatscore[][5]);voidfali2(intnum[4],floatscore[4][5]);voidgood(intnum[4],floatscore[4][5]);main(){inti,j,num[4];//数组num代表学号floatscore[4][5];printf(InputNO.andscores:\n);for(i=0;i4;i++){printf(NO.);scanf(%d,&num[i]);printf(scores:);for(j=0;j5;j++)scanf(%f,&score[i][j]);}printf(\n\n);avcour1(score);/*求出第一门课的平均成绩*/printf(\n\n);fali2(num,score);/*找出2门课不及格的学生*/printf(\n\n);good(num,score);/*找出成绩好的学生*/}voidavcour1(floatscore[][5])/*第一门课的平均成绩的函数*/{inti;floatsum,average1;sum=0.0;for(i=0;i4;i++)sum=sum+score[0][i];/*累计每个学生的得分*/average1=sum/4;/*计算平均成绩*/printf(course1averagescore:%6.2f.\n,average1);}voidfali2(intnum[4],floatscore[4][5])/*找两门以上课程不及格的学生的函数*/{inti,j,k,label;floatsum=0;printf(========Studentwhoisfail============\n);printf(NO.);for(i=0;i5;i++)printf(%10d,i+1);printf(average\n);for(i=0;i4;i++){label=0;for(j=0;j5;j++)if((score[i][j])60.0)label++;if(label=2){printf(%5d,num[i]);for(k=0;k5;k++){printf(%10.2f,score[i][k]);sum+=score[i][k];}printf(%10.2f\n,sum/5);}}}voidgood(intnum[4],floatscore[4][5])/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/{inti,j,k,n;floatsum=0,aver[4];printf(========Studentwhosescoreisgood========\n);printf(NO.);for(i=0;i5;i++)printf(%10d,i+1);printf(average\n);for(i=0;i4;i++){n=0;sum=0;for(j=0;j5;j++){if((score[i][j])85.0)n++;sum+=score[i][j];}aver[i]=sum/5;if((n==5)||(aver[i]=90)){printf(%5d,num[i]);for(k=0;k5;k++)printf(%10.2f,score[i][k]);printf(%10.2f\n,aver[i]);}}}(6)/*习题9-4-6*/#includemath.hdoublesigma(double(*fn)(double),doublel,doubleu){doublesum=0,d;for(d=l;du;d+=0.1)sum+=fn(d);returnsum;}voidmain(){doublesum;sum=sigma(sin,0.1,1.0);printf(sumofsinfrom0.1to1.0is:%f\n,sum);sum=sigma(cos,0.5,3.0);printf(sumofcosfrom0.5to3.0is:%f\n,sum);}(7)/*习题9-4-7*/main(){inti;char*month_name(intn);printf(inputMonthNo.:\n);scanf(%d,&i);printf(MonthNo.:%2d--%s\n,i,month_name(i));/*调用指针函
本文标题:C语言程序设计第九-十一章习题参考答案
链接地址:https://www.777doc.com/doc-2908273 .html