1、 1 C 语言编程基础 (第 2 版) 习题答案 前 言 C 语言编程基础 (第 2版) 每章后面都安排了一定数量的习题,这有利于读者理解、消化和掌握各单元的学习内容。习题中,除了有填空题、选择题、回答问题等适合掌握基本概念的题型外,大部分是分析程序运行结果和要求编写实用程序,这有利于读者训练编程技巧和增强编程能力。应广大读者要求,特别是一线教学老师的要求,我们给出全部习题答案,供读者参考。编程答案只是实现题目算法要求的一种,并不一定是最好的。希望读者自己多做思考,利用多种方法进行编程,用以提高自己的程序设计水平 和锻炼 自己的创新能力 。由于作者水平所限,错误和不当之处在所难免,恳请批评指正
2、。 习题一 1、填空题。 C语言程序由 _函数 _组成,其中必须有且只能有一个名为 _main_的函数。 C程序的执行从 _名为 main的主 _函数开始。 每个 C语句必须以 _分 _号结束。 标识符只能由 _英文字母 _、 _数字 _和 _下划线 _三类符号构成,而且标识符的第一个字符必须是 _英文字母 _或 _下划线 _。 关键字是指 _C语言编译系统所固有的、具有专门意义的标识符 _。 C程序中,注释的内容应放在 _/*_和 _*/_符号之间。 2、选择题。 下面合法的 C语言标识符是 _ C _。 C语言中主函数的个数是 _ A_。 以下有关注释的描述中,错误的是 _ C _。 C程
3、序中, main函数的位置 _ D_。 3、 指出并改正下面程序中的错误。 main 应为 main() 应在本程序最后加上大括号 。 语句结束应有分号。如: int a,b; a=1; b=2; printf(“%d“,a+b); 4、分析下列程序,写出运行结果。 2 该程序是计算 两个整数 a和 b的乘积并赋值给 c,运行结果为: c=30 该程序输出一个字符串和一排星号,运行结果为: Hello! * 5、编程题 。 按题目要求 , 编写 输出固定信息的 程序 如下: main() pt(); printf(“ Welcome!“); pt(); pt() printf(“*“); 按题
4、目要求 , 编写 输入数据输出其表达式的 程序 如下: main() int a,b,c; scanf(“%d“, scanf(“%d“, c=a*b+10; printf(“c=%d“,c); 习题二 1、单项选择题。 C语言中的变量名只能由字母、数字和下划线组成,且第一个字符 _ C _。 合法的常量是 _ D _。 C语言中的基本数据类型所占存储空间长度的顺序是 _ D_。 下列符号串中与 123.0相同的合法常量是 _ C_。 2、填空。 C语言中的基本数据类型包括 _整型( int) _、 _浮点型( flot) _ 和 _字符型( char) _三种。 整型常数有 _十进制整数 _
5、、 _八进制整数 _和 _十六进制整数 _三种表示形式 ; 整型变量可分为四类 : _一般整型( int) _、 _短整型( short) _、 _长整型3 ( long) _、 _无符号型 _。其中 _无符号型 _又可分为 _无符号整型( unsigned int) 、_无符号短整型( unsigned short) 和 _无符号长整型( unsigned long) _3种。 有 10个用指数形式表示的符点常数 : 请指出合法的有 _ _。 在 C中 ,没有专为存贮字符串的 变量 ,但可以用 _字符型数组 _ 或 _字符型指针变量 _存贮字符串。其定义格式为 _ char str6;_和
6、_ char *a;_。 数据类型混合运算时 , 要进行同型转换 , 转换方式分为 _自动转换(隐式转换) _和 _强制转换(显式转换) _两种。 3、写出下列程序运行结果。 215/9=23 8 97 b 4.000000 4、编写程序。 按题目要求编写求三个已知数的乘积 ,程序如下: main() int a,b,c; a=19; b=22; c=650; printf(“a*b*c=%dn“,a*b*c); 按题目要求,编写将值整数化后赋值的程序如下: main() int a1,a2; float b,c; b=35.425; c=52.954; a1=(int)(b*c); a2=(
7、int)c%(int)b; printf(“a1=%d;a2=%dn“,a1,a2); 按题目要求,编写计算圆周长、面积和圆柱体积的程序如下: main() int r,h,c,s,v; r=15; h=3; c=2*3.14*15; s=3.14*r*r; v=s*h; printf(“c=%d, s=%d , v=%dn“,c,s,v); 4 习题三 1、填空题。 设有 int x=11;则表达式 (x+*1/3)的值是 _3_。 已知数学表达式 y=x-2x+5,写出对应的 C语言表达式 _y=x*x-2*x+5_。 已知 a 10,则表达式 x=(a=a+b,a-b)的值为 _x=10
8、_。 2、选择题。 在 C语言中,下列运算符的操作数必须是 int 类型的运算符是( D )。 假设所有变量均为整型,则表达式 (a=2,b=5,a+,b+,a+b)的值为( A )。 已定义 int m=6,n=5;,则执行 m%=n-1;之后, m 的值是( B )。 已有 int a=1,b=1;则执行 b=(a=2*3,a*5),a+7 之后, a,b 的值是 ( B ) 。 已有 int x=2,y=1;则执行 x+=y-;的结果是 ( D ) 。 3、求下面算术表达式的值。 2.500000 3.500000 4、 分析下列程序,写出运行结果。 注意,在 C 语言中,因为函数调用中
9、参数按从右到左的顺序求值,因此该程序执行打印输出的 结果为: 3 1 1 该程序在计算条件表达式的值赋给 a 时,其 x值已为 6, y值已为 7,因此运行结果为: a=7,b=0,c=6 该程序利用运算符与结合性的优先级不同,而取得 a 与 b 的值 。(因为该题使用了逻辑运算符,可在学了第 5章以后再详细分析) 运行结果如下: a=2,b=1 该程序应用复合的赋值运算符和从右至左结合性的运算规则,求取 n 的值,运行结果如下: n=28 该程序在执行语句“ y=x+-1;”时, y 为 0 而 x 在执行后变为 2;在执行语句“ z=-y+1;”时, z 为 0而 y便成了 -1。 运行结
10、果如下: 5 x=2,y=-1,z=0 5、编程 题 。 用符号常量编写简单计算程序如下(复杂应用应在第 9章学习后再做): #define N 12 #define M 25 main() float c; printf(“N+M=%dn“,N+M); printf(“N-M=%dn“,N-M); printf(“N*M=%dn“,N*M); c=(float)N/M; printf(“N/M=%fn“,c); 查看 i+与 +j 运算结果差异的程序,编写如下: main() int i=20,j=20; printf(“i+:%dn+j:%dn“,i+,+j); 查看 m-与 -n 运算结
11、果差异的程序,编写如下: main() int m=20,n=20; printf(“m-:%dn-n:%dn“,m-,-n); 习题四 1、单项选择题。 下列叙述不正确的是 _B_。 当输入数据为 12345678 时,下面程序运行的结果是 _C_。 putchar 函数可以向终端输出一个 _D_。 按格式输出的格式符 _ C_。 2、 回答问题 。 6 在键盘上输入数据 格式如下: 12,24,Aa 2.58 -2.58 1 68.5 (代表空格,其中数据 1 是为了对付 %*f 占位,代表回车 ) 该题是求输入任意两个整数 a 与 b的和。若读入 a=b=5,其运行结果为: type a
12、 number please!a=? 5 type another please!b=? 5 a sum b is 10 3、 写出下列程序的执行结果。 执行结果 : 32767, -32768 2147483647, -2147483648 65535, 0 执行结果 : yes,I am computer. 执行结果 : ab tw 123 执行结果 : 58.887299, 555.677979 58.887299, 555.677979 58.887, 555.678,58.887,555.678,58.887299,555.677979 5.88873e+01, 5.6e+02 B,
13、66,102,42 7567890,34675022,7a12 11232,25740,2be0,11232 COMPUTER, ABC 4、编 写程序。 对输入的大写字母改用小写输出的程序,编写如下: #include main() char c; printf(“输入一个大写字母: n“); c=getchar(); putchar(c+32); 7 计算三门课总成绩等数据的程序,编写如下: #include main() float a,b,c,sum,ave,mod; printf(“输入三门课程的成绩: n“); scanf(“%f%f%f“, sum=a+b+c; ave=(a+b
14、+c)/3; mod=fmod(sum,3); printf(“ 总成绩 =%5.1f, 平均成绩 =%5.1f, 总成绩除 3 的余值=%3.1fn“,sum,ave,mod); 已知数据,按输出结果的要求编写输出程序如下: main() int a=1,b=2,c=3,g=12345; float d=7.2,e=-5.5,f=1.56; long h=123456; char i=o,j=p; printf(“a=%d b=%d c=%dn“,a,b,c); printf(“d=%f,e=%f,f=%fn“,d,e,f); printf(“d+e=%4.2f e+f=%4.2f d+f=
15、%5.3fn“,d+e,e+f,d+f); printf(“g=%7d h=%ldn“,g,h); printf(“i=%c or %dnj=%c or %dn“,i,i,j,j); 习题五 1、 单项选择题。 C语言用 _C_表示逻辑量为“假” 要求当 A的值为奇数时,表达式的值为“真”; A的 值为偶数时,表达式的值为“假”。以下不满足要求的表达式是 _D_。 在 if语句的嵌套中, else总是与 _C_配对。 下面对 for循环概念描述正确的是 _D_。 8 2、填空题 。 switch后面的“表达式”,通常为 _整 _型或 _字符 _型表达式;每个 case的常量表达式的值 _不能相
16、同 _。 如果不算 goto语句构成的循环结构,那么 C语言可以构建循环的语句一共有 _3_种 ,分别是 _for循环、 while循环、 do-while循环 _。 continue语句与 break语句在使用时,有两点 主要的不同:它不适用于_switch_语句;它跳转时是 _跳过 循环体中下面的语句从下一次循环开始 _。 把下面的两条 if分支语句合并成一条 if分支语句应该写成 : if(x=y) printf(” m=%dn” , m=2); else printf(” n=%dn” , n=1); 3、 指出以下程序的打印结果。 该程序运行结果如下: x=11 y=10 x=55
17、y=10 x=8 y=10 z=10 x=2 y=2 x=3 y=3 x=4 y=4 x=5 y=5 x=6 y=6 x=7 y=7 x=8 y=8 x=9 y=9 x=2 y=2 x=1 y=1000 x=2 y=100 x=3 y=10 4、 编写程序。 按要求,用两种循环方式编写相关程序如下: -的 for 循环 #include main() 9 int r; float v; for (r=1;r main() int r; float v; r=1; while (rmax) max=n; if (n main() int n,a,b,c; for (n=100;n=999;n+) a=n/100; b=n%10; c=(n%100-b)/10; if (pow(a,3)+pow(b,3)+pow(c,3)=n) printf(“%dn“,n); 习题六 1、填空题 。 数组是一组具有相同 _类型 _的数据的集合 。 如果一个数组的长度为 10,则该数组中数组元素下标的最小值为 _0_,最大值为 _9_。 若有 int a=10,20,30,40; 则数组 a 的长度为 _4_。 在 C 语言中,没有字符串变量,字符串的存储是通过 _字符数组 _来实现的。 strlen 函数的功能是 _测试字符串的长度 _, strcmp 函数的功能是 _