《《C语言程序设计》课后习题答案(第四版)谭浩强.pdf》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题答案(第四版)谭浩强.pdf(115页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 1 章程序设计和 C 语言 1什么是计算机程序 1什么是计算机语言 1语言的发展及其特点 3最简单的 C 语言程序 5最简单的 C 语言程序举例 6语言程序的结构 10运行 C 程序的步骤与方法 12程序设计的任务 141-5#include int main()printf(*nn);printf(Very Good!nn);printf(*n);return 0;1-6#include int main()int a,b,c,max;printf(please input a,b,c:n);scanf(%d,%d,%d,&a,&b,&c);max=a;if(maxb)max=b;if(
2、maxc)max=c;printf(The largest number is%dn,max);return 0;第 2 章算法程序的灵魂16什么是算法 16简单的算法举例 17算法的特性 21怎样表示一个算法 22用自然语言表示算法 22用流程图表示算法 22三种基本结构和改进的流程图26用 NS 流程图表示算法 28用伪代码表示算法 31用计算机语言表示算法 32结构化程序设计方法 34习题 36第章最简单的 C 程序设计顺序程序设计37顺序程序设计举例 37数据的表现形式及其运算39常量和变量 39数据类型 42整型数据 44字符型数据 47浮点型数据 49怎样确定常量的类型 51运算符
3、和表达式 52语句 57语句的作用和分类 57最基本的语句赋值语句59数据的输入输出 65输入输出举例 65有关数据输入输出的概念67用 printf 函数输出数据 68用 scanf 函数输入数据 75字符数据的输入输出 78习题 823-1#include#include int main()float p,r,n;r=;n=10;p=pow(1+r,n);printf(p=%fn,p);return 0;3-2-1#include#include int main()float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=;r3=;r2=;r1=;
4、r0=;p1=p*(1+r5)*5);#include#include int main()float d=300000,p=6000,r=,m;m=log10(p/(p-d*r)/log10(1+r);printf(m=%n,m);return 0;3-4#include int main()int c1,c2;c1=197;c2=198;printf(c1=%c,c2=%cn,c1,c2);printf(c1=%d,c2=%dn,c1,c2);return 0;3-5#include int main()int a,b;float x,y;char c1,c2;scanf(a=%d b=%
5、d,&a,&b);scanf(%f%e,&x,&y);scanf(%c%c,&c1,&c2);printf(a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn,a,b,x,y,c1,c2);return 0;3-6#include int main()char c1=C,c2=h,c3=i,c4=n,c5=a;c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(passwor is%c%c%c%c%cn,c1,c2,c3,c4,c5);return 0;3-7#include int main()float h,r,l,s,sq,vq,v
6、z;float pi=;printf(请输入圆半径 r,圆柱高 h);scanf(%f,%f,&r,&h);#include int main()int x,y;printf(输入 x:);scanf(%d,&x);if(x1)/*x1*/y=x;printf(x=%3d,y=x=%dn,x,y);else if(x10)/*1=x=10 */y=3*x-11;printf(x=%d,y=3*x-11=%dn,x,y);return 0;4-7-1#include int main()int x,y;printf(enter x:);scanf(%d,&x);y=-1;if(x!=0)if(x
7、0)y=1;else y=0;printf(x=%d,y=%dn,x,y);return 0;4-7-2#include int main()int x,y;printf(please enter x:);scanf(%d,&x);y=0;if(x=0)if(x0)y=1;else y=-1;printf(x=%d,y=%dn,x,y);return 0;4-8#include int main()float score;char grade;printf(请输入学生成绩:);scanf(%f,&score);while(score100|score0)printf(n 输入有误,请重输);s
8、canf(%f,&score);switch(int)(score/10)case 10:case 9:grade=A;break;case 8:grade=B;break;case 7:grade=C;break;case 6:grade=D;break;case 5:case 4:case 3:case 2:case 1:case 0:grade=E;printf(成绩是%,相应的等级是%cn,score,grade);return 0;4-9#include#include int main()int num,indiv,ten,hundred,thousand,ten_thousand
9、,place;.=%dn,sn);return 0;5-6#include int main()double s=0,t=1;int n;for(n=1;n=20;n+)t=t*n;s=s+t;printf(1!+2!+.+20!=%n,s);return 0;5-7#include int main()int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for(k=1;k=n1;k+)/*计算 1 到 100 的和*/s1=s1+k;for(k=1;k=n2;k+)/*计算 1 到 50 各数的平方和*/s2=s2+k*k;for(k=1;k=n3;
10、k+)/*计算 1 到 10 的各倒数和*/s3=s3+1/k;printf(sum=%n,s1+s2+s3);return 0;5-8#include int main()int i,j,k,n;printf(parcissus numbers are);for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%d,n);printf(n);return 0;5-9-1#define M 1000 /*定义寻找范围*/#include int main()int k1,k2,k3,k4,k5,k6
11、,k7,k8,k9,k10;int i,a,n,s;for(a=2;a=M;a+)/*a是 2-1000 之间的整数,检查它是否完数*/n=0;/*n用来累计 a 的因子的个数*/s=a;/*s用来存放尚未求出的因子之和,开始时等于a*/for(i=1;i1)printf(%d,%d,k1,k2);/*n1表示 a 至少有 2 个因子*/if(n2)printf(,%d,k3);/*n2 表示至少有 3 个因子,故应再输出一个因子*/if(n3)printf(,%d,k4);/*n3子*/if(n4)printf(,%d,k5);/*if(n5)printf(,%d,k6);if(n6)pri
12、ntf(,%d,k7);if(n7)printf(,%d,k8);if(n8)printf(,%d,k9);if(n9)printf(,%d,k10);printf(n);return 0;5-9-2#include int main()int m,s,i;for(m=2;m1000;m+)s=0;表示至少有 4 个因子,故应再输出一个因以下类似*/for(i=1;im;i+)if(m%i)=0)s=s+i;if(s=m)printf(%d,its factors are,m);for(i=1;im;i+)if(m%i=0)printf(%d,i);printf(n);return 0;5-1
13、0#include int main()int i,n=20;double a=2,b=1,s=0,t;for(i=1;i=n;i+)s=s+a/b;t=a,a=a+b,b=t;printf(sum=%n,s);return 0;5-11#include int main()double sn=100,hn=sn/2;int n;for(n=2;n=10;n+)sn=sn+2*hn;/*第 n 次落地时共经过的米数*/hn=hn/2;/*第 n 次反跳高度*/printf(第 10 次落地时共经过%f 米n,sn);printf(第 10 次反弹%f 米n,hn);return 0;5-12#
14、include int main()int day,x1,x2;day=9;x2=1;while(day0)x1=(x2+1)*2;/*第 1 天的桃子数是第 2 天桃子数加 1 后的 2 倍.*/x2=x1;day-;printf(total=%dn,x1);return 0;5-13#include#include int main()float a,x0,x1;printf(enter a positive number:);scanf(%f,&a);x0=a/2;x1=(x0+a/x0)/2;do x0=x1;x1=(x0+a/x0)/2;while(fabs(x0-x1)=1e-5)
15、;printf(The square root of%is%n,a,x1);return 0;5-14#include#include int main()double x1,x0,f,f1;x1=;do x0=x1;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f/f1;while(fabs(x1-x0)=1e-5);printf(The root of equation is%n,x1);return 0;5-15#include#include int main()float x0,x1,x2,fx0,fx1,fx2;do printf(ent
16、er x1&x2:);scanf(%f,%f,&x1,&x2);fx1=x1*(2*x1-4)*x1+3)-6;fx2=x2*(2*x2-4)*x2+3)-6;while(fx1*fx20);do x0=(x1+x2)/2;fx0=x0*(2*x0-4)*x0+3)-6;if(fx0*fx1)=1e-5);printf(x=%n,x0);return 0;5-16#include int main()int i,j,k;for(i=0;i=3;i+)for(j=0;j=2-i;j+)printf();for(k=0;k=2*i;k+)printf(*);printf(n);for(i=0;i=
17、2;i+)for(j=0;j=i;j+)printf();for(k=0;k=4-2*i;k+)printf(*);printf(n);return 0;5-17#include int main()char i,j,k;/*是 a 的对手;j 是 b 的对手;k 是 c 的对手*/for(i=x;i=z;i+)for(j=x;j=z;j+)if(i!=j)for(k=x;k=z;k+)if(i!=k&j!=k)if(i!=x&k!=x&k!=z)printf(A-%cnB-%cnC-%cn,i,j,k);return 0;第 6 章利用数组处理批量数据142怎样定义和引用一维数组142怎样定
18、义一维数组 143怎样引用一维数组元素 144一维数组的初始化 145一维数组程序举例 146怎样定义和引用二维数组148怎样定义二维数组 149怎样引用二维数组的元素150二维数组的初始化 151二维数组程序举例 152字符数组 154怎样定义字符数组 154字符数组的初始化 155怎样引用字符数组中的元素155字符串和字符串结束标志156字符数组的输入输出 159使用字符串处理函数 161字符数组应用举例 165习题 1686-1#include#include int main()int i,j,n,a101;for(i=1;i=100;i+)ai=i;a1=0;for(i=2;isqr
19、t(100);i+)for(j=i+1;j=100;j+)if(ai!=0&aj!=0)if(aj%ai=0)aj=0;printf(n);for(i=2,n=0;i=100;i+)if(ai!=0)printf(%5d,ai);n+;if(n=10)printf(n);n=0;printf(n);return 0;6-2#include int main()int i,j,min,temp,a11;printf(enter data:n);for(i=1;i=10;i+)printf(a%d=,i);scanf(%d,&ai);printf(n);printf(The orginal num
20、bers:n);for(i=1;i=10;i+)printf(%5d,ai);printf(n);for(i=1;i=9;i+)min=i;for(j=i+1;jaj)min=j;temp=ai;ai=amin;amin=temp;printf(nThe sorted numbers:n);for(i=1;i=10;i+)printf(%5d,ai);printf(n);return 0;6-3#include int main()int a33,sum=0;int i,j;printf(enter data:n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%3d,&
21、aij);for(i=0;i3;i+)sum=sum+aii;printf(sum=%6dn,sum);return 0;6-4#include int main()int a11=1,4,6,9,13,16,19,28,40,100;int temp1,temp2,number,end,i,j;printf(array a:n);for(i=0;iend)a10=number;else for(i=0;inumber)temp1=ai;ai=number;for(j=i+1;j11;j+)temp2=aj;aj=temp1;temp1=temp2;break;printf(Now array
22、 a:n);for(i=0;i11;i+)printf(%5d,ai);printf(n);return 0;6-5#include#define N 5int main()int aN,i,temp;printf(enter array a:n);for(i=0;iN;i+)scanf(%d,&ai);printf(array a:n);for(i=0;iN;i+)printf(%4d,ai);for(i=0;iN/2;i+)n,number);printf(continu or not(Y/N);scanf(%c,&c);if(c=N|c=n)flag=0;return 0;6-10#in
23、clude int main()int i,j,upp,low,dig,spa,oth;char text380;upp=low=dig=spa=oth=0;for(i=0;i3;i+)printf(please input line%d:n,i+1);gets(texti);for(j=0;j=A&textij=a&textij=0&textij=9)dig+;else if(textij=)spa+;else oth+;printf(nupper case:%dn,upp);printf(lower case:%dn,low);printf(digit :%dn,dig);printf(s
24、pace :%dn,spa);printf(other :%dn,oth);return 0;6-11#include int main()char a5=*,*,*,*,*;int i,j,k;char space=;for(i=0;i5;i+)printf(n);printf();for(j=1;j=i;j+)printf(%c,space);for(k=0;k5;k+)printf(%c,ak);printf(n);return 0;6-12a-c#include int main()int j,n;char ch80,tran80;printf(input cipher code:);
25、gets(ch);printf(ncipher code :%s,ch);j=0;while(chj!=0)if(chj=A)&(chj=a)&(chj=z)tranj=219-chj;else tranj=chj;j+;n=j;printf(noriginal text:);for(j=0;jn;j+)putchar(tranj);printf(n);return 0;6-12b#include int main()int j,n;char ch80;printf(input cipher code:n);gets(ch);printf(ncipher code:%sn,ch);j=0;wh
26、ile(chj!=0)if(chj=A)&(chj=a)&(chj=z)chj=219-chj;else chj=chj;j+;n=j;printf(original text:);for(j=0;jn;j+)putchar(chj);printf(n);return 0;6-13#include int main()char s180,s240;int i=0,j=0;printf(input string1:);scanf(%s,s1);printf(input string2:);scanf(%s,s2);while(s1i!=0)i+;while(s2j!=0)s1i+=s2j+;s1
27、i=0;printf(nThe new string is:%sn,s1);return 0;6-14#include int main()int i,resu;char s1100,s2100;printf(input string1:);gets(s1);printf(ninput string2:);gets(s2);i=0;while(s1i=s2i)&(s1i!=0)i+;if(s1i=0&s2i=0)resu=0;else resu=s1i-s2i;printf(nresult:%d.n,resu);return 0;6-15#include#include int main()c
28、har s180,s280;int i;printf(input s2:);scanf(%s,s2);for(i=0;i=strlen(s2);i+)s1i=s2i;printf(s1:%sn,s1);return 0;第 7 章用函数实现模块化程序设计170为什么要用函数 170怎样定义函数 172为什么要定义函数 172定义函数的方法 173调用函数 174函数调用的形式 174函数调用时的数据传递 175函数调用的过程 177函数的返回值 178对被调用函数的声明和函数原型179函数的嵌套调用 182函数的递归调用 184数组作为函数参数 192数组元素作函数实参 193数组名作函数参数
29、 194多维数组名作函数参数 197局部变量和全局变量 199局部变量 199全局变量 200变量的存储方式和生存期204动态存储方式与静态存储方式204局部变量的存储类别 205全局变量的存储类别 208存储类别小结 212关于变量的声明和定义 214内部函数和外部函数 215内部函数 215外部函数 215习题 2187-1-1#include int main()int hcf(int,int);int lcd(int,int,int);int u,v,h,l;scanf(%d,%d,&u,&v);h=hcf(u,v);printf(,h);l=lcd(u,v,h);printf(,l)
30、;return 0;int hcf(int u,int v)int t,r;if(vu)t=u;u=v;v=t;while(r=u%v)!=0)u=v;v=r;return(v);int lcd(int u,int v,int h)return(u*v/h);7-1-2#include int Hcf,Lcd;int main()void hcf(int,int);void lcd(int,int);int u,v;scanf(%d,%d,&u,&v);hcf(u,v);lcd(u,v);printf(,Hcf);printf(,Lcd);return 0;void hcf(int u,int
31、 v)int t,r;if(vu)t=u;u=v;v=t;while(r=u%v)!=0)u=v;v=r;Hcf=v;void lcd(int u,int v)Lcd=u*v/Hcf;7-2#include#include float x1,x2,disc,p,q;int main()void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(input a,b,c:);scanf(%f,%f,%f,&a,&b
32、,&c);printf(equation:%*x*x+%*x+%=0n,a,b,c);disc=b*b-4*a*c;printf(root:n);if(disc0)greater_than_zero(a,b);printf(x1=%fttx2=%fn,x1,x2);else if(disc=0)equal_to_zero(a,b);printf(x1=%fttx2=%fn,x1,x2);else smaller_than_zero(a,b);printf(x1=%f+%fitx2=%f-%fin,p,q,p,q);return 0;void greater_than_zero(float a,
33、float b)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);void equal_to_zero(float a,float b)x1=x2=(-b)/(2*a);void smaller_than_zero(float a,float b)p=-b/(2*a);q=sqrt(-disc)/(2*a);7-3#include int main()int prime(int);int n;printf(input an integer:);scanf(%d,&n);if(prime(n)printf(%d is a prime.n,n);els
34、e printf(%d is not a prime.n,n);return 0;int prime(int n)int flag=1,i;for(i=2;in/2&flag=1;i+)if(n%i=0)flag=0;return(flag);7-4#include#define N 3int arrayNN;int main()void convert(int array3);int i,j;printf(input array:n);for(i=0;iN;i+)for(j=0;jN;j+)scanf(%d,&arrayij);printf(noriginal array:n);for(i=
35、0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);convert(array);printf(convert array:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);return 0;void convert(int array3)int i,j,t;for(i=0;iN;i+)for(j=i+1;jN;j+)t=arrayij;arrayij=arrayji;arrayji=t;#include#include int main()void inverse(ch
36、ar str);char str100;printf(input string:);scanf(%s,str);inverse(str);printf(inverse string:%sn,str);return 0;void inverse(char str)char t;int i,j;for(i=0,j=strlen(str);i(strlen(str)/2);i+,j-)t=stri;stri=strj-1;strj-1=t;7-6#include int main()void concatenate(char string1,char string2,char string);cha
37、r s1100,s2100,s100;printf(input string1:);scanf(%s,s1);printf(input string2:);scanf(%s,s2);concatenate(s1,s2,s);printf(nThe new string is%sn,s);return 0;void concatenate(char string1,char string2,char string)int i,j;for(i=0;string1i!=0;i+)stringi=string1i;for(j=0;string2j!=0;j+)stringi+j=string2j;st
38、ringi+j=0;7-7#include int main()void cpy(char,char);char str80,c80;printf(input string:);gets(str);cpy(str,c);printf(The vowel letters are:%sn,c);return 0;void cpy(char s,char c)int i,j;for(i=0,j=0;si!=0;i+)if(si=a|si=A|si=e|si=E|si=i|si=I|si=o|si=O|si=u|si=U)cj=si;j+;cj=0;7-8#include#include int ma
39、in()char str80;void insert(char);printf(input four digits:);scanf(%s,str);insert(str);return 0;void insert(char str)int i;for(i=strlen(str);i0;i-)str2*i=stri;str2*i-1=;printf(output:n%sn,str);7-9#include int letter,digit,space,others;int main()void count(char);char text80;printf(input string:n);gets
40、(text);printf(string:);puts(text);letter=0;digit=0;space=0;others=0;count(text);printf(nletter:%dndigit:%dnspace:%dnothers:%dn,letter,digit,space,others);return 0;void count(char str)int i;for(i=0;stri!=0;i+)if(stri=a&stri=A&stri=0&str i=9)digit+;else if(stri=32)space+;else others+;7-10#include#incl
41、ude int main()int alphabetic(char);int longest(char);int i;char line100;printf(input one line:n);gets(line);printf(The longest word is:);for(i=longest(line);alphabetic(linei);i+)printf(%c,linei);printf(n);return 0;int alphabetic(char c)if(c=a&c=A&c=z)return(1);else return(0);int longest(char string)
42、int len=0,i,length=0,flag=1,place=0,point;for(i=0;i=length)length=len;place=point;len=0;return(place);7-11#include#include#define N 10char strN;int main()void sort(char);int i,flag;for(flag=1;flag=1;)printf(input string:n);scanf(%s,&str);if(strlen(str)N)printf(string too long,input again!);else flag
43、=0;sort(str);printf(string sorted:n);for(i=0;iN;i+)printf(%c,stri);printf(n);return 0;void sort(char str)int i,j;char t;for(j=1;jN;j+)for(i=0;(istri+1)t=stri;stri=stri+1;stri+1=t;7-12#include#include int main()float solut(float a,float b,float c,float d);float a,b,c,d;printf(input a,b,c,d:);scanf(%f
44、,%f,%f,%f,&a,&b,&c,&d);printf(x=%n,solut(a,b,c,d);return 0;float solut(float a,float b,float c,float d)float x=1,x0,f,f1;do x0=x;f=(a*x0+b)*x0+c)*x0+d;f1=(3*a*x0+2*b)*x0+c;x=x0-f/f1;while(fabs(x-x0)=1e-3);return(x);7-13#include#define N 10#define M 5float scoreNM;float a_stuN,a_courM;int r,c;int mai
45、n()int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(void);input_stu();aver_stu();aver_cour();printf(n NO.cour1 cour2 cour3 cour4 cour5 avern);for(i=0;iN;i+)printf(n NO%2d,i+1);for(j=0;jM;j+)printf(%,scoreij);printf(%n,a_stui);printf(naverage:)
46、;for(j=0;jM;j+)printf(%,a_courj);printf(n);h=highest();printf(highest:%NO.%2d course%2dn,h,r,c);printf(variance%n,s_var();return 0;void input_stu(void)int i,j;for(i=0;iN;i+)printf(ninput score of student%2d:n,i+1);for(j=0;jM;j+)scanf(%f,&scoreij);void aver_stu(void)int i,j;float s;for(i=0;iN;i+)for(
47、j=0,s=0;jM;j+)s+=scoreij;a_stui=s/;void aver_cour(void)int i,j;float s;for(j=0;jM;j+)s=0;for(i=0;iN;i+)s+=scoreij;a_courj=s/(float)N;float highest()float high;int i,j;high=score00;for(i=0;iN;i+)for(j=0;jhigh)high=scoreij;r=i+1;c=j+1;return(high);float s_var(void)int i;float sumx,sumxn;sumx=;sumxn=;f
48、or(i=0;iN;i+)sumx+=a_stui*a_stui;sumxn+=a_stui;return(sumx/N-(sumxn/N)*(sumxn/N);7-*14#include#define N 10#define M 5float scoreNM;float a_stuN,a_courM;int r,c;int main()int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(void);input_stu();aver_s
49、tu();aver_cour();printf(n NO.cour1 cour2 cour3 cour4 cour5 avern);for(i=0;iN;i+)printf(n NO%2d,i+1);for(j=0;jM;j+)printf(%,scoreij);printf(%n,a_stui);printf(naverage:);for(j=0;jM;j+)printf(%,a_courj);printf(n);h=highest();printf(highest:%NO.%2d course%2dn,h,r,c);printf(variance%n,s_var();return 0;vo
50、id input_stu(void)int i,j;for(i=0;iN;i+)printf(ninput score of student%2d:n,i+1);for(j=0;jM;j+)scanf(%f,&scoreij);void aver_stu(void)int i,j;float s;for(i=0;iN;i+)for(j=0,s=0;jM;j+)s+=scoreij;a_stui=s/;void aver_cour(void)int i,j;float s;for(j=0;jM;j+)s=0;for(i=0;iN;i+)s+=scoreij;a_courj=s/(float)N;