一、选择题
(1)C语言概述
1、C程序中main函数的位置(C)
A、必须在最开始
B、必须在系统库函数后面
C、可以在自定义函数后面
D、必须在最后
2、下面关于C语言用户标识符的描述,正确的是(D)
A、不能区分大小写
B、用户标识符不能描述常量
C、类型名也是用户标识
D、用户标识符可以作为变量名
3.关于C语言的叙述中,不正确的是(D)
A. C程序可由一个或多个函数组成
B. C程序必须包含一个main()函数
C. C程序的基本组成单位是函数
D. 注释说明只能位于一条语句的后面
括(A)4.若有说明语句:char C=‘\95’;则变量C包含(D)个字符
A.1
B.2
C.3
D.语法错误
5.结构化程序设计不包
A.最优化 B自顶而下,逐步细化 C 模拟化设计 D结构化编码
6.结构化程序设计的三种基本语句是(C)
A.函数结购
, 分支结构判结构
B.函数结构嵌套结构平行结构
C.顺序结构分支结构循环结构
D.分支结构循环结构嵌套结构
7.关于C语言数据类型的
A.枚举类型不是基本类型
B.数组不是构造类型
C.变量必须先定义后使用
D.不允许使用空类型
8.关于C语言的源程序的叙述中,错误的是(C)
A.C语言的源程序由函数构成
B.main函数可以书写在自定义函数之后
C.必须包含有输入语句
D.一行可以书写多个语句
9.下面叙述中,(A)不是结构化程序设计中的三种基本结构之一
A.数据结构 .
B.选择结构
C.循环结构
D.顺序结构
10.char 型变量存放的是(A)
A.ASCⅡ码值
B.字符本身 . C十进制代码值 . D十六进制代码值
11.已有如下定义和输入语句
int a; char c1,c2;
scanf(“%d,%c,%c”, &a, &c1, &c2);
若要求a、c1、c2的值分别为10、A和B,正确的数据输入是( B )
A.10AB B.10,A,B C.10A B D.10 AB
12.以下叙述不正确的是( D )
A、C程序的执行总是从main函数开始
B、一个C源程序必须包含一个main函数
C、C语言程序的基本组成单位是函数
D、在编译C程序源程序时,可发现注释中的拼写
13.已知如下定义和输入语句:
int a, b;
scanf (“%d, %d”,&a, &b);
若要求a、b的值分别为10和20,正确的数据输入是(B)
A、10 20
B、10,20
C、a=10, b=20
D、10;20
14、在C语言源程序中,以下叙述正确的是(C)
A、main函数必须位于文件的开头
B、每行只能写一条语句
C、程序中的每一语句可以写成几行
D、每个语句的最后必须有点号
15.对于C语言源程序,以下叙述错误的是( C )
A.可以有空语句
B.函数之间是平等的,在一个函数内部不能定义其它函数
C.程序调试时如果没有提示错误,就能得到正确结果
D.注释可以出现在在语句的前面
16.下面叙述中,(A)不是结构化程序设计三种基本结构的共同特点
A.先判断后执行B.单入口,单出口,
C.程序中没有执行不到的语句D.无死循环
17.若有定义:int x=1234,y=123,z=12;则语句printf(“%4d+%3d+%2d”,x,y,z);运行后的输出结果为(D)
A.123412312
B. 12341234123412341231231231212
C.1234+1234+1234
D.1234+123+12
(2)数据类型,运算符和表达式
1、若定义:int x=2; y=3; float i;则以下符合C语言语法的表达式是(B)
A、x=x* 3=2
B、x=(y= = 1)
C、i=float(x)
D、i%(-3)
2、若有定义:int a=5, b=2, c=1;则表达式a-b A、0 B、1 C、2 D、-1 3、若有68定义:float x=3.5; int z=8; 则表达式x+z%3/4的值是(B) A、3.75 B、3.5 C、3 D、4 4.若有定义:int a=1,b=2,c=3;语句++a||++b&&++a运行后b 的值为(D) A.1 B.0 C.2 D.3 5.设单精度型变量+,g的值均为2.0,使+为4.0的表达式为(A) A.1 B.0 C.2 D.3 9.对于整型变量x,下述计语句(B)与赋值句:x=x%2==0?1:0;不等价 A .if(x%2!=0)x=0;else x=1; B if(x%2)x=1;else x=0; C.if(x%2= =0)x=1;else x=0; D .if(x%2==1) x=0;else x=1; 12.下面语句正确的是( B C ) A int *P;*P=20; B char *s=“abcdef”;printf(“%s\n”,s); C char str[]= “abcdf”;……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………000000000000……………………………………………………………………printf (“%s”,str); D char str[]={…a?,?b?,?c?};printf(“%s”,str); 13.若有定义:inta=2;则正确的赋值表达式是(A) A.a- =(a*3) B.double(-a) C.a* D.a*4=3 14.若有定义:int m=5. n=3则表达式(m+1,n+1,(--m)+(n--))的值是(B) A.6 B.7 C.8 D.9 15.对于基类型相同的两个指针变量之间,不能进行的运算是(C) A.< B.= C.﹢ D.﹣ 16.若有定义:int a;则语句a=(3*4)+2%3;运行后a的值为(B) A. 12 B.14 C.11 D.17 17.下面叙述中,错误的是(A) A.其算术运算对象不包含函数 B.%(模拟运算符)的运算对象只能为整型量 C.算术运算的结合方向是“自左向右” D.自加和自减运算符的结合方向是“自右向左” 18.已知int a=‘R’;则正确的表达式是(A) A.a%10 B.a=int(3e2) C .2*a=a++ D.a=a+a=a+3 19.已知double a=5.2;则正确的赋值表达式是(A) A.a+=a-=(a=4)*(a=3) B a=a*3=2 C a%3 D a=double(-3) 20.以下的计语句中,x的值一定被重新赋值的是(B) A.if(x==y) x+=y; B if(x>y&&x!=y);x+=y; C.if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y); D.if(x<y) {x++;y++} 21.设有double型变量a,b,c,e均有值,对代数式(3ae)/(bc),不正确的语言表达式是(C) A.a/b/c*e*3 B.3*a*e/b/c C.3*a*e/b*c D.a*e/c/b*3 22.以下运算符中优先级最高的是(D) A.> B.|| C.&& D.+ 23.若有自定义:int a,b;double x.,则以下不符合C语言的表达是(A) A.x%(-3) B.a+=-2 C.a=b=2 D.x=a+b 24.若有定义:int a[3] [3];则表达式&a[2][1]-a的值为(B) A.7 B.8 C.6 D.9 25.以下(D)是正确的变量名 A.a.bee B.-P11 C.int D.P_11 26.若有定义:int a=1,b=2 ,c=3,d=4,x=5,y=6 则表达式(x=a>b)&&(y=c>b)的值为(A) A.0 B.1 C. 5 D.6 27.以下(D)是正确变量名 A.5f B.if C.f.5 D._f5 28.若有定义:int x=3,y=4,z=5 则值为0的表达式是(D) A.‘x’&&‘y’ B. x<=y C. x||y=z&&y-z D. !((x<y)&&!z||1) 29.若有定义:int x,a;则语句x=(a=3,a+1);运行后x、a的值依次为( C ) A.3,3 B.4,4 C.4,3 D.3,4 30.若有定义:int a,b;则表达式(a=2,b=5,a*2,b++,a+b)的值是( B ) A.7 B.8 C.9 D.10 31.若有定义:int a=2,b=3;float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y 的值是(A) A.3.5 B.3.0 C.2.5 D.2.0 32. 以下(B)是错误的整型常量 A、-0xcdf B、018 C、0xe D、011 33.语句a=(3/4)+3%2; 运行后,a的值为(B) A、0 B、1 C、2 D、3 34.设整形变量a为5,使b不为2的表达式是(C) A、b=(++a)/3 B、b=6-(--a) C、b=a%2 D、b=a/2 35、已知char a=’R’;则不正确的赋值表达式是(D); A、a=(a++)% 4 B、a+2=3 C、c a+=256-- D、a=‘\078’ 36.下面叙述正确的是(B) A、2/3与2.0/3.0等价 B、(int)2.0/3与2/3等价 C、++5与6等价 D、‘A’与“A”等价 37、getchar( )函数的功能是从终端输入(D) A、一个整型量值 B、一个实型变量值 C、多个字符 D、一个字符 38、若有定义:int i=7, j=8; 则表达式 i >j||i A、1 B、变量i的值 C、0 D、变量j的值 39、若有定义:int i ,j;则表达式(i=2, j=5, i++, i+j++)的值是(B) A、7 B、8 C、9 D、10 40.若希望当a的值为奇数时,表达式的值为”真”,a的值为偶数时,表达式的值为”假”.则不能满足要求的表达式是( C ) A.a%2==1 B.!(a%2==0) C.!(a%2) D.a%2 41.下面叙述正确的是( A ) A.强制类型转换运算的优先级高于算术运算 B.若a和b是整型变量,(a+b)++是合法的 C.”A”*'B'是合法的 D."A"+"B"是合法的 42.以下程序段运行后变量a的值为(D) int x=6,y=5; int a; a=(--x==y++)?x:y+1; A.0B.1C.6D.5 43.下面程序段的运行结果是( D ) int a =5 b=6;printf (“%d”,a/b); A. 5 B. 6 C. 7 D. 0 44.以下程序的运行结果是( D ) void main() { int a=65; char c=’A’; printf(“%x,%d”,a,c); } A.65,a B.41, a C.65,65 D.41,65 (3)选择结构程序设计 1.C语言对于计嵌套语句的规定:else总是与(B)配对 A.第一个if B.之前最近且尚未配对 C.缩进位置相同的if D.之前最近的if 2.以下的语句中,无内嵌的if语句是(D) A.if(x==y)x+=y; B.if(x>y&&x!=y)x+=y; C.if(x!=y)scanf(“%d”,&x);else scanf (“%d”,&y); D.if(x<y) {x++;y++} 3、以下程序运行结果是(D) void main( ) { int n=5; if ( n++=6 ) printf( “% d\n” , n); else printf ( “%d\n” , ++n ); } A、4 B、5 C、6 D、7 4.以下程序段运行后x的值为( B ) int a[]={1,2,3},b[]={4,2,5}; int *p,*q; int i,x; p=a;q=b; for(i=0;i<3;i++) if(*(p+i)==*(q+i)) x=*(p+i)*2; A.2B.4C.6D.不确定 5.若有定义:int a=1,b=2,c=3;则执行以下程序后a,b,c的值分别为( D ) if(a<b) {c=a,a=b,b=c;} A.a=1 b=2, c=3 B.a=2 b=3 c=1 C.a=2 b=3 c=3 D.a=1 b=1,c=1 6.以下程序的运行结果是(C) void main ( ) { int n=‘e’; switch (n- -) {default: printf (“error”); case‘a’: case‘b’: printf(“good”); break; case‘c’: printf(“pass”); case‘d’: printf(“warn”); } A、error B、good C、error good D、warn (4)循环控制 1.对于整型变量x,与while(!x)等价的是(B) A.while(x!=0) B.while(x==0) C.while(x!=1) D.while(~x) 2.以下程序运行后,循环体运行的次数为( B ) int i=10,x; for( ;i<10;i++) x=x+i; A.10 B.0 C.1 D.无限 3.设有整型变量x,下述语句( B )不会出现死循环 A、for( ; ; x+=1); B、for(; (x=getchar( ))!=‘\n’; ); C、while (1) {x++;} D、for(x=10; ; x--); 4、在C语言中while循环和do—while循环的主要区别是( B ) A、do—while 循环体内可以使用break语句, while循环体内不能使用break语句 B、do—while的循环至少无条件执行一次,while的循环体不是 C、do—while 循环体内可以使用continue语句,while循环体内不能使用continue语句 D、while的循环体至少无条件执行一次,do—while的循环体不是 5、对于整型变量x和y,语句for (x=0, y=0 ; (y!=123) &&(x<4); x++) y++;中的“y++;”被执行( A ) A、4次 B、0次 C、123次 D、3次 6.以下程序段运行后变量n的值为( D ) int i=1,n=1; for( ; i<3;i++) { continue; n=n+i; } A.4B.3C.2D.1 7.设有如下程序段: int a[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0; for(i=0;i<3;i++) for(j=0;j s=s+a[i][j]; 则执行该程序段后,s的值是( C ) A.0B.1C.2D.3 8.以下程序运行结果(C) void main() { int sum=0,item=0; while(item<5) { item++; sum+=item; if(sum>=6) break; } printf(“%d\n”,sum) ; } A.10 B.15 C.6 D.7 9.下面程序运行结果是( A ) int i=0,a[] ={1,2,3,4,5}; do{ a[i]+=10; }while(a[++i]>2); for(i=0;i<5;i++) printf(“%d”,a[i]); A.11 2 3 4 5 B.1 2 3 4 5 C.11 12 13 14 15 D.11 12 3 4 5 10.若有定义:int i=0,x=0; int a[3][3]={1,2,3,4,5,6,7,8,9}则以下程序段运行后x的值为( C ) for( ;i<3;i++) x+=a[i][2-i]; A.0 B.12 C.15 D.18 11.以下程序的运行结果是( B ) void main() { int sum=0,item=0; while (item<5) { item++; sum+=item; if(sum==5) break; } printf(“%d\n”,sum); } A. 10 B.15 C.5 D.6 12.下面程序段的运行结果是( D ) int i=O, a[]={3,4,5,4,3}; do{ a[i]++; }while(a[++i]<5); for(i=0;i<5;i++) printf(“%d”,a[i]) ; A. 45654 B.34543 C.45554 D.45543 13.下面程序段的运行结果是( C ) int i=0,a[]={7,5,7,3,8,3}; do{ a[i]+=2; }while(a[++i]>5); for(i=0;i<6;i++) printf(“%d ”,a[i]); A. 9 7 9 5 10 5 B.9 5 9 3 10 3 C. 9 5 7 3 8 3 D.7 5 7 3 8 3 (5)数组 1、有如下定义 int a[ ][3]={1,2,3,4,5,6,7,8,};则数组a的行数( B ) A、 2 B、 3 C、 4 D、无法确定 2.以下数组定义中,正确的是( B ) A.int a[2] [3]={1,2,3,4,5,6,7}; B.int a[] []={{1,2,3},{4,5,6},{7,8,9}}; C.int a[2] []={1,2,3,4,5,6}; D.int a[] [4]={6}; 3.若有定义:int a=6,b=2;ch1ar C1=‘a’,C2=‘b’;则表达式a+b%5+C2-C1的值是( C ) A .7 B.8 C.9 D表达式错误 4.若有定义:char str[6]=“abcdm”,*ps,*str2=“abcdef”;正确的是( B ) A.stycpy(str1,str2); B.表达式strcmp(str1,str2)的值>0 C.str1=str2; D.表达式strlen(str1)的值为6 5.以下能对一维数组a进行正确初始化的语句是( D ) A.int a[5]=(0,0,0,0,0,) B.int a[5]=[0] C.int a[5]={1,2,3,4,5,6,7} D.int a[]={0} 6.以下( A )是不正确的字符串常量 A.‘abc’ B.“12′12” C.“O” D“” 7.设有如下定义:char str[8]={“Fujian”};则分配给数组str的存储空间是(C)字节 A.6 B.7 C.8 D.9 8.下列数组定义中,正确的是( A ) A.int a[10] B.int n=10 a[n]; C.int N=10;int a[N]; D.int n; scant(“%d”,&n);int a[n] 9.若有定义int a[2][3];则对数组元素的非法引用是( D ) A.a[0][1/2] B.a[1][1] C.a[4-4][0] D.a[0][3] 10.若有int a=2 则a=strcmp(“miss”,“miss”)运行后a的值为(B) A.1 B.0 C.-1. D.2 11.以下程序结束后屏幕输出(B) char str[]=“ab\\cd”;printf(“%d”,strlen(str)); A.4. B.5 C.6 D.7 12.已知int a[10];则对a数组元素引用不正确的是( A ) A.a[10] B.a[3+5] C.a[10-10] D.a[5] 13.设有以下变量定义: char str1[]=”string”,str2[8],*str3,*str4=”string”; 则( A )是正确的 A.strcpy(str1,”china”); B.str2=”china”; C.strcpy(*str3,”china”);D.strcpy(str4[0],”china”); 14、以下能对一维数组a进行正确初始化的语句是( D ) A、int a[5]=(0, 0, 0, 0, 0); B、int a [s]=[0]; C、int a[5]={1, 2, 3, 4, 5, 6, 7 }; D、int a [ ] = {0}; 15. 若有定义int a [ ] [ 3 ]={1,2,3,4,5,6,7,8,9};则表达式sizeof(a)/sizeof(a[0]) 的值为( A ) A、3 B、4 C、5 D、9 16、下列数组定义中,正确的是( A ) A. int a[5]={0}; B、int a[ ]={0 1 2}; C、int a[5]=0 D、int a [ ] 17、以下数组定义中,正确的是( B ) A、int a[2][3]={1,2,3,4,5,6,7}; B、int a[ ][ ]={{1,2,3},{4,5,6}, {7,8,9}}; C、int a[2][ ]={1,2,3,4,5,6}; D、int a[ ][4]={6} 18.若有定义:int a[3][4]={{1,2},{0},{1,2,3}};则a[1][1]的值为( A ) A.0. B.{1,2} C.1 D.3 19.若有定义:int a[3]={0,1,2};则a[1]的值为( B ) A.0 B. 1 C.2 D.3 20.若有定义:int a[5]={1,2,3,4,5};则语句a[1]=a[3]+a[2+2]-a[3-1];运行后a[1]的值为( A ) A.6B.5C.1D.2 ‘f’};则语句printf(“%s”,str); 21.有如下定义:char str[6]={‘a’,‘b’,‘\0’,‘d’,‘e’, 的输出结果是( D ) A.ab\ B.abdef C.ab\0 D.ab 22.定义char a[]=“abcdef”;char b[]=“xyz”;以下程序运行后输出( B ) strcpy(a,b); printf(“%c”,a[2]); A. c B. z C.\0 D.d 23、以下程序段运行后屏幕输出为( A ) char str[80]; strcpy(str, “hello”); printf( “%d” , strlen (str)); A、5 B、6 C、7 D、80 24.以下程序段运行后屏幕输出为( C ) char a[]=”abc\0mis”; printf(“%d”,srelen(a)); A.5B.8C.3D.4 (6)函数 1.关于C语言函数的描述中,正确的是( B ) A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用得意嵌套 C.函数的定义和函数的调用都可以嵌套 D. 函数的定义和函数的调用都不可以嵌套 2.已知char a;使用scanf()函数输入一个字符给变量a,不正确的函数调用是( B ) A.scanf(“%d”,&a); B.scanf(“%lf”,&a); C.scanf(“%c,&a); D.scanf(”%u”,&a); 3.putchar()函数的功能是向终端输出( B ) A.多个字符 B.一个字符 C.一个实型变量值 D.一个整型变量表达式 4、已知int a;使用scanf()函数输入一个整数给变量a, 正确的函数调用是( B ) A、scanf(“%d”, a); B、scanf(“%d”,&a); C、scanf(“A”, &a ); D、scanf(“%df”, &a ); 5.C语言的函数体由( B )括起来 A.( ) B.{} C.[]D./* */ 6.如下fun函数的类型是( C ) fun(float x) { double y; int z; y=x*x; z=(int)y; return(z); } A.void B.double C.int D.float 7.设有如下函数定义: int fun(char *str) { char *p;p=str; if(p!=‘\0’) p++; return (p-str); } 则以下语句执行后的输出结果是( A ) printf(“%d\n”,fun(“student”)); A. 7 B. 8 C. 9 D. 10 8.以下程序的屏幕输出为(B) #include void f(int i) { int a=2; a=i++; printf(“%d”,a); } main() { int a=1 ,c=3; f(c); a=c++; printf(“%d”,a); } A. 4,3 B. 3,3 C.4,5 D. 3,5 9.若有以下函数定义: int fun () { static int k=0; return ++k; } 以下程序段运行后屏幕输出为( D ) int i; for (i=1;i<=5 i++) fun(); printf(“%d”,fun()); A. 0 B. 1 C. 5 D. 6 10.以下程序运行的结果是(A) int fun (int array[4][4]) { int j; for(j=0;j<4;j++) printf(“%2d”,array[2][j]); printf(“\n”); } main() { int a[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0}; fun(a); } A.2005 B.1004 C.0120 D.0450 11.以下程序运行后屏幕输出为( D ) #include〈stdio.h〉 int a=2 ,b=3; int max(int a,int b) { int c; c=a>b?a:b; return(c); } main() { int a=4; printf(“%d”,max(d,b)); } A. 2,3 B. 2 C. 3 D. 4 12.以下程序运行后屏幕输出为( B ) #include int f(int x,int y) { return(x+y); } main() { int a=2,b=3,c; c=f(a,b); printf(“%d+%d=%d\n”,a,b,c); } A.0 B.2+3=5 C.2+3=0 D.3+2=5 13、下面程序的输出结果是( D ) #include int global=100; fun ( ) { int global=5; return ++global; } void main( ) { printf (“% d\n”, fun( ) ) } A、100 B、101 C、5 D、6 (7)预处理命令 1.若有定义:#define PI 3,则表达式PI*2*2的值为( A ) A.12 B.4 C.3 D.不确定 2.设有如下定义typedef int *INTEGER;INTEGER P,*q;则( C )是正确的表述 A.P是int型变量 B .q是基类型为int的指针变量 C.P是基类型为int的指针变量 D.程序中可用INTEGER代替int类型名。 3、以下叙述中,正确的是( A ) A、宏展开不占用运行时间,只占用编译时间 B、预编译处理命令行必须以分号结束 C、一个源程序只能有一个预编译处理命令行 D、使用带参数的宏定义时,应该说明每个参数的数据类型 4、以下的叙述中不正确的是( C ) A、宏展开不占用运行时间,只占用编译时间 B、宏名无类型 C、宏名必须用大写字母表示 D、预处理命令行都必须以#号开始 5.以下叙述中,正确的是( B ) A."#define PRICE=30"定义了30等价的符号常量PRICE B.预编译处理命令行都必须以"#"开头 C.宏名只能是含大写字母和数字字符 D.在程序的一行上可以书写几个有效的宏定义 6.下面程序的输出结果是(C) #include〈stdio.h〉 #define ONE 1 #define TWO ONE+1 #define THREE TWO+1 void main () { printf(“%d\n”,THREE-ONE); } A.产生错误, B. 1 C. 2 D. 3 7.以下程序执行时,输入1 2 3 4 5<回车>输出为( A ) #include #define N 5 void main() { int a[N]; int *p=a;