练习题1及参考答案1. 单项选择题(1)以下并非C语言的特点的是。
A. C语言简洁和紧凑B. 能够编制出功能复杂的程序C. C语言可以直接对硬件进行操作D. C语言移植性好【答】B(2)一个C程序的执行是从。
A. main()函数开始,直到main()函数结束B. 第一个函数开始,直到最后一个函数结束C. 第一个语句开始,直到最后一个语句结束D. main()函数开始,直到最后一个函数结束【答】A(3)在C程序中,main()的位置。
A. 必须作为第一个函数B. 必须作为最后一个函数C. 可以任意D. 必须放在它所调用的函数之后【答】C(4)一个C程序是由。
A. 一个主程序和若干子程序组成B. 一个或多个函数组成C. 若干过程组成D. 若干子程序组成【答】B(5)下列说法正确的是。
A. 在执行C程序时不是从main()函数开始的B. C程序书写格式限制严格,一行内必须写一个语句C. C程序书写格式比较自由,一个语句可以分行写在多行上D. C程序书写格式严格要求一行内必须写一个语句,并要求行号【答】C2. 填空题(1)一个C源程序至少有①个main()函数和②个其他函数。
【答】①一②若干(2)任何C语句必须以结束。
【答】分号(3)C语言源程序的基本单位是。
【答】函数(4)C编译程序的功能是。
【答】将C源程序编译成目标代码练习题2及参考答案1. 单项选择题(1)以下字符串为标识符的是。
A. _MYB. 2_2222C. shortD. LINE 5【答】A(2)下列符号可以作为变量名的是。
A. +aB. *pC. _DAYD. next day【答】C(3)设c是字符变量,则以下表达式正确的是。
A. c=666B. c='c'C. c="c"D. c="abcd"【答】B(4)23+'m'+3.6-123.45/'b'的结果是型数据。
A. charB. doubleC. intD. long int【答】3.6和123.45均为double型,运算结果也是double型。
本题答案为B。
(5)若变量已正确赋值,以下符合C语言语法的表达式是。
A. a=a+7;B. a=7+b+c,a++C. int(12.3%4)D. a=a+7=c+b 【答】选项A错误,以分号结尾是一个语句而不是表达式;选项B正确,是一个逗号表达式;选项C错误,因为%求模运算的两个运算数必须均为整数;选项D错误,给一个表达式(a+7)而非变量赋值是不正确的。
本题答案为B。
(6)整型变量x=1,y=3,经下列计算后,x的值不等于6的表达式是。
A. x=(x=1+2,x*2)B. x=y>2?6:5C. x=9-(--y)-(--y)D. x=y*(int)(4.8/2) 【答】选项A的计算过程——x=1+2=3,再计算x=x*2=6;选项B的计算过程——y>2为真,x=6;选项C的计算过程——式中有两个--运算,最后y=1,x=9-1-1=7;选项D的计算过程——x=y*(int)(4.8/2)=y*2=6。
本题答案为C。
(7)若定义int m=7,n=12;则能得到值为3的表达式是。
A. n%=(m%=5)B. n%=(m-m%5)C. n%=m-m%5D. (n%=m)-(m%=5)【答】A、B、C、D选项各表达式的值分别是0、2、2、3。
本题答案为D。
(8)以下程序的运行结果是。
#include <stdio.h>main(){int i=5,j=6,m=i+++j;printf("%d,%d,%d\n",i,j,m);}A. 6,6,11B. 5,6,11C. 5,6,12D. 6,6,12【答】m=i+++j等价于m=(i++)+j。
本题答案为A。
(9)以下程序的运行结果是。
#include <stdio.h>void main(){double f=3.14159;int n;n=(int)(f+10)%3;printf("%d\n",n);}A. 1B.0 C.2 D. 3【答】f+10=13.14159,(int)(f+10)=13,13%3=1。
本题答案为A。
(10)以下程序的运行结果是。
#include <stdio.h>void main(){int n,i=2,j=4;n=(++i==j--);printf("%d\n",n);}A. 0B.1 C.2 D. 3【答】++i返回3,j--返回4,两者不等,故n=0。
本题答案为A。
2. 填空题(1)表达式语句与表达式的不同是。
【答】语句必须以分号结尾,而表达式结尾没有分号;语句可以出现在函数体中数据定义或声明语句后面的任何位置,而表达式只能出现在语句中规定的位置或表达式中(嵌套出现)。
(2)在C语言中可以利用将一个表达式的值转换成指定的类型。
【答】强制类型转换(3)写出完成下列功能的表达式:· 如果变量c是大写字母,则将c转换成对应的小写,否则c的值不改变。
①· 如果d是数字,则将d转换成相应的整数,否则d的值不改变。
②· 返回两个整数x、y中较大者。
③· 返回三个整数x、y和z中最大者。
④【答】① c=(c>='A' && c<='Z') ? c-'A'+'a' : c② d=(d>='0' && d<='9') ? d-'0' : d③ (x>y) ? x : y④ (x>y) ? (x>z ? x : z) : (y>z ? y : z) 或 (x>y && x>z) ? x : (y>z ? y : z)(4)以下程序的运行结果是。
#include <stdio.h>#include <string.h>main(){char s[]="ab\n\\\'\r\b";printf("%d,%d\n",sizeof(s),strlen(s));}【答】字符串s由字符'a'、'b'、'\n'、'\\'、'\''、'\r'、'\b'等7个字符组成,故长度为7,但字符串本身有一个结束标志'\0'。
所以,s的长度为7,在内存中占用8个字节。
输出为:8,7。
(5)以下程序的运行结果是。
#include <stdio.h>main(){int a=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("y=%d,x=%d\n",y,x);}【答】结果为y=6,x=6。
(6)以下程序的运行结果是。
#include <stdio.h>main(){char a,b;a='a';b='b';a=a-32;b=b-32;printf("%c,%c,%d,%d\n",a,b,a,b);}【答】A,B,65,66(7)以下程序的运行结果是。
#include <stdio.h>main(){int i,j,x,y;i=5;j=7;x=++i;y=j++;printf("%d,%d,%d,%d\n",i,j,x,y);}【答】执行x=++i后,i=6,x=6;执行y=j++后,j=8,y=7;所以输出为:6,8,6,7。
(8)以下程序的运行结果是。
#include <stdio.h>main(){int a=1;char c='a';float f=2.0;printf("①:%d\n",a+2!=c-100);printf("②:%d\n",(a>c)>=(f>4));printf("③:%d\n",!a==!f);printf("④:%d\n",(!a&&1)!=(!c||1));printf("⑤:%d\n",(!a>2)?3:0)<((f!=1)?0:1);printf("⑥:%d\n",(1,2,3)==(3,3,3));}【答】①:1 (a+2=3,c-100=-3,表达式结果=1(真))②:1(a>c的结果是0(假),f>4的结果是0,表达式结果=1)③:1(!a的结果是0,!f的结果是0,表达式结果=1)④:1(!a&&1的结果是0,!c||1的结果是1,表达式结果=1)⑤:0(!a>2的结果是0,(!a>2)?3:0的结果是0,f!=1的结果是1,(f!=1)?0:1的结果是0,表达式结果=0)⑥:1((1,2,3)表达式的结果是3,(3,3,3)的结果是3练习题3及参考答案1. 单项选择题(1)以下说法正确的是。
A. 输入项可以为一个实型常量,如scanf("%f",3.5)B. 只有格式控制没有输入项也能进行正确输入,如scanf("%d")C. 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f)D. 当输入数据时,必须指明变量的地址,如scanf("%f",&f)【答】D(2)若a为整型变量,则以下语句。
a=-2L;printf("%d\n",a);A. 赋值不合法B. 输出值为-2C. 输出为不确定值D. 输出值为2【答】B(3)若x和y均定义为int型,z定义为double型,以下scanf()函数调用语句不合法的是。
A. scanf("%d%lx,%le",&x,&y,&z);B. scanf("%2d*%d%lf",&x,&y,&z);C. scanf("%x%*d%o",&x,&y);D. scanf("%x%o%6.2f",&x,&y,&z); 【答】scanf()函数中没有精度控制。