智慧树知到《程序设计基础2》章节测试答案
第一章单元测试
1、C语言程序是由若干()组成的。
A.函数
B.过程
C.主程序
D.子程序
正确答案:函数
2、C语言中,最简单的数据类型是()。
A.整型、实型、字符型
B.整型、字符型、逻辑型
C.整型、实型、逻辑型、字符型
D.整型、实型、逻辑型
正确答案:整型、实型、字符型
3、下列选项中可以作为C语言字符常量的是()。
A.”abc”
B.13.8e
C.‘M’
D.‘12’
正确答案:‘M’
4、已知字母‘b’的ASCII码值为98,如ch为字符型变量,则表达式ch=‘b’+’5’-’2’的值为()。
A.102
B.100
C.e
D.d
正确答案:e
5、已知各变量的定义如下:int i=8,k,a,b;unsigned long w=5;double x=1.42,y=5.2;则以下表达式中不符合C语言语法的表达式是()。
A.(int)x+0.4
B.y+=x++
C.a=2*a=3
D.k=i++
正确答案:a=2*a=3
6、下列四个选项是对变量和常量的特点的叙述,正确的说法是()。
A.C89规定所有变量必须在第一条可执行语句前定义。
B.在C语言中,所有变量都必须在定义时进行初始化。
C.宏常量有数据类型,编译器在宏替换时可以进行类型检查。
D.不同类型的变量分配的存储空间大小都是相同的。
正确答案:在C语言中,所有变量都必须在定义时进行初始化。
7、设有语句“int a = 3;”,执行语句“a += a -= a * a;”后,变量a的值是()。
A.-12
B.9
C.0
D.3
正确答案:-12
8、在C语言中对下面的语句而言,哪个说法是错误的()?int a, b。
A.a和b都是整型变量
B.变量a和b中的值都是未知的随机数
C.变量a和b占用的内存空间的大小是相同的
D.变量a和b中都没有数值
正确答案:变量a和b中都没有数值
9、设有如下定义:int x=1,y=-1;则语句:printf(“%d”,x--+(++y));的输出结果是()。
A.0
B.1
C.2
D.-1
正确答案:1
10、执行下面程序时,欲将25和2.5分别赋给a和b,正确的输入方法是()。int a;float b;scanf(“a=%d,b=%f”,&;a,&;b)。
A.25,2.5
B.25 2.5
C.a=25,b=2.5
D.a=25 b=2.5
正确答案:a=25,b=2.5
第二章单元测试
1、若有整型变量i、j,则以下程序段中内循环体的执行次数为()。for(i=1;i<;=5;i++)for(j=0;j<;4;j++){……}
A.25
B.24
C.20
D.30
正确答案:20
2、判断char型变量ch是否为大写字母的正确表达式是()。
A.';A';<;=ch<;=';Z'
B.(ch>;=';A';)&;(ch<;=';Z';)
C.(ch>;=';A';)&;&;(ch<;=';Z';)
D.(';A';<;=ch)AND(';Z';>;=ch)
正确答案:(ch>;=';A';)&;&;(ch<;=';Z';)
3、以下程序段的输出结果是()。main(){; int x=5; if(x++>;5); printf(“%d”,x); else; printf(“%d”,x--);}
A.5
B.6
C.7
D.4
正确答案:6
4、设所有变量均已正确定义,并且已知a=4,b=3,c=2,d=1,则表达式d=a<;b?
A.c的结果是()。
A.3
B.1
C.2
D.4
正确答案:2
5、当a=1、b=3、c=5、d=4时,执行以下程序段后x的值是()。

A.3
B.2
C.1
D.6
正确答案:2
6、如下程序
;main()
;{ ;int x=1,a=O,b=O; switch(x)
; { ; case ;0:b++; case ;1:a++; case ;2:a++;b++; }
;printf(";a=%d,b=%d";,a,b); }
;该程序的输出结果是()。
A.a=2,b=2
B.a=1,b=1
C.a=1,b=0
D.a=2,b=1
正确答案:a=2,b=1
7、下面程序段int k=2;while(k=0){printf(“%d”,k);k--}则下面描述中正确的是()。
A.循环体无限循环
B.循环体语句执行一次
C.循环体语句一次也不执行
D.while循环执行10次
正确答案:循环体语句一次也不执行
8、以下程序中while循环的循环次数为()。main(){;int i=0;while(i<;10);{;if(i<;1) continue;if(i==5) break;i++;};}
A.6
B.1
C.10
D.死循环,不确定次数
正确答案:死循环,不确定次数
9、假定a和b均为int型变量,则执行以下语句后b的值为()。a=1; b=10;do{ b-=a; a++; } while(b--<;0)。
A.-2
B.9
C.-1
D.8
正确答案:8
10、在语句while(!E); 括号中的表达式!E等价于()。
A.E!=0
B.E==1
C.E==0
D.E!=1
正确答案:E==0
第三章单元测试
1、若有定义int; a[10];则数组元素的下标的下限和上限分别是()。
A.1和9
B.1和10
C.0和1
D.0和9
正确答案:0和9
2、定义如下变量和数组,则下列程序段的输出结果是()。int i,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<;3;i++); if(i%2!=1)printf(";%d";,x[i][i])。
A.37
B.19
C.17
D.39
正确答案:19
3、下面一段程序是有关字符串操作的,该段程序的输出结果是()。#include <;stdio.h>;#include <;string.h>;main(){;char p1[10]=";abc";,p2[]=";ABC";strcat(p1,p2);printf(";%s";,p1);}
A.ABC
B.abcabc
C.abc
D.abcABC
正确答案:abcABC
4、下列四个选项中能正确定义一维数组的语句是()。
A.int num[ ]
B.#define N 2017 ;
int num[N]
C.int N=2017; int num[N]
D.int num[0…2017]
正确答案:#define N 2017 ;
int num[N]
5、若有以下说明,则数值为4的表达式是()。int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c=';a';,d,g。
A.a[';d';-';c';]
B.a[g-c]
C.a[4]
D.a[';d';-c]
正确答案:a[';d';-c]
6、以下是有关二维数组定义和初始化的语句,其中错误的是()。
A.int x[2][3]={{1,2},{3,4},{5,6}}
B.int x[2][3]={1,2,3,4,5,6}
C.int x[ ][3]={0}
D.int x[ ][3]={{1,2,3},{4,5,6}}
正确答案:int x[2][3]={{1,2},{3,4},{5,6}}
7、以下关于C语言字符数组的描述中错误的是()。
A.字符数组中的内容不一定是字符串
B.不可以用赋值语句给字符数组名赋字符串
C.可以用输入语句把字符串整体输入给字符数组
D.字符数组只能存放字符串
正确答案:字符数组只能存放字符串
8、设有char array[ ]=“China”;则数组array所占的空间字节数是()。
A.4
B.5
C.7
D.6
正确答案:6
9、如下程序段是对字符串的操作,运行后的结果为()。 char a[3],b[ ] =“China” ; a = b ; printf(“%s”,a)。
A.运行后将输出ch
B.运行后将输出China
C.运行后将输出Chi
D.编译出错
正确答案:编译出错
10、有以下有关字符串操作的程序,程序运行后的输出的结果是()。main(){ ; char s[ ]=“012xy8s34f4w2”; int i,n=0; for(i=0;s[i]!=0;i++) ; ;if(s[i]>;=‘0’ &;&; s[i]<;=‘9’) ; n++; printf(“%d”,n);}
A.7
B.3
C.8
D.0
正确答案:8
第四章单元测试
1、C 语言程序中可以有多个函数 , 但只能有一个主函数。
A.正确
B.错误
正确答案:正确
2、函数的实参可以是常量,变量或表达式。
A.正确
B.错误
正确答案:正确
3、递归调用算法与相同功能的非递归算法相比,主要问题在于重复计算太多,而且调用本身需要分配额外的空间、传递数据和控制,所以时间和空间开销通常都比较大。
A.正确
B.错误
正确答案:正确
4、在一个被调用函数中,关于 return 语句使用的描述,错误的是()。
A.被调用函数中可以不用 return 语句
B.被调用函数中,如果有返回值,就一定要有 return 语句
C.被调用函数中,一个 return 语句可以返回多个值给调用函数
D.被调用函数中可以使用多个 return 语句
正确答案:被调用函数中,一个 return 语句可以返回多个值给调用函数
5、C语言中函数返回值的类型是由()决定的。
A.定义函数时所指定的函数类型
B.调用函数时临时决定
C.调用该函数的主调函数的类型
D.return语句中的表达式类型
正确答案:定义函数时所指定的函数类型
6、有如下函数调用语句:func(rec1, rec2+rec3, (rec4, rec5)); 则该函数调用语句中,含有的实参个数是()。
A.5
B.3
C.有语法错
D.4
正确答案:3
7、以下程序的输出结果是()。#include <;stdio.h>;int func(int a,int b){ ; return(a+b);}int main(){ ; int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(";%d";,r); return 0;}
A.13
B.12
C.14
D.15
正确答案:15
8、C语言规定,程序中各函数之间()。
A.不允许直接递归调用允许间接递归调用
B.既允许直接递归调用也允许间接递归调用
C.不允许直接递归调用也不允许间接递归调用
D.允许直接递归调用不允许间接递归调用
正确答案:既允许直接递归调用也允许间接递归调用
9、若有以下调用语句,则不正确的 fun()函数的首部是()。main(){;; …; int a[50], n;; …; fun(n, &;a[9]);; …;}
A.void fun(int n, int a)
B.void fun(int p, int *s)
C.void fun(int m, int x[ ])
D.void fun(int s, int h[ 41])
正确答案:void fun(int n, int a)
10、函数的实参传递到形参有两种方式:值传递和地址传递。
A.正确
B.错误
正确答案:正确
第五章单元测试
1、变量的指针,其含义是指该变量的()。
A.地址
B.名
C.一个标志
D.值
正确答案:地址
2、若有语句int*point,a=4;和point=&;a;下面均代表地址的一组选项是()。
A.&;a,&;*point,point
B.*&;point,*point,&;a
C.&;*a,&;a,*point
D.a,point,*&;a
正确答案:&;a,&;*point,point
3、若有以下定义和语句,且0<;=i<;10,则对数组元素地址的正确表示是()。int;a[]={0,1,2,3,4,5,6,7,8,9},*p;p=a。
A.&;p
B.&;(a+1)
C.&;p[i]
D.a++
正确答案:&;p[i]
4、char ;s[10]=";ABCDEFGH";,*p=s;不能表示字符C的是()。
A.*(p+2)
B.s[';c';-';a';]
C.s[3]
D.s[2]
正确答案:s[3]
5、有下列程序:func(int x,int y,int *jia,int *jian){; *jia=x+y; *jian=x-y;}main(){; int i=10,j=3,x1,x2; func(i,j,&;x1,&;x2); printf(";%d,%d";,x1,x2);}则运行结果是()。
A.10,3
B.13,7
C.7,13
D.0,0
正确答案:13,7
6、下列定义中,不是指针数组定义的是()。
A.int (*r)[6]
B.char *w[7]
C.float *q[4]
D.int *p[5]
正确答案:int (*r)[6]
7、下列程序的运行结果是()。#define N 9fun(char s[]){; char *p=s+4,*q=s; int i; for(i=0;i<;4;i++,p++,q++); {; s[i]=*p; s[i+4]=*q; }}main(){; char ss[N]=";ABCDEFGH"; fun(ss); printf(";%s";,ss);}
A.EFGHABCD
B.ABCDABCD
C.EFGHEFGH
D.ABCDEFGH
正确答案:EFGHEFGH
8、设有声明语句int a[2][3],(*p)[3]=a;则对a数组元素正确的引用的是()。
A.(p+1)[0]
B.*(*(p+2)+1)
C.*(p[1]+1)
D.p[1]+2
正确答案:*(p[1]+1)
9、以下选项中,对指针变量p的正确操作是()。
A.int a[5],*p;p=&;a
B.int a[5],*p;p=a
C.int a[5];int *p=a[5]
D.int a[5];int *p,p2=a;*p=*p2
正确答案:int a[5],*p;p=a
10、在说明语句“ int *f();”中,标识符 f 代表是()。
A.一个用于指向整型数据的指针变量
B.一个返回值为指针型的函数名
C.一个用于指向一维数组的行指针
D.一个用于指向函数的指针变量
正确答案:一个返回值为指针型的函数名
第六章单元测试
1、结构体类型本身不占用内存空间,结构体变量占用内存空间。
A.正确
B.错误
正确答案:正确
2、结构体成员的类型必须是基本数据类型。
A.正确
B.错误
正确答案:错误
3、结构体变量可以作数组元素。
A.正确
B.错误
正确答案:正确
4、指向结构体变量的指针可以作函数参数,实现传址调用。
A.正确
B.错误
正确答案:正确
5、用链表代替数组进行数据操作时,查询更加方便。
A.正确
B.错误
正确答案:错误
6、有如下定义:struct;Student{;char;name[10];int;age;char;gender;}std[3],*p=std;则以下各输入语句中错误的是()。
A.scanf(";%d";,&;(*p).age)
B.scanf(";%c";,&;(p->;gender))
C.scanf(";%c";,&;std[0].gender)
D.scanf(";%s";,&;std.name)
正确答案:scanf(";%s";,&;std.name)
7、有定义如下:struct;ex{ int;x; float;y; char;z;};example;下面叙述中不正确的是()。
A.example是结构类型名
B.struct是定义结构类型的关键字
C.x,y,z都是结构成员名
D.struct ; ex是结构类型名
正确答案:example是结构类型名
8、设有如下定义,则对data中的a成员的正确引用是()。struct;sk{;int;a;float;b;};data,*p=&;data;
A.p->;data.a
B.(*p).a
C.(*p).data.a
D.p.data.a
正确答案:(*p).a
9、根据下面的定义,能打印出字母M的语句是()。struct person{ ; char name[10]; int age;} c[10] ={ “John”, 17, “Paul”, 19, “Mary”, 18, “Adam”, 16 }。
A.printf(“%c”, c[2].name[0])
B.printf(“%c”, c[3].name[1])
C.printf(“%c”, c[3].name)
D.printf(“%c”, c[2].name[1])
正确答案:printf(“%c”, c[2].name[0])
10、在一个以 h 为头的单向链表中,p 指针指向链尾的条件是()。
A.p->;next=h
B.p->;next->;next=h
C.p->;.data=-1
D.p->;next=NULL
正确答案:p->;next=NULL