内容正文:
第3章 基本数据类型与常用库函数(练习及答案)-《C语言程序设计》(清华大学出版)
第3章 习 题 解 答
一、选择题
1. 在C程序中,________。
A) 用户标识符中可以出现下画线和中画线(减号)。
B) 用户标识符中不可以出现中画线,但可以出现下画线。
C) 用户标识符中可以出现下画线,但不可以放在用户标识符的开头。
D) 用户标识符中可以出现下画线和数字,它们都可以放在用户标识符的开头。
答案:B
分析:在C语言中,标识符的命名规则如下。
(1) 标识符由数字、字母、下画线组成。
(2) 标识符的首字符必须为字母或下画线。
(3) 标识符不能是C语言中的保留字。
(4) C语言对英文字母区分大小写。例如,A与a表示不同的标识符。
2. 以下选项中不合法的标识符是________。
A) print B) FOR C) &a D) _00
答案:C
3. 以下选项中不属于C语言数据类型的是________。
A) signed short int B) unsigned long int
C) unsigned int D) long short
答案:D
分析:选项D不是合法的C语言数据类型。C语言中的整型变量可分为以下6种类型:有符号基本整型[signed]int(方括号表示可省略,比如signed int可简写为int)、无符号基本整型unsigned int、有符号短整型[signed]short[int]、无符号短整型unsigned short[int]、有符号长整型[signed]long[int]和无符号长整型unsigned long [int]。
4. C语言中的基本数据类型包括________。
A) 整型、实型、逻辑型 B) 整型、实型、字符型
C) 整型、逻辑型、字符型 D) 整型、实型、逻辑型、字符型
答案:B
分析:C语言中没有逻辑型数据,而是使用数值0表示“假”,并使用非零值表示“真”。
5. 以下关于long、int和short型数据所占内存大小的叙述中,正确的是________。
A) 均占用4字节 B) 根据数据的大小来决定所占内存的字节数
C) 由用户自己定义 D) 由C语言编译系统决定
答案:D
分析:C语言并没有规定long、int和short型数据占用的内存大小,而由编译系统决定。
6. C源程序中不能表示的数制是________。
A) 二进制 B) 八进制 C) 十进制 D) 十六进制
答案:A
分析:C语言只支持使用十进制、八进制和十六进制。
7. 下列选项中能够正确地定义符号常量的是________。
A) #define n=10 B) #define n 10
C) #define n 10; D) #DEFINE N 10
答案:B
分析:符号常量的定义格式为“#define 符号常量名 常量”。符号常量可用标识符命名,注意符号常量名的前后要有空格。
8. 以下所列的C语言常量中,错误的是________。
A) 0xFF B) l.2e0.5 C) 2L D) '
'
答案:B
分析:选项A中的常量是以0x开头的十六进制数;选项C中的常量是长整型常量;选项D中的常量是转义字符常量;选项B中的常量表示形式错误,e的右侧不能是小数,而只能是整数。
9. 在C语言中,字符型数据在内存中的存储形式是________。
A) 原码 B) 反码 C) 补码 D) ASCII码
答案:D
分析:字符型数据在内存中保存的是ASCII码,而ASCII码都是正整数,正整数的原码、反码和补码完全相同。
10. 若有定义语句char c='\72';,则变量c________。
A) 包含1个字符 B) 包含2个字符
C) 包含3个字符 D) 定义不合法
答案:A
分析:字符型变量只能保存一个字符,而'\72'是转义字符,表示编码为072(八进制)的字符。
11. 不合法的八进制数是________。
A) 0 B) 028 C) 077 D) 01
答案:B
分析:八进制数由数字0~7组成,并且以0开头,不包含数字8。
12. 以下选项中正确的字符串常量是________。
A) "\\\" B) 'abc' C) OlympicGames D) ""
答案:D
分析:选项A错,因为转义字符\\表示字符\,而转义字符\"表示字符",所以选项A的右端缺少定界符"。选项B和C也错,因为字符串必须用双引号引起来。选项D表示一个空的字符串。
13. 以下选项中正确的定义语句是________。
A) double a;b; B) double a=b=7;
C) double a=7,b=7; D) double ,a,b;
答案:C
分析:选项A错,a和b应该用逗号分开。选项B错,应为double a=7,b=7;。选项D错,double和a之间应使用空格隔开,而不能使用逗号。
14. 假设c1、c2为字符型变量,执行语句cl=getchar(); c2=getchar(); 时,从键盘输入A↙,此时c1和c2的值分别为________。
A) 都是'A' B) c1是'A',c2未输入
C) c1未输入,c2是'A' D) c1是'A',c2是'
'
答案:D
分析:getchar函数的功能是从键盘接收一个字符,当输入A↙(↙表示按回车键,也就是输入换行符'
')时,第一个字符'A'被赋给c1,第二个字符'
'被赋给c2。
15. 假设c为字符型变量,值为'A';a为整型变量,值为97;执行语句putchar(c);putchar(a);后,输出结果为________。
A) Aa B) A97 C) A9 D) aA
答案:A
分析:putchar(x)函数的功能是输出字符x。参数x可以是字符,也可以是整数。当x是整数时,就输出以这个整数作为ASCII码值的字符。
16. 假设a和b是整型变量,执行语句scanf("a=%d,b=%d", &a,&b);,为了使a和b的值分别为1和2,正确的输入应该是________。
A) 1 2 B) 1,2 C) a=1,b=2 D) a=l b=2
答案:C
分析:当scanf输入函数的格式字符串中包含普通字符时,必须原样输入。在这里,格式字符串"a=%d,b=%d"中的a=和b=是普通字符,因此必须原样输入。
17. 为了使用输入语句scanf("%4d%4d%10f", &i,&j,&x);,为i输入-10,为j输入12,为x输入345.67,正确的输入形式应该是________。
A) -1012345.67↙ B) -10 12 345.67↙
C) -10001200345.67 ↙ D) -10,12,345.67↙
答案:B
分析:选项D是错误的,因为scanf输入函数的格式字符串中没有逗号。由于变量i的输入格式为%4d,这表示宽度为4,因此系统在从选项A或C中读取数据时,将获得-101或-100,选项A和D都是错的。选项B是对的,因为选项B中的3个数是用空格分开的,而题目中为3个变量指定的输入格式的宽度都大于对应的数据,宽度将不起作用。
18. 已知字母A的ASCII码值为65,以下语句的输出结果是________。
char cl='A' , c2='Y'; printf("%d,%d
", c1,c2);
A) 输出格式非法,因而输出错误信息 B) 65,90
C) A,Y D) 65,89
答案:D
分析:字符型数据实际上是整型数据,也就是字符的ASCII码值。比如,字符'A'的ASCII码值是65,字符'B'的ASCII码值是65+1,以此类推,字符'Y'的ASCII码值是65+24=89。
二、填空题
1. 在C语言程序中,用关键字________定义基本整型变量,用关键字________定义单精度实型变量,用关键字_________定义双精度实型变量。
答案:int float double
2. 把a1、a2定义成单精度实型变量并赋初值1的语句是________。
答案:float a1=1.0, a2=1.0;
分析:也可以将1.0改为1,因为在进行赋值时,系统会自动进行转换。
3. C程序中定义的变量代表内存中的________。
答案:存储单元
分析:在编译C程序时,系统会根据变量的类型给变量分配存储单元,给变量赋值就是将数据存放到变量所代表的存储单元中。
4. 若有定义语句int i=123; float x=-45.678;,则语句printf("i=%5d x=%7.4f
",i,x);的输出结果是_______。
答案:i= 123 x=-45.6780
分析:格式字符串中的普通字符原样输出;格式说明符%5d表示输出项i的值(123)的宽度为5,左补两个空格;%7.4表示输出项x的值的宽度为7,其中小数部分有4位,整数部分以实际宽度输出。
5. 若有定义语句float alfa=60,pi=3.1415926535626;,那么语句printf("sin(%3.0f*%.4f/180)
",alfa,pi);的输出结果是________。
答案:sin(60*3.1416/180)
分析:格式字符串中的普通字符原样输出;格式说明符%3.0f表示输出项alfa的值的小数部分不输出;%.4f表示输出项pi的值的小数部分保留4位,整数部分以实际宽度输出。
6. 若有定义语句char ch='$',float x=153.4523;,那么语句printf("%c%-8.2f\
",ch,x);的输出结果是________。
答案:$153.45
分析:%c表示对应的输出项ch的值以字符形式输出;%-8.2f表示对应的输出项x的值以小数形式输出,宽度为8,小数点后取两位,负号表示左对齐,右补空格;转义字符\\表示输出一个\,然后输出n。
7. 假设整型变量a和b的值分别为7和9,要求按以下格式输出a和b的值:
a=7
b=9
请完成如下输出语句:printf( "_________", a, b);。
答案:a=%d
b=%d
8. 执行以下程序时,若输入1234567↙,则输出结果是________。
#include < stdio.h >
main()
{
int a=1,b;
scanf("%2d%2d",&a,&b);
printf("%d %d
",a,b);
}
答案:12 34
分析:由于在输入语句中为a和b指定的输入宽度都是2,因此系统从输入的数字中依次各取两位并分别赋给a和b。
三、编程题
1. 输入一个字符,然后输出这个字符及其ASCII码值。
分析:字符型数据在内存中以相应的ASCII码值存放,因而既可以字符的形式输出,也可以ASCII码值(整数)的形式输出。
程序如下:
#include<stdio.h>
int main()
{ char ch; /* 定义字符型变量ch */
scanf("%c",&ch); /* 为变量ch输入字符 */
printf("%c %d
",ch,ch);
return 0;
}
程序运行结果如下:
B↙
B 66
2. 求平面上两点之间的距离。
分析:求平面上两点(x1,y1)和(x2,y2)之间距离的公式如下
程序如下:
#include <stdio.h>
#include <math.h> /* sqrt函数所在的头文件 */
int main()
{
float x1, y1,x2,y2,d;
printf("input (x1,y1),(x2,y2):
"); /* 输出提示信息 */
scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); /* 使用sqrt函数求平方根 */
printf("d=%0.2f
",d);
return 0;
}
程序运行结果如下:
input (x1,y1),(x2,y2):
1 1 2 2↙↙
d=1.41
3. 已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n可由键盘输入。
分析:等差数列的前n项之和的计算公式为a*n+n*(n-1)*d/2。
程序如下:
#include<stdio.h>
int main()
{ int a,d,n,sum; /* 定义4个整型变量 */
printf("input a d n:
"); /* 输出提示信息input a d n: */
scanf("%d%d%d",&a,&d,&n); / * 输入3个整数,分别赋给a、d、n */
sum=a*n+n*(n-1)*d/2; /* 求等差数列的前n项之和 */
printf("sum=%d
",sum); /* 输出结果 */
return 0;
}
程序运行结果如下:
input a d n:
1 3 50↙↙
sum=3725
学科网(北京)股份有限公司
$$