计算机等级二级考试C语言试题练习题及答案.docx
计算机等级二级考试C语言试题练习题及答案
选择题
1.以下关于C语言的说法正确的是()
A.C语言程序必须有主函数
B.C语言程序的注释可以用“//”和“//”两种方式,但“//”只能注释一行
C.C语言的变量必须先定义后使用
D.以上说法都正确
答案:D
详细解答:
A选项:在C语言中,一个完整的程序必须有且只有一个主函数`main()`,程序从主函数开始执行,所以该选项正确。
B选项:“//”是C99标准引入的单行注释方式,只能注释一行内容;“//”是多行注释方式,可以注释多行,该选项正确。
C选项:C语言要求变量必须先定义后使用,这样编译器才能为变量分配内存空间,该选项正确。
2.以下能正确定义且赋初值的语句是()
A.intn1=n2=10;
B.charc=32;
C.floatf=f+1.1;
D.doublex=12.3E2.5;
答案:B
详细解答:
A选项:在C语言中不能连续给多个变量同时赋初值,正确的写法应该是`intn1=10,n2=10;`,所以该选项错误。
B选项:字符型变量可以用整数赋值,因为字符在计算机中是以ASCII码形式存储的,32对应的ASCII码字符是空格,所以该选项正确。
C选项:在定义变量`f`时,不能用自身来初始化,因为此时`f`还未被赋值,值是不确定的,所以该选项错误。
D选项:科学计数法中指数部分必须是整数,而`2.5`是小数,所以该选项错误。
3.若有定义`inta=7;floatx=2.5,y=4.7;`,则表达式`x+a%3(int)(x+y)%2/4`的值是()
A.2.500000
B.2.750000
C.3.500000
D.0.000000
答案:A
详细解答:
按照运算符优先级进行计算:
先计算`a%3`,`7%3`结果为1。
再计算`(int)(x+y)`,`x+y=2.5+4.7=7.2`,强制类型转换为整数后为7。
接着计算`17%2`,结果为1。
然后计算`1/4`,由于两个操作数都是整数,结果为0。
最后计算`x+0`,即`2.5+0=2.5`。
填空题
1.若有定义`inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};`,则`a[1][2]`的值是______。
答案:7
详细解答:
在二维数组`a`中,第一个下标表示行,第二个下标表示列。`a[1][2]`表示第2行(数组下标从0开始)第3列的元素,根据数组初始化的值,该元素为7。
2.函数调用时,实参和形参之间的数据传递是______传递。
答案:值
详细解答:
在C语言中,函数调用时,实参的值会被复制一份传递给形参,形参的改变不会影响实参,这种传递方式称为值传递。
判断题
1.C语言中,数组名代表数组首元素的地址。()
答案:正确
详细解答:
在C语言中,数组名在大多数情况下代表数组首元素的地址。例如,当数组名作为函数参数传递时,实际上传递的就是数组首元素的地址。
2.`while`循环和`dowhile`循环的区别在于`while`循环至少执行一次循环体,而`dowhile`循环可能一次都不执行。()
答案:错误
详细解答:
`while`循环是先判断条件,若条件不成立则一次都不执行循环体;而`dowhile`循环是先执行一次循环体,再判断条件,所以`dowhile`循环至少执行一次循环体。
解答题
1.编写一个C语言程序,输入一个整数,判断它是否为素数(质数)。
```c
includestdio.h
includemath.h
intisPrime(intnum){
if(num2){
return0;
}
for(inti=2;i=sqrt(num);i++){
if(num%i==0){
return0;
}
}
return1;
}
intmain(){
intnum;
printf(请输入一个整数:);
scanf(%d,num);
if(isPrime(num)){
printf(%d是素数。\n,num);
}else{
printf(%d不是素数。