第三部分 C语言练习题及参考答案 练习1 基本类型数据及其运算 题目 一、填空题 1.C语言的关键字都用(大写或小写)。 2.C语言规定用户标识符只能以字母或开头。 3.整型数据在内存中以二进制形式存放。 4.C语言中的字符是以反斜杠“\”开头,后跟规定的单个字符或数字的字 符常量。 5."1"占字节。 6.下列程序的运行结果是。 #include <stdio.h> int main() { short i=-1; printf("%x,%hx\n",i,i); return 0; } 7.下列程序的运行结果是。 #include <stdio.h> int main() { char s='2'; printf("%d,%o,%x,%c\n ", s,s,s,s); return 0; } 1 26 C/ C++程序设计进阶实验指导与习题解析(第2 版) 8.下列程序的运行结果是。 #include <stdio.h> int main() { float f=12.34567; printf("%f,%.4f,%4.3f,%10.3f ",f,f,f,f); return 0; } 9.下列程序的运行结果是。 #include <stdio.h> int main() { printf("%d,%c\n", '5'-'0',5+'0'); return 0; } 10.下列程序输入1|2|3后的运行结果是。 #include <stdio.h> int main() { int i,j; char k; scanf("%d%c%d",&i,&k,&j); printf("i=%d,k=%c,j=%d\n",i,k,j); return 0; } 11.有下列程序,若输入9876543210,其运行结果是 ① ;若输入98 |76 | 543210,其运行结果是 ② ;若输入987654|3210,其运行结果是 ③ 。 #include <stdio.h> int main() { int x1,x2; char y1,y2; scanf("%2d%3d%3c%c ",&x1,&x2,&y1,&y2); printf("x1=%d,x2=%d,y1=%c,y2=%c\n",x1,x2,y1,y2); return 0; } 12.下列程序的运行结果是。 #include <stdio.h> int main() 第三部分 C 语言练习题及参考答案1 27 { int x=5,y=10; x+=y; y=x-y; x-=y; printf("x=%d,y=%d\n",x,y); return 0; } 13.有下列程序,输入数据12345ff678,其运行结果是。 #include <stdio.h> int main() { int x; float y; scanf("%3d%f",&x,&y); printf("x=%d,y=%f\n",x,y); return 0; } 14.C语言中规定的标准文件有3个,即、和。 15.指向C语言中规定的标准文件的指针分别是、和。 16.C程序中对普通文件进行读写操作,必须先,操作后再。 17.在C语言中,文件操作都是由标准库函数来完成的,对应的头文件是。 18.用方式打开一个文件时,该文件必须已经存在,且只能从该文件读 数据。 19.在对文件进行读写的过程中,若要求文件的位置回到文件开头,应当调用 函数。 二、选择题 1.下列选项中不可用作C语言标识符的是( )。 A.a_1 B.no-1 C.scanf D._int 2.C语言提供的合法关键字是( )。 A.Float B.signed C.INT D.Char 3.下列选项中是合法的实型常数的是( )。 A. E2 B.6E-3.5 C .2E0 D.1.3E 4.已知大写字母A 的ASCII码是65,小写字母a的ASCII码是97,则用十六进制表 示的字符常量'\x41'是( )。 A. 字符A B.字符a C.字符c D .非法的常量 5.下列选项中是合法转义字符的是( )。 A. \' \' B.\' 018' C.x' ab' D.\' ab' 1 28 C/ C++程序设计进阶实验指导与习题解析(第2 版) 6.下列选项中可作为C语言合法整数的是( )。 A. 1010B B.0386 C.0xffff D.x2a2 7.若有代数式3ab cd,则不正确的C语言表达式是( )。 A. a/c/d*b*3 B .3*a*b/c/d C . 3*a*b/c*d D .a*b/d/c*3 8.已知各变量的类型说明如下: int a=2, b=5; double x=8.5; 则下列表达式中符合C语言语法的是( )。 A.a+=a-=(b=2)*(a=8) B .a = b/ 3= 8 C.x%3 D.x=float(a) 9.下列选项中符合C语言语法的赋值表达式是( )。 A.a=b+c=3 B.a=(b=5,c=b+6) C . a=b=5,c=b+2 D . a= 4+b++=c+2 10.在C语言中,要求运算数必须是整型的运算符是( )。 A./ B . ++ C.*= D.% 11.若有说明语句“chars='\101';”,则变量s( )。 A.包含1个字符 B.包含2个字符 C.包含3个字符 D.说明不合法,s的值不确定 12.在C语言中,char型数据在内存中的存储形式是( )。 A .补码 B.反码 C.原码 D.ASCII码 13.设变量x为float类型,m 为int类型,则下列选项中能实现将x中的数值保留小 数点后3位,第4位进行四舍五入运算的是( )。 A.x=(x*1000+0.5)/1000.0 B.m=x*1000+0.5,x=m/1000.0 C.x=x*1000+0.5/1000.0 D.x=(x/1000+0.5)*1000.0 14.设下列变量均为int类型,则值不等于3的表达式是( )。 A.(m=n=2,m+n,m+1) B . (m=n=2,m+n,n+1) C.(m=2,m+1,n=2,m+n) D .( m=2,m+1,n=m,n+1) 15.假设所有变量均为整型,则表达式(x=y=3,y++,x+y)的值是( )。 A.7 B.8 C.6 D.2 16.已知c是字符型变量,下列选项中不正确的赋值语句是( )。 A.c=\' 012'; B .c = 1' 2'; C.c=1' '+2' '; D.c=1+2; 17.putchar函数可以向终端输出一个( )。 A.整型变量表达式值 B . 字符串 第三部分 C 语言练习题及参考答案1 29 C.实型变量值 D.字符 18.下列程序段的输出结果是( )。 int a=12345; printf("%4d\n", a); A .12 B.34 C.12345 D.提示出错 19.若a定义为int型,x定义为float型,下列选项中正确的scanf函数调用语句 是( )。 A.scanf("%d%f",a,x); B.scanf("%d%f",&a,&x); C.scanf("%x%d",&a,&x); D.scanf("%f%d",&a,&x); 20.有如下程序段: int a1,a2; char c1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2); 若要求a1、a2、c1、c2的值分别为10、20、A、B,正确的数据输入是( )。 A.10A|20B B.10|A20B C.10|A|20|B D .10 A20|B 21.若变量已正确说明为int类型,要通过语句“scanf("%d%d%d",&a,&b,&c);”给a 赋予10,b赋予20,c赋予30,不正确的输入形式为( )。 A.10|20|30 B .10,20,30 C.10 D.10|20 20|30 3 0 22.若要使x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。 int x1,x2; char y1,y2; scanf("%d,%d",&x1,&x2); scanf("%c%c",&y1,&y2); A.1020AB B.10|20|ABC C.10,20 D.10,20AB AB 23.有下列程序段,从键盘输入数据的正确形式应是( )。 int x,y; scanf("x=%d,y=%d",&x,&y); A.1234 B.x=12,y=34 C.12,34 D.x=12|y=34 24.下列程序的执行结果是( )。 #include <stdio.h> int main() 1 30 C/ C++程序设计进阶实验指导与习题解析(第2 版) { int x=2,y=3,z=4; printf(" x=%%%d,y=%%d,z=%d",x,y,z); return 0; } A.x=%2,y=%3,z=4 B . x= % 2,y=%d,z=3 C.x=2,y=3,z=4 D. x =%2,y=%d,z=4 25.阅读下列程序,当输入数据的形式为“12,34”,正确的输出结果是( )。 #include <stdio.h> int main() { int a,b; scanf("%d%d", &a,&b); printf("a+b=%d\n",a+b); return 0; } A.a+b=46 B . 有语法错误 C.a+b=12 D. 不确定值 26.将一个短型整数10002存到磁盘上,以ASCII形式和二进制形式存储占用的字 节数分别是( )。 A.2和2 B.2和5 C.5和2 D.5和5 27.若执行fopen函数时发生错误,则函数的返回值是( )。 A.地址值 B.NULL C.1 D.EOF 28.若用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件打开 方式字符串应是( )。 A."ab+" B."wb+" C."r+" D."ab" 29.系统的标准输入设备指( )。 A.键盘 B.显示器 C.软盘 D.硬盘 30.fscanf函数的正确调用形式是( )。 A.fscanf(fp,格式字符串,地址表列) B.fscanf(格式字符串,地址表列,fp) C.fscanf(格式字符串,文件指针,地址表列) D.fscanf(文件指针,格式字符串,输出表列) 31.函数调用语句“fseek(fp,-20L,2);”的含义是( )。 A.将文件位置指针移到距离文件头20字节处 B.将文件位置指针从当前位置向后移动20字节 C.将文件位置指针从文件末尾处后退20字节 D.将文件位置指针移到离当前位置20字节处 32.利用fseek函数可实现的操作( )。 第三部分 C 语言练习题及参考答案1 31 A.fseek(文件类型指针,起始点,位移量) B.fseek(fp,位移量,起始点) C.fseek(位移量,起始点,fp) D.fseek(起始点,位移量,文件类型指针) 33.设已正确打开一个已经存在的文本文件,文件中原有数据为abcdef,新写入的数 据为xyz;若文件中的数据变为xyzdef,则该文件打开的方式是( )。 A.w B.w+ C.a+ D.r+ 34.文件函数rewind的功能是( )。 A.使文件fp的位置指针指向文件开始 B.使文件fp的位置指针指向文件末尾 C.使文件fp的位置指针指向文件中间 D.使文件关闭 35.以下叙述不正确的是( )。 A.C语言中的文本文件以ASCII形式存储数据 B.C语言中对二进制文件的访问速度比文本文件快 C.C语言中,随机读写方式不适用于二进制文件 D.C语言中,顺序读写方式不适用于二进制文件 36.若要打开C盘上user子目录下名为abc.txt的文本文件进行读写操作,下面符合 此要求的函数调用是( )。 A.fopen("C:\user\abc.txt","r"); B.fopen("C:\\user\\ abc.txt","r+"); C.fopen("C:\user\abc.txt","rb"); D.fopen("C:\\user\\abc.txt","w"); 37.有以下程序: #include <stdio.h> int main () { FILE *fp; int i=20,j=30,k,n; fp=fopen("d1.dat","w"); fprintf(fp, "%d \n",i); fprintf(fp, "%d \n",j); fclose (fp); fp=fopen("d1.dat", "r"); fscanf(fp, "%d%d",&k,&n); printf("%d %d",k,n); return 0; } 程序运行后的输出结果是( )。 A.20 30 B.20 50 C.30 50 D.30 20 1 32 C/ C++程序设计进阶实验指导与习题解析(第2 版) 38.fopen函数的第2个参数取值"r"和"w"时,它们之间的差别是( )。 A."r"可向文件写入,"w"不但可以向文件写入,而且还可以读出 B."r"用于从文件中读出数据,"w"用于向文件中写入数据 C.当文件不存在时,"r"将创建一个文件并读出,"w"将创建文件并写入 D.当文件不存在时,"r"建立新文件,"w"出错 39.使用fseek函数可以实现的操作是( )。 A.改变文件位置指针的当前位置B.文件的顺序读写 C.文件的随机读写D.以上都不是 参考答案 一、填空题 1.小写 2.下画线 3.补码 4.转义 5.2 6.ffffffff,ffff 7.50,62,32,2 8.12.345670,12.3457,12.346,||||12.346 9.5,5 10.i=1,k= ,j=2 11.① x1=98,x2=765,y1=4,y2=1 ② x1=98,x2=76,y1=,y2=3 ③ x1=98,x2=765,y1=4,y2=2 12.x=10,y=5 13.x=123,y=45.000000 14.标准输入文件(键盘) 标准输出文件(显示屏幕) 标准出错信息文件(显示屏幕) 15.stdin stdout stderr 16.打开文件 关闭文件 17.stdio.h 18."r" 19.rewind 二、选择题 1.B 2.B 3.C 4.A 5.A 6.C 7.C 8.A 9.B 10.D 11.A 12.D 13.B 14.C 15.A 16.B 17.D 18.C 19.B 20.A 21.B 22.D 23.B 24.B 25.D 26.C 27.B 28.B 29.A 30.A 31.C 32.B 33.D 34.A 35.C 36.B 37.A 38.B 39.A 第三部分 C 语言练习题及参考答案1 33 练习2 选择结构程序设计 题目 一、填空题 1.为表示关系x≥y≥z,应使用C语言表达式。 2.若有“inta=8,b=5,c=3;”,则表达式a>b&&b<c的结果是。 3.若有“intx=10,y=20;”,则表达式x>y?x:y的结果是。 4.C语言中用表示逻辑“假”。 5.已知“intz;”,表示“z是奇数”的表达式是。 6.已知“intx=15,y=20,z=35;”,表达式x‖y+z&&y-z的值是。 二、选择题 1.下列程序的输出结果是( )。 #include <stdio.h> int main() { int i=0,j=0,k=6; if ((++i>0)||(++j>0)) k++; printf("%d,%d,%d\n",i,j,k); return 0; } A.0,0,6 B.1,0,7 C.1,1,7 D.0,1,7 2.设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c>b)后,n的值 为( )。 A.1 B.2 C.3 D.0 3.设有定义“intx=12,y=20,z=24;”,下列语句中执行效果与其他3 个不同的 是( )。 A.if(x>y){x=y;y=z;z=x;} B. if (x>y) x=y,y=z,z=x; C.if(x>y) x=y;y=z;z=x; D .if (x>y){x=y,y=z,z=x;} 4.对于if语句的基本形式“if(表达式)语句”,其中,表达式( )。 A.可以是任意合法的表达式 B. 必 须是逻辑表达式 C.必须是关系表达式 D .必须是逻辑表达式或关系表达式 5.下列程序运行时,输入的值为( )时才会输出***。 #include <stdio.h> 1 34 C/ C++程序设计进阶实验指导与习题解析(第2 版) int main() { int x; scanf("%d",&x); if(x<=20); else if(x!=30) printf("***"); return 0; } A.大于20且不等于30的整数 B. 大 于 20或等于30的整数 C.小于20的整数 D . 不 等 于30的整数 6.下列程序运行时,输出的值为( )。 #include <stdio.h> int main() { int x=1,y=2,z=3; if(x==1 &&y++==2) if(y!=2 || z--!=3) printf("%d,%d,%d\n",x,y,z); else printf("%d,%d,%d\n",x,y,z); else printf("%d,%d,%d\n",x,y,z); return 0; } A.1,2,2 B.1,3,2 C.1,2,3 D.1,3,3 7.C语言规定:else子句总是与( )配对。 A.缩排位置相同的if B .其之前最近的未配对的if C.其之后最近的if D .同 一行上的if 8.在C语言中,逻辑运算符两侧运算对象的类型( )。 A.可以是任何类型的数据 B. 只能是0或非0正数 C.只能是0或1 D .只能是整型或字符型数据 9.若有“inta,b;”,表达式(Exp)?(--a) (++b),则其中与Exp 等价的表达式 是( )。 A.Exp==1 B . Exp==0 C . Exp!=1 D . Exp!=0 10.执行下列程序段后,x的值为( )。 int x='F', k=21, y=32; x=((k || y)&&(x<'a')); A.0 B.-1 C.NULL D .1