湖北大学软件工程专业2020年C语言程序设计期末综合考试
基本信息:[矩阵文本题] *
| |
| 姓名: | ________________________ |
| 学号: | ________________________ |
1. C语言源程序名的后缀是( )。 [单选题] *
2. 以下叙述正确的是( )。 [单选题] *
| C语言程序总是从main函数开始执行(正确答案) |
| C语言程序总是从最前面的函数开始执行 |
| C语言程序所调用的函数必须放在main函数的前面 |
| C语言程序中main函数必须放在程序的开始位置 |
3. 表达式3.6-5/2+1.2+5%2的值是( )。 [单选题] *
4. 若有定义语句:
int x=12,y=8,z;
在其后执行语句
z=0.9+x/y;
则z的值为( )。 [单选题] *
5. 以下选项中,能用作用户标识符的是( )。 [单选题] *
6. 有以下程序
#includemain()
{
int a=1, b=0;
printf("%d,", b=a+b);
printf("%d\\n", a=2*b);
}
程序运行后的输出结果是( )。 [单选题] *
7. 若有以下程序#include main()
{
char c1,c2;
c1='C'+'8'-'3';
c2='9'-'0';
printf("%c %d\\n", c1, c2);
}
则程序的输出结果是( )。 [单选题] *
| H 9(正确答案) |
| 表达式不合法输出无定值 |
| F '9' |
| H '9' |
8. 若有定义: float x=1.5;
int a=1,b=3,c=2;
则正确的switch语句是( )。 [单选题] *
| switch(a+b) { case 1: printf("*\\n"); case c: printf("**\\n"); } |
| switch(x) { case 1.0: printf("*\\n' ); case 2.0: printf(" **n"); } |
| switch((int)x); { case 1: printf("*\\n"); case 2: printf("**\\n"); } |
| switch(a+b) { case 1: printf("*\\n"); case 2+1: printf("**\\n"); }(正确答案) |
9. 以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)
for(k=1;k<3;k++); printf("*” );
该程序段的输出结果是( )。 [单选题] *
10. 有以下程序#includemain()
{
int i;
for(i=1;i<=40;i++)
{
if(i++%5==0)
if(++i%8==0) printf("%d",i);
}
printf("\\n");
}
执行后的输出结果是( )。 [单选题] *
11. 若有以下程序#includeint f(int m) {
static int n=0;
int a=2;
n++;
a++;
return n+m+a;
}
main() {
int k;
for(k=0;k<4;k++)
print("%d",f(k));
}
程序运行的输出结果是( )。 [单选题] *
| 3,5,7,9, |
| 4,7,10,13 |
| 4,6,8,10(正确答案) |
| 4,5,6,7, |
12. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确( )。 [单选题] *| 函数的形参和实参分别占用不同的存储单元(正确答案) |
| 同名的实参和形参占同一个存储单元 |
| 形参只是形式上的存在,不占用具体存储单元 |
| 函数的实参和其对应的形参共占同一存储单元 |
13. 有以下程序#include .int m1(int x,int y)
{ return x<=y?x:y; }
int m2(int x,int y)
{ return x<=y?y:x; }
int fun(int a, int b)
{ return a+b; }
main()
{
int x=2,y=3,z=1;
printf("%d\\n", fun(ml(x, y),m2(y, z)));
}
程序的运行结果是( )。 [单选题] *
14. 以下关于return语句叙述中正确的是( )。 [单选题] *| 一个自定义函数中必须有一条return语句 |
| 一个自定义函数中可以根据不同情况设置多条return语句(正确答案) |
| 定义void类型的函数中可以有带返回值的return语句 |
| 没有return语句的自定义函数在执行结束时不能返回到调用处 |
15. 有以下程序#includevoid f(int x) {
if(x>=10) { printf("%d-",x%10); f(x/10); }
else printf("%d", x);
}
main() {
int z=123456;
f(z);
}
程序运行后的输出结果是( )。 [单选题] *
| 1-2-3-4-5-6 |
| 6-5-4-3-2-1(正确答案) |
| 1-2-3-4-5-6- |
| 6-5-4-3-2-1- |
16. 设有数组定义:char array[]="China"; 则数组array所占的空间为( )。 [单选题] *
答案解析:字符数组是每个元素存放一个字符型数据的数组。C语言中约定用'\\0'作为字符串的结束标志,它占内存空间,但不计入字符串的长度。对数组array赋初值char array[]="China",此时系统自动在末尾加入一个'\\0',此时数组array的长度为6,所占用的空间为6个字节,即char array[]="China"等价于char array[]={'C','h','i','n','a','\\0'}。17. 有如下程序
void main() {
int i,sum;
for(i=1;i<=3;sum++)
sum+= i;
printf(" %d\\n",sum);
}
该程序的执行结果是( )。 [单选题] *
答案解析:在循环过程中,i的值一直没有被改变,所以这是一个死循环。18. 以下叙述正确的是( )。 [单选题] *
| do-while语句构成的循环不能用其它语句构成的循环来代替。 |
| do-while语句构成的循环只能用break语句退出。 |
| do-while语句构成的循环,在while后的表达式为非零时结束循环。 |
| do-while语句构成的循环,在while后的表达式为零时结束循环。(正确答案) |
答案解析:do-while语句构成的循环体可由其他语句构成的循环体代替,所以第一个选项不正确。do-while语句构成的循环,当使用break语句或者条件表达式的值为0时,可结束循环,所以第二和第三个选项不正确。
19. 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。
void main() {
int i,j;
for(i=0;待填空1;i++) {
j=i*10+6;
if(待填空2)
continue;
printf("%d",j);
}
} [单选题] *
| 待填空1应为i<10;待填空2应为j%3!=0(正确答案) |
| 待填空1应为i<=10;待填空2应为j%3!=0 |
| 待填空1应为i<10;待填空2应为j%3==0 |
| 待填空1应为i<=10;待填空2应为j%3==0 |
答案解析:该程序的功能是:输出100以内能被3整除且个位数为6的所有整数。在具体程序中,定义变量i存储十位数,所以i<10;定义变量j存储十位数为i、个位数为6的整数,if语句用于判断该整数是否能被3整除,不能被整除的话就跳过该次循环,执行下一次循环,所以if语句后面的判断表达式为j%3!=0或j%3。
20. 设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c>d)后n的值为( )。 [单选题] *
答案解析:&&运算符的结合方向是从左到右,所以先计算左边括号中的m=a>b表达式,其中a>b等价于5>6不成立,故表达式a>b的值为0,即为0赋给m,因此&&左边表达式的值为0,0与任何值&&运算都为0,于是不再计算&&右边表达式的值(短路),所以此时的n仍然为2。21. 以下关于运算符优先顺序的描述中正确的是( )。 [单选题] *
| 关系运算符 < 算术运算符 < 赋值运算符 < 逻辑运算符 |
| 逻辑运算符 < 关系运算符 < 算术运算符 < 赋值运算符 |
| 赋值运算符 < 逻辑运算符 < 关系运算符 < 算术运算符(正确答案) |
| 算术运算符 < 关系运算符 < 赋值运算符 < 逻辑运算符 |
答案解析:参见教材P320页的附录B运算符的优先级和结合性22. 能正确表示逻辑关系:"a≥10或a≤0"的C语言表达式是( )。 [单选题] *
| a>=10 or a<=0 |
| a>=0 | a<=10 |
| a>=10 && a<=0 |
| a>=10 ‖ a<=0(正确答案) |
答案解析:"‖"表示或的意思,"|"是按位或的意思,"&&"是并且的意思,C语言中没有"or"。23. 函数的实参传递到形参只有按值传递一种方式。 [单选题] *
答案解析:函数的实参传递到形参有值传递和地址传递两种方式。24. 在if语句的三种形式中,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。 [单选题] *
25. continue不是结束本次循环,而是终止整个循环的执行。 [单选题] *答案解析:continue是结束本次循环,直接进入到下次循环中,break用于循环语句中的作用是直接跳出本层循环。26. 函数strlen("ASDFG\\n")的值是7。 [单选题] *
答案解析:strlen求的是字符串的长度,也就是从起始到\\0的字符个数,不包括'\\0'。并且,'\\n'是C语言字符表达的转义字符形式,代表换行。也就是说,'\\n'是一个字符,而不是'\\'和'n'两个字符。27. do-while语句先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。 [单选题] *
28. 数组说明 int a[3][]={1,2,3,4,5}; 是正确的。 [单选题] *答案解析:定义二维数组时,省略之后要让计算机能够确定定义的几行几列才可以,假如省略行数,但确定了列数,计算机会根据列数以及初始化时的数据,自动确定行数,因此行数可以省略。但是如果给了行数但没有确定列数,对于初始化的数据,计算机不知道怎么划分,会出现错误。29. C语言允许用字符串的方式对数组作初始化赋值。 [单选题] *
30. 设有:int x=11;,则表达式 (x++ * 1/3) 的值是4。 [单选题] *答案解析:当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增加1,所以表达式(x++*1/3)相当于(11*1/3),值为3。下载本文