c语言课后习题参考答案.pdf
第 1 章习题参考答案1、2、选择题(DC(6)D填空题(1)函数、(2)C(7)C(3)D A(4)B(9)A(5)D(10)C一个主函数、函数。lzXI/3579zf/txzk连 接。main.h.exeQUS*/o#。(6)/*.*/o(8)F5 o(10).exe obj .exe。3、(1)(2)程序设计题#include void main()printf(printf(printf(*S*n);*n);#include void main()pnntf(”*n)printf(Your are welcome!n);printf(3)#include void main()(char cl,c2;printf(请输入c l和c2的值:”);cl=getchar();scanf(%c”,&c2);printf(c l=%cn,c 1);printf(,c2=,);putchar(c2);printf(nnH);第 2 章 习题参考答案1、简述算法的概念。答:算法就是为解决一个具体的问题而使用的确定的、有限的方法和步骤。2、算法应具备哪些特性?答:算法应具备有穷性、确定性、可行性、输入、输出等五种特性。3、分别说明什么是自然语言描述法?什么是框图语言描述法?什么是伪语言描述法?什么是N-S框图语言描述法?它们的优缺点各是什么?答:用人们I I常使用的语言来描述算法,称为算法的自然语言描述法。框图语言描述法是用一些特殊符号来描述算法流程的算法。N-S框图语言描述法是种将具体的功能都写在一个矩形框内,框内又可以包含其他的从属框的描述方法。伪语言描述法是用介于自然语言和计算机语言之间的文字符号来描述算法。(优缺点略)4、在结构化程序设计方法中,有咖几种基本结构?答:在结构化程序设计方法中有顺序结构、分支结构和循环结构三种。5、请用伪语言写出打印乘法九九口诀表的算法。参考算法如下:初始化i=lj=lprintf(%d*%d=%-3d,i,j,i*j);/-3d 表示左对齐,占 3 位j+列号加1如果列号j=行号i 转到。i+行号加1如果行号i 10转到。算法结束。第 3 章习题参考答案1、选择题(DC(2)C(3)D(4)D(5)D(6)D(7)C(8)A(9)B(10)B(H)A(16)C(12)A(13)C(14)B(15)A(17)B(18)A(19)B(20)C2、填空题 a%2!=0 或 a%2=l0 (2)0。(3),0 o (4)3.5 o(5)0(6)3.5 o(7)4.5 o3、程序设计题(1):#include main()(float r=0,h=0,l=0,v=0,pi=0;pi=3.1415926;printf(“请输入圆半径及圆柱的高,用逗号分隔:);scanf(n%f,%fH,&r,&h);l=2*pi*r;v二 pi*r*r*h;printf(圆周长 为:%6.2fn,l);printf(圆柱体积为:%6.2fnH,v);)(2):#includemain()(char c l=,C,c2=,h,c3=i,c4=n,c5=,a,;printf(原字符 为:%c%c%c%c%cnM,cl,c2,c3,c4,c5);cl+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(加密后的字符为:%c%c%c%c%cn;c 1 ,c2,c3,c4,c5);c l=,T,c2=o,c3=d,c4=a,c5=y,;printf(题目(2)原字符 为:%c%c%c%c%cnH,c 1 ,c2,c3,c4,c5);/*c 1 =w,c2=x,c3=V,c4=z,c5=w;*/cl-=22;c 2-=2 2;c 3-=2 2;c 4-=2 2;c 5-=2 2;p r i n t f(题目(2)加密后的字符为:%c%c%c%c%c n ,c 1 ,c 2,c 3,c 4,c 5);p r i n t f(题目(3)原字符为:%c%c%c%c%c n ,c l,c 2,c 3,c 4,c 5);c l-=4;c 2-=4;c 3-=4;c 4-=4;c 5-=4;p r i n t f(题目(3)加密后的字符为:%c%c%c%c%c n ,c 1 ,c 2,c 3,c 4,c 5);)(3):#i n c l u d e m a i n()(l o n g x=0;i n t h=0,m=0,s=0;p r i n t f(请输入秒数,为一个正整数:”);s c a n f(M%dM,&x);h=x/3 6 0 0;m=x%3 6 0 0/6 0;s=x%3 6 0 0%6 0;p r i n t f(你输入的秒数为%d小时 d分%(1秒 n”,h,m,s);)第4章习题参考答案1,选择题(D C (2)C C (4)B D(6)B (7)C (8)A (9)A2、填空题 i 1 0(2)_ i 1 0(3)5 4 3 2 1 ,(4)x%3=0 II x%7=0、f=l o3.程序阅读题(1)pass(2)1204、程序设计题(1)参考程序:#include int main(void)(int number;printf(nEnter a number:);scanf(,%d&number);if(number 0)(number=-number;)printf(The absolute value is%d.n,number);return 0;)Enter a number:10The absolute value is 10.Enter a number:-300The absolute value is 300.(2)参考程序:#includevoid main()(int n=0;printf(*input a stringnu);while(getchar()!=n,)n+;printf(n%d,n);)(3)参考程序:#includevoid main()(int n,i;for(n=2;n=100;n+)for(i=2;i=n)printfCt%du,n);)(4)参考程序:#include main()(double sum=0;double tmp=1;int mul=1;int i;for(i=l;i=50;i+)(tmp*=i;sum+=tmp*mul;mul*=-1;printf(nl!-2!+3!-4!+.+49!-50!=%esum);)(5)参考程序:/*输 入 10个字符,分别统计出其中空格或回车、数字和其他字符的个数。*/#include int main(void)(int blank,digit,i,other;/*定义3 个变量分别存放统计结果*/char ch;blank=digit=other=0;/*置存放统计结果的3 个变量的初值为零*/printf(Enter 10 characters:);/*输入提示*/for(i=1;i=10;i+)/*循环执行了 10 次*/ch=getchar();/*输入一个字符*/在 switch语句中灵活应用break*/switch(ch)case 11:/*语句段为空,请注意空格的表示*/case In:blank+;/*2 个常量表达式一和.共用该语句段*/break;/*跳出 switch 语句*/case 0:case T :case 2 :case 3:case 4 :case 5 :case 6:case 7:case 8 :case 9 :digit+;/*10个常量表达式O 9共用该语句段*/break;default:other+;break;/*跳出switch语 句*/*累加其他字符*/*跳出switch语 句*/)printf(blank=%d,digit=%d,other=%dn,blank,digit,other);return 0;)第 5 章习题参考答案1、选择题(DA(2)D(3)D(4)A(5)C(6)D(7)D(8)B(9)A(10)D2、填空题(1)6 个字节。(2)you&nieo(4)6 o3、程序设计题(1)main()(int a9J,i,temp;for(i=0;i10;i+)scanf(d”,&ai);for(i=0;i10;i+)printf(n%d M,ai);printf(nH);for(i=0;i5;i+)(temp=ai;ai=a9-i;a9-i=temp;for(i=0;i10;i+)printf(n%d M,ai);printf(n);卜(2)main()(int a8=2,8,7,6,4,28,70,25);int b8=79,27,32,41,57,66,78,80;int c8,i;for(i=0;i8;i+)ci=ai+bi;for(i=0;i8;i+)printf(dr,ai);printf(n);for(i=0;i8;i+)printf(dt”,bi);printf(nn);for(i=0;i8;i+)printf(n%dt,ci);printf(n);一(3)main()(int a44=25,36,78,13,12,26,88,93,75,18,22,32,56,44,36,58;int duil=0,dui2=0,i,j,temp;for(i=0;i4;i+)for(j=0;j4;j+)(if(i=j)duil+=aij;if(i+j=3)dui2+=ai 皿;)for(i=0;i4;i+)(for(j=0;j4;j+)printf(M%dtM,aij);printf(nn);)printf(dui 1 =%dtdui2=%dn,dui 1 ,dui2);for(i=0;i4;i+)(temp=aOi;a0i=a2i;a2i=temp;)for(i=0;i4;i+)(for(j=0;j4;j+)printf(%dt,aij);printf(n);1、选择题(DA(2)B(6)D(7)B2、填空题(1)I=7;j=6;x=7;I=2;j=7;x=5;(2)1 1 1(3)max is 2(4)x=2 y=3 z-0 x=4 y=9 z=5x=2 y=3 z-0三、程序设计题1、#include stdio.hint prime(int n)第6章习题参考答案(3)C(4)B(5)D(8)D(9)B(10)Dint i;for(i=2;in;i+)(if(n%i=O)return 0;)return 1;)void main()(int n;scanf(%d&n);if(prime(n)printf(该数是个素数n);elseprintf(该数不是个素数n);I2、#include stdio.hvoid fun(int a,int b,int n)(inti;for(i=0;in;i+)b(ai/10)+;)void main()(int i,a100=9,18,27,38,59,33,14,75,38,b6=0;fun(a,b,9);printf(nThe result is:);for(i=0;iv6;i+)printf(n%d H,bi);printf(nnn);)第 7 章 习题参考答案1.单项选择题1)A 2)B 3)CA 10)C11)B 12)C 13)DD 20)B4)C 5)A 6)D14)A 15)B 16)D7)A17)D8)D 9)18)A 19)2.填空题(1)8 4(6)int*(11)int*(2)3 5(7)-1(12)*z(3)0(4)7(5)0(8)*sn(9)*x(10)t3.程序设计题(1)编写一个函数,将数组中n 个数按反序存放。void inv(int*x,int n)int*p,m,t,*i,*j;m=(n-l)/2;i=x;j=x+n-l;p=x+m;for(;i=p;i+,j-)t=*i;*i=*j;*j=t;return;)main()int i,arr10,*p=arr;printf(The original an*ay:nH);for(i=0;i 10;i+,p+)scanf(n%dn,p);printf(nn);p=arr;/*pay attention to reassigning for p*/inv(p,10);printf(n The array has been inverted:n);for(p=arr;parr+10;p+)printf(H%d,*p);printf(n)(2)用地址法输入输出二维数组各元素。#include main()int a34;int i,j;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,ai+j);/*地址法*/for(i=0;i3;i+)(for(j=0;j4;j+)printf(%4d,*(ai+j);/*(ai+j)是地址法所表示的数组元素*/printf();)运行程序:1 2 3 4 5 6 7 8 9 10 11 121 2 3 45 6 7 89 1 0 1 1 1 2(3)用指针法输入输出二维数组各元素。#includemain()(int a34,*ptr;int i,j;ptr=a0J;for(i=0;i3;i+)for(j=0;j 4;j+)scanf(%d,ptr+);/*指针的表示方法*/ptr=aO;for(i=0;i3;i+)(for(j=0;ja(*p_abc).a34三、程序分析题(5 小题)题号12345答案9name:zhong total=170.0000name:wang total=150.00000DDBBCCQian,p,95,9220098 703.000000四、程序设计题(4 小题)1、#define N 3struct person char*name;float wages;float floatwages;float expenditure;float realpay;);main()struct person pN;int i=0;for(i=0;iN;i+)scanf(H%s,%f,%f,%f,pi.name,&pi.wages,&pi.floatwages,&pi.expenditure);pi.realpay=pi.wages+pi.floatwages+pi.expenditure;for(i=0;iN;i+)printf(%s,%fn,pi.name,pi.realpay);2、#define N 10struct student long number;char*name;float score4;);main()struct student stuNl;int i,max_i=0;float maxscanf(n%ld,%s,%f,%f,%f,&stu0.number,stu0.name,&stu0.score0,&stu0.scorefl,&stu0.score2);max=stu0.score3=stu0.score0+stu0.scorel+stu0.score2;for(i=l;iN;i+)scanf(n%ld,%s,%f,%f,%f,&stui.number,stui.name,&stui.score0,&stui.score I,&stui.score2);stui.score3=stui.score0+stui.scorel+stui.score2;if(maxstuli.score3)max=stui.score3,max_i=i;)printf(,max:%s,%f,stumax_i.name,stumax_i.score3);3、#include Hstdio.hnstruct student char*name;float cc;float sql;float c;float ave;main()struct student stu4;int i=0;for(;i4;i+)scanf(u%s,%f,%f,%f,stui.name,&stui.cc,&stui.sql,&stui.c);stui.ave=(stui.cc+stui.sql+stui.c)/3.0;for(i=0;i4;i+)printf(n%s,%f,stui.name,stui.ave);)4、#include stdio.h#include stdlib.h,/*定义链表数据结构*/typedef struct nodefloat data;/*这里设数据类型为float*/struct node*next;JLnode;Lnode*a,*b;/*建立a 链 表*/Lnode*newcreate(Lnode*a,int n)/*建立 n 个元素的 a 链表*/int i;float x;Lnode*q,*s;q=a;for(i=0;idata=x;q-next=s;q=q-next;return(a);/*求 a 链表的所有数据之和*/float sum(Lnode*a)float total=0.0;Lnode*p;p=a-next;/*p指向a 的第一个结点*/while(p)total=total+(p-data);p=p-next;)return total;1/*将 b 链接到a 的后面*/Lnode*relation(Lnode*a,Lnode*b)Lnode*q,*p;q=a;p=a-next;while(p)q=p;p=p-next;q-next=b;return(a);)main()第9章习题参考答案1、选择题(DD(2)C(3)C(4)B(5)C(6)C(7)D(8)C(9)A(10)D(IDA(12)B(13)A2、填空题(1)逻辑位运算、移位运算。(2)按位取反。(3)0,(4)复合赋值位运算符。(5)右对齐、Q、。、lo(7)11110000 O(9)a=-(aAa)(ll)a=0125002整型。(8)aA=a(10)x=(xlffOO)l(x&OOff)o(12)ch=chl323、程序设计题(1)/*题目:取一个整数a从右端开始的4 7位。程序分析:可以这样考虑:(1)先使a右移4位。(2)设置一个低4位全为1,其余全为0的数。可用(0vv4)(3)将上面二者进行&.运算。*/#include void main()(unsigned a,b,c,d;scanf(o”,&a);b=a4;c=(0v4);d=b&c;printf(on%on”,a,d);)(2)#include void main()struct bitunsigned a:3;unsigned b:2;unsigned c:2;unsigned类型的数据在VC6.0中为4个字节*/unsigned x:32(3+2+2);/*定义25位不使用的位段*/unsigned d:4;/*d另起一个存储单元*/unsigned f:7;s=123,0,4,5;/*初始化*/printf(%d%d%d%d%d%dn,s.a,s.b,s.c,s.x,s.d,s.f);第10章习题参考答案1、选择题(DD(2)B(3)C(4)B(5)C(6)C、D(7)A(8)D(9)D(10)C(H)C(12)A(13)B2、填空题(l)fputc(A,fp):、fputs(Hello!,fp);。(2)fscanf(fp?%d,%d,%d&a,&b,&c);o(3)“r”、w 、“a+”(4)!feof(fl)f 2、fclose(fl)fclose(f2)o(5)fo D cn d n am cJw)ch(6)“r、(!feof(fp)fgetc(fp)o CCCCBBBBAAAA。3、程序填空题score.dati+1“s”mamescanf(%d”,&age);scanf(,&score);s,%d,%Ffclose(fp);4、程序设计题/*源文件名:xiti41.c功能:读 取 个文件的内容并显示出来。*/#includevoid main()(FILE*fp;/*定义一个文件指针*/char c;if(fp=fopen(C:boot.ini,;,rtH)=NULL)printf(Hfile can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/exit(l);c=fgetc(fp);/*从文件中逐个读取字符*/*只要读出的字符没有到文件尾就把该字符显示在屏幕上*/while(c!=EOF)(putchar(c);c=fgetc(fp);)printf(nn);fclose(fp);(2)/*源文件名:xiti42.c功能:读取一个文件的内容并显示出来。*/#includevoid main()(FILE*fp;/*定义一个文件指针*/char ch;int i;if(fp=fopen(C:boot.ini,;rtH)=NULL)(printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入字符,结束程序*/exit(l);)for(i=0;i10;i+)(if(feof(fp)break;/*如果是文件尾,则退出循环*/ch=fgetc(fp);putchar(ch);)printf(nnn);fclose(fp);(3)/*源文件名:xiti43.c功能:写一行字符到文件中,然后读取文件的内容并显示出来。*/#includevoid main()(FILE*fp;/*定义一个文件指针*/char c;if(fp=fopen(file2.txtn,uw+)=NULL)(printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/exit(l);)printf(HPlease input a string:);c=getchar();/*从键盘读入一个字符后进入循环*/while(c!=n)/*判断读入的字符不是回车符时进入循环*/(fputc(c,fp);/*将字符写入文件之中*/c=getchar();/*继续从键盘读入下一个字符*/*用于把fp所指文件的内部位置指针移到文件头。*/rewind(fp);c=fgetc(fp);/*从文件中逐个读取字符*/*只要读出的字符没有到文件尾就把该字符显示在屏幕上*/while(c!=EOF)(putchar(c);c=fgetc(fp);)printf(nnn);fclose(fp);)(4)/*源文件名:xiti44.c*/#includevoid main()FILE*fp;char c;/*定义个文件指针*/if(fp=fopen(,file2.txtn;w+,)=NULL)(printf(,file can not open,press any key to exit!nn);getch();/*从键盘上任意输入一字符,结束程序*/exit(l);printf(nPlease input a string:);c=getchar();/*从键盘读入一个字符后进入循环*/while(c!=*)/*判断读入的字符不是回车符时进入循环*/(fputc(c,fp);/*将字符写入文件之中*/c=getchar();/*继续从键盘读入下一个字符*/*用于把fp所指文件的内部位置指针移到文件头。*/rewind(fp);c=fgetc(fp);/*从文件中逐个读取字符*/*只要读出的字符没有到文件尾就把该字符显示在屏幕上刃while(c!=EOF)(putchar(c);c=fgetc(fp);)printf(nnn);fclose(fp);)(5)/*源文件名:xiti45.c功能:从键盘输入10个浮点数,以二进制形式存入文件中。再从文件中读出数据显示在屏幕上。*/#includevoid main()FILE*fp;/*定义一个文件指针*/int i;double a10;if(fp=fopen(,data.txtu,wb+,)=NULL)(printf(nfile can not open,press any key to exit!nH);getch();/*从键盘上任意输入一字符,结束程序*/exit(l);)for(i=0;i10;i+)scanf(n%lf,&ai);for(i=0;i10;i+)fwrite(a+i,sizeof(double),1 ,fp);printf(nnn);rewind(fp);fread(a,sizeof(double),10,fp);for(i=0;i10;i+)printf(%fn,ai);printf(nnn);fclose(fp);