您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > c语言课后答案 (3)
–158–第第88章章指指针针习习题题答答案案一、在以下每一题的四个选项中,请选择一个正确的答案。【题8.1】D.【题8.2】B.【题8.3】B.【题8.4】C.【题8.5】D.【题8.6】B.【题8.7】B.【题8.8】B.【题8.9】B.【题8.10】D.二、判断下列各叙述的正确性,若正确在()内标记√,若错误在()内标记×。【题8.11】×【题8.12】√【题8.13】×【题8.14】√【题8.15】×【题8.16】√【题8.17】×【题8.18】√【题8.19】×【题8.20】√第8章指针–159–三、填空。请在下面各叙述的空白处填入合适的内容。【题8.21】A.取内容B.取地址【题8.31】【题8.22】3【题8.23】int型【题8.24】比较【题8.25】二级指针【题8.26】0【题8.27】*(p+3)【题8.28】A.地址B.地址【题8.29】int*p=a【题8.30】A四、阅读下面的程序,写出程序运行结果。【题8.32】20,9,9【题8.33】book【题8.34】aabc【题8.35】p!=q*p==*q五、程序填空。请在下面程序空白处填入合适的语句。【题8.36】A.*zB.*z【题8.37】A.qp+nB.*qmin六、编程。对下面的问题编写程序并上机验证(要求用指针方法实现)。【题8.38】输入3个整数,按从大到小的次序输出。/*lx8_1.c*/#includestdio.hvoidswap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}14309.071410135421213509C语言程序设计教程–160–voidmain(){intn1,n2,n3;int*p1,*p2,*p3;printf(Pleaseinputthreeintegerdatas:);scanf(%d%d%d,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1n2)swap(p1,p2);if(n1n3)swap(p1,p3);if(n2n3)swap(p2,p3);printf(Afterswap:);printf(%d%d%d\n,n1,n2,n3);}【题8.39】编写将n阶正方矩阵进行转置的函数。在主函数中对一个4行4列的矩阵调用此函数。/*lx8_2.c*/#includestdio.h#defineN4voidcovert(int(*p)[N]){inti,j,temp;for(i=0;iN;i++)for(j=0;ji;j++){temp=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=temp;}}voidmain(){inta[N][N];inti,j;printf(Inputaarray:\n);for(i=0;iN;i++)for(j=0;jN;j++)scanf(%d,&a[i][j]);printf(Beforecovert:\n);for(i=0;iN;i++){for(j=0;jN;j++)printf(%d,a[i][j]);printf(\n);}printf(\n);covert(a);printf(Aftercovert:\n);for(i=0;iN;i++){for(j=0;jN;j++)printf(%d,a[i][j]);printf(\n);}}【题8.40】有三个整型变量i,j,k,请编写程序,设置三个指针变量p1,p2,p3,分第8章指针–161–别指向i,j,k。然后通过指针变量使i,j,k三个变量的值顺序交换,即把i的原值赋给j,把j的原值赋给k,把k的原值赋给i。要求输出i,j,k的原值和新值。/*lx8_3.c*/#includestdio.hvoidmain(){inti,j,k;int*p1,*p2,*p3,temp;p1=&i;p2=&j;p3=&k;printf(Inputi,j,k:\n);scanf(%d%d%d,&i,&j,&k);printf(i=%dj=%dk=%d\n,i,j,k);temp=*p3;*p3=*p2;*p2=*p1;*p1=temp;printf(Afterswapi,j,k:\n);printf(i=%dj=%dk=%d\n,i,j,k);}【题8.41】设有n个整数,现在要使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。编写程序实现以上功能,在主函数中输入n个整数并输出调整后的n个数(nm)。/*lx8_4.c*/#includestdio.h#defineN6voidmove(intarray[N],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);}voidmain(){intnumber[N],n,m,i;printf(n=);scanf(%d,&n);printf(m(mn)=);scanf(%d,&m);printf(Input%ddatas:\n,n);for(i=0;in;i++)scanf(%d,&number[i]);move(number,n,m);printf(Aftermove:\n);for(i=0;in;i++)printf(%d,number[i]);}【题8.42】给定5个字符串,输出其中最大的字符串。/*lx8_5.c*/#includestdio.hC语言程序设计教程–162–#includestring.hvoidmain(){char*max,*str[5]={ms_dos,windows,turboT,basic,borlandc++};inti;max=str[0];for(i=1;i5;i++)if(strcmp(str[i],max)0)max=str[i];printf(Thelargeststring:%s\n,max);}【题8.43】编写程序,将所给的5个字符串进行排序。/*lx8_6.c*/#includestdio.h#includestring.hvoidmain(){char*temp,*str[5]={ms_dos,windows,turboT,basic,borlandc++};;inti,j;printf(Beforesort:\n);for(i=0;i5;i++)printf(%s\n,str[i]);for(i=0;i4;i++)for(j=i+1;j5;j++)if(strcmp(str[i],str[j])0){temp=str[i];str[i]=str[j];str[j]=temp;}printf(Aftersort:\n);for(i=0;i5;i++)printf(%s\n,str[i]);}【题8.44】输入10个整数,将其中最大数与第一个数交换,最小数与最后一个数交换。/*lx8_7.c*/#includestdio.hvoidinput(intarray[10]){inti;printf(input10integer:\n);for(i=0;i10;i++)scanf(%d,&array[i]);}voidmax_min(intarray[10]){int*max,*min;int*p,*array_end;array_end=array+10;max=min=array;for(p=array+1;parray_end;p++)if(*p*max)max=p;第8章指针–163–elseif(*p*min)min=p;*p=array[0];array[0]=*max;*max=*p;*p=array[9];array[9]=*min;*min=*p;}voidoutput(intarray[10]){int*p;for(p=array;parray+10;p++)printf(%d\t,*p);}voidmain(){inta[10];input(a);max_min(a);output(a);}【题8.45】编写函数,比较两个字符串是否相等(用指针完成)。/*lx8_8.c*/#includestdio.h#includestring.hintcompare(char*p,char*q){inti,l=strlen(p);if(strlen(p)!=strlen(q))return0;for(i=0;il;i++)if(p[i]!=q[i])return0;return1;}voidmain(){charstr1[80],str2[80];printf(Inputfirststring:);scanf(%s,str1);printf(Inputsecondstring:);scanf(%s,str2);if(compare(str1,str2))printf(Twostringsequation!\n);elseprintf(Twostringsnoequation!\n);}【题8.46】编写程序,输入15个整数存入一维数组,再按逆序重新存放后输出(用指针完成)。/*lx8_9.c*/#includestdio.h#defineN15voidmain(){inti,a[N],*p=a,temp;printf(Input%dintegers:,N);for(i=0;iN;i++)C语言程序设计教程–164–scanf(%d,&p[i]);for(i=0;iN/2;i++){temp=p[i];p[i]=p[N-i-1];p[N-i-1]=temp;}printf(Outputconversionintegerarray\n);for(i=0;iN;i++)printf(%d,p[i]);printf(\n);}【题8.47】编写程序,在一个整型数组(其元素全大于0)中查找输入的一个整数,找到后,求它前面的所有整数之和。/*lx8_10.c*/#includestdio.h#defineN5voidmain(){inti,j=N-1,sum=0;inta[N],x;printf(Pleaseinputanintegerarray:\n);for(i=0;iN;i++)scanf(%d,&a[i]);printf(Pleaseinputaintegerdata:\n);scanf(%d,&x);for(i=0;iN;i++)if(a[i]==x)j=i;for(;j=0;j--)sum+=a[j];printf(Sum=%d\n,sum);}【题8.48】编写程序,用函数指针的方法,求任意给定的两个整数x和y的和、差。/*lx8_11.c*/#includestdio.hintadd(intx,inty);intsub(intx,inty);voidmain(){intn;inti,j;int(*func)(int,int);printf(Pleaseinputtwonumbers:);scanf(%d%d,&i,&j);printf(Addoperator______1\n);printf(Suboperator______2\n);printf(\nPleaseinputacharacter:);scanf(%d,&n);switch(n){case1:第8章指针–165–func=add;break;case2:func=sub;break;}printf(Theresultis:%d\n,func(i,j));}intadd(intx,inty){returnx+y;}intsub(intx,inty){returnx-y;}【题8.49】编写程序,统计从键盘输入的命令行中第二个参数所包
本文标题:c语言课后答案 (3)
链接地址:https://www.777doc.com/doc-2908593 .html