选择练习题
1、C语言中最简单的数据类型包括( B )。 A、整型,实型,逻辑型
B、整型,实型,字符型
D、整型,实型,逻辑型,字符型
C、整型,字符型,逻辑型
2、C语言中,运算对象必须是整型数的运算符是(A )。 A、%
B、/
C、%和/
D、*
3、为表示关系x<y<z,应使用C语言表达式( A )。 A、(x<y)&&(y<z) B、(x<y)AND(y<z) C、(x<y<z) D、(x<y) &(y<z) 4、C语言程序的基本单位是( C )。
A、程序行 B、语句 C、函数 D、字符 5、C语言的程序一行写不下时,可以( D )。 A、用逗号换行 B、用分号换行 C、用回车符换行 D、在任意一空格处换行 6、下述标识符中,( C )是合法的用户标识符。
标识符由字母,数字和下划线组成 A、A&B B、void C、_student D、ab* 且第一个字符必须为字母或下划线 7、在C语言中,字符型数据在内存中以( B )形式存放。 A、补码 B、ASCII码 C、反码 D、原码
8、一个程序由若干文件组成,共用同一变量,则此变量的存储类别应该为( B )。 A、auto B、extern C、static D、Register
auto自动变量 9、以下关于switch语句和break语句的描述中,只有(B )是正确的。 register寄存器变量 extern 外部变量 A、在switch语句中必须使用break语句
static静态变量 B、在switch语句中,可以根据需要使用或不使用break语句
C、break语句只能用于switch语句中 D、break语句是switch语句的一部分
10、C语言规定:调用一个函数时,实参变量和形参变量之间的数据传递是(B )。 A、地址传递 B、值传递
C、由实参传给形参,并由形参传回给实参 D、由用户指定传递方式 11、下述C语言转义符中( D )是非法的。 A、'\\b' B、'\\037' C、'\\0xf ' D、'\\''
12、为了要计算s=10!(10的阶乘),则以下对s的定义正确的是( D )。
1
A、int s B、unsigned s C、short s D、long s
13、判断变量ch中的字符是否为大写字母,最简单的正确表达式是( A )。 A、ch>='A'&&ch<='z' B、A<=ch<=Z C、'A'<=ch<='z' D、ch>=A&&ch<=z 14、在C语言中,能表示无符号长整型常数的是(D )。 A、OL B、4962710U C、912374u D、2UL 15、能正确表示C语言的字符常量的是( C )。 A、'\\0x41' B、''A'' C、'\\0' D、''\\0'' 16、C语言中逻辑表达式的值为( A )。
A、0或1 B、非零值或零值 C、true或false D、'true'或'false' 17、C语言提供的基本数据类型关键字是( C )。
A、integer B、FLOAT C、unsigned D、Double 18、若定义语句:int b[ ]={1,2,3,4,5},*P=b;则表达式*p++的值是( A )。 A、1 B、2 C、b[0]的地址 D、b[1]的地址 19、在下列选项中,不正确的表达式是( C )。
A、a>b B、c--, ++b, a+=1 C、a=c+b>n-m=k D、p++ 20、若有以下定义: int a[ ]={1,2,3,4,5,6,7}; char cl='b',c2='2';
则数值不为2的表达式是( D )。
A、a[1] B、'd'-cl C、a['3'-c2] D、c2-0 25、下述对C语言字符数组的描述中错误的是( C )。 A、字符数组可以存放字符串
B、字符数组中的字符串可以整体输入、输出
C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 D、不可以用关系运算符对字符组中的字符串进行比较 27、以下程序的输出结果是( A )。 main( )
{ int i=010, j=10, k=ox10; printf(''%d,%d,%d\\n'',i,j,k); }
2
A、8,10,16 B、8,10,10 C、10,10,10 D、10,10,16 28、以下程序的输出结果是( B )。 #include<stdio.h> main( )
{printf(''%d\\n'',NULL);}
A、不确定的值(因变量无定义) B、0 C、-1 D、1 29、以下程序的输出结果是( B )。 main( )
{ char c1='6',c2='0';
printf(''%d,%d,%d\\n'',c1,c2,c1-c2); }
A、因输出格式不合法,输出出错信息 B、54,48,6 C、6.0,7 D、6,0,6 32、下述对C语言字符数组的描述中错误的是( C )。 A、字符数组可以存放字符串
B、字符数组中的字符串可以整体输入、输出
C、可以在赋值语句中通过赋值运算符''=''对字符数组整体赋值 D、不可以用关系运算符对字符组中的字符串进行比较 33、Turbo C中,对于以下程序( A )。 main( ) { int x,y; y=creat(&x); printf(''%d \\n'', y); } creat(int a) {return a++;} A、编译时会给出错信息
B、顺利进行编译、连接、执行;不报任何错误 C、顺利通过编译、连接、但不能执行 D、顺利通过编译,但连接出错 34、设有如下定义: int x=10, y=4,z;
3
则语句:
printf(''%d\\n'', z=(x%y, x/y)); 的输出结果是( C )。
A、1 B、0 C、2 D、3 35、下述程序段的输出结果是( D )。 main( )
{ int x=10, y=10;
printf(''%d, %d\\n'', x++, ++y); }
A、10,10 B、11,11 C、11,10 D、10,11 36、定义如下变量和数组: int j;
int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是( C )。 for(i=0;i<3;i++﹚ printf(''%d'', x[i][2-i]);
A、159 B、147 C、357 D、369
37、若要求在if后一对圆括号中表示a不等于0的关系,则不能正确表示这一关系的表达式为( C )。
A、a<>0 B、!a C、a=0 D、a 38、若m,y,z均为int型变量,则执行下面语句后m值是(A )。 m=1;x=2;y=3;z=4; m=(m<x)?m:x; m=(m<y)?m:y; m=(m<z) ?m:z;
A、1 B、2 C、3 D、4
39、若有定义:int a=7;float x=2.5,y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值是( A )。
A、2.500000 B、2.750000 C、3.500000 D、0.000000 40、如下说法不正确的是( C )。 A、c>a+b等效于c>(a+b)
4
B、若a,b均为真,则a||b为真 C、表达式'c'&&'d'的值为0
D、逻辑运算符!比逻辑运算符||的优先级高 41、putchar()函数可以向终端输出一个( B )。 A、整型变量表达式值 B、字符 C、字符串 D、实型变量值 42、表达式18/4*sqrt(4.0)/8值的数据类型为( C )。 A、int B、float C、double D、不确定 43、若已定义a为整型变量: a=-2L;
printf(''%d\\n'',a); 则以上语句( B )。
A、赋值不合法 B、输出值为-2 C、输出为不确定值 D、输出值为2 45、若int类型数据占两个字节,则以下语句的输出为( D )。 int k= -1;
printf(''%d,%u\\n'',k,k);
A、-1,-1 B、-1,32767 C、-1,32768 D、-1,65535 46、已知字母a的ASCII码十进制值为97,则执行以下语句后的输出为( C )。yhg char a='a'; a--;
printf(''%d,%c\\n'',a+'2'-'0',a+'3'-'0'); A、b,c B、a—运算不合法,故有语法错
C、98,c D、格式描述和输出项不匹配,输出无定值 47、下面语句中( B )是C语言的正确赋值语句。
A、a=1,b=2 B、I++; C、a=b=5 D、y=int(x); 48、设有以下说明语句 struct stu { int a; float b; }stutype;
则下面的叙述不正确的是( C )。
5
A中声明变量并初始化时:int a=1,b=5;但是,只赋值时是不能这样写的,应该写成a=1;b=2;C无分号,不是完整的语句,D中x没有定义,如果是 int x=3;int y; y=int(x);这样是对的
A、struct是结构体类型的关键字 B、struct stu是用户定义的结构体类型 C、stutype是用户定义的结构体类型名 D、a和b都是结构体成员名 49、能正确表示:当x的取值范围在[1,10]或[100,110]内为真,否则为假的表达式是( C )。
A、(x>=1)&&(x<=10)&&(x>=100)&&(x<=110) B、(x>=1)||(x<=10)||(x>=100)||(x<=110) C、(x>=1)&&(x<=10)||(x>=100)&&(x<=110) D、(x>=1)||(x<=10)&&(x>=100)&&(x<=110)
50、设n为整型变量,则循环语句for(n=10;n>0;n--)的循环次数为( A )。 A、10 B、9 C、11 D、12
51、在对文件进行操作时,若要求文件的位置指针回到文件的开头,则应当调用的库函数是( D )。
A、fopen() B、fseek() C、fclose() D、rewind() 52、下列哪个数组定义是正确的( D )。
A、int a[5.5]; B、INT a[10]; C、int a[n]; D、int a[3+2]; 53、一个变量的指针就是( A )。
A、变量的地址 B、变量的值 C、变量的名称 D、变量的类型 55、下列正确的说法是(C )。 A、宏替换是在程序运行时进行的 B、函数调用是在程序编译时进行的
C、宏替换时,如果实参是表达式,应先求表达式的值,再替换 D、函数调用时,如果实参是表达式,应先求表达式的值,再替换 56、对于数学式
。 x/2a,下面正确的C语言表达式是( D )
A、sqr(x)/2a B、sqr(x)/2*a C、sqrt(x)/(2*a) D、sqrt(x)/2*a 57、若int类型数据占2字节,则以下语句的输出为( D )。 int k=32768; printf(''%d,%u\\n'',k,k);
A、-1,65535 B、-1,32767 C、-1,-1, D、-32768,32768 59、下面程序中( B )有错误。 1)#include<stdio.h> 2)main ( )
6
3){
4)int a[3]={0,0,0}; 5)int i;
6)for(i=0;i<3;i++﹚scanf(''%D'',&a[i]); 7)for(i=1;i<3;i++﹚a[0]=a[0]+a[i]; 8)printf(''%d\\n'',a[0];}
A、第4行 B、第6行 C、第7行 D、第8行 60、下面程序的运行结果( C )。 main( )
{ unsigned a=3,b=10;5 printf(''%d\\n''a<<2|b>>1=; }
A、3 B、10 C、13 D、14 61、已定义x为float型变量。 x=213.82631;
Printf(''%-4.2f\\n'',x); 则以上程序( A )。
A、输出格式描述符的域宽不够,不能输出 B、输出为213.83 C、输出为213.82 D、输出为-213.82 62、设已定义整型变量K,则下面的程序输出为( D )。 k=017;s=111; printf(''%d'',++k); printf(''%x\\n'',s++);
A、15 6f B、16 70 C、15 71 D、16 6f 63、不能正确表示a*b/c*d的C语言表达式是( C )。
A、a*b/c*d B、a/(c*d)*b C、a*b/c/d D、a*b/(c*d)
64、下列( C )表达式不满足;当x的值为偶数时值为“真”,为奇数时值为“假”。 A、x%2= =0 B、!x%2!=0 C、x/2*2-x= =0 D、!(x%2) 65、设已定义k为int型变量,则下面while循环执行( C )次。 k=10;
while(k=0)k=-1;
7
%m.nd表示最大场宽m,小数位为n位,整数位则为m-n-1位,够m位右对齐。%-m.nf可以控制输出左对齐 A、执行10次 B、无限循环 C、一次也不执行 D、执行一次 67、用高级语言编写的程序称之为( A )。
A、源程序 B、目标程序 C、汇编程序 D、命令程序 69、有以下程序的输出结果为( B )。 main( )
{ char a=0x95,b,c; b=(a&0xf)<<4; c=(a&0xf0)>>4;
a=b|c;
printf(''%x\\n'',a); }
A、24 B、59 C、34 D、56 70、下述程序段的输出结果是( A )。 int a=3;b=4; int c=a^b>>3; printf(''%d'',c)
A、3 B、4 C、5 D、6
73、设int型变量在内存中占用两个字节存储单元,定义如下结构体: struct student { char name[10]; char sex; int age; struct { int year; int month; int day; }birth; }stul;
则表达式sizeof(stul)的值是( )。
A、5 B、8 C、2 D、26
8
75、下述程序段的运行结果是( B )。 #include
{ int m=7,n=4; float a=38.4,b=0.4,x; x=m/2+n*a/b+1/2; printf(''%f\\n'',x); }
A、22 B、387.000000 C、27 76、下面程序的运行结果是( C )。 main( )
{ int cl=2,c2=0; while(!c2- -)
printf(''%d%d'',cl- -,c2); }
A、陷入死循环 B、不输出任何内容 C、输出2 -1 D、输出20 77、下面程序的运行结果是( B )。 int m=4,n=6; max(int x,int y) { int max; max=x>y?x:y; return(max); } main( ) { int m=10;
printf(''%d\\n'',max(m,n)); }
A、4 B、10 C、6 D、5 78、下面程序的运行结果是( B )。 fun(int p)
9
D、26 { int k=1; static t=2; k=k+1; t=t+1; return(p*k*t); } main( ) { int x=4; fun(x);
printf(''%d\\n'',fun(x)); }
A、4 B、32 C、30 D、16 79、阅读下面的程序: main( ) { char ch; scanf(''%c'',&ch); if(ch>='a'&& ch<='z') ch=ch-32; printf(''%c'',ch); }
若输入字符为:e,则程序运行结果为( A )。 A、E B、A C、e D、z 80、下面程序的运行结果是( B )。 main( )
{ static int a[3][3]={{3,2,1},(4,5,6),{-2,9,1}}; int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { if(i= =j)
sum=sum+a[iJ[j]]; }
10
printf(''sum=%d'',sum); }
A、sum=10 B、sum=9 C、9 D、10 84、下述程序的运行结果是( A )。 #include
putchar('0'+(x% 10)); fun(x/10); } main( ) {
printf(''\\n''); fun(1234); }
A、4321 B、321 C、21 D、1
86、设已定义i和k为int类型变量,则以下for循环语句( B )。 for(i=0,k=-1;;i++,k++) printf(''* * * *\\n'');
A、判断循环结束的条件不合法 B、是无限循环 C、循环一次也不执行 D、循环只执行一次 87、下列程序段选择项中,使i的运行结果为4的程序段是( D )。 A、int i=0,j=0; B、int i=1,j=70; (i=3,(j++)+i); j=i=((i=3) *2); C、int i=0,j=1; D、int i=1,j=1; (j= =1)?(i=1):(i=3); i+=j+=2; 89、阅读以下程序(最左边是附加的行号)。 1)#include
11
5) for(i=0;i<5;i++) 6) scanf(''%d'',s+i); 7) for(i=0;i<5;i++) 8) k=s[i]; 9) printf(''\\n%f'',(float)k); 10)} 此段程序( A )。
A、没有错误 B、第4行错误 C、第6行错误 D、第9行错误 90、下列程序中有三个是完全相同的功能,只有( B )所完成的功能与其他程序不同。 A、s=0; B、s=0; i=0; i=1;
while(i<=100) while(i++<100) s+=i++; s+=i; C、s=0; D、s=0; i=0; i=0;
while(i<=100) while(++i<=100) s+=++i; s+=i; 92、执行下面的程序后,a的值为( D )。 main( ) { int a,b;
for(a=1,b=1;a<=100;a++) { if(b>=20)break; if(b%3= =1) b+3; continue; } b-=5; }
A、7 B、8 C、 D、10 93、下面的程序中( C )有错误。 1)#include
12
2)main( ) 3){
4) float a[3]={0.0}; 5) int i;
6) for(i=0;i<3;i++) 7) scanf(''%D'',&a[i]);
8) for(i=1;i<3;i++)a[0]=a[0]+a[i]; 9) printf(''%f\\n'',a[0]); }
A、第4行 B、第6行 94、以下程序的输出结果是( C )。 #include
for(i=1;i<5;i++) { if(i%2) printf(''+'') else
continue; printf(''-'') }
printf(''$\\n''); }
A、+-+-+-$ B、-+-+-+$ 95、下述程序段的输出结果是( C )。 int x=3; do
{ printf(''%d'',x-=2); }while(!(--x));
A、1 B、30 C、1-2 96、定义如下变量:
13
C、第7行 C、+-+-$ D、死循环D、第8行D、-+-+$ int n=10;
则下列循环的输出结果是( A )。 while(n>7) { n--;
printf(''%d'',n); }
A、1098 B、987 C、10987 D、9876
100、两次运行下面的程序,如果键盘上分别输入6和4,则输出结果是( A main( ) { int x;
scanf(''%d'',&x); int(x++>5)
printf(''%d\\n'',x--); }
A、7和5 B、6和3 C、7和4 D、6和4 101、运行下段程序的结果是( D )。 #include
for(x=1;x<=100;x++) if(++x%= =0) if(++x%3= =0) if(++x%5= =0) printf(''%d'',x); }
A、31,61,91 B、30,60,90 C、不输出任何内容 D、29,59,89 102、运行下述程序段后,i值为4的是( B )。 A、int i=1,j=0; B、inti=1,j=1; i=j=((i=3)++); i+=i+=2; C、int i= =0,j=0; D、int i=0,j=1;
14
。 ) (i=2,i+(j=2)); (j= =1)?i+=3:i=2; 104、以下程序的输出结果是( D )。 main()
{ int a=-1,b=4,k; k=(++a,0)&&!(b--<=0); printf(''%d,%d,%d\\n'',k,a,b); }
A、1,0,4 B、1,0,3 C、0,0,3 105、以下程序的输出结果是( A )。 main( )
{ int x=3,y=0,z=0; if(x=y+z)
printf(''* * * *''); else
printf(''# # # #''); }
A、# # # # B、* * * * C、1 106、以下程序的输出结果是( A )。 int m=13;
int fun2(int x, int y) { int m=3; return(x*y-m); } main( ) { int a=7,b=5;
printf(''%d\\n'',fun2(a,b)/m); }
A、2 B、3 C、7 D、5 112、阅读程序:
#include
15
D、0,0,4 D、4
scanf(''%d,%d'',&m,&n); while(n) { w=m%n; m=n; n=w; }
printf(''%d'',m); }
如果输入10,6,则输出结果是( D )。
A、60 B、120 C、2 D、10 113、下列程序执行后输出的结果是( A )。 #include
A、3 B、0 C、4 D、5 115、下列程序的运行结果是( B )。 main( )
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int i,j, sum=0; for(i=0;i<3;i++) for(j=0;j<4;j++) if(j>i)
16
sum+=a[i][j]; printf(''sum=%d\\n'',sum); }
A、40 B、36 C、24 D、30 120、阅读下列程序: main( )
{ int n[3],i,j,k; for(i=0;i<3;i++) n[i]=0; k=2;
for(i=0;i 运行该程序,其输出结果是( B )。 A、230 B、330 C、123 D、321 123、下述程序段的运行结果是( B )。 main( ) { static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int b[3][2],i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { b[i][j]=a[j][i]+a[i][j]; printf('']'',b[i][j]); } printf(''\\n''); } } 17 A、2 4 7 B、2 6 10 C、18 14 10 D、18 2 3 2 10 8 6 10 14 14 10 6 4 10 2 3 6 18 10 14 18 10 6 2 7 4 2 124、如果程序中有如下的说明和定义: struct s { int x,y;} struct s x,y; 则会发生的情况是( A )。 A、编译出错 B、能顺利编译和链接,但不能执行 C、程序能顺利通过编译,但是链接时会出错 D、程序能顺利编译,链接,执行 127、对C语言的文件存取方式的论述中,正确的是文件( C )。 A、只能顺序存取 B、只能随机存取(也称直接存取) C、可以是顺序存取,也可以是随机存取 D、只能从文件的开头存取 填空练习题 1、有以下定义:int x; float y; 执行scanf(\时,如果输入的数据为: 12345 678 2、有定义语句:int x,y,z;,执行x=(y=4,z=8,z=16) 后,x的值为 16 。 3、计算表达式b=25/3%3后,b的值为 2 。 4、设有定义语句int x=1,y=0;,则表达式x-->(y+x)?10:12>y++?'A': 'Z'的值是: 65 。 5、请写出以下语句的输出结果 9 。 printf(\ 7、C语言规定:标识符只能由 字母 、 数字 、 下划线 三种字符组成。 8、有定义语句:int x=5,y=1;表达式x&y==y? x|y:x^y的值为 5 。 9、下述程序段的循环次数是 0 次,输出结果是 y=1,x=0 。 18 int x=0,y=0; do { y++; x*=x; }while(x>0&&y>5) printf(\ 10、若m,y,z,均为int型变量,则执行下面语句后m值是1 。 m=1;x=2;y=3;z=4; m=(m 11、下述程序段的运行结果是 5 。 int x,y; x=17; y=26; printf(\ 12、下列循环语句执行的循环次数是: 无数次 。 for(a=1,b=1;a<4&&b!=4;a++)//循环体内b的值不变。 13、下面程序的输出是 。 #include { printf(\ 14、下述程序段的输出结果是 3 。 int a=3;b=4; int c=a^b>>3; printf(\ 17、下述程序段的输出结果是 1245056 。 #include printf(\ 19 } main( ) { int y=20; fun (&y); } 20、下述程序段的运行结果是 15 。 #include { int a[3][3]={1,2,3,4,5,6,7,8,9}; int s=0,i; for(i=0;i<3;i++) s+=(*(a+i))[i]; printf(\ } 21、下述程序的输出结果是 18 。 #include { int x=8,y=9; int k; k=(x++)+(++y); printf(\ } 22、下述程序的输出结果是 6 。 #include { int k=2,m=1,n; 20 { FILE *fp; char ch,fname[10]; printf(\ name of file \\n\ gets(fname); if((fp= fopen(fname,\ )==NULL) { printf(\ \\n\ printf(\ \\n\ while((ch= getchar())!='#') fputc( ch ,fp); fclose(fp); } 31