C语言基本选择题及答案 (自动保存的)_c语言选择题含答案
C语言基本选择题及答案 (自动保存的)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言选择题含答案”。
计算机程序设计基础(C语言)
单项选择练习题
说明:带*号的对非信息学院的同学不作要求。
一、基本概念
1.C语言程序是由C 构成的。
A)一些可执行语言 B)main函数 C)函数 D)包含文件中的第一个函数 2.(A)是构成C语言程序的基本单位。
A、函数 B、过程 C、子程序 D、子例程 3.C语言程序从C开始执行。
A)程序中第一条可执行语句
B)程序中第一个函数
C)程序中的main函数
D)包含文件中的第一个函数
4.C语言程序从main()函数开始执行,所以这个函数要写在_D___。
A)程序文件的开始 B)程序文件的最后 C)它所调用的函数的前面 D)程序文件的任何位置
5、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行
D、C语言程序中的main()函数必须放在程序的开始部分 6.下列方法中错误的是(D)。
A.主函数可以分为两个部分:主函数说明部分和主函数体。B.主函数可以调用任何非主函数的其它函数。C.任何非主函数可以调用其它任何非主函数。D.程序可以从任何非主函数开始执行。7.下列说法错误的是:(B)
A.C程序运行步骤是编辑、编译、连接、执行。B.C语言的变量名必须用小写,常量用大写。C.C语言的三种基本结构是顺序、选择、循环。D.C程序一定由函数构成的。
8.下列关于C语言的说法错误的是(B)。
A)C程序的工作过程是编辑、编译、连接、运行 B)C语言不区分大小写。
C)C程序的三种基本结构是顺序、选择、循环 D)C程序从main函数开始执行9.系统默认的C语言源程序扩展名为.C,需经过C之后,生成.exe文件,才能运行。
A)编辑、编译 B)编辑、连接 C)编译、连接 D)编辑、改错 *10.下列说法中正确的是(B)。
A.由于C源程序是高级语言程序,因此一定要在TC软件中输入。
B.由于C源程序是由字符流组成的,因此可以作为文本文件在任何文本编辑的软件中输入。
C.由于C程序是高级语言程序,因此输入后即可执行。D.由于C程序是高级语言程序,因此它是由命令组成的。
二、数据类型、运算符与表达式
1.不是C语言提供的合法关键字是(B)。
A.switch
B.cher
C.case
D.default *2.C语言提供的合法关键字是(D)。
A.next B.string C.do case D.struct *3.下列不属于C语言中关键字的是 B
A)long B)print C)default D)typedef 4.下列正确的标识符是(C)。
A.-a1 B.a[i] C.a2_i D.int t 5.下列C语言用户标识符中合法的是(B)。A、*y B、sum C、int D、%5f 6.下面四个选项中,合法的标识符是:(D)A.auto B.define C.6a D.c 7.下列C语言用户标识符中合法的是(B)。A)3ax B)x C)case D)-e2 E)union 8.以下选项中合法的用户标识符是B
A)long
B)_2Test
C)3Dmax
D)A.dat 9.下列四组选项中,正确的C语言标识符是(C)。
A)%xB)a+b C)a123D)123 10.请选出可用作C语言用户标识符的一组标识符(B)A)void
B)a3_b3
C)For
D)2a define _123-abc DO WORD sum Case sizeof11、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。A、print _3d db8 aBc B、Iam one_half start$it 3pai 2 C、str_1 Cpp pow while D、Pxq My->book line# His.age 12.下列C语言标识符中合法的变量名是B。
A)2e3 B)you C)*y D)float 13.C语言中的简单数据类型包括(D)。
A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型
14、下列可以正确表示字符型常量的是(A)。A、’t’ B、”a” C、”n” D、297 15.下列表达式中,D是正确的C语言字符常量。A)”x” B)e3 C)”COMPUTER” D)’#’ 16.在下列表达式中,属于字符型常量的是B。A)A B)'a' C)“A” D)b 17.以下选项中合法的字符常量是(B)A)“B” B)‘n’ C)‘68’
D)E 18.下面字符常量表示错误的是(D)A)’a’ B)’?’ C)’n’ D)”n”
19.已定义c为字符型变量,则下列语句中正确的是(C)A)c='97' B)c=“97”C)c=‘a’ D)c=“a” 20.已知ch是字符型变量,不正确的赋值语句是(A)A)ch='a+b';
B)ch=' ';C)ch=' 7';D)ch=’;’;
21.C语言中字符型(char)数据在内存中的存储的是(D)A)原码 B)补码 C)反码 D)ASCII码
22.在C语言中,字符型数据所占的内存空间是(C)A)2个字节 B)4字节 C)1字节 D)由用户自定义
*23.若int类型数据占2个字节,则unsigned int类型数据的取值范围是(B)//unsigned无符号位,默认为整数
A)0~255 B)0~65535 C)-32768~32767 D)-256~255 *24.若有以下类型说明语句:char a;int b;float c;double d;则表达式a*b+d-c的结果类型为(D)A)float B)char C)int D)double *25.若有以下类型说明语句:char w;int x;float y;double z;则表达式w-x*y/z的结果为(D)类型,表达式(int)(x+y-z*w)的结果为(C)类型。A)float B)char C)int D)double 26.C语言中运算对象必须是整型的运算符是(A)
A)%= B)/ C)= D)〈=27.在C语言程序中,表达式8/5的结果是(B)A)1.6 B)1C)3D)0 x=10;x+=x;A)10 B)20 C)40 D)30
31.在C语言程序中,表达式5%2的结果是C。A)2.5 B)2 C)1 D)3 32.如果int a=3,b=4;则条件表达式“a
A)3B)4 C)0D)1 33.若int x=2,y=3,z=4 则表达式x
A、’a’&&’b’ B、a
37.下面(D)表达式的值为4.A)11/3
B)11.0/3
C)(float)11/3
D)(int)(11.0/3+0.5)
*39.已知int x=5,y=5,z=5;执行语句x%=y+z;后,x的值是(C)A.0 B.1 C.5 D.6 40.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2中的值为(B)A)68 B)‘D’ C)错误 D)‘d’ 41.下列关于C语言的叙述错误的是(A)
A)大写字母和小写字母的意义相同 B)不同类型的变量可以在一个表达式中
C)在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型 D)同一个运算符号在不同的场合可以有不同的含义 42.有:int w=11,x=12,y=3,m;执行下面语句后m的结果是(C)m=(w
28.设x为int型变量,则执行以下语句后,x的值为B
35.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面表达式中,值为0的A.1 B.2 C.3 D.以上结果都不对
43.有:int w=7,x=12,y=3,m;执行下面语句后m的值是(A)m=(w>x)?w:x;m=(m>y)?m:y;A.12 B.0 C.3 D.1
45.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是(B)
A.b=1.0/a B.b=(float)(1/a)C.b=1/(float)a D.b=1/(a*1.0)
48.以下运算符中优先级最高的运算符是(B)
A)&& B)++ C)+= D)!= 49.若“int n;float f=13.8;”,则执行“n=(int)f%3”后,n的值是(A)A.1 B.4 C.4.333333 D.4.6
52.设x为int型变量,则执行以下语句后,x的值为(C)
x=10;x*=x;A)10 B)20 C)100 D)0 53.若有语句int a=1,b;double y=2.3;b=(int)y;则b的值为(B)。
A)3 B)2 C)1 D)2.3 54.已知int x;char y;则下面错误的scanf函数调用语句为(B)A)scanf(“%d,%d”,&x,&y);B)scanf(“%d,%c”,x,y)
C)scanf(“%d%d”,&x,&y)D)scanf(“%d,%c”,&x,&y)
57.在C语言的库函数中,可以输出char型变量x值的语句是C。A)getchar(x);B)fputc(x)C)putchar(x)D)puts(x)
60.以下说法正确的是(C)
A)'x'+5是一个错误的表达式 B)C语言不允许类型的混合运算
C)强制类型转换时,类型说明符必须加括号 D)(int)x+y 和(int)(x+y)是完全等价的表达式 61.设 int x=0, y=1;表达式(x||y)的值是(B)
A)0 B)1 C)2 D)-1
三、选择结构
1.在C语言中,认为(D)为逻辑”真“ A)true B)大于0的数 C)非0整数 D)非0的数 A)(x=10 or a=0|a=10 &&a=10‖a 4、判断char型变量c1是否为大写字母的表达式为(D)。 A、’A’=’A’)&(c1=c1)D、c1>=’A’&& c1 A)(X>79)&&(X79)!=(X79)||(X0&&b&&c0”的 值是(B)//A A.1 B.0 C.-1 D.出错 2.表示关系x10&&a=15)8.设x,t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为(D)A.不定值 B.10 C.1 D.0 9.若int i=10;执行下列程序后,变量i的正确结果是(C)。//A没有break会一直执行下去,直到遇到default switch(i){ case 9: i+=1;case 10: i+=1;case 11: i+=1;default : i+=1;} A、13 B、12 C、11 D、10 10.在下面的条件语句中(其中s1和s2表示是C语言的语句),只有一个在功能上与其它三个语句不等价,它是(D)。 A、if(a)s1;else s2;B、if(a= =0)s2;else s1;C、if(a!=0)s1;else s2;D、if(a= =0)s1;else s2;11.假定所有变量均已正确定义,则下列程序段运行后y的值是(C)//A int a=0,y=10;if(a=0)y--;else if(a>0)y++;else y+=y;A.20 B.11 C.9 D.0 12.假定所有变量均已正确定义,则下列程序段运行后x的值是(B)。 a=b=c=0;x=35;if(!a)x--;else if(b);if(c)x=3;else x=4;A.34 B.4 C.35 D.3 13.C语言对嵌套if语句的规定是:else语句总是与(D)配对。A)其之前最近的if B)第一个if C)缩进位置相同的if D)其之前最近的且尚未配对的if 14.在C语言语句中,用来决定分支流程的表达式是(B)。//A A.可用任意表达式 B.只能用逻辑表达式或关系表达式 C.只能用逻辑表达式 D.只能用关系表达式 15.C语言中用(B)表示逻辑“真”。 A.true B.整数值1 C.非零整数值 D.false 16、若k是int型变量,且有下面的程序段: int k;k=-3;if(k A、#### B、&&&& C、####&&&& D、有语法错误,无输出结果 17.main(){ int x=0,a=0,b=0;switch(x){ case 0: b++;case 1: a++;case 2: a++;b++;} printf(“a=%d,b=%dn”,a,b);} //开关语句的穿透现象 该程序的输出结果是D(没有break,所以依次执行完所有代码才结束)A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2 18.以下程序的输出结果是:(C) main(){ int x=-10,y= 1,z=1;if(x int a=10,b=50,c=30; if(a>b)a=b; b=c; c=a; printf(”a=%2d b=%2d c=%2dn“,a,b,c); A)a=10 b=50 c=10 B)a=10 b=30 c=10 C)a=50 b=30 c=10 D)a=50 b=30 c=50 四、循环结构 *1.在C语言中,下列说法中正确的是(D)。 A)do-while语句构成的循环不能用其它语句构成的循环来代替。B)do-while语句构成的循环只能用break语句退出。 C)do-while语句构成的循环在while后的表达式非零时结束循环。D)do-while语句构成的循环,在while后的表达式为零时结束循环。2.break语句不能出现在(D)语句中 A.switch B.for C.while D.if„else *3.对于break语句和continue语句的说法错误的是(B) A)break语句不能用于循环语句和switch语句之外的任何其他语句中。B)break和continue也可以用于if语句中 C)continue语句只结束本次循环,而不是终止整个循环的执行。D)break语句是结束整个循环过程,不再判断执行循环的条件是否成立。4.语句while(!y);中的表达式!y等价于A(!Y即y为假) A)y==0 B)y!=1 C)y=!0 D)y==1 5.若有“int a=1,x=1;”,则循环语句“while(a B.不确定次 C.10次 D.9次 6.有以下程序段 int k=0 while(k)k++;则while循环体执行的次数是C A)无限次 B)有语法错,不能执行 D)执行1次 C)一次也不执行 7.下列循环语句中有语法错误的是(C)//D A while(x=y)5; B while(0); C do 2;while(x= =b); D do x++ while(x= =10); *8.当运行时输入:abcd$abcde,下面程序的运行结果是D//B #include main(){while(putchar(getchar())!='$');printf(”end“);} A)abcd$abcde B)abcd$end C)abcdend D)abcd$abcdeend 9.以下程序段(A)x=-1;do { x=x*x;} while(x>0);A.是死循环 B.循环执行一次 C.循环执行二次 D.有语法错误 10.下面程序段执行后的结果为:(D)//B int sum=0, n=10;do { sum=sum+n;n++;} while(n 11.对以下程序段的叙述正确的是__B__.//A int x=1;do { x=-1*x;} while(!x)A)是死循环 B)循环执行一次 C)循环执行二次 D)有语法错误 12.循环“for(i=0,x=1;i=10&&x>0;i++);”的循环执行(A)。A.无限次 B.不确定次 C.10次 D.9次 13.执行语句{for(j=0;j main(){ int i,sum=2;for(i=1;i 15、执行语句”for(i=0;i++=0)break;if(x%2==1){x+=5;continue;} x-=3;} A.2 B.4 C.6 D.1 五 数组 1.以下对一维数组a的正确说明是:C//D数组[]里不能填变量 A)char a(10); B)int a[]; C)int k=5,a[k]; D)char a[3]={‘a’,’b’,’c’};2.以下能对一维数组a进行初始化的语句是:(C)A.int a[5]=(0,1,2,3,4,)B.int a(5)={} C.int a[3]={0,1,2} D.int a{5}={10*1} 。)3.在C语言中对一维整型数组的正确定义为 B。//D数组[]里不能填变量 A)int a(10);B)int n=10,a[n];C)int n;a[n];D)#define N 10 int a[N]; 4、已知:int a[10];则对a数组元素的正确引用是(D)。 A、a[10] B、a[3.5] C、a(5) D、a[0] 5.执行下面的程序段后,变量k中的值为C A)不定值 B)33 C)30 D)10 int k=3, s[2];s[0]=k;k=s[0]*10;*6.下列说法中错误的是C A构成数组的所有元素的数据类型必须是相同的 B用指针法引用数组元素允许数组元素的下标越界 C一维数组元素的下标依次是 1、2、3„„ D定义数组时的长度可以是整型常量表达式 7.若有以下数组说明,则数值最大的和最小的元素下标分别是(B)。int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};A.1,12 B.0,11 C.1,11 D.0,12 8.若有以下数组说明,则i=10;a[a[i]]元素数值是(C)。//B int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};A.10 B.9 C.6 D.5 9.假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是D A)3 11.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}};则数组a的第一维的大小为:(C)//B第一维就是指二维数组中第一个一维数组 A.2 B.3 C.4 D.无确定值 12.以下定义语句中,错误的是(A)//D数组[]里不能填变量 B)6 C)10 D)20 A)int a[]={1,2};B)char *a;D)int n=5,a[n];C)char s[10]=“test”; int i;13.下面程序段的输出结果是:(C)int x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i printf(”%d “,x[i][2-i]);A)1 5 9 B)1 4 7 C)3 5 7 D)3 6 9 14.对二维数组的正确定义是(C) A.int a[ ] [ ]={1,2,3,4,5,6};B.int a[2] [ ]={1,2,3,4,5,6};C.int a[ ] [3]={1,2,3,4,5,6};D.int a[2,3]={1,2,3,4,5,6};15.已知int a[3][4];则对数组元素引用正确的是__C__ A)a[2][4] B)a[1,3] C)a[2][0] D)a(2)(1) 六、函数 1.C语言中函数返回值的类型是由A 决定的.A)函数定义时指定的类型 B)return语句中的表达式类型 C)调用该函数时的实参的数据类型 D)形参的数据类型 2.在C语言中,函数的数据类型是指(A)A 函数返回值的数据类型 B.函数形参的数据类型 C 调用该函数时的实参的数据类型 D.任意指定的数据类型 *3.C程序中函数返回值的类型是由A决定的.A)函数定义时指定的函数类型 B)函数中使用的最后一个变量的类型 C)调用函数时临时确定 D)调用该函数的主调函数类型 *4.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为 (B)A.由系统选择 B.单向值传递 C.由用户指定传递方式 D.地址传递 5.在函数调用时,以下说法正确的是(B) A.函数调用后必须带回返回值 B.实际参数和形式参数可以同名 C.函数间的数据传递不可以使用全局变量 D.主调函数和被调函数总是在同一个文件里 *6.在C语言程序中,有关函数的定义正确的是(B)。 A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的均可以嵌套 A.在C语言程序中,调用函数时,如函数参数是简单变量,则只能把实参的B.C语言函数既可以嵌套定义又可递归调用 C.C语言函数必须有返回值,否则不能使用函数*7.以下对C语言函数的有关描述中,正确的是(A)。值传递给形参,形参的值不能传送给实参 D.在C语言程序中有调用关系的所有函数必须放在同一个源程序文件中 *8.C语言中对函数的描述正确的是 C.A)可以嵌套调用,不可以递归调用 B)可以嵌套定义 C)嵌套调用,递归调用均可 D)不可以嵌套调用 9.以下叙述中正确的是A A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其它函数之前 D)所有被调用的函数一定要在调用之前进行定义 10.用数组名作为函数调用时的实参时,传递给形参的是A。 A)数组首地址 B)数组第一个元素的值 C)数组全部元素的值 D)数组元素的个数 11.有一函数的定义如:void fun(char *s){……},则不正确的函数调用是(D)。A.main(){char a[20]=”abcdefgh”;fun(a);„„ } B.main(){ char a[20]=”abcdefgh”;fun(&a[0]);„„ } C.main(){ char a[20]=”abcdefgh”;char *p=a;fun(p);„„ } D.main(){char a[20]=”abcdefgh”;fun(a[]);„„ } 13、函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是(D)。A、funa(int *x, int *y){ int *p;*p=*x;*x=*y;*y=*p;} C、func(int *x, int *y){ int *p;p=x;x=y;y=p;} 14.有如下程序 int func(int a,int b){ return(a+b);} main(){ int x=2,y=x,z=8,r;r=func(func(x,y),func(y,z));printf(“%dn”,r);} 该程序的输出的结果是C A)12 B)13 C)14 D)15 *15.以下程序的输出结果是B int a, b;void fun(){ a=100;b=200;} main(){ int a=100, b=100;fun();printf(“%d%d n”, a,b);} A)100200 *16.下列说法中正确的是:(A) A.局部变量在一定范围内有效,且可与该范围外的变量同名。B.如果一个源文件中,全局变量与局部变量同名,则在局部变量范围内,局部变量不起作用。 C.局部变量缺省情况下都是静态变量。 B、funb(int x , int y) { int t;t=x;x=y;y=t;} D、fund(int *x, int *y) { int t; t=*x;*x=*y;*y=t; } B)100100 C)200100 D)200200 D.函数体内的局部静态变量,在函数体外也有效。17.在C语言中,表示静态存储类别的关键字是:(D)//C A)auto B)register C)static D)extern 18.未指定存储类别的变量,其隐含的存储类别为(B)。//A A)auto B)static C)extern D)register 七、结构体 1.若有以下说明语句: struct student { int num;char name[ ];float score;}stu;则下面的叙述不正确的是:(D)A.struct是结构体类型的关键字 B.struct student 是用户定义的结构体类型 C.num, score都是结构体成员名 D.stu是用户定义的结构体类型名 2.若有以下说明语句: struct date { int year;int month;int day;}brithday;则下面的叙述不正确的是__C__.A)struct是声明结构体类型时用的关键字 B)struct date 是用户定义的结构体类型名 C)brithday是用户定义的结构体类型名 D)year,day 都是结构体成员名 *3.已知:(设整型2字节,字符型1字节,浮点型4字节)struct { int i; char c; float a; }test; 则sizeof(test)的值是 D。A)4 B)5C)6 D)7 4.以下对结构变量stul中成员age的非法引用是B struct student { int age; int num; }stu1,*p; p=&stu1; A)stu1.age B)student.age C)p->age D)(*p).age *5.有如下定义 struct person{char name[9];int age;};struct person cla[10]={“Tom”,17,“John”,19,“Susan”,18,“Adam”,16,}; 根据上述定义,能输出字母A的语句是(B)A)printf(“%cn”,cla[3].name);B)printf(“%cn”,cla[3].name[0]);C)printf(“%cn”,cla[3].name[1]);D)printf(“%cn”,cla[2].name[3]); 6.存放100个学生的数据、包括学号、姓名、成绩。在如下的定义中,不正确的是(B)。 A.struct student {int sno;char name[20];float score;} stu[100];B.struct student stu[100] {int sno;char name[20];float score};C.struct { int sno;char name[20];float score;} stu[100];D.struct student {int sno;char name[20];float score;};struct student stu[100];*7.设有定义语句“struct {int x;int y;} d[2]={{1,3},{2,7}};”则“printf(“%dn”,d[0].y/d[0].x*d[1].x);”输出的是(D)。 A.0 B.1 C.3 D.6 8.已知: struct sk { int a;float b;}data, *p;若有p=&data,则对data中的成员a的正确引用是(C)。A、(*p).data.a B、p->data.a C、(*p).a D、p.data.a 9.设有如下定义: struck sk {int a;float b;}data;int*p;若要使P指向data中的a域,正确的赋值语句是C A)p=&a;B)p=data.a;C)p=&data.a; D)*p=data.a;10.设有以下说明语句: typedef struct stu { int a;float b;} stutype;则下面叙述中错误的是(D)。A、struct是结构类型的关键字 B、struct stu是用户定义的结构类型 C、a和b都是结构成员名 D、stutype是用户定义的结构体变量名 八.指针 1. 语句int *p;说明了 C。A)p是指向一维数组的指针 B)p是指向函数的指针,该函数返回一int型数据C)p是指向int型数据的指针 D)p是函数名,该函数返回一指向int型数据的指针 2.变量的指针,其含义是指该变量的:(B)A.值 B.地址 C.名 D.一个标志 3.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是(A) A)pb=&x B)pb=x C)*pb=&x D)*pb=*x 4、已知:int a, *p=&a;则下列函数调用中错误的是(D)。A、scanf(“%d”,&a);B、scanf(“%d”,p);C、printf(“%d”,a);D、printf(“%d”,p);5.对于同类型的指针变量,不可能进行的运算是(D)。//C A.-B.= C.+ D.== 6.对于基类型相同的两个指针变量之间,不能进行的运算是A//C两个指针变量相加什么都得不到 A) A.int *p=&i,i;B.int *p,i;C.int i,*p=&i;D.int i,*p;8.若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是:(D) A)p=q B)*p=*q C)n=*q D)p=n 9.int *p,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a的值为C A)编译出错 B)10 C)11 D)12 A)int p=*a;B)int *p=a;C)int p=&a;D)int *p=&a;11.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是(C)。A.a[p] B.p[a] C.*(p+2)D.p+2 12.若指针变量p指向整型数组a[10]的首地址, 即p=a;则下列数组元素a[i](0 A.p+i B.&(a+i)C.*(a+i)D.*(p+i*2)13.有如下程序 int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;则数值为9的表达式是B A)*P+9 B)*(P+8)C)*P+=9 D)P+8 14.若有以下定义,则不能表示a数组元素的表达式是(B)。10.有语句:int a[10],;则D是对指针变量p的正确定义和初始化。//B int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;A.*p B.a[10] C.*a D.a[p-a] *15.已知int a[5],*p=a;下面的叙述中正确的是A。 A)p+1与a+1等价 B)p[1]与*p等价 C)*(p+1)与a+1等价 D)p[1]与a++等价 16.若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为4的表达式是(C)A)*p+4 B)*(p+4)C)*(p+3)D)p+3 17.下面程序的输出结果是C A)0 B)1 C)2 D)输出错误 main(){ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;printf(“%dn”,*p+1);} 18.执行语句 char c[10]={ ”abcd”},*pc=c;后,*(pc+4)的值是(A)“abcd” B)’ ’ C)‘d’ D)不确定 19.下列函数的功能是A。void fun(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;} A)交换*p1和*p2的值B)语法正确,但无法交换*p1和*p2的值 C)交换*p1和*p2的地址 D)有语法错误 *20.有如下程序 main(){ char s[]=“ABCD”, *P; for(p=s+1;p B)BCD B C CD CD C D D D D *21.请读程序,输出结果为:(A)#include int a[]={2,4,6,8};main(){ int i,b[4];int *p=a;for(i=0;i A)程序区 B)静态存储区 C)动态存储区 九、字符串 1.在C语言中,以 D 作为字符串结束标志 A)’n’ B)’’C)’0’ D)’ ’ 2.下列数据中属于“字符串常量”的是(D)。//A A.“a” B.{ABC} C.‘abc ’ D.‘a’ 3.字符串 “ABCD”在内存占用的字节数是(D)。A.4 B.6 C.1 D.5 4.下面不正确的字符串常量是:(A) A.‘PROGRAM’ B “12’12” C “0” D “” 5.设有数组定义: char array [ ]=”abcd“;则数组array所占的空间为B A)4个字节 B)5个字节 C)6个字节 D)7个字节 *6.下述对C语言中字符数组的描述错误的是C。 A)字符数组可以存放字符串 B)字符数组中的字符串可以整体输入和输出 C)可在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D)可在对字符数组定义时通过赋值运算符“=”对字符数组整体初始化 7.已知char x[]=”hello“, y[]={'h','e','a','b','e'};, 则关于两个数组长度的正确描述是B A)相同 B)x大于y C)x小于y D)以上答案都不对 8.给出以下定义: char x[ ]=”abcdefg“;char y[ ]={'a','b','c','d','e','f','g'};则正确的叙述为C A)数组x和数组y等价 B)数组x和数组y的长度相同 C)数组x的长度大于数组y的长度 D)数组x的长度小于数组y的长度 9、若有以下语句,则正确的描述是(D)。static char x[ ]=”12345”;static char y[ ]={‘1’,‘2’,‘3’,‘4’, 5’,’ ’};A、x数组长度大于y数组长度 B、x数组和y数组不相同 C、x数组长度小于y数组长度 D、x数组等价于y数组 10、已知:char s[20]= ”programming”, *ps=s;则不能引用字母o的表达式是(C)。 A、ps[2] B、s[2] C、ps+2 D、ps+=2, *ps *11.判断两字符串s1,s2是否相等,应使用(D).A)if(s1==s2)B)if(s1=s2)C)if(strcpy(s1,s2)) D)if(strcmp(s1,s2)==0)*12.以下printf语句的输出结果为:A printf(“%dn”,strlen(“school”));A)7 B)6 C)存在语法错误 D)不定值 13.对字符数组s赋值,不合法的一个是(C)A.char s[]=”Beijing“; B.char s[20]={”beijing“}; C.char s[20];s=”Beijing“; D.char s[20]={'B','e','i','j','i','n','g'}; 14.对字符数组str赋初值,str不能作为字符串使用的一个是(D)A.char str[]=”shanghai“; B.char str[]={”shanghai“}; C.char str[9]={'s','h','a','n','g','h','a','i',’ ’}; D.char str[8]={ 's','h','a','n','g','h','a','i'}; 15.合法的数组定义是C A)int a[]={“string”};B)int a[5]={0,1,2,3,4,5};C)char a[]= “string”;D)char a[5]={0,1,2,3,4,5};16.对字符数组s赋值,不合法的是:(C)A)char s[]=”china“; B)char s[20]={” china “}; C)char s[20];s=” china“; D)char s[20]={'c','h','i','n','a'}; 17.下面初始化与此初始化charc[ ]=“I am happy”;等价的是(A) A)char c[ ]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’ ’}; B)char c[ ]={‘I’,’am’,’happy’};C)char c[ ]={‘I’, ’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’};D)char c[ ]={‘I’,’am’,’happy’,’ ’};18.下面各语句中,能正确进行赋字符串操作的语句是(D)。//C指针变量可以再赋值字符串 A.char s[5]={“ABCDE”};B.char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’,’ ’};C.char *s;s=“ABCDE”;D.char *s;scanf(“%s”,&s);19.下列字符串赋值方式不正确的是(B)//A数组不能再赋值字符串 A).char str[20];B).char *str;str=”I am a boy!”;str=”I am a boy!”;C).char *str=”I am a boy!”;D).char str[20]=” I am a boy!”; 十、文件 *1.在C语言中,文件由(D)。//A A.字符(字节)序列组成 B.记录组成 C.数据行组成 D.数据块组成 2.下面各函数中能实现打开文件功能的是A A)fopen B)fgetc //B A.0 B.1 C.非0值 D.NULL 4.下列语句中,把变量fp说明为一个文件型指针的是(A)。 A)FILE *fp;B)FILE fp;C)file *fp;D)file fp; 5、在进行文件操作时,写文件的一般含义是(B)。A、将磁盘中的信息存入计算机内存 B、将计算机内存中的信息存入磁盘 C、将计算机CPU中的信息存入磁盘 C)fputc D)fclose *3.若文件型指针fp指向某文件的末尾,则函数feof(fp)的返回值是(A)。D、将磁盘中的信息存入计算机CPU *6.以读写方式打开一个已有的文本文件file1,并且FILE *fp,下面fopen函数正确的调用方式是(B)。 A.fp=fopen(“file1”,“r”)B.fp=fopen(“file1”,“r+”)C.fp=fopen(“file1”,“rb”)D.fp=fopen(“file1”,“w”)*7.标准库函数fputs(p1,p2)的功能是(D)。//C A.从p1指向的文件中读一个字符串存入p2指向的内存 B.从p2指向的文件中读一个字符串存入p1指向的内存 C.从p1指向的内存中读一个字符串写到p2指向的文件中 D.从p2指向的内存中读一个字符串写到p1指向的文件中 十一、编译预处理 *1.在C语言程序中,以#号带头的行是预编译处理(A)。 A.命令 B.语句 C.函数 D.字符串 A.define PI 3.14159 B.#define P(a,b)=strcpy(a,b)C.#define stdio.h D.#define PI 3.14159;A.#define MYNAME=”ABC” B.#include stdio.h C.for(i=0;i;B.if(2);D.for(;;)if(1)break;2.下列正确的预编译命令是(B)。//D 3.下列命令或语句中,正确的是(C)。 *4.下列命令或语句中,错误的是(D)。//C 23