C_7练习题
一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。)
- 以下不是 C 语言的特点的是
A. C 简洁,紧凑
B.不能够编制出功能复杂的程序
C. C语言可以直接对硬件进行操作
D. 语言 C 语言移植性好
- 不能进行++和——运算的数据类型是()
A. int 型
B. long 型
C. double 型
D. 共用体型
3、若a为int类型,且其值为3,则执行完表达式a±a=ata后, a的值是()
A. 0
B. 8
C. -12
D. 10
- 若给定条件表达式(m)?(a++):(a–),则其中表达式 m()
A. 和(m=0)等价
B. 和(m!=0)等价
C. 和(m=1)等价
D. 和(m!=1)等价
5,下列运算符中优先级最高的是()
A. <
B. 十
C. %
D.!=
6,有如下程序,输入数据: 12345后(表示回车), x的值是()
#include<stdio.h>
void main0{
int x;
scanf(“%3d”,&x);
}
A. 12345
B. 123
C. 45
D. 345
7,打印语句printf"cOMPUTERlbage");在屏幕上正确的输出形式是()
A. cOMPUTERage
B. OMPUTERage
C. COMPUTEage
D. cOMPUTEage
8,若有: inti=10; ,则执行下列程序段后,变量i的值为()。
switch(i)
{
case 9: i++; break;
case 10: i++; break;
case 11: i++; break;
default: i++;
}
A. 10
B. 11
C. 12
D. 13
9.有一函数关系如下:

下列程序能够正确表示上述关系的是()
A. y=x+1;
if (x>=0)
if (x=0) y=x;
else y=x-1;
B. y=x-1;
if (x!=0)
if (x>0) y=x+1;
else y=x;
C. if(x<=0)
if (x<0) y-x-1;
else y=x;
else y=x+1;
D. y=x;
if (x<=0)
if (x<0) y=x-1;
else y=x+1;
10,在循环体中终止本次循环使用的语句是()
A. break语句
B. continue 语句
C. end 语句
D. close语句
11.下面有关for循环的正确描述是()
A. for 循环只能用于循环次数已经确定的情况
B. for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D. for 循环体语句中,可以包含多条语句,但要用花括号括起来
- 以下程序的输出结果是()
#include <stdio.h>
void main(){ int num;
for( num=0;num<=2;num++)
printf(“%d”,num);
}
A. 1
B. 123
C. 012
D. 0123
13.在下列选项中,不正确的表达式是()
A. a=(b>c)
B. c-, ++b, a+=1
C. a=c+b>n-m=k
D. p++
- 若k 为整型,以下 while 循环()次
nt k=10; while (k=1) k=k-1
;A. 10次
B. 无限循环
c.一次不执行
D. 执行一次
15.下列程序的输出结果是()
#include <stdio.h>
struct abc {
int a, b, c
:}; void main()
{
struct abc s[2]={{1,2,3},{4,5,6}};
int t;
t=s[0].a+s[1].b;
printf(“%dn”,t);
}
A. 5
B. 6
C. 7
D. 8
16,以下对一维整形数组a的正确说明是()
A. int a(10);
B. intn=10,a[n];
C. itn;seanf(“%d”,&n);
ra[n];
D. #define N 10
int a[N];
17.岩二维数组 a 有m列,则在 a[i]i]前面的元素个数为()
A jm+i
B. imtj
C. im+j-1
D. im+j+1
18.下面程序的运行结果是
#include <stdio.h>int main() {char a[] = "programming", b[] = "language";char *pl, *p2;for (int i = 0; i < 7; i++) {if (*(pl + i) == *(p2 + i)) {printf("%c", *(pl + i));}}return 0;
}
- 在 32 位机中,如果有 char *ssl=“0123456789”,则,strlen (ssl)的值是()
A. 4
B. 10
C. 11
D. 40
20,设int占2字节,字符0的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是()
#include <stdio.h>union myUnion {int i[2];long k;char c[4];
};int main() {union myUnion r, *s = &r;s->i[0] = 0x39;s->i[1] = 0x38;printf("%c\n", s->c[0]);return 0;
}
A. 39
B. 9
C. 38
D. 8
二、程序阅读题(本大题共5小题,每小题6分,共30分。请将程序的运行结果填写在答题纸的相应位置上。)
1________
#include<stdio.h>int main() {int a, b, c, d;a = c = 0;b = 1;d = 20;if (a)d = d - 10;else if (!b)if (!c)d = 25;elsed = 15;printf("d=%d\n", d);return 0;
}
2__________
#include <stdio.h>int main() {int i, j, x = 0;for (i = 0; i < 2; i++) {x++;for (j = 0; j <= 3; j++) {if (j % 2)continue;x++;printf("x=%d\n", x);}}return 0;
}
3__________
#include <stdio.h>int sum(int k);void main() {int s = 0;for (int i = 1; i <= 10; i++) {s = sum(i);printf("s=%d\n", s);}
}int sum(int k) {int x = 0;x += k;return x;
}
4_________
#include <stdio.h>void swap(int *ptr1, int *ptr2) {int temp;temp = *ptr1;*ptr1 = *ptr2;*ptr2 = temp;
}void exchange(int *q1, int *q2, int *q3) {if (*q1 < *q2) swap(q1, q2);if (*q1 < *q3) swap(q1, q3);if (*q2 < *q3) swap(q2, q3);
}int main() {int a, b, c;a = 9, b = 3, c = 12;exchange(&a, &b, &c);printf("a=%d, b=%d, c=%d\n", a, b, c);return 0;
}
5______
#include <stdio.h>int DigitSum(int n) {if (n < 10) return n;else return n % 10 + DigitSum(n / 10);
}int main() {int m = 12345;printf("%d\n", DigitSum(m));return 0;
}
三、程序填空题(每空5分,共35分。请将答案填写在答题纸的相应位置上。)
1,程序功能:从键盘上输入一个字符串通过函数调用的方法使该字符串翻转并输出这个翻转后的字符串
#include <stdio.h>void reverse(char *s) {char *p = s, c;while (*p) p++; {___________;}while (__________) {c = *p;*p = *s;*s = c;p--;s++;}
}int main() {char s[100];scanf("%s", s);reverse(s);printf("%s", s);return 0;
}
2.下列函数int fun(int score[], int m, int aver [)的功能是:计算scofe中m个人的平均成绩,将平均成绩放在 aver 中,通过函数返回最高成绩。请填空。
int fun(int score[], int m) {int i, aver, s = 0;for (i = 0; i < m; i++) {s = s + score[i]; ————————————;___________;} for (i = 0; i < m; i++) if(________)s - score[i];return s;
}
3,下面程序是整元换零钱问题。把1元兑换成1角、2角和5角的零钱,打印所有的不同的换法。
#include <stdio.h>void main() {int x, y, z, n;__________;for (x = 0; x <= 10; x++) {for (y = 0; y <= 5; y++) {for (z = 0; z <= 2; z++) {if (——————————————————) {n++;printf("换法 %2d: 1 角 %2d 张 + 2 角 %d 张 + 5 角 %d 张\n", n, x, y, z);}}}}
}
四、编程题(本大题共3小题,每小题15分,共45分。请在答题纸的相应位置上作答。)
1.编写程序,求二维数组的最大和最小数。假设二维数组是三行四列的整型数组。
2,编程:输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。
3,输入一个正整数n(1<ns6),根据下式生成1个ntn的方阵,然后将该方阵转置(行列互换)后输出。
a[i][j]=i*n++ (0sise1, 0sjsn-1)
例如=3时
