一.选择题。(每小题2分,共30分)
1.以下叙述不正确的是。
A.一个C源程序可由一个或多个函数组成
B.一个C源程序必须包含一个main函数
C.C程序的基本组成单位是函数
D.在C程序中,注释说明只能位于一条语句的后面
2.在C语言中,要求运算数必须是整型的运算符是。
A./ B.++ C.!= D.%
3.以下能正确地定义整型变量a,b和c并为其赋初值5的语句是。
A.int a=5,b=5,c=5 B.int a, b, c=5
C. a=5,b=5 c=5
D.a=b=c=5
4.已知x=43,ch=?A?,y=0; 则表达式(x>=y && ch
。
A.0
B.语法错
C. 1
D. “假”
5.下面程序段的运行结果是.
int n=0;
while(n++<=2); printf(“%d”,n);
A. 2
B. 3
C. 4
D. 有语法错
6.下面有关for循环的正确描述是。
A.for循环只能用于循环次数已经确定的情况
B.f or循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来7.下面是对s的初始化,其中不正确的是.
A. char s[5]={“abc”};
B. char s[5]={…a?,?b?,?c?};
C.char s[5]=””;
D. char s[5]=”abcdef”;
8.有下面的程序段
char a[3],b[ ]=”China”;
a=b;
printf(“%s”,a);
则。
A.运行后将输出China B.运行后将输出Ch
C.运行后将输出Chi
D.编译出错
9.C语言允许函数值类型缺省定义,此时该函数隐含的类型是。
A.float 型
B.int型
C.long 型
D.double 型
10.若用数组名作为函数调用的实参,传递给形参的是。
A.数组的首地址
B.数组第一个元素的值
C.数组中全部元素的值
D.数组元素的个数
11.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为。
A.自动(auto) B. 静态(static)
C. 外部(extern)
D. 寄存器(register)
12. 若有说明:int *p1, *p2, m=5, n;以下均是正确赋值语句的选项是
。
A.p1=&m; p2=&p1;
B.p1=&m; p2=&n; *p1= *p2;
C.p1=&m; p2=p1;
D.p1=&m; *p2= *p1;
13.若有语句int *point, a=4; 和point=&a; 下面均代表地址的一组选项是。
A.a, point, *&a B. & *a, &a, *point
C. *&point, point, &a
D. &a,& *point, point
14.当说明一个结构体变量时系统分配给它的内存是。
A.各成员所需内存量的总和
B.结构中第一个成员所需内存量
C.成员中占内存量最大者所需的容量
D.结构中最后一个成员所需内存量
15.若执行fopen函数时发生错误,则函数的返回值是.
A.地址值
B. 0
C. 1
D.EOF
二.填空题。(每小题3分,共30分)
1.若x为int型变量,则执行以下语句后x的值是【】
x=7;
x+=x-=x+x;
2.以下程序对输入的两个整数,按从大到小序输出。
Main( )
{
int x, y, z;
scanf(“%d, %d”,&x,&y);
if(【1】)
{z=x; 【2】}
printf(“%d,%d”,x,y);
}
3.执行以下的C语言程序段后,a=【1】,b=【2】,c=【3】.
Int x=10,y=9;
Int a,b,c;
a=(x- - = =y+ +)? X- -: y+ +;
b=x+ +;
c=y;
4.下面程序可求出矩阵a的主对角线上的元素之和。请填空。
Main( )
{int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,I,j;
for(I=0;I<3;I++)
for(j=0;j<3;j++)
if(【1】) sum=sum+【2】;
printf(“sum=%d\n”,sum);
}
4.函数swap(int x,int y)可完成对x和y值的交换。在运行调用函数中的如
下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。
a[0]=1;a[1]=2;
swap(a[0],a[1]);
5.以下程序可计算10名学生1门课成绩的平均分,请填空。
Float average(float array[10])
{ int I; float aver,sum=array[0];
for(I=1; 【1】;I++) sum+=【2】;
aver=sum/10;
return(aver);
}
main( 0
{ float score[10],aver;int I;
printf(“\n input 10 scores:”);
for(I=0;I<10;I++) scanf(“%f”,&score[I]);
aver=【3】;
printf(“\n average score is %5.2f\n”,aver);
}
6.若有以下定义和语句,则下面各个符号的正确含义分别是:(例如对于符号
&a[2][1],应该写成:是数组元素a[2][1]的地址)。
int a[3][4],(*q)[4];
q=a;
*(q+2): 【1】, (q+1)+2: 【2】, *(*q+2): 【3】
7.若有定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是【1】,
*(*(a+1)+0))的值是【2】。
8..若已定义:
struct num
{ int a;
int b;
float f;
}n={1,3,5.0};
struct num *pn=&n;
则表达式pn->b/n.a*++pn->b的值是【1】,表达式(*pn).a+pn->f的值是【2】。
9.以下程序的运行结果是【1】,其算法是【2】。
Main( )
{ int a[5]={9,6,8,3,-1},I,t,j,p;
sort(a);
for(I=0;I<=4;I++) printf(“%d”,a[I]);
}
sort(int a[ ])
{ int I,j,t,p;
for(j=0;j<4;j++)
{ p=j;