C语言程序设计教程课后答案第2版杨路明.docx
- 文档编号:23519700
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:59
- 大小:65.37KB
C语言程序设计教程课后答案第2版杨路明.docx
《C语言程序设计教程课后答案第2版杨路明.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程课后答案第2版杨路明.docx(59页珍藏版)》请在冰豆网上搜索。
C语言程序设计教程课后答案第2版杨路明
第一章C语言程序设计概述
-习题答案
1
算法的描述有哪些基本方法?
1、自然语言
2、专用工具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--√
PAS--√
C.D--×
leed_3--a*b2--×8stu--×D.K.Jon--×EF3_3--√if--×XYZ43K2--√AVE#XY--×_762--√#_DT5--×
说明下列TurboC热键的功能。
F2:
源文件存盘F10:
调用主菜单F4:
程序运行到光标所在行(用于调试程序)Ctrl+F9:
编译并链接成可执行文件Alt+F5:
将窗口切换到DOS下,查看程序运行结果。
6
说明下列TurboC方式下输入并运行下列程序,记录下运行结果。
①main(){printf("********************\n");
printf("welcomeyou\n");printf("verygood\n);printf("********************\n");
}
②main()
{inta,b,c,t;
printf("pleaseinputthreenumbers;");scanf("%d,%d,%d",&a,&b,&c);/*教材S是错误的*/t=max(max(a,b),c);
printf("maxnumberis:
%d\n",t);
}
intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;return(z);
}
答运行结果:
welcomeyouverygood
运行结果:
pleaseinputthreenumbers;3,1,4/*左侧下划线内容为键盘输入*/maxnumberis:
4
一个C程序是由若干个函数构成的,其中有且只能有一个___函数。
main()8
在TurboC环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。
1、Userscreen
2、Alt+F59
★C语言对标识符与关键字有些什么规定?
1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。
2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。
10
C源程序输入后是如何进行保存的?
答
是以C为扩展名保存的纯文本文件。
第二章C语言程序的基本数据类型与表达式-习题答案
1
★指出下列常数中哪些是符合C语法规定的。
请找出下列程序中的错误,改正后写出程序运行结果。
1voidmain(){intx,y=z=5,aver;
x=7
AVER=(x+y+z)/3printf("AVER=%d\n",aver);
}
2voidmain()
charc1='a';c2='b';c3='c';
inta=3.5,b='A'printf("a=%db=\'\"end\n",a,b);printf("a%cb%c\bc%c\tabc\n",c1,c2,c3);
main()
{intx,y=5,z=5,aver;
x=7;aver=(x+y+z)/3;printf("AVER=%d\n",aver);
}
运行结果:
AVER=5
2main()
{charc1='a',c2='b',c3='c';
inta=3,b='A';printf("a=%d,b=\'%c\'\"end\"\n",a,b);printf("a%cb%c\bc%c\tabc\n",c1,c2,c3);
}
运行结果:
a=3,b='A'"end"
aabccabc
3写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。
int
99char
'h'
unsignedint
66
float
55.78
longint
68
int
99
104
66
55
68
-1
char
'h'
'B'
'7'
'D'unsignedint
99
104
66
55
68
65535
float
99.00
104.00
66.00
55.78
68.00
-1.00
longint
99
104
66
55
68
-1
4
★写出程序运行结果。
1voidmain()
{inti,j;
i=8,j=10;
printf("%d,%d,%d,%d\n",i,j,++i,j++);
}
2main()
{inta=1,b=2,c=30;;printf("%d,%d,%d,%d\n",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
3voidmain()
{inta=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf("%d,%d,%d,%d\n",a,b,c,d);}
运行结果:
11,19,30,1
5★写出下面表达式的值(设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
x:
'A'
⑻b++==c
⑼a+b,18+(b=4)*3,(a/b,a%b)
⑽x+a%3*(int)(x+y)%2/4+sizeof(int)
⑾a
a:
c c: d ⑿b++==c ⒀a*=b=c=2 ⒁a=b==c ⑴0⑵0⑶9.500000⑷90⑸10⑹10⑺'A'⑻2⑼4.5⑽1⑾0⑿20⒀0 6 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值 的整型变量)? 1m=(a=4,4*5)与m=a=4,4*5 2(float)(a/b)与(float)a/b 3(int)a+b与(int)(a+b) 4m%=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相除,其值保证了精度,所以不同。 3因为a、b均为整数,其前后两个表达式的计算结果是一致的。 ④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。 5前后表达式的计算结果应该是一致的: a=2,b=3,m=67 条件表达式x>0? x: -x的功能是什么? 如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。 其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。 8用一个条件表达式描述从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.36B.-60C.60D.-24 B. ★若有以下类型说明语句: charw;intx;floaty;doublez;则表达式w*x+z-y的结果为()类型。 A.floatB.charC.intD.double 答 D. 第三章顺序结构程序设计 -习题答案 1变量k为float类型,调用函数scanf("%d",&k),不能使变量k得到正确数值的原因是___。 格式修饰符与变量类型不一致。 因为%d输入的数据类型应该为十进制整数, 而&k为占用4个字节的float类型变量的地址。 2★a=1234,b=12,c=34,则执行“printf("|%3d%3d%-3d|\n",a,b,c);”后的输出是___。 |12341234| 分析如下: ①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。 ②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。 3 ★设有“inta=255,b=8;”,则“printf("%x,%o\n",a,b);”输出是___。 答 ff,10 ①如果“printf("%X,%o\n",a,b);”则输出为FF,10。 说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。 ②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改 “printf("%#x,%o\n",a,b);”为或“printf("%#X,%o\n",a,b);”。 本条解释不必须掌握。 4 ★以下程序输出的结果是___。 main() { inta1=1,a2=0,a3=2;printf("%d,%d,%d\n",a1,a1+a2+a3,a3-a1); } 1,3,15 printf函数中用到格式符%5s,其中5表示输出字符占用5列。 如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。 答 ①实际②左端补空格 6 ★已定义变量如下: inta1,a2; charc1,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 答 设inta=10,b=5;以下为输出语句及结果: 10+5=15 10-5=5 10*5=50 10/5=2 (float)10/5=2.0 10%5=0 ①printf("%d+%d=%d\n",a,b,a+b); ②printf("%d-%d=%d\n",a,b,a-b); 3printf("%d*%d=%d\n",a,b,a*b); 4printf("%d/%d=%d\n",a,b,a/b); 5printf("%(float)d/%d=%f\n",a,b,(float)a/b); 00000 6printf("%d%%%d=%d\n",a,b,a%b); ★输入一个非负数,计算以这个数为半径的圆周长和面积。 答 #definePI3.1415926 main() { floatr,l,area; printf("Inputapositive: "); scanf("%f",&r); l=2*PI*r; area=PI*r*r; printf("l=%f\tarea=%f\n",l,area); } 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。 main() { intx,y; printf("Inputanumber(100-999): ");scanf("%d",&x); y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/ printf("%d--->%d\n",x,y); }10 ★输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。 若是则输出YES,不是则输出NOT(要求用条件表达式进行判断,不使用if语句)。 main() { intx,y,z,oddcount=0;/*奇数数计数变量*/printf("Inputx,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"); } 求前驱字符和后继字符。 输入一个字符,找出它的前驱字符和后继字符,并按 ASCII码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。 本题考查同学们对字符类型数据的认识,如果在ASCII范围内则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。 main() { charc; printf("Inputcharacter: ");scanf("%c",&c); printf("%c>%d\n",c-1,c-1); printf("%c>%d\n",c,c); printf("%c>%d\n",c+1,c+1); getch();/*为便于调试程序,运行至此程序停顿,此时可以看到运行结 果,按任意键程序真难得结束并返回到编辑环境*/ } 12 ★输入三角形的边长,求三角形面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2)。 #include"math.h"/*由于程序中使用了开平方函数sqrt(),所以需要包 含数学头文件*/ main() { floata,b,c,s,area;intok=0; printf("Inputa,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(); 第四章选择结构程序设计 -习题答案 1 ★设x、t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为 2 ★假定所有变量均已正确定义,则程序段: inta=0,y=10; if(a=0)y--;elseif(a>0)y++; elsey+=y; 运行后y的值是___; 答 203 ★能表述20 x>20&&x<30||+x<-1004 ★若有定义语句“inta=25,b=14,c=19;”,则以下语句执行结果是___if(a<=25&&b<=2&&c) printf("***a+b=%d,a-b=%d***\n",a+b,a-b); elseprintf("***a=%d,b=%d,c=%d***\n",a,b,c); 答 ***a=25,b=14,c=19***5 ★假定i和j为int型变量,则执行以下语句后i的值是___inti=1; switch(i) { case1: {for(j=0;j<9;j++)i+=j;break;}case2: {for(j=1;j<10;j++)i+=j;break;} case3: i++; 37 分析: 执行了case1: 和case3: 中的代码。 同时case1: 语句中的{}是可以取消的。 6 ★以下两条if语句可合并成一条if语句,即___。 if(a<=b)x=1; elsey=2;if(a>b)printf("***y=%d\n",y); elseprintf("***x=%d\n",x); 答 if(a<=b)printf("***x=%d\n",x=1); elseprintf("***y=%d\n",y=2); 7 ★输入两个字符,若这两个字符的序号(ASCII码)之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。 main() { chara,b; printf("Inputtwochatactera,b: ");scanf("%c,%c",&a,&b);if((a-b)/2==0)printf("%c,%c",a+1,b+1); elseprintf("%c,%c",a-1,b-1);}8 ★输入整数a和b,如果a能被b整除,就输出算式和商,否则输出算式、整数商和余数。 答 main() { inta,b; printf("Inputtwointegernumbersa,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() { floatx,y,d; printf("Inputx,y: "); scanf("%f,%f",&x,&y); d=sqrt((x-2)*(x-2)+(y-2)*(y-2));if(d>1)printf("outside"); elseif(d<1)printf("inside"); elseprintf("inside"); }10 ★输入年号和月份,输出这一年该月的天数(一个年份,先判断是否闰年)。 main() { inty,m,d,f; printf("Inputyearandmonthy-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-%dis%ddays.\n",y,m,d); } ★请将以下语句改写成switch语句(a>0)。 m=2; m=3; m=4; m=5 elseif(a<40)elseif(a<50)elseif(a<60)else switch(a/10) case1: case2: case3: m=1;break;case4: m=2;break;case5: m=3;break;case6: m=4;break;default: m=5; 12 x+10 编写一程序,要求输入x的值,输出y的值。 分别用不嵌套的if语句,嵌套的if语句,switch语句编写。 使用不嵌套的if语句程序如下: main() floatx,y; printf("Inputx: "); scanf("%f",&x);if(x>-5&&x<0)y=x-1; if(x==0)y=0;if(x>0&&x<8)y=x+1;printf("y=%f\n",y); 使用嵌套的if语句程序如下: main() { floatx,y; scanf("%f",&x); if(x>-5&&x<8)if(x<0)y=x-1;elseif(x==0)y=0: elsey=x+1; printf("y=%f\n",y); } main() floatx,y; scanf("%f",&x); if(x<8)if(x>0)y=x+1;elseif(x==0)y=0; elseif(x>-5)y=x-1;printf("y=%f\n",y); } 使用多分支语句程序如下: main() { floatx,y; intm; printf("Inputx: "); scanf("%f",&x); if(x>-5&&x<8) if(x<0)m=-1; elseif(x==0)m=0: elsem=1; switch(m) { case-1: y=x-1;break; case0: y=0;break; case1: y=x+1;break; } printf("y=%f\n",y); }以下为假设对int类型的变量进行处理,但毕竟不算完美 main() { intx,y;printf("Inputx: ");scanf("%d",&x);switch(x){ case-4: case-3: case-2: case-1: y=x-1;break; case0: y=0;break; case1: case2: case3: case4: case5: case6: case7: y=x+1;break;}printf("y=%d\n",y); 第五章循环结构程序设计 -习题答案1 ★输
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 教程 课后 答案 版杨路明