1、福建省二级 C 语言-4 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:20,分数:40.00)1.C 语言程序的基本单位是_。(分数:2.00)A.函数B.过程C.子例程D.子程序2.C 语言中基本数据类型有_。(分数:2.00)A.整型、实型、逻辑型B.整型、字符型、逻辑型C.整型、实型、字符型D.整型、实型、字符型、逻辑型3.依据 C 语言的语法规则,下列_是用户定义的合法标识符。(分数:2.00)A.elseB.ElseC.user$3D.5_object4.若已定义 int x=136, y; ,执行语句 y=x/10%10; 后,y 的值是_。(分
2、数:2.00)A.1B.3C.6D.05.语句 printf(“%c, %d/n“, 66, 66); 的输出结果是_。(分数:2.00)A.B,66B.B,BC.66,BD.66,666.以下程序运行结果是_。 #includestdio.h int main() int a=-1, b=3, k; k=(a=0) printf(“%d, %d, %d/n“, a, b, k); return 0; (分数:2.00)A.-1,1,1B.-1,1,0C.-1,3,1D.-1,3,07.以下四个运算符,按优先级由高到低的排列顺序是_。(分数:2.00)A.!、%、=、=B.%、!、=、=C.!
3、、%、=、=D.!、=、%、=8.执行以下程序,若从键盘输入 5,则输出结果是_。 #includestdio.h int main() int k; scanf(“%d“, switch(k) default: printf(“%d“, k); case 1: printf(“%d“, k); break; case 2: printf(“%d“, 2*k); case 3: printf(“%d“, 3*k); break; return 0; (分数:2.00)A.55B.5C.10D.159.设 E 为一表达式,以下与 dowhile(E);不等价的语句是_。(分数:2.00)A.do
4、while(!E=0);B.dowhile(E0|E0);C.dowhile(E=0);D.dowhile(E!=0);10.若已知 k 为一维整型数组,则表达式 sizeof(k)/sizeof(int)的值等于_。(分数:2.00)A.数组 k 所占用的字节数B.数组 k 中第一个元素的值C.数组 k 的元素个数D.数组 k 中非零元素的个数11.若已定义 int a3=1, 2, 5, 6, 8, 9, 11; ,则 a 数组第一维的大小是_。(分数:2.00)A.5B.4C.2D.312.若已定义 char str1=“good-bye“, str210; ,则对函数 strcpy 不
5、正确使用的是_。(分数:2.00)A.strcpy(str1, “hello11“);B.strcpy(str2, “hello12“);C.strcpy(str1, “hello13“);D.strcpy(str2, str1);13.在 C 语言中,下列叙述正确的是_。(分数:2.00)A.函数的定义允许嵌套,但函数的调用不允许嵌套B.函数的定义不允许嵌套,但函数的调用允许嵌套C.函数的定义和调用都不允许嵌套D.函数的定义和调用都允许嵌套14.以下含有宏定义的程序中,数组 a 的大小是_。 #includestdio.h #define N 10 int main() int aN, i;
6、 for(i=0; iN; i+) ai=i+2; for(i=0; iN; i+) printf(“%4d“, ai); return 0; (分数:2.00)A.9B.10C.11D.无法确定15.若有以下定义和语句:int a=4, b=3, *p, *q, *w; p= q= w=q; q=NULL; ,则以下错误的语句是_。(分数:2.00)A.*q=0;B.w=p;C.*p=a;D.*p=*w;16.若有以下定义和语句: int a35, (*p)5; p=a; 则能正确引用元素 a13的是_。(分数:2.00)A.*(*(p+3)+1)B.*(p+1)+3C.*(p+1)+3D.
7、*(*(p+1)+3)17.若有以下定义语句: struct person Int num; char name10; float weight; wei, lin; 下列叙述正确的是_。(分数:2.00)A.person 是结构类型名B.wei 是结构类型名C.struct 是结构类型名D.wei、lin 都是结构类型 person 的成员名18.若有以下说明,能正确引用“Li Ming“的方式是_。 struct stu char name20; int num; stu12=“Ma Hong“, 18, “Li Ming“, 17; struct stu*p=stu1;(分数:2.00)
8、A.stu11.nameB.p-nameC.stu1.nameD.(*p+).name19.以下关于 typedef 的叙述不正确的是_。(分数:2.00)A.使用 typedef 便于程序的通用B.用 typedef 可以增加新类型C.用 typedef 只是将已存在的类型用一个新的名称来表示D.用 typedef 可以定义各种类型名,但不能用来定义变量20.若已定义:FILE*fp; ,要在文本文件 data.txt 后追加数据,应使用语句_。(分数:2.00)A.fp=fopen(“data.txt“, “wb+“)B.fp=fopen(“data.txt“, “wt“)C.fp=fop
9、en(“data.txt“, “rb+“)D.fp=fopen(“data.txt“, “at+“)二、程序填空题(总题数:1,分数:20.00)(在每对/*/之间填写内容,完成题目的要求)(分数:20.00)(1).以下程序用以查找 1100 之间含有 3 或 7 数字的所有整数,并按每行最多打印 10 个数的形式输出。 #includestdio.h int find(/*/ 1/*/) int a, flag=0; while(y!=0) a=/*/ 2/*/; if(a=3)|(a=7) flag=1; break; y=y/10; return/*/ 3/*/; int main()
10、 int x, n=0; for(x=1; x100; x+) if(find(/*/ 4/*/) printf(“%2d“, x); n+; if(n%10=0) printf(“/n“); return 0; (分数:10.00)(2).以下程序中的 fun 函数用以输出一个数除 1 和本身外的所有因子,如无因子,则提示为素数。 #includestdio.h /*/ 1/*/fun(int x) int i, mark=0; for(i=2; i=x/2; i+) if(/*/ 2/*/=0) printf(“%2d“, i); mark=1; if(mark=0) printf(“%d
11、 is a prime number!“, x); printf(“/n“); int main() int a; printf(“Input a number:“); scanf(“%d“, fun(/*/ 3/*/); return 0; (分数:10.00)三、程序改错题(总题数:1,分数:20.00)(修改每对/*/之间存在的错误,完成题目的要求)(分数:20.00)(1).以下程序以每行最多 12 个的方式打印 101000 之间满足正序读和反序读都相同的所有数,如55、232 等。 #includestdio.h int main() /*/ 1 int i, n/*/; for(
12、i=10; i=99; i+) if(i/10=i%10) printf(“%5d“, i); n+; if(/*/ 2 n%12=0/*/) printf(“/n“); for(i=100; i=999; i+) if(/*/ 3 i/100=i/10/*/) printf(“%5d“, i); n+; if(n%12=0) printf(“/n“); return 0; (分数:10.00)(2).以下程序中 dele(char*s)函数的功能是删除字符串 s 中所有非字母字符,并将字符串压缩。例如原字符串为:abcl2ef5ghij8#%yz,处理后的字符串为:abcefghijyz。
13、#includestdio.h void dele(/*/ 1 char s /*/) int i=0, t; while(*(s+i)!=“/0“) if(/*/ 2*(s+i)“A“|(*(s+i)“Z“ while(*(s+t)!=“/0“) *(s+t)=*(s+t+1); /*/ 3 i+/*/; else i+; int main() char str1100; printf(“Enter a string:“); gets(str1); dele(str1); printf(“Now string is:%s/n“, str1); return 0; (分数:10.00)四、编程
14、题(总题数:1,分数:20.00)(补充每对/*/之间的程序段,完成题目的要求)(分数:20.00)(1).程序中的 fun()函数,用以完成如下数学表达式。 (分数:10.00)_(2).程序中 fun()函数的功能是根据整型参数 n,计算 (分数:10.00)_福建省二级 C 语言-4 (1)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:20,分数:40.00)1.C 语言程序的基本单位是_。(分数:2.00)A.函数 B.过程C.子例程D.子程序解析:2.C 语言中基本数据类型有_。(分数:2.00)A.整型、实型、逻辑型B.整型、字符型、逻辑型C.整型、实型、
15、字符型 D.整型、实型、字符型、逻辑型解析:3.依据 C 语言的语法规则,下列_是用户定义的合法标识符。(分数:2.00)A.elseB.Else C.user$3D.5_object解析:4.若已定义 int x=136, y; ,执行语句 y=x/10%10; 后,y 的值是_。(分数:2.00)A.1B.3 C.6D.0解析:5.语句 printf(“%c, %d/n“, 66, 66); 的输出结果是_。(分数:2.00)A.B,66 B.B,BC.66,BD.66,66解析:6.以下程序运行结果是_。 #includestdio.h int main() int a=-1, b=3,
16、 k; k=(a=0) printf(“%d, %d, %d/n“, a, b, k); return 0; (分数:2.00)A.-1,1,1B.-1,1,0C.-1,3,1 D.-1,3,0解析:7.以下四个运算符,按优先级由高到低的排列顺序是_。(分数:2.00)A.!、%、=、= B.%、!、=、=C.!、%、=、=D.!、=、%、=解析:8.执行以下程序,若从键盘输入 5,则输出结果是_。 #includestdio.h int main() int k; scanf(“%d“, switch(k) default: printf(“%d“, k); case 1: printf(“
17、%d“, k); break; case 2: printf(“%d“, 2*k); case 3: printf(“%d“, 3*k); break; return 0; (分数:2.00)A.55 B.5C.10D.15解析:9.设 E 为一表达式,以下与 dowhile(E);不等价的语句是_。(分数:2.00)A.dowhile(!E=0);B.dowhile(E0|E0);C.dowhile(E=0); D.dowhile(E!=0);解析:10.若已知 k 为一维整型数组,则表达式 sizeof(k)/sizeof(int)的值等于_。(分数:2.00)A.数组 k 所占用的字节数
18、B.数组 k 中第一个元素的值C.数组 k 的元素个数 D.数组 k 中非零元素的个数解析:11.若已定义 int a3=1, 2, 5, 6, 8, 9, 11; ,则 a 数组第一维的大小是_。(分数:2.00)A.5B.4C.2D.3 解析:12.若已定义 char str1=“good-bye“, str210; ,则对函数 strcpy 不正确使用的是_。(分数:2.00)A.strcpy(str1, “hello11“);B.strcpy(str2, “hello12“);C.strcpy(str1, “hello13“); D.strcpy(str2, str1);解析:13.在
19、 C 语言中,下列叙述正确的是_。(分数:2.00)A.函数的定义允许嵌套,但函数的调用不允许嵌套B.函数的定义不允许嵌套,但函数的调用允许嵌套 C.函数的定义和调用都不允许嵌套D.函数的定义和调用都允许嵌套解析:14.以下含有宏定义的程序中,数组 a 的大小是_。 #includestdio.h #define N 10 int main() int aN, i; for(i=0; iN; i+) ai=i+2; for(i=0; iN; i+) printf(“%4d“, ai); return 0; (分数:2.00)A.9B.10 C.11D.无法确定解析:15.若有以下定义和语句:i
20、nt a=4, b=3, *p, *q, *w; p= q= w=q; q=NULL; ,则以下错误的语句是_。(分数:2.00)A.*q=0; B.w=p;C.*p=a;D.*p=*w;解析:16.若有以下定义和语句: int a35, (*p)5; p=a; 则能正确引用元素 a13的是_。(分数:2.00)A.*(*(p+3)+1)B.*(p+1)+3C.*(p+1)+3D.*(*(p+1)+3) 解析:17.若有以下定义语句: struct person Int num; char name10; float weight; wei, lin; 下列叙述正确的是_。(分数:2.00)A
21、.person 是结构类型名 B.wei 是结构类型名C.struct 是结构类型名D.wei、lin 都是结构类型 person 的成员名解析:18.若有以下说明,能正确引用“Li Ming“的方式是_。 struct stu char name20; int num; stu12=“Ma Hong“, 18, “Li Ming“, 17; struct stu*p=stu1;(分数:2.00)A.stu11.name B.p-nameC.stu1.nameD.(*p+).name解析:19.以下关于 typedef 的叙述不正确的是_。(分数:2.00)A.使用 typedef 便于程序的
22、通用B.用 typedef 可以增加新类型 C.用 typedef 只是将已存在的类型用一个新的名称来表示D.用 typedef 可以定义各种类型名,但不能用来定义变量解析:20.若已定义:FILE*fp; ,要在文本文件 data.txt 后追加数据,应使用语句_。(分数:2.00)A.fp=fopen(“data.txt“, “wb+“)B.fp=fopen(“data.txt“, “wt“)C.fp=fopen(“data.txt“, “rb+“)D.fp=fopen(“data.txt“, “at+“) 解析:二、程序填空题(总题数:1,分数:20.00)(在每对/*/之间填写内容,完
23、成题目的要求)(分数:20.00)(1).以下程序用以查找 1100 之间含有 3 或 7 数字的所有整数,并按每行最多打印 10 个数的形式输出。 #includestdio.h int find(/*/ 1/*/) int a, flag=0; while(y!=0) a=/*/ 2/*/; if(a=3)|(a=7) flag=1; break; y=y/10; return/*/ 3/*/; int main() int x, n=0; for(x=1; x100; x+) if(find(/*/ 4/*/) printf(“%2d“, x); n+; if(n%10=0) print
24、f(“/n“); return 0; (分数:10.00)解析:int y y%10 flag x(2).以下程序中的 fun 函数用以输出一个数除 1 和本身外的所有因子,如无因子,则提示为素数。 #includestdio.h /*/ 1/*/fun(int x) int i, mark=0; for(i=2; i=x/2; i+) if(/*/ 2/*/=0) printf(“%2d“, i); mark=1; if(mark=0) printf(“%d is a prime number!“, x); printf(“/n“); int main() int a; printf(“In
25、put a number:“); scanf(“%d“, fun(/*/ 3/*/); return 0; (分数:10.00)解析:void x%i a三、程序改错题(总题数:1,分数:20.00)(修改每对/*/之间存在的错误,完成题目的要求)(分数:20.00)(1).以下程序以每行最多 12 个的方式打印 101000 之间满足正序读和反序读都相同的所有数,如55、232 等。 #includestdio.h int main() /*/ 1 int i, n/*/; for(i=10; i=99; i+) if(i/10=i%10) printf(“%5d“, i); n+; if(
26、/*/ 2 n%12=0/*/) printf(“/n“); for(i=100; i=999; i+) if(/*/ 3 i/100=i/10/*/) printf(“%5d“, i); n+; if(n%12=0) printf(“/n“); return 0; (分数:10.00)解析:int i, n=0 n%12=0 i/100=i%10(2).以下程序中 dele(char*s)函数的功能是删除字符串 s 中所有非字母字符,并将字符串压缩。例如原字符串为:abcl2ef5ghij8#%yz,处理后的字符串为:abcefghijyz。 #includestdio.h void del
27、e(/*/ 1 char s /*/) int i=0, t; while(*(s+i)!=“/0“) if(/*/ 2*(s+i)“A“|(*(s+i)“Z“ while(*(s+t)!=“/0“) *(s+t)=*(s+t+1); /*/ 3 i+/*/; else i+; int main() char str1100; printf(“Enter a string:“); gets(str1); dele(str1); printf(“Now string is:%s/n“, str1); return 0; (分数:10.00)解析:char*s *(s+i)“A“|(*(s+i)“Z“ if(x0) y=1+exp(x); else if(x=0) y=1; else y=log(x*x); return y;(2).程序中 fun()函数的功能是根据整型参数 n,计算 (分数:10.00)_正确答案:()解析:double y=0.0, t; int i; for(i=1; i=n; i+) t=(2.0*i-1)*(2.0*i+1)/(i*2.0); if(i%2=1) y+=t; else y-=t; return(y);