• 309.50 KB
  • 2022-04-22 11:18:21 发布

计算机教材全部习题答案.doc

  • 49页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第一章习题1.1选择题:⑴一个C程序的执行是( A )。A) 从main()函数开始,直到main()函数结束B) 从第一个函数开始,直到最后一个函数结束C) 从第一个语句开始,直到最后一个语句结束D)从main()函数开始,直到最后一个函数结束⑵计算机能直接执行的语言是(B)。A)汇编语言B)机器语言C)高级语言D)A和B⑶一个C程序是由(C)。A)一个主程序和若干子程序组成B)若干过程组成C)一个或多个函数组成D)若干子程序组成⑷下列说法正确的是(B)。A)C程序书写格式限制严格,一行内必须写一个语句B)C程序书写比较自由,一个语句可以分行写在多行上C)C程序书写格式限制严格,要求一行内必须写一个语句,并要求行号D)C程序中一个语句不可以分写在多行上1.2填空题:⑴构成C语言程序的基本单位是  函数   。⑵C语言源程序文件的后缀是 .c  ,经过编译后,生成文件的后缀是 ,obj  ,经过连接后,生成文件的后缀是 .exe  。⑶在TURBOC环境中用RUN命令运行一个C程序时,所运行的程序的后缀是 .exe  。⑷一个C语言程序必须有而且只能有一个主函数,它的函数名为 main  。⑸一个函数有两部分组成,第一部分称为 函数首部  ;第二部分称为 函数体  。⑹函数体由符号  { 开始,用符号  } 结束。函数体的前面是 声明  部分,其后是 执行  部分。1.3上机编辑、调试、运行下列程序,发现错误,并改正之。/*求1+2+3+……+10的和*/#includevoidmain(){ints,n;sum=0;n=1;while(n<0){sum=sum+n;n=n+1;}printf("sum=%dn",sum);} 第二章习题2.1选择题⑴在以下标识符中,(B)是合法的用户标识符。A)a#bB)getchC)voidD)ab*⑵不合法的八进制数是( B  )。 A)0B)028C)077D)01⑶不合法的十六进制数是( A  )。0x A)oxffB)0XabcC)0x11D)0x19⑷以下选项中正确的整型常量是(B)。A)12.B)-20C)1,000D)456⑸以下选项中正确的实型常量是(D)。A)0B)3.1415C)0.329×102D).871⑹以下选项中不正确的实型常量是(B)。A)2.607E-1B)0.8103e3C)-88.77D)871e-2⑺以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子的C语言表达式是(A)。A)x/y*zB)x*(1/(y*z))C)x/y*1/zD)x/y/z⑻在C语言中,字符型数据在内存中以(C)的形式存放。A)原码B)补码C)ASCII码D)BCD码⑼sizeof(float)是(C)。A)一种函数调用B)一个不合法的表示形式C)一个整型表达式D)一个实型表达式⑽表达式b=((241&15)&&("Z"|"a"))的值是(B)。A)0B)1C)TRUED)FALSE⑾若变量已正确定义并赋值,符合C语言语法的表达式是(B)。A)a=a+7;B)a=7+b+c,a++C)int(13.4%4)D)a=a+7=c+b⑿以下叙述中正确的是(A)。A)a是实型变量,C语言允许进行a=10,因此可以这样说:实型变量中允许存放整型值B)在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值改变为0D)已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为32.2填空题⑴数学式子cos2x·写成C语言表达式是cos(x)*cos(x)*((a+b)/(a-b))。⑵a是整型变量,能将a清零的表达式是a=0;能将a中的各二进制为均置成1的表达式是a=-1。⑷若a,b和c均是int型变量,则执行下面表达式后,a值为6,b值为4,c值为2。 a=(b=4)+(c=2)⑸经过下述赋值后,变量x的数据类型是int。intx=2;doubley;y=(double)x;⑹若x和n均是整型变量,且x和n的初值均为5,则执行下面表达式后,x值为10,n值为6。x+=n++x=x+n++⑺若有定义:intb=7;floata=2.5,c=4.7;则下面表达式的值为4.5。a+(int)(b/3*(int)(a+c)/2)%4⑻若有定义:intm=7,y=2;则执行下面表达式的值后,y值为-24。y+=y-=m*=y⑼表达式8/4*(int)2.5/(int)(1.25*(3.7+2.3))的类型为整型。⑾条件“-1-1&&x<3)||(x<-99)。⑿若x和a均是整型变量,则执行表达式①后的x值为12,执行表达式②后的x值为4。①x=(a=4,6*2)②x=a=4,6*2⒀一个字节包含8个二进制位,在一个字节中能存放的最大(十进制)整数是,它的二进制数的形式是;最小(十进制)整数是,它的二进制数的形式是。⒁当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是,它的二进制数的形式是;最小(十进制)整数是,它的二进制数的形式是。2.3改错题⑴#includestdio.h; #include正确    main();(多分号)/*mainfunction*/{floatr,s;/*risradius,sisareaofcircular*/r=5.0;s=3.14159*r*r;printf("%fn",s);⑵#includestdio.h(缺 <>号)#include正确main();/*mainfunction*/{floata,b,c,v;/*a,b,caresides,visvolumeofcube*/a=2.0;b=3.0;c=4.0;(缺;号)v=a*b*c;printf("%fn",v);(缺;号)} 第三章习题3.1什么是C语言的基本执行单位?C语言的语句是如何分类的?3.2C语言的流程控制语句有哪几种?3.3结构程序设计的基本结构有哪几种?3.4C语言的输入输出操作是由语句来实现的吗?3.5顺序结构程序的特点是什么?3.6输入下面的程序,观察运行结果。#includevoidmain(){floata1,a2;doubleb1,b2;a1=3141.59;a2=0.000001;b1=3141.59;b2=0.000001;printf("%f,%lfn",a1+a2,b1+b2);}答案:3141.590089,3141.5900013.7输入下面的程序,观察运行结果。#includevoidmain(){charch;intk;ch="a";k=66;printf("%c,%d,%x,%o,%d,%c",ch,ch,ch,ch,k,k);}答案:a,97,61,141,66,B3.8输入下面的程序,观察运行结果。#includevoidmain(){floatx;doubley;x=123.45678;y=123.45678;printf("%-4.2f,%-6.2en",x,y);}答案:123.46,1.2e+02 3.9输入下面的程序,观察运行结果,并说明程序的功能(注意:运行时输入大写字母)。#includevoidmain(){charc1,c2;c1=getchar();printf("%c,%dn",c1,c1);c2=c1+32;printf("%c,%dn",c2,c2);}答案:A,65a,97该程序是将键盘输入的大写字母转换为对应的小写字母。3.10编写程序:求三个正整数(小于32767)的算术平均值。voidmain(){inta,b,c;floatd;printf("ninputa,b,c=");scanf("%d,%d,%d",&a,&b,&c);d=(a+b+c)/3.0;printf("nd=%f",d);}3.11编写程序:已知圆的半径,求圆的周长和面积(要求半径值由键盘接受)。voidmain(){intr;floatk,s;printf("ninputr=");scanf("%d",&r);k=2*3.14159*r;s=3.14159*r*r;printf("nL=%fnS=%f",k,s);}3.12编写程序:计算a+b2-6的值,其中:a=4,b=3;a=5,b=2;a=2,b=8。voidmain(){floata,b,h;printf("ninputa,b=");scanf("%f,%f",&a,&b);h=a+b*b-6;printf("na=%f,b=%fnh=%f",a,b,h);} 第四章习题4.1判断下列陈述的真假:⑴在三种形式的if语句中,在if关键字之后均为表达式。该表达式只能是逻辑表达式或关系表达式。False⑵在if语句中,关键字之后的表达式必须用括号括起来,并随后跟分号(;)。False⑶在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。True⑷条件运算符的结合方向是自右至左。False⑸switch语句中的case后面必须是整常量表达式,如整数常数、字符常量。True⑹当switch的整类型表达式的结果值与某一个case块的整常量表达式的值相等时,将转至该case块,并且执行该case与下一个case之间的所有语句。False⑺可以使用goout语句跳出switch语句。False⑻else总是与它前面最近的if配对。True4.2阅读下面的程序,说明程序的运行结果。#includevoidmain(){intx=10,y=20,t;if(x!=y){t=x;x=y;y=t;}printf("%d,%dn",x,y);}答案:20,104.3输入下面的程序,观察运行结果并说明程序的功能。#includevoidmain(){intx=20;if(x>=0)if(x<50)printf("xisokn");elseprintf("xisnotokn");}答案:xisok4.4分别输入下面两个程序,观察运行结果,说明有何不同。程序段1:#includevoidmain(){intx=20;if(x<=0)if(x<50)printf("xisokn");elseprintf("xisnotokn");}答案:什么也不输出. 程序段2:#includevoidmain(){intx=20;if(x<=0){if(x<50)printf("xisokn");}elseprintf("xisnotokn");}答案:xisnotok.4.5输入下面的程序,观察运行结果并说明程序的功能。#includevoidmain(){intx,a;scanf(“%d”,&x);a=x%10;switch(a){case0:case2:case4:case6:case8:priintf(“even!n”);break;default:printf(“odd!n”);}}答案:输入偶数, 则输出 even!输入奇数, 则输出 odd!4.6编写程序:从键盘输入三个正整数,按由大到小的顺序输出。#includevoidmain(){inta,b,c,t;printf("inputa,b,c=:");scanf("%d%d%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5d%5d%5d",a,b,c);}4.7编写程序:从键盘输入一个正整数,判断它是否既能被3整除,又能被7整除。方法1:#includevoidmain(){intk;scanf("%d",&k);if(k%3==0&&k%7==0)printf("nyes");elseprintf("nno");} 方法2:#includevoidmain(){intx;printf("pleaseinputx=");scanf("%d",&x);if(x%3==0){if(x%7==0)printf("3---yes7----yes");elseprintf("3---yes7----no");}else{if(x%7==0)printf("3---no7---yes");elseprintf("3---no7---no");}}4.8编写程序:求函数:X+5(X>=0)y=X-5(X<0)的值。#includevoidmain(){intx,y;printf("pleaseinputx=");scanf("%d",&x);if(x>=0)y=x+5;elsey=x-5;printf("y=%d",y);} 第五章习题5.1试比较三种循环语句的异同。5.2选择题:⑴下面关于for循环的正确描述是(D)。A)for循环只能循环次数已经确定的情况B)for循环是先执行循环体语句,后判断终止条件C)在for循环中,不能用break语句跳出循环体D)在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来⑵对for(表达式1;;表达式3)可以理解为(B)。A)for(表达式1;0;表达式3)B)for(表达式1;1;表达式3)C)for(表达式1;表达式1;表达式3)D)for(表达式1;表达式3;表达式3)⑶若有“intm;”,则以下循环执行次数是(B)。for(m=2;m==0;)A)无限次B)0次C)1次D)2次⑷下面不是死循环的是(A)。A)for(y=0,x=1;x>++y;x=i++)i=x;B)for(;;x=++1);C)while(1){x++;}D)for(i=10;;i--)sum+=i;⑸下面程序段的运行结果是(B)。for(i=0;i<5;i++){if(i==2)continue;printf("%d",i);}A)01B)0134C)01234D)不打印⑹下面程序段的运行结果是(B)。intk=10;while(k=0)k=k-1;A)while循环执行10次B)循环是无限循环C)循环体语句一次也不执行D)循环体语句执行一次⑺执行语句“for(n=1;n++<4;);”后变量n的值是(C)。A)3B)4C)5D)不定⑻以下正确的描述是(B)。A)continue语句的作用是结束整个循环的执行B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句和continue语句的作用相同D)从多层循环嵌套中退出时,只能使用goto语句5.3写出下列程序的运行结果⑴main(){inti=0,a=0;while(i<20){for(;;)if(i%10==0)break;elsei--;i+=11;a+=i;}printf("%dn",a);}答案:32⑵main(){inti,j,b=0;for(i=0;i<3;i++)for(j=0;j<2;j++)if(j>=i)b++;printf("%dn",b);}答案:35.4下面程序的功能是从键盘输入10个无序的整数,去掉最大数和最小数,再求其平均值。请填空。main(){intj,x,max,min,sum;fioatave;printf("Enter10number:n");scanf("%d",&x);sum=max=min=x;for(j=2;j<=10;j++){scanf(“%d”,&x);sum+=x;if(x>max)max=x;elseif(xmain(){inti,s=0;for(i=0;i<=100;i++)if(i%7==0)s+=i;printf("ns=%d",s);}5.6编写程序,利用下面公式求π的近似值:π2/6=1/12+1/22+1/32+1/42+…,直到某项绝对值不大于10-12为止。#include#includemain(){longn=1;floatx,sum=0;x=1.0/(n*n);while(x>=1e-12){sum=sum+x;n++;x=1.0/(n*n);}sum=sqrt(sum*6);printf("nPI=%f,n=%ld",sum,n-1);}5.7计算键盘输入的字符数。(提示:用getchar())方法1:#include#includemain(){charc;intn=0;c=getchar();while(c!="n"){n++;c=getchar();}printf("n=%d",n);} 方法2:#includemain(){charc;intchgs=0;printf("Enteronelinechar:n");while(c=getchar()!="n")chgs++;printf("chgs=%dn",chgs);}5.8用1元人民币兑换1分、2分、5分的硬币,编程计算共有多少种不同的兑换方法。方法1:#includemain(){intx,y,z,he=0;for(x=1;x<=20;x++)for(y=1;y<=50;y++){z=100-x*5-2*y;if(z>0){he++;printf("nx=%dty=%dtz=%d",x,y,z);}}printf("nhe=%d",he);}结果:he=461方法2:#include#includemain(){intg,k,s,fa=0;for(g=1;g<=93;g++)for(k=1;k<=47;k++){s=(100-g-2*k)/5;if(g+2*k+5*s==100&&s>0)fa=fa+1;}printf("nfa=%dn",fa);}结果:fa=4615.9 编程求出1000以内的所有完全数。若一个数恰好等于它的因子之和(除自身外),则称该数为完全数,例如:6=1+2+3,故6是完全数。方法1:#include#defineM1000main(){intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;inti,a,n,s;for(a=2;a<=M;a++){n=0;s=a;for(i=1;i1)printf("%d,%d",k1,k2);if(n>2)printf(",%d",k3);if(n>3)printf(",%d",k4);if(n>4)printf(",%d",k5);if(n>5)printf(",%d",k6);if(n>6)printf(",%d",k7);if(n>7)printf(",%d",k8);if(n>8)printf(",%d",k9);if(n>9)printf(",%d",k10);printf("n");}}} 结果:6yes,factorsare1,2,328yes,factorsare1,2,4,7,14,496yes,factorsare1,2,4,7,16,31,62,124,248,方法2:#includemain(){intm,s,i;for(m=2;m<=1000;m++){s=0;for(i=1;i#includemain(){charc;intn=0;c=getchar();while(c!="n"){if(c>="0"&&c<="9")n++;c=getchar();}printf("n=%d",n);}方法2: #includemain(){charc;intdigit=0;printf("Enteronelinechar:n");while((c=getchar())!="n"){if(c>="0"&&c<="9")digit++;}printf("szgs=%dn",digit);}5.11编程求(即求1!+2!+3!+…+20!)方法1:#includemain(){floatsum=0,jc=1;intn;for(n=1;n<=20;n++){jc=n*jc;sum=sum+jc;}printf("sum=1!+2!+...20!=%fn",sum);}方法2:#includemain(){floatsum,jc;intm,i;sum=0;for(m=1;m<=20;m=m+1){jc=1;for(i=1;i<=m;i++)jc=jc*i;printf("jc=%fn",jc);sum=sum+jc;}printf("sum=%en",sum); }5.12编写程序,求出整数1~1000之间的所有同构数。所谓同构数是指此数的平方数的最后几位数与该数相等。例如,25的平方为625,376的平方为141376,所以25和376都是同构数。方法1:#includemain(){longi;for(i=1;i<=1000;i++)if(i*i%10==i||i*i%100==i||i*i%1000==i)printf("n%5d",i);}方法2:m#includemain(){longi,m,k,r,q;for(i=1;i<=1000;i++){m=i;k=m*m;while(m!=0){r=m%10;q=k%10;if(r==q){m=m/10;k=k/10;}elsebreak;}if(m==0)printf("%5d,%5d",i,i*i);}}方法3:#includemain(){longi,pf;printf("n");for(i=2;i<=1000;i++){pf=i*i;if(i==pf%10&&i<10){printf("ni=%ld,pf=%ld",i,pf);continue;}if(i==pf%100&&i<100){printf("ni=%ld,pf=%ld",i,pf);continue;}if(i==pf%1000&&i<1000)printf("ni=%ld,pf=%ld",i,pf);}}5.13编程序,输入一个正整数,输出其素数因子的乘积。例如,输入60,输出:60=2*2*3*5方法1:#include#include main(){intk,i,j;scanf("%d",&k);printf("%d:",k);i=2;while(k!=0&&i<=k){if(k%i==0){printf("%3d",i);k=k/i;i=2;}elsei++;}}方法2:#includemain(){inti,x,k;scanf("%d",&x);k=x;printf("n%d=",x);while(x!=0){for(i=2;i<=k;i++)if(x%i==0)break;x=x/i;if(i#includemain(){charss[10]="12345";gets(ss);strcat(ss,"6789");printf("%s",ss);}A)ABC6789B)ABC67C)12345ABC6D)ABC456789⑹下列程序输出结果是(C)。main(){charb[]="Hello,you";b[5]=’’;printf("%s",b); }A)Hello,youB)Hello,C)HelloD)Helloyou6.2输入10个浮点型数,求它们的和、平均值、最大值、最小值。方法1:#includemain(){floata[10],sum=0,aver,max,min;inti=0;while(i<10){scanf("%f",&a[i]);sum+=a[i];i++;}aver=sum/10.0;max=min=a[0];i=0;while(i<10){if(a[i]>max)max=a[i];elseif(a[i]main(){inti,maxi,mini;floatx[10],sum=0,ave,max,min;for(i=0;i<10;i++){scanf("%f",&x[i]);sum+=x[i];}ave=sum/10;max=min=x[0];maxi=mini=0;for(i=1;i<10;i++){if(x[i]>max){max=x[i];maxi=i;}if(x[i]main(){floatt,a[10]={12.4,3.44,4.88,5.9,6.88,77.90,65.88,4.8,0.7,6.7};inti,j,p;for(i=0;i<10;i++)printf("%10.2f",a[i]);printf("n");for(i=0;i<9;i++){p=i;for(j=i+1;j<10;j++)if(a[p]>a[j])p=j;if(p!=i){t=a[p];a[p]=a[i];a[i]=t;}}for(i=0;i<10;i++) printf("%7.2f",a[i]);}6.5从键盘上输入一个字符和一个字符串,查找输入的字符是否在输入的字符串中,若不在则输出没有找到的信息,否则输出第一个与输入字符匹配的所在位置。#include#includemain(){chara[10],c;intflag=1,i,cor;printf("ninputastr:n");gets(a);printf("ninputach:n");c=getchar();i=0;while(a[i]){if(c==a[i]){flag=0;cor=i;break;}i++;}if(flag==0)printf("nfind,No:%d",cor);elseprintf("ncannotfind");}6.6求两个矩阵的乘积,输出结果。#includemain(){inta[2][3]={1,2,3,4,5,6},b[3][2]={1,2,1,2,1,2},c[2][2];inti,j,k;for(i=0;i<3;i++)for(j=0;j<2;j++){c[i][j]=0;for(k=0;k<3;k++)c[i][j]+=a[i][k]*b[k][j];}for(i=0;i<2;i++){printf("n");for(j=0;j<2;j++)printf("%4d",c[i][j]);}} 6.7已知整型数组array有10个元素,分别为2、4、6、8、10、1、3、5、7、9,编写程序将前5个元素与后5个元素交换,交换后的元素分别为1、3、5、7、9、2、4、6、8、10。#includemain(){inta[10]={2,4,6,8,10,1,3,5,7,9},i,t;for(i=0;i<5;i++){t=a[i];a[i]=a[5+i];a[5+i]=t;}printf("n");for(i=0;i<10;i++)printf("%-6d",a[i]);}6.8输入一个十进制数,转换成二进制数并输出。#include#includemain(){longa[100],k,s=0;inti,n=0;scanf("%ld",&k);while(k!=0){a[n]=k%2;k=k/2;n++;}for(i=n-1;i>=0;i--)s+=a[i]*pow(10,i);printf("n%ld",s);}方法2:#include#includemain(){inti,s[100],x,k=0;scanf("%d",&x);while(x>0){s[k]=x%2;x=x/2;k++;}for(i=k-1;i>=0;i--)printf("%d",s[i]);}6.9将字符串中的大写字母转换成小写字母,小写字母转换成大写字母,其它字符不转换。#include#includemain() {chara[80];inti=0;gets(a);while(a[i]!=""){if(a[i]>="A"&&a[i]<="Z")a[i]+=32;elseif(a[i]>="a"&&a[i]<="z")a[i]-=32;i++;}printf("n");puts(a);}方法2:main(){charx[]="dhgfhf33485SDHDbcjd980";inti=0;printf("n%s",x);while(x[i]!=""){if(x[i]>="A"&&x[i]<="Z")x[i]=x[i]+32;elseif(x[i]>="a"&&x[i]<="z")x[i]=x[i]-32;i++;}printf("n%s",x);}6.10在不使用系统函数strcat的情况下,实现两个字符串连接。#include#includemain(){chara[80],b[80];intn,i,j,m;printf("ninputastr:");gets(a);printf("ninputbstr:");gets(b);n=strlen(a);m=strlen(b);i=0;while(b[i]!=""){a[i+n]=b[i];i++;} a[n+m]="";printf("n");puts(a);}6.11从字符串中删除所有指定字符。#include#includemain(){chara[80],c;inti,j,n;printf("inputastr:");gets(a);printf("inputachar:");c=getchar();i=0;n=strlen(a);for(i=0,j=0;i#includemain(){chars1[80],s2[80];inti,j;printf("inputs1:");gets(s1);i=0;j=0;while(s1[i]!=""){if(s1[i]%2==0&&i%2==0)s2[j++]=s1[i];i++;s2[j]="";}printf("n%s",s2);} 6.13有一行电文,已按下面规律译成密码:A→Za→zB→Yb→yC→Xc→x即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编程序将密码译回原文,并打印出密码和原文。#include#includemain(){chara[100],b[100];inti,n;gets(a);n=strlen(a);i=0;while(a[i]!=""){if(a[i]>="a"&&a[i]<="z")b[i]=219-a[i];elseif(a[i]>="A"&&a[i]<="Z")b[i]=155-a[i];elseb[i]=a[i];i++;}b[i]="";printf("na:%snb:%s",a,b);}方法2:#include#includemain(){charx[]="dhgfhf33485SDHDbcjd980";inti=0;printf("n%s",x);while(x[i]!=""){if(x[i]>="A"&&x[i]<="Z")x[i]=155-x[i];elseif(x[i]>="a"&&x[i]<="z")x[i]=219-x[i];i++;}printf("n%s",x);} 第七章习题7.1选择题:⑴若有以下定义:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是(D)。A)a[i]B)*(&a[i])C)p[i]D)*(*(a+i))⑵以下程序的输出结果是(A)。main(){inta[]={2,4,6,8},*p=a,i;for(i=0;i<4;i++)a[i]=*p++;printf("n%d",a[2]);}A)6B)8C)4D)2⑶以下程序的输出结果是(A)。main(){inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf("n%d",*(p+2));}A)3B)4C)1D)2⑷以下程序的输出结果是(B)。main(){inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[1];printf("n%d",*p+5);}A)6B)7C)8D)2⑸以下程序的输出结果是(C)。main(){inta[]={2,4,6,8,10},y=1,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%dn",y);}A)17B)18C)19D)20⑹以下程序的输出结果是(C)。main(){char*p[]={"BOOL","OPK","H","SP"};inti; for(i=3;i>=0;i--,i--)printf("%c",*p[i]);}A)SPB)SHC)SOD)SB⑺以下程序的输出结果是(A)。main(){inta[3][3]={{2},{4},{6}},i,*p;p=*a;for(i=0;i<2;i++){if(i==0)a[i][i+1]=*p+1;else++p;printf("%d",*p);}}A)23B)26C)33D)36⑻以下程序的输出结果是(B)。main(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i+1;printf("%d",a[1][2]);}A)3B)6C)9D)5⑼以下程序的输出结果是(A)。main(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int(*p)[4]=a,i,j,k=0;for(i=0;i<3;i++)for(j=0;j<2;j++)k+=*(*(p+i)+j);printf("n%d",k);}A)60B)68C)99D)108⑽以下程序的输出结果是(C)。main(){inta[]={2,4,6,8,10},*p,**k;p=a;k=&p; printf("n%d",*(p++));printf("%d",**k);}A)44B)22C)24D)46以下习题要求用指针方法来完成。7.2输入3个整数,由小到大输出。main(){inta[3],i,t,*p;for(p=a;p*(p+1)){t=*p;*p=*(p+1);*(p+1)=t;}if(*p>*(p+2)){t=*p;*p=*(p+2);*(p+2)=t;}if(*(p+1)>*(p+2)){t=*(p+1);*(p+1)=*(p+2);*(p+2)=t;}for(i=0;i<3;i++)printf("n%d",*p++);}方法2main(){inta[3],i,t,*p=a;for(p=a;pp[1]){t=p[0];p[0]=p[1];p[1]=t;}if(p[0]>p[2]){t=p[0];p[0]=p[2];p[2]=t;}if(p[1]>p[2]){t=p[1];p[1]=p[2];p[2]=t;}for(i=0;i<3;i++)printf("n%7d",a[i]);}方法3main(){inta,b,c,*p1,*p2,*p3,*t;p1=&a;p2=&b;p3=&c;scanf("%d,%d,%d",p1,p2,p3);if(*p1>*p2){t=p1;p1=p2;p2=t;}if(*p1>*p3){t=p1;p1=p3;p3=t;}if(*p2>*p3){t=p2;p2=p3;p3=t;}printf("n%d,%d,%d",a,b,c);printf("n%d,%d,%d",*p1,*p2,*p3);}7.3将一个3×3的整型数矩阵转置。(下标法)main(){inta[3][3]={1,2,3,4,5,6,7,8,9},i,j,t;for(i=0;i<3;i++) {printf("n");for(j=0;j<3;j++)printf("%4d",a[i][j]);}for(i=0;i<3;i++)for(j=0;j*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}printf("n");for(p=a;pp[j+1]){t=p[j];p[j]=p[j+1];p[j+1]=t;}printf("n");for(p=a;p*(p+j)){t=p[i];p[i]=p[j];p[j]=t;}printf("n");for(i=0;i<10;i++)printf("%3d",*(p+i));}7.5将一数组元素的数值按逆序重新存放。(指针法)#includemain(){charc,*p1,*p2,a[80];inti=0,n;gets(a);n=strlen(a);printf("n%s",a);p1=a;p2=a+n-1;while(i#defineN9main(){inta[9]={1,2,3,4,5,6,7,8,9},temp,i,j,m;printf("Theoriginalarray:n");for(i=0;imain(){intI,m,b[10],a[10]={2,4,6,8,1,3,5,7,0,0};printf("ninputm:");scanf("%d",&m);for(i=0;i=m;i--)a[i]=a[i-m];for(i=0;imain(){inta[3][4]={{1,3,58,2},{3,44,12,13},{55,56,21,4}};inti,j,max=a[0][0],*p=a[0];for(i=0;i<3;i++){printf("n");for(j=0;j<4;j++){printf("%4d",*(p+i*3+j));if(max<*(p+i*3+j))max=*(p+i*3+j);}}printf("nmax=%3dn",max);}7.8将字符串s1中的ASCII码为奇数,下标为偶数的字符复制到字符数组s2中。#includemain(){char*s1="abccccddddef",s2[40],*p1,*p2;inti=0;p1=s1;p2=s2;while(*p1){if((*p1%2!=0)&&(i%2==0))*p2++=*p1++;else*p1++;i++;}*p2="";printf("%sn",s2);}7.9若有字符串“ab*cde*fg*****”,删除字符串最后的“*”,删除后的字符串为“ab*cde*fg”。#includemain(){chars[]="ab*cde*fg****",*p1;intn;n=strlen(s);p1=s+n-1;while(*p1)if(*p1=="*")p1--;elsebreak;*++p1="";printf("%sn",s);}7.10已知字符串s1和s2,先求其长度,若长度不等,在字符串左侧用“*”补齐,并输出字符串;否则直接输出字符串。 #includemain(){chara[30],b[30],*p;intn,m,k,i;printf("ninputa:");gets(a);printf("ninputb:");gets(b);n=strlen(a);m=strlen(b);if(n==m)printf("n%sn%s",a,b);if(n>m){i=0;k=n-m;p=b+m-1;while(i#includemain(){charstr1[20],str2[20],*p1,*p2;intsum=0;printf("pleaseinputtwostringsn");gets(str1);gets(str2);p1=str1;p2=str2;while(*p1!=""){if(*p1==*p2)while(*p1==*p2&&*p2!="") {p1++;p2++;}elsep1++;if(*p2=="")sum++;p2=str2;}printf("%d",sum);}7.12已知有n个字符串数组,将字符串数组排序后(索引)输出。方法1:定义及初始化提供字符串#include#includemain(){char*a[]={"aaa","ccc","aass","u8989","0000000"},*p;inti,j;for(i=0;i<5;i++)printf("n%9s",a[i]);for(i=0;i<4;i++)for(j=0;j<5-i-1;j++)if(strcmp(a[j],a[j+1])>0){p=a[j];a[j]=a[j+1];a[j+1]=p;}for(i=0;i<5;i++)printf("n%s",a[i]);}方法2:键盘输入n个字符串,将字符串数组排序后输出*/#include#includemain(){chara[5][20],s[80];inti,j;for(i=0;i<5;i++)gets(a[i]);for(i=0;i<5;i++)printf("n%s",a[i]);for(i=0;i<4;i++)for(j=0;j<5-i-1;j++)if(strcmp(a[j],a[j+1])>0){strcpy(s,a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],s);} for(i=0;i<5;i++)printf("n%s",a[i]);}7.13.输入一字符串,找出其中大写字母、小写字母、空格、数字以及其它字符各有多少。#include#includemain(){char*p,a[80];intdx=0,xx=0,kg=0,sz=0,qt=0;p=a;gets(p);while(*p!=’’){if(*p>="0"&&*p<="9")sz++;elseif(*p>="A"&&*p<="Z")dx++;elseif(*p>="a"&&*p<="z")xx++;elseif(*p=="")kg++;elseqt++;p++;}printf("ndx=%dnxx=%dnkg=%dnsz=%dnqt=%d",dx,xx,kg,sz,qt);}7.14从键盘上输入两个字符串a和b,在字符串a中的ASCII值最大的元素后面插入字符串b。#include#includemain(){charc,s1[80],s2[40];inti=0,k,n,m;printf("ninputstring1:");scanf("%s",s1);printf("ninputstring2:");scanf("%s",s2);n=strlen(s1);m=strlen(s2);c=s1[0];for(i=0;i实现的D)一个函数只可有一个返回值⑺下列函数fun()被调用了3次,a的值是(D)。fun(){staticinta=1;++a;}A)1B)2C)3D)48.2程序填空:⑴下面函数是求阶乘的递归调用函数,请将程序补充完整。longfacto(intn){if(n<0)printf("dataerrorn");if(n==1||n==0)return1;elsereturnn*facto(n-1);}⑵函数Sum(intn)是用递归方法计算的值,请补充程序中缺少的内容。intSum(intn){if(n<=0)printf("dataerrorn");if(n==1)return1;elsereturn(sum(n-1)+n);}8.3编写一个函数sabc(),根据给定的三角形三条边长a,b,c,返回三角形的面积。#include#includefloatfac(inta,intb,intc){floats,p;p=(a+b+c)/2.0;s=sqrt(p*(p-a)*(p-b)*(p-c)); return(s);}main(){inta,b,c;floats;while(1){printf("nEntera,b,c:");scanf("%d,%d,%d",&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a)break;}s=fac(a,b,c);printf("s=%f",s);}8.4编写一个求水仙花数的函数,求100到999之间的全部水仙花数。水仙花数是指一个三位数,其各位数字立方的和等于该数。例如:153就是一个水仙花数:153=1×1×1+5×5×5+3×3×3方法1:intfac(intn){ints=0,r;while(n!=0){r=n%10;s+=r*r*r;n=n/10;}return(s);}main(){inti;for(i=100;i<=999;i++)if(fac(i)==i)printf("%4d",i);}/*水仙花数*/方法2:#include#includemain(){inti,yes;for(i=100;i<1000;i++){yes=pd(i);if(yes==1)printf("%d5d",i);}}intpd(intx){intk,ys,he=0;k=x;while(x!=0){ys=x%10; he=he+ys*ys*ys;x=x/10;}if(k==he)return(1);elsereturn(0);}/*水仙花数*/方法3:#include#includeintfac(intn){ints,r,h,m;r=n/100;m=n/10%10;h=n%10;s=r*r*r+m*m*m+h*h*h;return(s);}main(){inti,m;for(i=100;i<1000;i++)if(fac(i)==i)printf("%4d",i);}8.5编写一个判断字符串是否为“回文”的函数,如果是回文数则函数的返回值为1,不是回文数则返回0。所谓“回文”数是指顺读与倒读都相同的字符串,例如“ABCDCBA”。方法1:intfac(chars[],intn){inti=0,f;while(i=n/2)f=1;elsef=0;return(f);}#includemain(){chara[90]; intm,h;gets(a);m=strlen(a);if(fac(a,m))printf("n%syesn",a);elseprintf("%sno",a);}/*回纹字符串*/方法2intfac(chars[],intn){char*p1,*p2;inti=0,f;;p1=s;p2=s+n-1;while(i=n/2)f=1;elsef=0;return(f);}#includemain(){chara[90];intm,h;gets(a);m=strlen(a);if(fac(a,m))printf("n%syesn",a);elseprintf("%sno",a);}/*回纹字符串*/方法3#include#includemain(){charstr[100];gets(str);abcbaif(pd(str)==1)printf("yes!");elseprintf("no!");}intpd(charx[]){intcd,i=0;charb[100];cd=strlen(x);printf("ncd=%dn",cd);while(x[i]!=""){b[cd-i-1]=x[i]; i++;}b[cd]="";puts(x);puts(b);if(strcmp(x,b)==0)return(1);elsereturn(0);}8.6从键盘输入10个浮点数,求出其和及平均值。要求编写求和及求平均值的函数。floatsum(floatsz[]);floataver(floatsz[]);main(){inti;floatx[10];for(i=0;i<10;i++)scanf("%f",&x[i]);printf("nsum=%f",sum(x));printf("nnave=%f",aver(x));}floatsum(floatsz[]){inti;floathe=0.0;for(i=0;i<10;i++)he=he+sz[i];return(he);}floataver(floatsz[]){intav;av=sum(sz)/10;return(av);}8.7编写函数,统计一个字符串中的字符、数字、空格。主函数提供字符串。方法1:(全局变量)#include#include#includeintsz=0,kg=0,zm=0,qt=0;intfac(chars[]){inti=0;while(s[i]!=""){if(s[i]>="a"&&s[i]<="z"||s[i]>="A"&&s[i]<="Z")zm++;elseif(s[i]>="0"&&s[i]<="9")sz++;elseif(s[i]=="")kg++;elseqt++;i++;}} main(){chara[90];gets(a);fac(a);printf("sz=%4dnzm=%4dnkg=%4dnqt=%4d",sz,zm,kg,qt);}方法2:#include#includeinttj(charc[],charc1,charc2);main(){charx[100];intzf=0,sz=0,kg=0;gets(x);printf("n%s",x);zf=tj(x,"A","Z")+tj(x,"a","z");sz=tj(x,"0","9");kg=tj(x,"","");printf("zf=%dnsz=%dnkg=%dn",zf,sz,kg);}inttj(charc[],charc1,charc2){inti=0,he=0;while(c[i]!=""){if(c[i]>=c1&&c[i]<=c2)he++;i++;}return(he);}8.8编写一个递归函数,计算并返回菲波那契(Fibonacci)数列中第n项的值。菲波那契数列的定义如下:Fib(1)=1,Fib(2)=1,Fib(n)=Fib(n-1)+Fib(n-2)方法1:#include#includelongfib(intn){longf;if(n==1||n==2)f=1;elsef=fib(n-2)+fib(n-1);return(f);}main(){longf; intn,i;scanf("%d",&n);for(i=1;i<=n;i++){printf("%12ld",fib(i));if(i%5==0)printf("n");}}方法2:#include#includeintfbn(intx);main(){intn;longfn;scanf("%d",&n);fn=fbn(n);printf("fbn=%ldn",fn);}intfbn(intx){intf;if(x<=2)f=1;elsef=fbn(x-2)+fbn(x-1);return(f);}8.9编写一个函数,将一个二维数组中的行、列元素互换,例如,把二维数组A[6][5]中的各个元素A[i][j]存入二维数组B[5][6]中的对应元素B[j][i]。#include#includevoidfac(inta[][5],intb[][6],intn){inti,j;for(i=0;isex);B)scanf("%s",stu.name);C)scanf("%d",&stu.age);D)scanf("%f",p->score);⑶设p为指向结构体变量的指针,num为该结构体的一个成员,y为一整型变量,则y=++p->num;与(D)等价。A)++p;y=p->num;B)y=(++p)->num;C)++(p->num);y=p->num;D)y=p->num;++y;⑷设有类型说明:enumcolor{red,yellow=4,white,black};则执行语句“printf("%d",white);”后的输出是(A)。A)5B)2C)1D)0⑸说明语句“enummone{Fen,Jiao,Yuan=100,Tenyuan};”每个枚举量所对应的实际值为:(A)。A)0,1,100,101B)1,2,100,101C)“Fen”或1,“Jiao”或2,“Yuan”或100,“Tenyuan”或101D)“Fen”,“Jiao”,“Yuan”,“Tenyuan”9.2定义一个结构体变量,成员包括:姓名、住址、电话号码。9.3设有定义struct {intm;char*pd;}t[]={{1,"ab"},{2,"cd"}),*p=t;求表达式*p->pd和表达式*(++p)->pd+(p-1)->m的值。9.4写出程序运行的结果。#includestructframe{inta;int*b;}*s;main(){intx[]={10,11},y[]={13,114},z[]={15,18};staticstructframefrm[]={{9,x},{12,y},{16,z}};s=frm;printf("%dt",*++s->b+s->a);printf("%dt",*++(++s)->b);printf("%dt",*++s->b);}9.5编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包含num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。9.6链表a和链表b是按学号升序排序的链表,链表结点包括学号和成绩,把这两个链表合并成一个按学号升序排序的链表c。9.7有两个链表a和b,设结点中包含学号、姓名。从a链表中删去与b链表中有相同学号的那些结点。9.8将一个链表按逆序排序,即将链头当链尾,链尾当链头。9.9整型在内存中占4个字节,编写一程序,将四个字符拼成一个长整型(long)数据。编写一个子函数将四个字节的内容作为一个long型数据输出。9.10已知head1指向一个单向链表的头结点,其结点数据包含学号(num)、姓名(name)、英语成绩(english)、数学成绩(math)、指针(next)。编程建立一个新链表,其中的结点数据包含学号(num)、姓名(name)、平均成绩(ave)、指针(next),且每个结点的平均成绩(ave)为head1所指向链表相应结点学生的课程平均成绩,新链表用head2指向其头结点。9.11请定义枚举类型,用枚举元素代表人民币的面值,包括1分、2分和5分,并编程输出要使若干上述面值的人民币之和为5角钱,可以有多少不同的组合?(要求每种面值至少有一个。)第十章习题10.1阅读以下程序,写出文件abc的内容。#include#includemain(){FILE*fp;char*str1="one",*str2="two";if((fp=fopen("abc","w+"))==NULL){printf("Cannotopenfile.n");exit(0);} fwrite(str2,3,1,fp);fseek(fp,0,0);fwrite(str1,2,1,fp);fclose(fp);}答案:ono2.阅读以下程序,写出程序运行结果。#include#includemain(){FILE*fp;chara[8][6]={"one","two","three","four","five","six","seven","eight"};inti;if((fp=fopen("bbb","w+"))==NULL){printf("Cannotopenfile.n");exit(0);}for(i=0;i<8;i++){fputs(a[i],fp);fputs("n",fp);}rewind(fp);for(i=0;i<8;i++){fgets(a[i],7,fp);if(i%2==0)printf("%sn",a[i]);}fclose(fp);}答案:onethreefiveseven10.3编程建立一个名为file1的文件,并将键盘输入的字符存入该文件,当输入的是字符“$”时,结束输入。#include#includemain(){charch="";FILE*fp;fp=fopen("file1","w");while(ch!="$"){ch=getchar();fputc(ch,fp);}fclose(fp);}10.4编写程序,该程序的功能是用来统计文件file1中字符的个数。#include #includemain(){charch;intgs=0;FILE*fp;fp=fopen("file1","r");while(!feof(fp)){ch=fgetc(fp);putchar(ch);gs++;}fclose(fp);printf("zfgs=%d",gs-1);}10.5建立一个学生四、六级英语考试成绩的文件(未参加考试的成绩标记0)。要求每个学生记录含准考证号、姓名、班级、成绩和考试时间共5个字段,学生数30人。10.6编写一个程序,已知文件stud有20条学生记录,包括姓名和成绩,现要求显示文件stud中成绩大于80分的学生姓名和成绩。10.7编写程序:主函数从命令行读入一个文件名,然后调用函数betline从文件中读入一个字符串放到字符数组str中(字符个数最多为100个),函数返回字符串的长度,在主函数中输出字符串及其长度。10.8设有一文件student.dat中存放着学生的基本情况,这些情况由以下结构体来描述:structstudent{longintnum;/*学号*/charname[10];/*姓名*/intage;/*年龄*/charspeciality[20];/*专业*/charaddr[40];/*住址*/}请编程序,输出学号在970101~970135之间的学生学号、姓名、年龄和专业。 第十一章习题11.1填空题⑴以下程序的输出结果是(9)。#definef(x)x*xmain(){inta=6,b=2,c;c=f(a)/f(b);printf("%dn",c);}⑵有如下程序,该程序中的for循环执行的次数是(6)。#defineN2#defineMN+1#defineNUM2*M+1main(){inti;for(i=1;imain(){ inta,b,c,d;charstring[]="TABLE";clrscr();a=1;b=2;c=3;d=4;PRI(D1,a);PRI(D2,a,b);PRI(D3,a,b,c);PRI(D4,a,b,c,d);PRI(S,string);}答案:1121231234TABLE11.2试说明预处理命令“#include"file.h"”与“#include”的同异。11.3试定义一个带参数的宏swap(x,y),以实现两个整数之间的交换,并利用它将一维数组a和b的值进行交换。11.4编写一个程序,定义一个宏AREA(a,b,c),用于求一个边长为a、b和c的三角形的面积。已知三边求面积area公式为:s=(a+b+c)/2area=sqrt(s(s-a)(s-b)(s-c))11.5编写一个程序,求三个数中的最大者,要求用带参数的宏来实现。'