一、选择题 ( 评分标准 20 分,每小题2分 )
1. 以下选项中可作为C语言合法常量的是________。
(A) -80. ( B) -080 (C) -8e1.0 (D) -80.0e
2. 以下叙述中正确的是________。
(A) 用C程序实现的算法必须要有输入和输出操作
(B) 用C程序实现的算法可以没有输出但必须要输入
(C) 用C程序实现的算法可以没有输入但必须要有输出
(D) 用C程序实现的算法可以既没有输入也没有输出
3. 已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是________。
(A) 数组a和b的长度相同 (B) a数组长度小于b数组长度
(C) a数组长度大于b数组长度 (D) 上述说法都不对
4. 以下叙述中错误的是________。
(A) 数组名代表的是数组所占存储区的首地址,其值不可改变。
(B) 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息。
(C) 对于double类型数组,不可以直接用数组名对数组进行整体输入或输出。
(D) 可以通过赋初值的方式确定数组元素的个数。
5. 以下叙述中正确的是________。
(A) 预处理命令行必须位于源文件的开头
(B) 在源文件的一行上可以有多条预处理命令
(C) 宏名必须用大写字母表示
(D) 宏替换不占用程序的运行时间
6. 表达式 strlen(”hello”) 的值是________。
(A)4 (B)5 (C)6 (D)7
7. 设变量定义为“int a, b;”,执行语句scanf(“a=%d, b=%d”,&a, &b);时,输入________,则a和b的值都是10。
(A)10 10 (B)10, 10 (C)a=10 b=10 (D)a=10, b=10
8. 以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是_______。
(A) feof(fp) (B) ftell(fp) (C) fgetc(fp) (D) rewind(fp)
9. 以下语句或语句组中,能正确进行字符串赋值的是________。
(A) char *sp="right!"; (B) char s[10];s="right!";
(C) char s[10];*s="right!"; (D) char *sp;*sp="right!";
10. 设变量定义为“int a[4];”,则表达式________不符合C语言语法。
(A)*a (B)a[0] (C)a (D)a++
| 套数号 | 答案 |
| 3 | 1.A 2.C 3.C 4.B 5.D 6.B 7.D 8.D 9.A 10.D |
1. 一个C程序的执行是从本程序文件的第一个函数开始,到main函数结束。
2. 在C程序中,用整数0表示逻辑值“假”。
3. C语言中 while 和 do-while 循环的主要区别是do-while的循环体至少无条件执行一次。
4. 设变量定义为char s[]=“hello”,则数组s中有6个元素。
5. 对以下语句的正确理解是将5 个初值依次赋给 a[6] 到a[10]。
int a[10] = {6, 7, 8, 9, 10};
6. 若变量已正确定义,表达式x=y=1符合C语言语法。
7. 表达式!(x>0‖y>0)等价于!(x>0&&!(y>0)。
8. C语言规定简单变量作实参时,它与对应形参之间的数据传递方式是实参和形参间来回传递。
9. 在C源程序中将语句“if(x==5) y++;”误写成“if(x=5) y++;”,将导致编译错误。
10. fscanf函数的正确调用格式为:fscanf (fp, 格式字符串,输出表列); 。
| 套数号 | 答案 |
| 2 | 1. F 2. T 3. T 4. T 5. F 6. T 7. T 8. F 9. F 10. T |
1. 在C语言中,NULL的数值为________。
2. 如果定义结构体
struct student {
int id;
int age;
} * s;
则如果要表示其成员变量id,可以用________。
3. C程序是由函数构成的。其中有并且只能有________个主函数。
4. 在内存中存储“A”要占用________个字节。
5. 若定义:int a=88,*b=&a;,则printf("%d\\n",*b);的输出结果为 。
| 第2套 | (1) | 0 | (2) | s->id | (3) | 1 | (4) | 2 | (5) | 88 |
1. 假设该程序输入10个数字:1 2 3 4 5 6 7 8 9 10,则程序运行结果: 1--3--5--7--9-- 。
#include void main() { int i; int a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) { if (a[i]%2=0) /*$*/ continue; else printf("%d--",a[i]); } } 说明: 该程序中“/*$1*/”行中的语句if (a[i]%2=0) 有错误,请改正(注意:不得加行、减行、加句、减句)。 运行样例1:1 3 2 6 10 20 8 12 5 3 运行结果:1--3--5--3-- 答案:if(a[i]%2==0) 2. 以下程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,否则输出0。 #include void main() { int i, x, y=1; scanf("%d", &x); for(i=2; i>x/2; i++) /*$1*/ if(x%i==0) { y=0; break; } printf("%d\\n",y); } 说明: 该程序中“/*$1*/”行中的语句for(i=2; i>x/2; i++) 有错误,请改正(注意:不得加行、减行、加句、减句)。 运行样例1:7 运行结果:1 答案:for(i=2; i<=x/2; i++) 3. 假设该程序输入两个数据:2 3,程序运行结果为:2。 #include "stdio.h" int *fun(int *a,int *b) { int m; m=*a; m+=*b-3; return(m); /*$*/ } void main() { int x,y; int *a=&x,*b=&y; int *k; scanf("%d%d",&x,&y); k=fun(a,b); printf("%d\\n",*k); } 说明: 该程序中“/*$1*/”行中的语句return(m); 有错误,请改正(注意:不得加行、减行、加句、减句)。 运行样例1:5 4 运行结果:6 答案:return(&m); 4. 本程序功能:实现对字符数组的倒序。输入字符串:hg25DA, 输出结果: str now is AD52gh #include #include #include int main() { char str[50] ; int length = strlen(str); char * p1 = str; char * p2; scanf("%s",str); length = strlen(str); p2 = str + length; /*$*/ while(p1 < p2) { char c = *p1; *p1 = *p2; *p2 = c; ++p1; --p2; } printf("str now is :%s\\n",str); return 0; } 说明: 该程序中“/*$1*/”行中的语句p2 = str + length; 有错误,请改正(注意:不得加行、减行、加句、减句)。 运行样例1:SH87ch 运行结果:str now is:hc78HS 答案: p2 = str + length – 1; 五、程序填空(评分标准10分,每小题5分) 1. 阅读以下程序,假设输入为it6y7hh9e,请写出运行后的结果。 #include #include #include void f(char *s) { int i=0; while(s[i]!='\\0') if(isdigit(s[i])) /*$*/ else i++; } void main() { char str[80]; gets(str); f(str); puts(str); } 说明: 该程序中“/*$1*/”行是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句)。该程序功能:删除字符串中的数字字符。这里用到isdigit()函数,所以需要在前加 #include 运行样例1:i52lovey793ou 运行结果:iloveyou 答案:strcpy (s+i,s+i+1); 2. 以下程序对test.txt进行读操作,并将读出的文本输出到屏幕上。设test.txt文件原有内容:“hello,welcome to the world of C!”。 #include #include void main() { FILE *fp; char ch; fp = fopen("test.txt", "r"); if (fp == NULL) { printf("can not open test\\n"); exit(0); } ch = fgetc(fp); while(/ *$* /) { putchar(ch); ch = fgetc(fp); } fclose(fp); } 说明: 该程序中“/*$1*/”行是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句)。 运行结果1:hello,welcome to the world of C! 答案:ch != EOF 六、程序设计(评分标准20分,每小题10分) 1. 编制函数,其功能是在float类型一维数组(5个元素)中查找最大值、最小值,并将它们返回到调用程序,并输出,一维数组的数值要求在主函数中输入。 参: #include #include void find(float num[],int n,float *min,float *max); void main() { float min=1000000.0,max=0,num[5]; int i; for(i=0;i<5;i++) scanf(“%f”,&num[i]); find(num,5,&min,&max); printf("%.1f %.1f",max,min); getchar(); } void find(float num[],int n,float *min,float *max) { int i; for(i=0;i if(num[i]>*max) *max = num[i]; } } 运行样例1:1.5 12.3 42.2 0.7 14.5(输入5个数) 运行结果1:42.2 0.7 运行样例2:1.2 15.4 83.7 0.1 28.2(输入5个数) 运行结果2:83.7 0.1 2. 某一电脑外设批发店 经营品牌无线键盘鼠标套装。如果成套购买(键盘+鼠标),一次买的数量多于50套,每套450元;如果一次买的数量不足50套,每套500元;如果只买键盘,每个250元,如果只买鼠标,每个300元。 编写程序:要求在键盘中输入需要买的无线键盘和鼠标的数量,计算应付金额。 参: #include void main() { int c,t; int m; scanf("%d%d",&c,&t); if (c==t) { if (c>=50) m=c*450; else m=c*500; } else{ if (c>t) { if (t>=50) m=t*450+(c-t)*250; else m=t*500+(c-t)*250; } else { if (c>50) m=c*450+(t-c)*300; else m=c*500+(t-c)*300; } } printf("%d",m); } 运行样例1:5 6 结果1: 2800下载本文