C语言程序设计– 第二章课后习题
电子13-02班王双喜
一、选择题
1. 下面四个选项中,均是合法整型常量的选项是(A)
A. 160,-0xffff,011
B. -0xcdf,01a,0xe
C. -01,986,012,0668
D. -0x48a,2e5,0x
2. 设C语言中,一个short int型数据在内存中占2个字节,则unsigned short int型数据的取值范围为(C)
A. 0~255
B. 0~32767
C. 0~65535
D. 0~2147483647
(解释:unsigned 类型是无符号数,其最小值是0;两个字节能表示216 = 65536种状态,因此其范围便是0~65535)
3. 下面四个选项中,均是合法的浮点数的选项是(C)
A. 160,0.12,e3
B. 123,2e4.2,.e5
C. -.18,123e4,0.00
D. –e3,.234,1e3
4. 在C语言中,char型数据在内存中存储的是字符的(D)
A. 补码
B. 反码
C. 原码
D. ASCII码
5. 若有定义“char c = ‘\72’”(A)
A. 包含1个字符
B. 包含2个字符
C. 包含3个字符
D. 不合法,c的值不确定
(解释:C程序中,反斜杠“\”是转义字符,按照规定“72”表示的应当是一个八进制数,因此c中存放的是二进制代码为01110010的ASCII(美国标准信息交换码))
6. 若有以下定义,则能使其值为3的表达式是(D)
int k = 7, x = 12;
A. x %= (k %= 5)
B. x %= (k - k % 5)
C. x %= k - k % 5
D. (x %= k) – (k %= 5)
7. 执行逗号表达式a = 3, b = 5, a -=a+b,b = a-b之后,a和b的值分别为(D)
A. 3和5
B. -5和-2
C. 8和3
D. -5和-10
(解释:逗号运算符的计算顺序是从左往右的,且每个表达式的运算完毕后相关变量立即生效)
8. 设有定义:char x = 3, y = 6, z;,则执行语句z = x ^ y<<2;后,z的二进制值是(B)
A. 00010100
B. 00011011
C. 00011100
float型D. 00011000
(解释:移位运算符优先级高于按位或运算符,因此z = 00011 xor 11000)
9. 设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运
算的表达式是(B)
A. n = (n*100 + 0.5)/100.0
B. m = n*100 + 0.5, n = m/100.0
C. n=n*100+0.5/100.0
D. n = (n/100+0.5)*100.0
(解释:要想保留小数点后两位应现将其第三位变成十分位然后再加0.5使其转换成整型变量后能实现四舍五入,而后再除以100.0而不是100是为了防止整个表达式沦为整型表达式而导致小数被舍弃)
10. 下列程序执行后的输出结果是(小数点后只写一位)(A)
A. 6 6 6.0 6.0
B. 6 6 6.7 6.7
C. 6 6 6.0 6.7
D. 6 6 6.7 6.0
# include <stdio.h>
main()
{
double d; float f; long l; int i;
i = f = l = d = 20 / 3;
printf(“%d %d %f %f \n”, i, l, f, d);
}
(解释:由于“20 / 3”是操作数都是整型,小数部分将被舍去)
11. 若变量已正确定义并赋值,下面符合C语言语法的是(B)
A. a := b + 1
B. a = b = c + 2
C. int 18.5 % 3
D. a = a + 7 = c + b
(解释:A、C均不合法,D中赋值运算符的左值必须是一个变量)
12. 若变量a、i已正确定义,且i已正确赋值,合法的语句是(B)
A. a==1
B. ++i;
C. a = a++ = 5;
D. a = int(i);
(解释:A没有分号)
13. 若有定义:int a = 7; float x = 2.5, y = 4.7;,则表达式x + a % 3 * (int)(x + y) % 2 / 4的值是(A)
A. 2.5
B. 2.75
C. 3.5
D. 0.0
(解释:按照运算符的优先级不难得出结果;注意当运算符的操作数都是整型时,其结果也是整型)
14. 设变量a是整型,f是单精度型,i是双精度型,则表达式10 + ’a’ + i * f值的数据类型为(C)
A. int
B. float
C. double
D. 不确定
(解释:i是双精度类型,因此整个表达式的类型就是双精度型。注意“'a'”存储的值是整数(ASCII))
15. sizeof(float)是(B)
A. 一个双精度型表达式
B. 一个整型表达式
C. 一种函数调用
D. 一个不合法的表达式
(解释:这是一个运算符而不是函数,其计算在编译的时候便已经完成)
二、填空题
1. C语言的标识符只能有三种字符组成,它们是下划线(_) 、字母、和数字。
2. 以下程序的输出结果是0 。
# include <stdio.h>
main()
{
unsigned short a = 65536; int b;
printf(“%d\n”, b = a);
}
(解释:a占用两个字节,因此,a只取65536低位的两个字节(65536(D)=1 00000000 00000000(B)))
3. 在C语言中(以32位系统为例),一个float型数据在内存中所占的字节数为4 ,一个double型数据在内存
中所占的字节数为8 ,
4. 能正确表示a b
c
a b
+
-
的C语言表达式是(a + b) / (a - b) * c 。
5. 若a是int型变量,且a的初值为6,则计算表达式a += a -= a * a后a的值为-60 。
6. 若有定义:int m = 5, y = 2;,则计算表达式y += y -= m *= y后的y值是-16 。
7. 若有定义:int a = 10, b = 9, c = 8;,则顺序执行下列语句后,变量c中的值是11 。
c = (a -= (b - 5));
c = (a % 11) + (b = 5);
8. 若a、b和c均是int型变量,则计算表达式a = (b = 4) + (c = 2)后,a值为6 ,b值为4 ,c值为2 。
9. 设有定义:int a = 10, b = 4;,则执行语句a %= b + 1;后,a的值是0 。
(解释:“%=”运算符仅高于逗号运算符)
10. 若x和n均是int型变量,且x和n的初值均为5,则计算表达式x += n++后,x的值为10 ,n的值为6 。
11. 若x和a均是int型变量,则计算表达式①后的x值为12 ,计算表达式②后的x值为4 。
① x = (a = 4, 6*2)
② x = a = 4, 6*2
12. 若有定义:int b = 7; float a = 2.5, c = 4.7;,表达式为:a + (int)(b / 3 * (int)(a + c) / 2) % 4,则其计算值为5.5 。
13. 下列程序的输出结果是0 。
# include <stdio.h>
main()
{
float i = 1.1;
int x, y;
x = 1.5;
y = (x + 3.5) / 5;
printf(“%d\n”, x * y);
}
(解释:注意x是整型,将1.5赋给x时便已经舍去小数部分了)
14. 以下程序的输出结果是16 。
# include <stdio.h>
main()
{
int a = 0;
a += (a = 8);
printf(“%d\n”, a);
}
15. 下列程序的输出结果是16.00,请填空。
# include <stdio.h>
main()
{
int a = 9, b = 2;
float x =    6.6 , y = 1.1, z;
z = a / 2 + b * x / y + 1 / 2;
printf(“%f\n”, z);
}
三、编程题
1. 编写一个程序求各种类型数据的存储长度。
001/*
002*功能:求各种类型数据的存储长度
003*作者:xkwy
004*时间:2014-3-5 10:03:31
005*版本:V1.0
006*/
007
008# include <stdio.h>
009
010int main(void)
011{
012printf("\n >Output the size of all data type:\n\n", sizeof(unsigned char));
013printf(" unsigned char = %d\n", sizeof(unsigned char));
014printf(" [signed] char = %d\n\n", sizeof(signed char));
015
016printf(" unsigned short [int] = %d\n", sizeof(unsigned short int));
017printf(" [signed] short [int] = %d\n\n", sizeof(signed short int));
018
019printf(" unsigned [int] = %d\n", sizeof(unsigned int));
020printf(" [signed] int = %d\n\n", sizeof(signed int));
021
022printf(" unsigned long [int]= %d\n", sizeof(unsigned long int));
023printf(" [signed] long [int]= %d\n\n", sizeof(signed long int));
024
025printf(" float = %d\n", sizeof(float));
026printf(" double = %d\n", sizeof(double));
027printf(" long double = %d\n", sizeof(long double));
028
029printf("\n >Over.\n");
030
031return 0;
032}
2. 从键盘里输入公里数,屏幕输出其英里数。已知1英里=1.60934公里(用符号常量)
001/*
002*功能:公里转英里
003*作者:xkwy
004*时间:2014-3-5 11:16:23
005*版本:V1.0
006*/
007
008# include <stdio.h>
009# define KILOMETER2MILE 1.60934
010
011int main(void)
012{
013float src = 0.0;
014
015printf("\n >convert KiloMeter into Mile.\n");
016while (1)
017{
018printf("\n Please input km(0 to exit):");
019scanf("%f", &src);
020while (getchar() != '\n');
021
022if (-0.0001 < src && src < 0.0001) return 0;
023if (src < 0)
024{
025printf(" ERROR!! \n");
026continue;
027}
028
029printf(" %g KiloMeter(s) = %g Mile(s)\n", src, src / KILOMETER2MILE);
030}
031
032return 0;
033}
(说明:为了能够实现连续计算,在主程序中加了一个死循环(当键入0时,退出程序);另外对于浮点数对零的比较也考虑了误差)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。