2015—2016 C语言Ⅱ练习题
Ⅰ单选题 一、基础部分
1、以下数组初始化语句语法错误的是(B) A. int array[5] = {1, 2, 3, 4, 5}; B. int array[] = {1…5}; C. int array[] = {1, 2, 3, 4, 5}; D. int array[5] = {1, 2, 3};
2、 设a,b和c都是int型变量,且a=3,b=4,c=5,则下面表达式中,值为0的表达式是( D )
A.?a?&&?b? B.a<=b
C.a||b+c&&b-c D.!((a
A.必须在最开始
B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后
4、sizeof(float)是: ( B )
A.一个双精度型表达式 B.一个整型表达式
C.一种函数调用 D.一个不合法的表达式
5、printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 ( B )
A.从左起输出该字串,右补空格 B.按原字符长从左向右全部输出 C.右对齐输出该字串,左补空格 D.输出错误信息
6、C程序执行顺序,说法正确的是 C 。 A)按照程序的编写顺序执行; B)从任一函数开始执行; C)总是从main函数开始执行; D)从最前面的函数开始执行; 7、以下程序运行结果是 C 。 void main()
{ int x=1, y =2, z; z=x>y?++x:++y;
printf(“%d,%d,%d”,x,y,z); } A) 1,2,3 B)1,3,3 C) 2,3,3 D)2,2,3
8、下面程序段的运行结果是___C___。 int n=0;
while(n++<=2);printf(\
A)2 B)3 C)4 D)有语法错 9、关于格式说明符%f说法正确的是 D 。
1
A)输出十进制整数; B)以指数形式输出实数; C)输出实数且输出的数字全部是有效数字; D)输出实数,但输出的数字并不一定全部是有效数字; 10、在C语言中,函数返回值的类型最终取决于 A 。 A)函数定义时在函数首部所说明的函数类型; B)return语句中表达式值的类型; C)调用函数时主调函数所传递的实参类型; D)函数定义时形参的类型; ********************************
二、数组
1、以下对二维数组的定义中正确的是()。[3]
A.int a[4][]={1,2,3,4,5,6}; B. int a[][3];
C.int a[][3]= {1,2,3,4,5,6}; D. int a[][]={{1,2,3},{4,5,6}};
2、假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是()。
A. 3 B. 6 C. 10 D. 20 3、以下对二维数组a的正确说明是___C_____。 A.int a[3][]; B.float a(3,4); C.double a[1][4] ; D.float a(3)(4);
4、若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为__D____。 (假设a[0][0]位于数组的第一个位置上。)
A.i*m+j B.j*m+i C.i*m+j-1 D.i*m+j+1
5、数组名作为实参传递给形参时,数组名被处理为__C____。
A.该数组的长度 B.该数组的元素个数 C.该数组的首地址 D.该数组中各元素的值 6、若有说明:int a[10];,则对数组元素正确引用的是( )。 (A) a[10] (B) a[3.5]
(C) a(5) (D) a[0]
7、以下能正确定义数组并正确赋初值的语句是:( )
A、int N=5,b[N][N]; B、int a[1][2]={{1},{3}}; C、int c[2][]= {{1,2},{3,4}}; D、int d[3][2]={{1,2},{3,4}}; 8、定义了一维int型数组a[10]后,下面错误的引用是:( )。
A.a[0]=1; B.a[10]=2; C.a[0]=5*2;
D.a[1]=a[2]*a[0];
三、指针
1、指针,其含义是指该变量的_________.
A.值 B.地址 C.名 D.一个标志
2、若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D 。 A.a,point,*&a B.&*a,&a,*point
2
C.*&point,*point,&a D.&a,&*point ,point 3、两个指针变量不可以___A___。 A. 相加 B 比较 C 相减 D 指向同一地址 *********************************
4、变量的指针,其含义是指该变量的( )。 (A) 值 (B) 地址
(C) 名 (D) 一个标志
5、下面程序段中,for循环执行的次数是( )。 char *s=\
for( ; *s!='\\0'; s++) printf(\(A) 9 (B) 5
(C) 6; (D) 7
6、若有定义:int *p[3];,则以下叙述中正确的是:( )
A)定义了一个类型为int的指针变量p,该变量具有三个指针
B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C)定义了一个名为*p的整型数组,该数组含有三个int类型元素
D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 7、有以下程序 main()
{ int x[8]={8,7,6,5,0,0}, *s; s=x+3;
printf(\}
执行后输出结果是:( )
A) 随机值 B) 0 C) 5 D) 6 8. 若有以下定义,则p+5表示___。 int a[10],*p=a;
a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值
四、指针和数组
1、不能正确进行字符串赋初值的语句是( )
A. char str[5]= \ B. char *str=\ 2、以下程序的输出结果是( )
main()
{ char *p=\ printf(\ } A. 5 B. 15 3、int a[10],*p=a;
不能代表a[1]地址的是( )
B. char str[]=\
D. char str[5]={?g?,?o?,?o?,?d?};
C. 6
[1]
D. 16
3
A. p+1 B. a+1 C. ++a D. ++p 4、 以下正确的程序段是_________.
A.char str[20]; B.char *p;
scanf(\ scanf(\ C.char str[20]; D.char str[20],*p=str; scanf(\ scanf(\5、 下面程序的运行结果是_______. #include
char *s1=\ char *s2=\ s1+=2;s2+=2;
printf(\ }
A.正数 B.负数 C. 零 D.以上皆有可能
6、 下面程序的运行结果是_______. #include
while(s1 main() {char *p; p=\ fun(p,strlen(p)); puts(p); } A.7654321 B.1714171 C.1711717 D.7177171 ********************************* 7、若有以下定义,则对a数组元素的正确引用是____D_____。 int a[5],*p=a; A.*&a[5] B.a+2 C.*(p+5) D.*(a+2) 8、下面程序段的运行结果是____D_____。 char *s=\ s+=2;printf(\ A.cde B.字符'c' C.字符'c'的地址 D.无确定的输出结果 9、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确 执行的赋值语句是____B____。 A.c=*p1+*p2; B.p2=c C.p1=p2 D.c=*p1*(*p2); 10、若有说明语句 char a[]=\ char *p=\ 则以下不正确的叙述是___D_____。 A.a+1表示的是字符t的地址 B.p指向另外的字符串时,字符串的长度不受限制 C.p变量中存放的地址值可以改变 4 D.a中只能存放10个字符 11、若有以下定义和语句,则对s数组元素的正确引用的形式是( ) int s[4][5], (*ps)[5]; ps=s; (A)ps+1 (B) *(ps+3); (C) ps[0][2]; (D)*(ps+1)+3 12、若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____ a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j 五、字符串 1、下面程序段的运行结果是____D_____。 char a[7]=\ char b[4]=\ strcpy(a,b); printf(\ A.空格 B.\\0 C.e D.f 2、下面程序的运行结果是___B_____。 #include for(k=2;(c=str[k])!='\\0';k++) { switch(c) { case 'I':++k;break; case 'L':continue; default:putchar(c);continue; } putchar('*'); } } A.SSW* B.SW* C.SW*A D.SW *********************************** 3、设有数组定义:char array[]=\则数组array所占的空间为( )。 (A) 4个字节 (B) 5个字节 (C) 6个字节 (D) 7个字节 4、下面程序的运行结果是:( )。 char c[5]={?a?, ?b?, ?\\0?, ?c?, ?\\0?}; 5