C语言程序设计教程(第2版)课后习题答案杨路明[1]_c语言程序设计习题库

2020-02-28 其他范文 下载本文

C语言程序设计教程(第2版)课后习题答案杨路明[1]由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言程序设计习题库”。

第一章 C语言程序设计概述 -习题答案1 算法的描述有哪些基本方法? 答

1、自然语言

2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。

1、C语言程序由函数构成;

2、“/*”与“*/”之间的内容构成C语言程序的注释部分;

3、用预处理命令#include、#define可以包含有关文件或预定义信息;

4、大小写字母在C语言中是有区别的;

5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。3 C语言有什么特点?

1、具有结构语言的特点,程序之间很容易实现段的共享;

2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;

3、运算符丰富,包含的范围很广;

4、数据类型丰富;

5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;

6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;

7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。4 ★指出合法与不合法的标识符命名。答

AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--× 5 说明下列Turbo C热键的功能。答

F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。

①main()

{printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main()

{ int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答

运行结果:

******************** welcome you very good ******************** 运行结果:

please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。

main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。

1、User screen

2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定?

1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。

2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的?

是以C为扩展名保存的纯文本文件。

第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。

''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--× 请找出下列程序中的错误,改正后写出程序运行结果。

①void main()

{int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main()

{ char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答

main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);} 运行结果:AVER=5 ②main()

{ char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 运行结果:a=3,b='A'“end”

aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99

-1 char

'h'

unsigned int

float

55.78

long int

答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D'

unsigned int 99 104 66 55 68 65535 float 99.00 104.00 66.00 55.78 68.00-1.00

long int 99 104 66 55 68-1 ★写出程序运行结果。

①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()

{ int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误

运行结果: 9,11,9,10 运行结果: 30,1,0,0

③void main()

{int a=10,b=20,c=30,d;d=++a=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}

运行结果: 11,19,30,1 ★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3)

⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a

⑼a+b,18+(b=4)*3,(a/b,a%b)

⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a

⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?

①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答

①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;

②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。③因为a、b均为整数,其前后两个表达式的计算结果是一致的。

④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。

⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么?

如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答

max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句:

char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。

格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。

|1234 1234 | 分析如下:

①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。

②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。

①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。

scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答

设int a=10,b=5;以下为输出语句及结果:

①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答

#define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。

main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/ printf(“%d--->%dn”,x,y);} 10 ★输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是则输出YES,不是则输 出NOT(要求用条件表达式进行判断,不使用if语句)。

main(){ int x,y,z,oddcount=0;/*奇数数计数变量*/ printf(“Input x,y,z:”);scanf(“%d,%d,%d”,&x,&y,&z);x%2==1?oddcount++:0;y%2==1?oddcount++:0;z%2==1?oddcount++:0;oddcount==2?printf(“YES”):printf(“NOT”);} 11 求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。

本题考查同学们对字符类型数据的认识,如果在ASCII范围内则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。main(){ char c;printf(“Input character:”);scanf(“%c”,&c);printf(“%c----->%dn”,c-1,c-1);printf(“%c----->%dn”,c,c);printf(“%c----->%dn”,c +1,c+1);getch();/*为便于调试程序,运行至此程序停顿,此时可以看到运行结果,按任意键程序真难得结束并返回到编辑环境*/ } 12 ★输入三角形的边长,求三角形面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2)。

#include“math.h” /*由于程序中使用了开平方函数sqrt(),所以需要包含数学头文件*/ main(){ float a,b,c,s,area;int ok=0;printf(“Input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);a+b>c?ok++:0;/*以下3条语句为判断是否输入的数据是否构成封闭三角形*/ a+c>b?ok++:0;b+c>a?ok++:0;ok==3?(s=(a+b+c)/2,area=sqrt(s*(s-a)*(s-b)*(s-c)),printf(“area=%f”,area)):printf(“error”);getch();}

第四章 选择结构程序设计 -习题答案 ★设x、t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为___。

答 0 2 ★假定所有变量均已正确定义,则程序段: int a=0, y=10;if(a=0)y--;else if(a>0)y++;else y+=y;运行后 y 的值是___;

答 20 3 ★能表述 20

x>20&&x

***a=25, b=14, c=19*** 5 ★假定 i 和 j 为 int 型变量,则执行以下语句后 i 的值是___。int i=1;switch(i){ case 1: { for(j=0;j

★以下两条 if 语句可合并成一条 if 语句,即___。

if(ab)printf(“***y=%dn”, y);else printf(“***x=%dn”,x);答

if(a

main(){ char a,b;printf(“Input two chatacter a,b:”);scanf(“%c,%c”,&a,&b);if((a-b)/2==0)printf(“%c,%c”,a+1,b+1);else printf(“%c,%c”,a-1,b-1);} 8 ★输入整数 a 和 b,如果 a 能被 b 整除,就输出算式和商,否则输出算式、整数商和余数。答

main(){ int a,b;printf(“Input two integer numbers a,b:”);scanf(“%d,%d”,&a,&b);if(b!=0&&a%b==0)printf(“%d/%d=%d”,a,b,a/b);else printf(“%d/%d=%d......%d”,a,b,a/b,a%b);} 9 输入某个点 A 的平面坐标(x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为(2,2),半径为 1。

include“math.h” main(){ float x,y,d;printf(“Input x,y:”);scanf(“%f,%f”,&x,&y);d=sqrt((x-2)*(x-2)+(y-2)*(y-2));if(d>1)printf(“outside”);else if(d

main(){ int y,m,d,f;printf(“Input year and month y-m:”);scanf(“%d-%d”,&y,&m);f=(y%4==0&&y/100!=0||y/400==0);if(m==2)d=28+f;/*依据是否闰年决定2月份的实际天数,若是闰年,则f=1,d即为29天*/ else d=31-(m==4)+(m==6)+(m==9)+(m==11);/*m==4时其值为1,则本月为30天,典型算法,重要啊*/ printf(“%d-%d is %d days.n”,y,m,d);} 11 ★请将以下语句改写成 switch 语句(a>0)。if(a

switch(a/10){ case 1: case 2: case 3:m=1;break;case 4:m=2;break;case 5:m=3;break;case 6:m=4;break;default:m=5;} 12 有一函数

x-1-5

使用不嵌套的 if 语句程序如下: main(){ float x,y;printf(“Input x:”);scanf(“%f”,&x);if(x>-5&&x0&&x

使用嵌套的 if 语句程序如下: main(){ float x,y;scanf(“%f”,&x);if(x>-5&&x0)y=x+1;else if(x==0)y=0;else if(x>-5)y=x-1;printf(“y=%fn”,y);} 使用多分支语句程序如下:

main(){ float x,y;int m;printf(“Input x:”);scanf(“%f”,&x);if(x>-5&&x

以下为假设对int类型的变量进行处理,但毕竟不算完美 main(){ int x,y;printf(“Input x:”);scanf(“%d”,&x);switch(x){ case-4: case-3: case-2: case-1: y=x-1;break;case 0: y=0;break;case 1: case 2: case 3: case 4: case 5: case 6: case 7: y=x+1;break;} printf(“y=%dn”,y);} 第五章 循环结构程序设计 -习题答案 ★输入 n 个整数,求这 n 个数之中的偶数平均值,并输出。

main(){ int n,i,x,sum=0,count=0;printf(“Input n:”);scanf(“%d”,&n);for(i=0;i

#include“stdio.h” main(){ char ch;int charcnt=0,numcnt=0;while((ch=getchar())!='*'){ if(ch>='a'&&ch='A'&&ch='0'&&ch

#include“stdio.h” main(){ int n,i,sum=0,count=0;printf(“Input n:”);scanf(“%d”,&n);while((n/10)!=0){ count++;sum+=n%10;printf(“%d+”,n%10);n/=10;} printf(“=%d”,sum+n);getch();} 4 ★输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。

#include“stdio.h” main(){ char ch;printf(“Input string:”);while((ch=getchar())!='n'){ if(ch>='a'&&ch='A'&&ch

main(){ float x=200;int n=0;do { x*=(1+0.045);n++;}while(x

main(){ int x,y,flag;for(x=1;x

main(){ int x=0,flag=0;while(1){ x++;if(x%2==1)if(x%3==2)if(x%5==4)if(x%6==5)if(x%7==0){ printf(“%d”,x);break;} } getch();} 8 输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3 答

main(){ int x,a,b,c;printf(“Input number:”);scanf(“%d”,&x);a=x/100;/*变量a中记录x的百位数字*/ b=x/10%10;/*变量b中记录x的十位数字*/ c=x%10;/*变量c中记录x的个位数字*/ if(a*a*a+b*b*b+c*c*c==x){ printf(“%d=%d*%d*%d+%d*%d*%d+%d*%d*%dn”,x,a,a,a,b,b,b,c,c,c);printf(“YES”);} else printf(“NOT”);getch();} 9 ★计算斐波那契分数序列前n项之和(n是某个常数,波那契分数序列为2/1,3/2,5/3,8/5,...)。

main(){ int i,n=10;float f1=1,f2=2,f,sum=0;for(i=0;i

main(){ int n,i,j;printf(“Input n:”);scanf(“%d”,&n);for(i=0;i

main(){ int i,j;for(i=1;i

#include“stdio.h” #include“math.h” main(){ char ch;int x=0,y=1,f=0,pcnt=0,ncnt=0;float psum=0,nsum=0;while((ch=getchar())!='*'){ if(ch=='-'){ if(x!=0){ if(f==1){ x=-x;nsum+=x;ncnt++;} else { psum+=x;pcnt++;} printf(“%dn”,x);} f=1;x=0;y=1;continue;} else if(ch>='0'&&ch

main(){ int k1, k2, k3, k4, k5, k6, k7, k8, k9, k10;int i,a,n,s;for(a = 100;a 1)printf(“%d,%d”, k1, k2);/* n>1表示a至少有2个因子 */ if(n > 2)printf(“,%d”, k3);/* 注意以下if的用法,追加的方法 */ 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”);} } getch();} 14 ★编写程序按下列公式计算e的值(精度为1e-6)。e=1+1/1!+1/2!+1/3!...+1/n!答

main(){ int i;double e=0,t=1;for(i=1;t>0.000001;i++){ for(j=1;j0,a

#include“math.h” main(){ double x,fx,fa,fb,a=-10,b=10,z=0.0001;fa=2*a*a*a-4*a*a+3*a;fb=2*b*b*b-4*b*b+3*b;if(fa*fbz);printf(“The root is:%lfn”,x);} getch();}

第六章 函数与编译预处理 -习题答案 ★写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

main(){ unsigned int m,n,p,q;for(;;){ printf(“m,n=”);scanf(“%d,%d”,&m,&n);if(mn){i=m;m=n;n=i;} for(i=m;i>0;i--)if(m%i==0&&n%i==0)return(i);} int funq(int m,int n){ int i;if(m

未制作函数,主要利用了选择语句结构:

#include“stdio.h” main(){ int i,c,zm=0,sz=0,kg=0,qt=0;printf(“Input a string:”);while((c=getchar())!='n')if(c==' ')kg++;else if(c>47&&c='A'&&c='a'&&c

制作函数,利用函数调用: #include“stdio.h” int analys(char ch);main(){ int i,zm=0,sz=0,qt=0,c;printf(“Input a string:”);while((c=getchar())!='n'){ i=analys(c);switch(i){ case 1: zm++;break;case 2: sz++;break;case 3: qt++;} } printf(“zm=%d,sz=%d,qt=%dn”,zm,sz,qt);} int analys(char ch){ if(ch>='A'&&ch='a'&&ch47&&ch

【输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3】

main(){ int x,i,f;printf(“Input number:”);scanf(“%d”,&x);for(i=0;i

#define f(a,b)(a=a+b,b=a-b,a=a-b)main(){ int x,y;printf(“Input x,y:”);scanf(“%d,%d”,&x,&y);printf(“%d,%d”,x,y);f(x,y);printf(“%d,%dn”,x,y);getch();} 5 已知二阶Fibonacci数列:

0 若n=0 Fib(n)= 1 若n=1 Fib(n-1)+Fib(n-2)其它情况 定义递归函数求Fib(n)。

main(){ int i,n;printf(“Input n:”);scanf(“%d”,&n);for(i=0;i

long int f(int x);main(){ int i,m,n;long int sum;printf(“Input m,n:”);scanf(“%d,%d”,&m,&n);sum=f(n+m)+f(n);printf(“%ld”,sum);getch();} long int f(int x){ int i,j;if(x==0||x==1)return 1;else return(x*f(x-1));} 7 ★定义一个函数完成第5章第11题的功能。【输出九九乘法表。】

main(){ fun();getch();} fun(){ int i,j;for(i=1;i

main(){ int x,y;for(x=1;x

答 ★设计程序完成下列计算。

已经:y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3))其中:f(x,n)=1-x2/2!+x4/4-...+(-1)n·x2n/(2n)!(n≥0)当: x=5.6, n=7时,求:y 要求通过嵌套调用完成计算。

#include float f(float x,int n);float f1(float x,int m);float f2(int m);main(){ float x=5.6,y;int n=7,i;y=1+f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3));printf(“y=%fnn”,y);} float f(float x,int n){ float sum=0.0;int i;for(i=1;i

{ y*=x;} return y;} float f2(int m){ int i;float y=1;for(i=1;i

第七章 数

组 -习题答案 ★以下各题中,选择一个正确的答案。

1、能正确对一维数组 a 中所有元素进行初始化的是()。

A.int a[5]={ } B.int a[ ]={0} C.int a[5]=0,0,0,0,0 D.int a[5]={0}

2、有说明 int k=3,a[10];则下列可以正确引用数组元素的表达式是()。A.a[k] B.a[10] C.a[1,3] D.a[3*5]

3、有定义 int d[ ][3]={1,2,3,4,5,6};执行语句printf(“%c”,d[1][0]+'A');结果是()。

A.A B.B C.D D.E4、有定义 char c='A',ch[20]={'a','b','c','','d',''};若执行printf(“%s”,ch);结果是()。

A.'abc' B.abc C.abcd D.abcd5、对数组进行初始化 char carr[ ]={'s','t','u','d','e','n','t'},barr[ ]=“student”;则正确的是()。

A.carr 与 barr 长度相同

B.carr 比 barr 长

C.carr 与 barr 相同 D.carr 比 barr 短

1、BD

2、A

3、D

4、B

5、D 2 ★阅读下列程序,写出程序的执行结果。

1、#include #include void main(){ int i,j,temp,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}};for(i=0;id[j][i])d[j][i]=d[i][j];for(i=0;i=i)printf(“%6d”,d[i][j]);else printf(“%c”, ' ');} }

2、若输入十进制数3291时,下列程序输出为: #include void main(){ int i,d,m,n;char s[8];scanf(“%d”,&n);i=0;/*i是用来存放转换后的数组元素下标*/ do{ m=n/8;d=n%8;s[i]='0'+d;i++;n=m;}while(n!=0);for(i--;i>=0;i--)putchar(s[i]);/*反向输出字符*/ } 答 1、5 4 4 6 7 8 2 3 42、6333 3 ★程序填空。在___处填写合适的语句,完善下列程序:

1、从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。#include void main(){ int data,temp,k;static int a[9]={-10,2,4,8,10,15,25,50};printf(“nEnter a data:”);scanf(“%d”,&data);______①_____;

for(k=8;____②____;k--)if(a[k]

for(k=0;__⑤__;k++)printf(“%7d”,a[k]);}

2、从键盘输入一串英文字符(不含空格与其他字符),统计每个字符的个数,并输出字母及相应的个数。

#include #include /*本行代码教材中应该加上,因为程序中有 putchar()*/ void main(){ int i=0,c[52]={0},m=0;char str[80];printf(“Input a string:”);scanf(___①___,str);while(str[i]){ if(str[i]>='A' && ____②___)c[str[i]-'A']++;if(str[i]>='a' && str[i]

1、① a[8]=data

② k>=1 ③ temp=a[k] ④ break ⑤ k

2、① “%s”

② str[i]

③ c[str[i]-'a'+26]++ ④ i+'A' ★求一组成绩的平均分数以及高于平均分的成绩,设给定的成绩为 90,85,92,77,80,62。答

main(){ int score[6]={90,85,92,77,80,62};int i,sum=0;float aver;for(i=0;iaver)printf(“%dt”,score[i]);} 5 ★编写程序,输入一组整数,将它们排序后由小到大输出。

【提示】假设为具有 10 个元素的正整数数组;外层循环从数组的第一个元素开始选取;内层循环从外层循环选定的元素下一个元素开始选取,依次与外层循环选定的元素进行比较,将小者放入外层循环选定的元素中。

#define N 10 main(){ int a[N],i,j,t;for(i=0;ia[j]){ t=a[i];a[i]=a[j];a[j]=t;} } printf(“%dt”,a[i]);/*输出已更新为较小值之外层选定元素*/ } } 6 从键盘输入一个4×4整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,将右上角(含对角线元素)输出。【提示】a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] 答

#define M 4 main(){ int a

;

int i,j,k,t;printf(“Input integer number:n”);for(i=0;i

for(j=0;j

{ printf(“a[%d][%d]=”,i,j);scanf(“%d”,&a[i][j]);

} for(i=0;i

{

for(j=0;j

{

printf(“%dt”,a[i][j]);

}

printf(“n”);

} printf(“-----------n”);/*分隔线*/ for(i=0;i

{ for(j=0;j

{

if(a[j][i]>a[i][j])

{ t=a[j][i];a[j][i]=a[i][j];a[i][j]=t;

} } for(j=i;j

{

printf(“%dt”,a[i][j]);

}

printf(“n”);for(k=0;k

} getch();

} 【运行结果】 a[0][0]=1 a[0][1]=2 a[0][2]=3 a[0][3]=4 a[1][0]=5 a[1][1]=6 a[1][2]=7 a[1][3]=8 a[2][0]=9 a[2][1]=10 a[2][2]=11 a[2][3]=12 a[3][0]=13 a[3][1]=14 a[3][2]=15 a[3][3]=16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16-----------1 5 9 13 6 10 14 11 15 16 7 通过键盘给 3×4 的二维数组输入数据,然后分别按行和按列输出数组元素。

#define M 3 #define N 4 main(){ int a

[N],i,j;printf(“Input integer number:n”);for(i=0;i

{ printf(“a[%d][%d]=”,i,j);/*提示输出元素位置*/ scanf(“%d”,&a[i][j]);

/*为指定元素赋值*/

} printf(“nOut by row:n”);/*按行输出数组元素值*/

for(i=0;i

printf(“%d ”,a[i][j]);printf(“nOut by collum:n”);/*按列输出数组元素值*/

for(i=0;i

printf(“%d ”,a[j][i]);

getch();

} 【运行结果】

Input integer number: a[0][0]=1 a[0][1]=2 a[0][2]=3 a[0][3]=4 a[1][0]=5 a[1][1]=6 a[1][2]=7 a[1][3]=8 a[2][0]=9 a[2][1]=10 a[2][2]=11 a[2][3]=12 Out by row: 1 2 3 4 5 6 7 8 9 10 11 12 Out by collum: 1 5 9 2 6 10 3 7 11 4 8 12 8 编写程序,将两个字符串连接起来,不要使用 strcat 函数。

#include“string.h” main(){ char str1[80],str2[80];int i=0,l1;printf(“Input str1:”);gets(str1);/*若换成scanf(“%s”,str1);后面应该增加fflush(stdin);函数语句*/ printf(“Input str2:”);gets(str2);l1=strlen(str1);/*计算字符串 1 的长度*/ while(str2[i]){ str1[l1+i]=str2[i];i++;} str1[l1+i]='';/*字符串连接后,不能忘记追加一个字符串结束符*/ puts(str1);/*可换成语句:printf(“%s”,str1);*/ getch();} 9 输入一行字符串,统计该字符串中字符对 ab 的个数。

#include“string.h” main(){ char str[80];int i=0,count=0;printf(“Input string:”);gets(str);while(str[i]){ if(str[i]=='a' && str[i+1]=='b'){ count++;i+=2;/*如果在当前 i 的位置找到一对,则 i 越过 b 个字母*/ } else i++;/*如果在当前 i 的位置未找到,则 i 指向下一个字母*/ } printf(“%d”,count);getch();} 10 从键盘输入 10 个字符串,找出一个最长的字符串。

#include“string.h” main(){ char str[10][80];/*设置二维字符数组,每一维可以记录最大79个字符的字符串*/ int i,len,k[10],n=0,max=0;printf(“Input 10 strings:n”);for(i=0;imax){max=len;n=0;k[n]=i;} /*记录最长字符串的长度、个数、在数组位置(行)*/ else if(len==max)k[++n]=i;/*与已记录最大长度相同时,记录其在数组中位置(行)*/ } if(n==0)/*此时说明只有一个最大长度字符串,是 str[k[0] */ { printf(“The longest string is String %d:”,k[0]+1);/*输出其序号*/ puts(str[k[0]]);} else /*此时说明有不止一个最大长度字符串时需要处理的复合语句*/ { printf(“Not only one!n”);for(i=0;i

已知数组 a 中有 m 个按升序排列的元素,数组 b 中有 n 个按降序排列的元素,编程将 a 与 b 中的所有元素按降序存入数组 c 中。

【提示】将 a 中的元素最大值与 b 中元素最大值相比,将最大值存入 c 数组中,然后调整 c、a 或 b 元素指针(地址),依次重复前序工作,即可。

#define M 3 #define N 7 main(){ int i=0,j=0,n=0,c[M+N],a[3]={10,27,543},b[7]={300,210,173,96,55,34,13};int maxa,maxb;do { maxa=a[M-i-1];maxb=b[j];if(maxa>maxb){ c[n++]=maxa;/*将 a 中最大元素赋值给 c 数组当前元素,并调整 c 新元素位置*/ i++;/*调整 a 中元素位置*/ } else { c[n++]=maxb;/*将 a 中最大元素赋值给 c 数组当前元素,并调整 c 新元素位置*/ j++;/*调整 b 中元素位置*/ } printf(“%d ”,c[n-1]);/*打印输出 c 中新赋值元素数据*/ }while(n

针 -习题答案 1 ★选择题。

1、若函数 f 定义如下:

void f(char *d,char *s);{while(*d++=*s++);} 函数 f 的功能是()。

A.串比较 B.串复制 C.求串长 D.串反向

2、有定义 int arr[10]={0,1,2,3,4,5,6,7,8,9}, *p, i=2;若执行语句: p=arr;pritnf(“%d”,*(p+i));输出结果为()。

A.0 B.2 C.3 D.1 ★

3、有定义 int td[ ][3]={1,2,3,4,5,6};以下几种方法中,不能正确表示 i 行 j 列元素的是()。

A.td[i][j] B.*(td[i]+j)C.*(*(td+i)+j)D.*(td+i-j)本题不要求掌握

1、B

2、B

3、D 2 ★写出下列程序的运行结果。

1、void main(){ int a,*p1,*p2;a=10;p1=&a;p2=p1;printf(“The Value is %d||%d||%dn”,a,*p1,*p2);*p1=11;printf(“The Value is %d||%d||%dn”,a,*p1,*p2);}

2、若输入字符串 program 时,写出下列程序输出结果: #include void main(){ char str[80];void prochar(char *st,char ch);scanf(“%s”,str);prochar(str,'r');puts(str);} void prochar(char *str,char ch){ char *p;for(p=str;*p!='';p++)if(*p==ch){*str=*p;(*str)++;str++;} *str='';} 答

1、The Value is 10||10||10 The Value is 11||11||112、3 ★填空题

1、下面程序完成从键盘输入两个字符串 a 和 b,再将 a 和 b 的对应位置字符中的较大者存放在数组 c 中,填空完善该程序。#include #include void main(){ int k=0;char a[80],b[80],c[80]={''},*p,*q;p=a;q=b;gets(a);gets(b);while(_____①_____){ if(____②____)c[k]=*p;else c[k]=*q;p++;______③______;k++;} /*本题教材有误,少了此处的右大括号*/ if(*p!=0)strcat(c,p);else strcat(c,q);puts(c);}

2、以下程序从键盘输入10个不相同的数到数组 a 中,再输入一个数到 x 中,在 a 中查找与 x 值相同的元素所在的位置,填空完善该程序。#include void main(){ int a[11],x,i;printf(“Input 10 integers:n”);for(i=1;___①___;i++)

scanf(“%d”,____②___);printf(“Input x:”);scanf(“%d”,&x);*a=x;i=10;while(x!=*(a+i))_____③_____

if(_____④_____)printf(“%6d's position is:%3dn”,x,i);else printf(“%6d Not be found!n”,x);/*bee应为be,教材有误,小case*/ } 答

1、① *p!=''&&*q!='' ② *p>*q ③ q++

2、① i

1② &a[i] ③ i--;④ i>0 编写函数 fun,函数的功能是,从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。例如,程序执行时输入字符串为 turbo c and borland c++,从键盘输入字符 n,则输出后变为 turbo c ad borlad c++。如果输入的字符在字符串中不存在,则字符串照原样输出。【提示】

#include“string.h” main(){ char s[80],*pstr=s,chdel;printf(“Input source string:”);gets(pstr);printf(“Character you want delete:”);scanf(“%c”,&chdel);fun(pstr,chdel);printf(“After deleted:”);puts(pstr);getch();} int fun(char *s,char ch){ int i,j;for(i=0,j=0;s[i];i++)if(s[i]!=ch)s[j++]=s[i];s[j]=0;} 5 编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。【提示】。

【解法一】

#include“stdio.h” int fun(char *p);main(){ int i=0;char ch,str[80];printf(“Input string end by.: n”);while((ch=getchar())!='.')str[i++]=ch;str[i++]='.';str[i]='';fun(str);puts(str);getch();} int fun(char *p){ int flag=1;while(*p!=''){ if(*p==' ')flag=1;if(*p>='a'&&*p

【解法二】

#include“stdio.h” main(){ int flag=1;char ch;printf(“Input string end by.: n”);do { ch=getchar();flag=fun(&ch, flag);putchar(ch);}while(ch!='.');printf(“n”);} fun(char *c,int f){ if(*c==' ')return 1;else { if(f&&*c='a')*c-=32;return 0;} } 6 从键盘输入 8 个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。【提示】

#include“stdio.h” #include“string.h” main(){ int data[80],i,*p1,*p2,temp;p1=data;printf(“Input 8 numbers:”);for(i=0;i

#include“string.h” #include“stdio.h” main(){ char str1[80],str2[80];int m,n,len;printf(“Input string:”);len=strlen(gets(str1));printf(“Input m,n:”);scanf(“%d,%d”,&m,&n);if(m>len||n>len-m){printf(“m,n error!”);exit(0);} else fun(str1,str2,m,n);puts(str2);getch();} fun(char *s,char *p,int x,int y){ int i;for(i=0;i

main(){ int a[8],i,*p,max,min,t;max=min=0;p=a;printf(“Input 8 numbers:”);for(i=0;i*(p+max))max=i;if(max!=0){ t=*(p+0);*(p+0)=*(p+max);*(p+max)=t;} for(p=a;p

#include“stdio.h” sort(int **p, int n){ int *t,i,j;for(i=0;i**(p+j)){ t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;} } } } main(){ int i=0,n,**p;printf(“Please input count of numbers:n”);scanf(“%d”,&n);for(i=0;i

输入一个字符串,内含数字和非数字字符,如 gs 423cd156 7896>? df12345,将其中连接的数字作为一个整数,依次存放到数组 a 中,例如,423放入a[0],156放入a[1],„。统计其共有多少个整数,并输出这些数。

未做

#include“string.h” main(){ char str[10][80];/*设置二维字符数组,每一维可以记录最大79个字符的字符串*/ int i,len,k[10],n=0,max=0;printf(“Input 10 strings:n”);for(i=0;imax){max=len;n=0;k[n]=i;} /*记录最长字符串的长度、个数、在数组位置(行)*/ else if(len==max)k[++n]=i;/*与已记录最大长度相同时,记录其在数组中位置(行)*/ } if(n==0)/*此时说明只有一个最大长度字符串,是 str[k[0] */ { printf(“The longest string is String %d:”,k[0]+1);/*输出其序号*/ puts(str[k[0]]);} else /*此时说明有不止一个最大长度字符串时需要处理的复合语句*/ { printf(“Not only one!n”);for(i=0;i

C语言程序设计教程_杨路明__课后习题答案

C语言程序设计教程 杨路明 课后习题答案 北京邮电大学出版社第一章1、算法描述主要是用两种基本方法:第一是自然语言描述,第二是使用专用工具进行算法描述2、c语言程序的结构......

C语言程序设计教程课后习题答案

C语言程序设计教程课后习题答案第一章 C语言程序设计概述 -习题答案1 算法的描述有哪些基本方法?答1、自然语言2、专用工具2 C语言程序的基本结构是怎样的?举一个例子说明。答1......

80X86语言程序设计教程(杨季文)课后习题答案

第二章 答案题2.1 8086/8088通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门用途?哪些寄存器可作为存储器寻址方式的指针寄存器? 答:8086/8088通用寄存器的通用性表现......

C语言程序设计教程 课后习题参考答案

《C语言程序设计教程》课后习题参考答案习题1 1.(1)编译、链接.exe (2)函数主函数(或main函数) (3)编辑编译链接 2.(1)-(5):DDBBC (6)-(10):ABBBC 3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是......

c语言程序设计课后习题答案 第7章

/*练习7-1*/ #include main() { int a[10],n,sum=0,i; float ave; printf("enter n:\n"); scanf("%d",&n); printf("enter %d ge zheng shu:\n",n); for(i=0;......

《C语言程序设计教程(第2版)课后习题答案杨路明[1].docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C语言程序设计教程(第2版)课后习题答案杨路明[1]
点击下载文档
相关专题 c语言程序设计习题库 课后 习题 答案 c语言程序设计习题库 课后 习题 答案
[其他范文]相关推荐
[其他范文]热门文章
下载全文