一、单选题(每题2分,共60分。)
1.C语言程序的基本单位是()。
A、程序行B、语句C、函数D、字符
2.以下关于简单程序设计的步骤和顺序的说法中正确的是()。
A、确定算法后,整理并写出文档,最后进行编码和上机调试
B、首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档
C、先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档
D、先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构
3.C语言中,文件组成的基本单位为()。
A、记录B、数据行C、数据块D、字符序列
4.能正确表示“当x的取值在[1,10]和[,]范围内为真,否则为假”的表达式是()。
A、(x=1)(x=10)(x=)(x=)
!--=10(x--
B、(x=1)
(x=10)
(x=)
(x=)
!--=10)
(x--
C、(x=1)(x=10)
(x=)(x=)
!--=10)
(x--
D、(x=1)
(x=10)(x=)
(x=)
!--=10)(x--
5.要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是()。
A、while((ch=getchar())!=N)printf("%c",ch);
B、while(ch=getchar()!=N)printf("%c",ch);
C、while(ch=getchar()==N)printf("%c",ch);
D、while((ch=getchar())==N)printf("%c",ch);
6.以下程序段中,与语句:k=ab?(bc?1:0):0;功能相同的是()。
A、if((ab)(bc))k=1;
B、if((ab)
(bc)k=1;
C、if(a=b)k=0;
D、if(ab)k=1;
7.若a是数值类型,则逻辑表达式(a==1)
(a!=1)的值是()。
A、1B、0
C、2D、不知道a的值,不能确定
8.关于C语言的数据类型,下列说法不正确的是()。
A、C语言包含基本数据类型B、C语言包含指针类型
C、C语言包含字符串类型D、C语言包含结构体类型
9.下面合法的C语言字符常量是()。
A、\tB、"A"C、65D、A
10.下列关于复合语句和空语句的说法错误的是()。
A、复合语句是由“{”开头,由“}”结尾的
B、复合语句在语法上视为一条语句
C、复合语句内,可以有执行语句,不可以有定义语句部分
D、C程序中的所有语句都必须由一个分号作为结束
11.下面不是C语言合法标识符的是()。
A、abcB、5nC、_4mD、x3
12.以下描述中正确的是()。
A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B、do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C、在do-while循环体中,是先执行一次循环,再进行判断
D、do-while循环中,根据情况可以省略while
13.C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符()。
A、必须为字母B、必须为下划线
C、必须为字母或下划线D、可以是字母,数字和下划线中任一字符
14.以下选项中,能用作数据常量的是()。
A、oB、
C、1.5e1.5D、L
15.若要打开C盘上my子目录下名为text.txt的文本文件进行只读操作,下面符合此要求的函数调用是()。
A、fopen("C:\\my\\text.txt","r");
B、fopen("C:\\my\\text.txt","rt+");
C、fopen("C:\\my\\text.txt","rb");
D、fopen("C:\\my\\text.txt","w");
16.若有定义语句:inta[3][6];,按在内存中的存放顺序,a数组的第10个元素是()。
A、a[0][4]B、a[1][3]C、a[0][3]D、a[1][4]
17.下列关于枚举类型的描述不正确的是()。
A、可以在定义枚举类型时对枚举元素进行初始化
B、在赋值时,不可以将一个整数赋值给枚举变量
C、枚举变量不可以进行关系运算
D、枚举变量只能取对应枚举类型的枚举元素表中的元素值
18.以下叙述中正确的是()。
A、在不同的函数中不可以使用相同的名字的变量。
B、函数中的形式参数是局部变量。
C、在一个函数内定义的变量可以在另一函数中使用。
D、在main函数中,变量一经定义,系统将自动赋予初始值。
19.若有说明:
inta[][3]={1,2,3,4,5,6,7};
则a数组第一维的大小是()。
A、2B、3C、4D、无确定值
20.设有数组定义:
chararray1[]="abcd";char
array2[]={a,b,c};
则数组array1所占的空间比array2多()。
A、1个字节B、2个字节
C、3个字节D、4个字节
21.以下程序有语法性错误,有关错误原因的正确说法是()。
intmain()
{
intG=5,k;
voidprt_char();
……
k=prt_char(G);
……
}
A、语句voidprt_char();有错,它是函数调用语句,不能用void说明
B、变量名不能使用大写字母
C、函数说明和函数调用语句之间有矛盾
D、函数名不能使用下划线
22.若有说明:inta[3][4];,则对a数组元素的正确引用是()。
A、a[2][4]B、a[1,3]
C、a[1+1][0]D、a(2)(1)
23.给出以下定义:
charx[]="good";
chary[]={g,o,o,d};
两者之所以不等价是因为()。
A、x中元素的存储是连续的,y是不连续的
B、两者存储的元素数据类型不同
C、x是字符串数组,最后一个元素为’\0’
D、数组名称不同
24.若有以下说明和定义
uniondt
{inta;charb;doublec;}data;
以下叙述中错误的是()。
A、data的每个成员起始地址都相同
B、变量data所占内存字节数与成员c所占字节数相等
C、程序段:data.a=5;printf("%f\n",data.c);输出结果为5.
D、data可以作为函数的实参
25.若有以下说明语句:
structstudent
{
intname;
intnumber;
intsex;
}stu;
则下面的叙述不正确的是()。
A、struct是声明结构体类型时用的关键字
B、structstudent是用户定义的结构体类型名
C、stu是用户定义的结构体类型名
D、name,sex都是结构体成员名
26.若有定义:intw[3][5];,则以下不能正确表示该数组元素的表达式是()。
A、*(*w+3)
B、*(w+1)[4]
C、*(*(w+1))
D、*(w[0][0]+1)
27.若有定义:inta[2][3];则对a数组的第i行第j列元素地址的正确引用是()。
A、*(a+j)B、(a+i)
C、*(a+j)D、a+j
28.若有语句:char*line[5];,以下叙述中正确的是()。
A、定义line是一个数组,每个数组元素是一个基类型为char的指针变量
B、定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
C、定义line是一个指针数组,语句中的*号称为间址运算符
D、定义line是一个指向字符型函数的指针
29.变量的指针,其含义是指该变量的()。
A、值B、地址C、名D、以上都是
30.已定义以下函数
fun(char*p2,char*p1)
{while((*p2=*p1)!=\0){p1++;p2++;}}
函数的功能是()。
A、将p1所指字符串复制到p2所指内存空间
B、将p1所指字符串的地址赋给指针p2
C、对p1和p2两个指针所指字符串进行比较
D、检查p1和p2两个指针所指字符串中是否有\0
二、是非题(正确的填写“T”,错误的填写“F”。每题1分,共10分。)
1.如果满足if条件所要执行的语句为复合语句,则应该把这些语句使用{}括起来。(T)
2.一维数组在定义时进行初始化,也必须指名数组大小。(F)
3.一维数组的引用其下标从0开始。(T)
4.算法只能用C语言来描述。(F)
5.有参的宏,其参数参与运算,宏替换要先完成参数的计算,然后再执行替换。(F)
6.二维数组的初始化,必须写第一维的长度。(F)
7.数据类型构造类型有枚举型、共用型和结构型(T)
8.一个好的算法是一个好的程序的必要组成部分。(T)
9.为了提高读写效率,在进行读写操作后应关闭文件以便下次再进行读写。(F)
10.在switch语句中必须使用default。(F)
三、问答题(每题15分,共30分。)
1.修改以下程序,将功能表示为自定义函数,并说明在输入asdafaaz67后的输出为什么?
main()
{
charstr[81];
intn,i,j=0;
clrscr();
printf("Inputastring:");
gets(str);
puts(str);
for(i=0;str!=‘\0’;i++)
if(str!=‘’)str[j++]=str;
str[j]=’\0’;
printf("%s\n",str);
}
voidfunc(char*str)
{
inti,j=0;
for(i=0;str!=‘\0’;i++)
if(str!=‘‘)str[j++]=str;
str[j]=‘\0’;
}
main()
{
charstr[81];
intn;
clrscr();
printf("Inputastring:");
gets(str);
puts(str);
func(str);
printf("%s\n",str);
}
输入asdafaaz67,则输出为asdafaaz67
2.以下程序可以实现求解数组元素的和,请将数组改写成指针形式。
main()
{
intx[5]={5,1,2,3,4};
intsum=0,i=0;
while(i5)
{
sum+=x;
i++;
}
printf("Sum=%d\n",sum);
}
main()
{
intx[5]={5,1,2,3,4};
int*p,sum=0;
p=x;
while(p-x=4)
sum+=*p;
p++;
}
printf("Sum=%d\n",sum);
}