C语言程序设计试题C语言程序设计试题一、单项选择题(本题共25小题,每小题2分,共50分)1.以下正确的C语言自定义标识符是______。
A。
_1aB。
2a_C。
doD。
a.12正确答案:A2.在C语言中,错误的常数表示是_______。
A。
0LB。
-0x6aLC。
'6'D。
1.234E3.5正确答案:D3.设int a。
x=2;执行语句a=x>0?3*x:x=10;后,变量x的值是_______。
A。
1B。
2C。
6D。
10正确答案:B4.设有以下程序段:int x=2,y=2,z=0,a;a=++x||++y&&z++;printf("%d,%d,%d\n",x,y,z);执行后输出的结果是_________。
A。
2.2.0B。
3.3,1C。
3.2.0D。
3.2.1正确答案:C5.在C语言中,字符串"\\TOP\t\65\""的长度是_______。
A。
5B.7C。
8D。
12正确答案:D6.设float x,由键盘输入:12.45,能正确读入数据的输入语句是_________。
A。
scanf("%5f",&x)B。
scanf("%5d",&x);C。
scanf("%f",&x);D。
scanf("%s",&x);正确答案:C7.逗号表达式a=2*6,a*3,a+5的值是_________。
A。
12B。
17C.36D。
41正确答案:78.C语言程序中,整型常量的书写形式不包括_________。
A.二进制B.八进制C.十进制D.十六进制正确答案:D9.在C语言中,下列运算符中结合性属于自右向左的是_________。
A。
&&B。
-C.<<D。
->正确答案:C10.设int x。
则与计算︱x︱等价的表达式是_________。
A。
x>0?-x:xB。
x>0?x:-xC。
x<0?x:-xD。
x<0?-x:-x正确答案:B11.执行下面的程序段后,k的值是_______。
int k=1,n=325;do { k*=n%10;n/=10;}while(n);A。
3B。
30C。
523D。
325正确答案:B12.表达式的值为的是_________。
A。
5/5%5B。
5>2C。
4D。
0x7&&7正确答案:A13.程序段中,a/=b++ 表示 a = a / b。
b = b + 1.因为 a 初始值为 11,b 初始值为 2,所以循环执行一次后,a = 5,b = 3;再执行一次后,a = 1,b = 4.所以答案为 B。
1,4.14.C 语言中允许函数递归调用,所以 A 正确。
不允许在函数中再定义函数,所以 B 正确。
递归程序可以用非递归算法实现,所以 C 错误。
continue 语句只能用于循环语句中,不能改变程序结构,所以 D 错误。
所以答案为 C。
15.int a[2][3]={{1},{2,3}}。
表示 a 数组的第一行有一个元素为 1,第二行有两个元素为 2 和 3,因为 a[1][0] 表示 a 数组的第二行第一个元素,所以答案为 C。
2.16.int a[3][] 是错误的定义,因为必须指定第二维的大小,所以 A 错误。
float a[][4] 表示第一维大小未知,第二维大小为4,所以 B 正确。
double a[3][4] 表示 a 数组有 3 行 4 列,所以C 正确。
float a(3)(4) 是错误的定义,数组必须用 [],所以 D错误。
所以答案为 B 和 C。
17.chars[10]="abcd" 表示 s 数组有 5 个元素,因为字符串末尾有一个空字符,所以占用 6 个字节。
t[]="" 表示 t 数组有6 个元素,因为字符串末尾有一个空字符,所以占用 6 个字节。
所以答案为 B。
6 和 6.18.switch 语句中的表达式只能是整型或字符型,所以A、D 错误。
float 类型不是整型或字符型,所以 B 错误。
所以答案为 C。
19.形参的隐含存储类别是 auto,所以 A 正确。
static、extern、register 都是显式存储类别,不是隐含存储类别,所以B、C、D 错误。
所以答案为 A。
20.文件包含的命令是 #include,所以 C 正确。
#define 是宏定义命令,所以 A 正确。
#endif 和 #else 是条件编译命令,不是文件包含命令,所以 B 和 D 错误。
所以答案为 A 和 C。
21.外层循环执行 5 次,内层循环执行 4 次,所以循环体执行次数是 20.所以答案为 C.22.str2 数组只有 5 个元素,不能存储 "Hello" 这个长度为5 的字符串,所以 A 错误。
str1 是字符串常量,不能修改,所以 B 错误。
str2 = str1 是错误的赋值语句,数组不能整体赋值,所以C 错误。
正确的复制字符串的方法是strncpy(str2.str1.5)。
所以答案为无选项正确。
23.unsigned long 表示无符号长整型,d 赋值为 1000 没有问题,所以 A 正确。
float m1=m2=10.0.是错误的定义,因为m2 没有被定义,所以 B 错误。
所以答案为 A。
C语言程序的执行起点是main函数。
执行printf("%d\n",x&&y);后输出1.对应的C语言表达式为5*x/(x+y)。
函数f的参数个数是3.执行a+=a*=15;后,变量a的值是30.数组y中元素的个数是20.表达式x%y+x/y的值是3.执行printf("%d\n",strlen(s));后输出的值是6.变量i的值是5.表达式a[1][2]+a[2][3]的值是12.程序运行结果为3 3 3 3 3 3 3 3 3 3.其中,第一行输出10个3,第二行输出10个3,第三行输出10个3.includedefine N 10int main() {int a[N]。
i;printf("请输入%d个整数:\n"。
N);for (i = 0.i < N。
i++) {scanf("%d"。
&a[N-1-i])。
// 倒序输入printf("倒序输出:");for (i = 0.i < N。
i++) {printf("%d "。
a[i])。
// 正序输出printf("\n");return 0;void main()int i。
a[N];for(i=N-1.i>=0.i--)scanf("%d"。
&a[i]);for(i=0.i<N。
i++)printf("%d\t"。
a[i]);printf("\n");学生成绩的字每等级和分数范围如下:字母等级分数范围A 90~100B 80~89C 70~79D 60~69E 0~59其它字母输入错误输入字母等级之后,输出相应的分数范围。
includevoid main()char score;scanf("%c"。
&score);switch(score)case 'A': printf("A:90~100\n")。
break;case 'B': printf("B:80~89\n")。
break;case 'C': printf("C:70~79\n")。
break;case 'D': printf("D:60~69\n")。
break;case 'E': printf("E:0~59\n")。
break;default: printf("输入错误\n");五、程序修改题(本题共2小题,共10分)请在注释“ERROR”处修改程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序结构!43.用指针变量输出数值。
includevoid main()int a[ ]={1,2,3,4,5,6,7,8,9,10}。
*p;p = a。
// ERROR1printf("%d\n"。
*p + 9)。
// ERROR2,应该输出整型,改为%d44.利用函数求两个整数的最大公约数。
includevoid main()int gcd(int a。
int b);int a。
b。
abd;printf("input data a b:\n");scanf("%d %d"。
&a。
&b);abd = gcd(a。
b);printf("XXX divisor of %d and %d is %d.\n"。
a。
b。
abd);int gcd(int a。
int b)int temp;while(b。
0)temp = a % b;a = b;b = temp;return a;scanf("%d,%d",&a,&b); int abd=gcd(a,b);printf("abd=%d\n",abd);int gcd(int x,int y){int t;if(x<y) {t=x;x=y;y=t;while(y!=0){t=x%y;x=y;y=t;return x;改写后的文章如下:修正了scanf函数的参数传递错误,并在调用gcd函数时将返回值存储在变量abd中。
同时,修正了函数定义中的语法错误,将变量t的声明移动到函数开头,并在while循环中交换了x和y的值。
最终,将计算出的最大公约数返回给调用gcd函数的代码。