1、C 语言程序设计教程课后习题答案 第一章 C 语言程序设计概述习题答案1算法的描述有哪些基本方法?答1、自然语言2、专用工具2C 语言程序的基本结构是怎样的?举一个例子说明。答1、C 语言程序由函数构成;2、“/*”与“*/”之间的内容构成 C 语言程序的注释部分;3、用预处理命令#include、#define 可以包含有关文件或预定义信息;4、大小写字母在 C 语言中是有区别的;5、除 main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。3C 语言有什么特点?答1、具有结构语言的特点,程序之间很容易实现段的共享;2、主要结构成
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 热键
3、的功能。答F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序) Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。6说明下列 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“, /*教材 S 是错误的*/t=m
4、ax(max(a,b),c);printf(“max number is:%dn“,t);int max(int x, int y) int z;if(xy)z=x;else z=y;return(z);答运行结果:*welcome youvery good*运行结果:please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/max number is:47一个 C 程序是由若干个函数构成的,其中有且只能有一个函数。答main()8在 Turbo C 环境下进行程序调试时,可以使用 Run 下拉菜单的命令或按键转到用户屏幕查看程序运行结果。答1、User
5、 screen2、Alt+F59C 语言对标识符与关键字有些什么规定?答1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。10C 源程序输入后是如何进行保存的?答是以 C 为扩展名保存的纯文本文件。第二章 C 语言程序的基本数据类型与表达式习题答案1指出下列常数中哪些是符合 C 语法规定的。答- 101- “- e3- 019- 0x1e- “abn“- 1.e5- (2+3)e(4-2)- 5.2e2.5-2请找出下列程序中的错误,改正
6、后写出程序运行结果。void main()int x,y=z=5,aver;x=7AVER=(x+y+z)/3printf(“AVER=%dn“,aver);void main() char c1=a;c2=b;c3=c;int a=3.5,b=Aprintf(“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=5main() char c1=a, c2=b, c3=c;int a=
7、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 abc3写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int99-1charhunsigned int66float55.78long int68答int99104665568-1charchB7Dunsigned int9910466556865535float99.00104.0066.0055.7868.00-1.00long i
8、nt99104665568-14写出程序运行结果。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,0void main()int a=10,b=20,c=30,d;d=+a=20|c+;printf(“%d,%d,%d,%dn“,a,b,c,d);答运行结果:11,19,
9、30,15写出下面表达式的值(设 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)ya*=b+c+a-c+b+a-c+ba0?x:-x 的功能是什么?答如果 x 的值是一正数,则表达式的值为 x 值;如果 x 的值是一非正数,则表达式的值为-x。其实该表达式的值即为 x 的绝对值,C 语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在 math.h 头文件中。8用一个条件表达式描述从 a、b、c 中找出最大都赋给 max.答max=a(bc?b:c)?a:(bc?b:c);
10、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.第三章 顺序结构程序设计习题答案1变量 k 为 float 类型,调用函数 scanf(“%d“,”后的输出是。答|1234 1234 |分析如下:%3d 为右对齐输出变量,且指定输出变量的值宽度为 3 个字符位,如果变量实际位数小于 3,
11、则左端补空格,如果变量实际位数大于 3,则按实际长度输出,不受限制。%-3d 为左对齐输出变量,在输出变量时,如是变量实际位数小于 3,则在右端补空格,否则按实际输出。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(“%#
12、X,%on“,a,b);”。本条解释不必须掌握。4以下程序输出的结果是。main()int a1=1,a2=0,a3=2;printf(“%d,%d,%dn“,a1,a1+a2+a3,a3-a1);答1,3,15printf 函数中用到格式符%5s,其中 5 表示输出字符占用 5 列。如果字符串长度大于 5,则按输出;如果字符串长度小于 5,则按输出。答实际 左端补空格 6已定义变量如下:int a1,a2;char c1,c2;若要求输入 a1、a2、c1 和 c2 的值,正确的输入函数调用语句是。答scanf(“%d,%d,%c,%c“,7输入两个整型变量 a、b 的值,输出下列算式以及运
13、算结果。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=15printf(“%d-%d=%dn“,a,b,a-b); 10-5=5printf(“%d*%d=%dn“,a,b,a*b); 10*5=50printf(“%d/%d=%dn“,a,b,a/b); 10/5=2printf(“%(float)d/%d=%fn“,a,b,(float)a/b); (float)10/5=2.000000
14、printf(“%d%d=%dn“,a,b,a%b); 10%5=08输入一个非负数,计算以这个数为半径的圆周长和面积。 答#define PI 3.1415926main()float r,l,area;printf(“Input a positive:“);scanf(“%f“,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“,y=100*(x%10)+10*(x/10%10)+x/100; /*注意分析此处算法*/