1.对于一个正常运行的C程序,以下叙述中正确的是A 。
A)程序的执行总是从main函数开始,在main函数结束
B)程序的执行是从程序的第一个函数开始,在main函数结束
C)程序的执行是从main函数开始,在程序的最后一个函数中结束
D)程序的执行是从程序的第一个函数开始,在程序的最后一个函数中结束
2.按照C语言规定的用户标识符命名规则,不能出现在标识符中的是B 。
A)字母 B)减号 C)数字字符 D)下划线
3.下列定义变量的语句中错误的是 C 。
A)int _if; B)double If; C)char forch D)float x&;
4.以下选项中可作为C语言合法常量的是 A 。
A)-80 B)-0819 C)-1el.0 D)-168.0e
5.以下能正确定义且赋初值的语句是 。
A)int a=b=16; B)char c=97;
C)float x=x+1.8; D)double x=1.23E2.0
6.设有定义:“int a=1,b=6,c=8;”,则以下选项中值为0的表达式是 。
A)(!a==1)&&(!b==0) B)(a C)a && b D)a || b
7.下列叙述正确的是 D 。
A)break语句只能用于switch语句
B)break语句只能用于循环语句
C)break语句必须与switch语句中的case配对
D)break语句可用于switch语句和循环语句中
8.在以下给出的表达式中,与while(E)中的“(E)”不等价的表达式是 C 。
A)(E!=0) B)(E>0 || E<0) C)(E==0) D)(!E==0)
9.以下数组定义中错误的是 B 。
A)int x[][3]={0,1,2,3};
B)int x[2][3]={{1,2}, {3,4}, {5,6}};
C)int x[][3]={{1,2,3},{4,5,6}};
D)int x[2][3]= {1,2,3,4,5,6};
10.在C语言中,函数返回值的类型最终取决于 。
A)函数定义时的函数首部所说明的函数类型
B)return语句中表达式值的类型
C)调用函数时的实参的类型
D)函数定义时形参的类型
11.设已有定义:“float a;”,则以下对指针变量p进行定义且赋初值的语句中正确的是 。
A)float *p = 1068; B)int *p= (int)a;
C)float p=&a; D)float *p=&a;
12.若有说明语句:“float *p,a;”,则能通过scanf语句正确给输入项读入数据的程序段是 。
A)*p=&a; scanf("%f",p); B)*p=&a; scanf("%lf",p);
C)p=&a; scanf("%f",*p); D)p=&a; scanf("%f",p);
13.若有以下说明和定义:
union dt
{
short int a;
char b;
double c;
} data;
以下叙述中错误的是 。
A) data的每个成员起始地址都相同
B)变量data所占的内存字节数与成员c所占字节数相等
C)程序段“data.a=6;printf("%f\\n ",data.c);”输出结果为6.000000
D) data可以作为函数的实参
14.以下叙述中正确的是 。
A)在源文件的一行上可以有多条预处理命令
B)宏名必须用大写字母表示
C)宏替换不占用程序的运行时间
D)前面都是错语的
15.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为 。
A)EOF B)1 C)0 D)NULL
16.以下叙述中错误的是 。
A)改变函数形参的值,不会改变对应实参的值
B)函数可以返回地址值
C)可以给指针变量赋一个整数作为地址值
D)函数的形参可为指针类型
二、填空题(第小题2分,共14分)
1.已定义“char ch=6;int i=6,j;”,执行“j=ch || i++”以后,i的值为 。
2.设有定义语句:“int a[][8]={{0},{1},{2}};”,则数组元素a[1][2]的值为 。
3.已知int a=3,a的地址为1008,则&a= 。
4.设有定义:“FILE *fp;”,请将以下打开文件的语句补充完整,以便可以向文本文件readme.txt的最后续写内容。
fp = fopen)("readme.txt", " ");
5.已有定义:“int *p;”,请写出完整的语句,利用malloc函数使p指向一个整型的动态存储单元 。
6.声明外部变量的关键字是 extrun 。
7. int 类型的变量的值只能是所指定的若干名字之一。
三、阅读下面各程序,写出运行结果(每小题5分,共30分)
1.有以下程序:
#include int main(void) { char al = 'M', a2 = 'm', a3 = 'u'; printf("%c\\n", (al, a2, a3)); return 0; } 运行结果是: 2.有以下程序: #include int main(void) { int k = 6; while (--k) printf("%d", k -= 4); return 0; } 运行结果是: 3.有以下程序: #include int main(void) { int i = -1; do printf("%d", i); while (++i); printf("%d\\n", i); return 0; } 运行结果是: 4.有以下程序: #include double fun1(double a) { return a * a; } int fun2(double x, double y) { double a = fun1(x), b = fun1(y); return a + b; } int main(void) { int w = fun2(1.3, 2.0); printf("%d\\n", w); return 0; } 运行结果是: 5.有以下程序: #include int f(int n) { if (n == 1) return 1; else return n + f(n - 1); } int main(void) { printf("%d\\n", f(5)); return 0; } 运行结果是: 6.有以下程序: #include void point(char *p){ p += 5; } int main(void) { char b[] = {'a', 'b', 'c', 'd', 'f', 'g'}, *p = b; point(p); printf("%c\\n", *p); return 0; } 运行结果是: 四、程序填空题(每空2分,共12分) 1.以下程序的功能是:输出a、b、c三个变量中的最小值。将程序补充完整。 #include int main(void) { int a, b, c, t1, t; scanf("%d%d%d", &a, &b, &c); t = a < b ? [1] ; t = c < t ? [2] ; printf("%d\\n", t); return 0; } 2.以下程序调用invert函数按逆序重新放置a数组中元素的值。a数组中元素的值在main函数中读入。将程序补充完整。 #include #define N 10 void invert(int s[], int i, int j) { if (i < j) { int t= s[i]; s[i] = s[j]; s[j] = t; invert(s, [3] , j-1); } } int main(void) { int a[N], i; for (i = 0; i < N; i++) scanf("%d", [4] ); /* 输入a[i] *// invert(a, 0, N - 1); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\\n"); return 0; } 3.下面的程序通过函数average计算数组中各元素的平均值,将程序补充完整。 #include float average(int a[], int n) { int i; float s = 0; for (i = 0; i < n; i++) s = s + [5] ; return s / [6] ; } int main(void) { int i, a[5] = {2, 4, 6, 8, 10}; float mean; mean = average(a, 5); printf("mean=%f\\n", mean); return 0; } 五、编程题(每小题14分,共28分) 1.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。2.编程实现从键盘上输入一个字符串,把此字符串中的小写字母转换成大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。