1、二级 C 语言-4-1 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列关于栈叙述正确的是_。(分数:1.00)A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先能被删除2.下列叙述中正确的是_。(分数:1.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D.在栈中,栈中元素不会随栈底指针与栈顶指针的变化而动态变化3.某二叉树共有 7 个结点,其中叶子结点只有 1
2、 个,则该二叉树的深度为(假设根结点在第 1 层)_。(分数:1.00)A.3B.4C.6D.74.软件按功能可以分为应用软件、系统软件和支撑软件(工具软件),下面属于应用软件的是_。(分数:1.00)A.学生成绩管理系统B.C 语言编译程序C.UNIX 操作系统D.数据库管理系统5.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO 跳转C.选择(分支)结构D.重复(循环)结构6.下面描述中错误的是_。(分数:1.00)A.系统总体结构图支持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD 图是软
3、件详细设计的表示工具7.负责数据库中查询操作的数据库语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言8.一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程间的联系是_。(分数:1.00)A.1:1 联系B.1:m 联系C.m:1 联系D.m:n 联系9.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C a 1 2 d 2 1 T A B C b 2 1 c 3 1 则由关系 R 和 S 得到关系 T 的操作是_。(分数:1.00)A.自然连接B并C交D差10.定义无符号整数类为 U
4、Int,下面可以作为类 UInt 实例化值的是_。(分数:1.00)A.-369B.369C.0.369D.整数集合1,2,3,4,511.以下叙述中错误的是_。(分数:1.00)A.算法正确的程序可以有零个输出B.算法正确的程序最终一定会结束C.算法正确的程序可以有零个输入D.算法正确的程序对于相同的输入一定有相同的结果12.以下叙述中正确的是_。(分数:1.00)A.简单 C 语句必须以分号结束B.C 程序中的每一行只能写一条语句C.C 语言程序中的注释必须与语句写在同一行D.C 语句必须在一行内写完13.以下选项中关于 C 语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型
5、常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量D.所谓常量,是指在程序运行过程中,其值不能被改变的量14.以下选项中,不合法的 C 语言用户标识符是_。(分数:1.00)A.a-bB.AaBcC.a_bD._115.若变量均已被正确定义并赋值,以下合法的 C 语言赋值语句是_。(分数:1.00)A.x=n%2.5;B.x=y=5;C.x+n=i;D.x=5=4+1;16.若有定义 int a; float b; 执行 scanf(“%2d%f“, 语句时,若从键盘输入 876543.0 则 a 和 b 的值分别是_。(分数:1.00)A
6、.87 和 6.0B.876 和 543.0C.87 和 543.0D.76 和 543.017.有以下定义语句,编译时会出现编译错误的是_。(分数:1.00)A.char a=“/x2d“;B.char a=“/n“;C.char a=“a“;D.char a=“aa“;18.当变量 c 的值不为 2、4、6 时,值也为“真”的表达式是_。(分数:1.00)A.(c=2 else y=sqrt(-x);B.y=sqrt(x);if(x0) y=sqrt(-x);C.if(x=0) y=sqrt(x);if(x0) y=sqrt(-x);D.y=sqrt(x=0 x:-x);20.有以下程序
7、#include stdio.h main() int y=10; while(y-); printf(“y=%d/n“,y); 程序执行后的输出结果是_。(分数:1.00)A.y=-1B.y=0C.y=1D.while 构成无限循环21.有以下程序 #include stdio.h main() int i; for(i=1;i=40;i+) if(i+%5=0) if(+i%8=0) printf(“%d“,i); printf(“/n“); 执行后的输出结果是_。(分数:1.00)A.32B.24C.5D.4022.有以下程序 #include stdio.h main() int s;
8、 scanf(“%d“, while(s0) switch(s) case 1:printf(“%d“,s+5); case 2:printf(“%d“,s+4);break; case 3:printf(“%d“,s+3); default:printf(“%d“,s+1);break; scanf(“%d“, 运行时,若输入 1 2 3 4 5 0回车,则输出结果是_。(分数:1.00)A.66666B.66656C.6566456D.666665623.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,以下选项中错误的程序是_。(分数:1.00)A.m
9、ain() x=fun(2,10);float fun(int a,int b)B.float fun(int a,int b)main() x=fun(i,j);C.float fun(int,int);main()x=fun(2,10);float fun(int a,int b)D.main() float fun(int i,int j);x=fun(i,j);float fun(int a,int b)24.若有定义语句 int year=2009,*p= 以下不能使变量 year 中的值增至 2010 的语句是_。(分数:1.00)A.*p+=1;B.(*p)+;C.+(*p);D
10、.*p+;25.若有定义语句 int a,b,c,*p= 接着执行以下选项中的语句,则能正确执行的语句是_。(分数:1.00)A.scanf(“%d%d%d“,a,b,c);B.scanf(“%d“,p);C.scanf(“%d“,a,b,c);D.scanf(“%d“,26.以下错误的定义语句是_。(分数:1.00)A.int x4=1,2,3,1,2,3,1,2,3,1,2,3;B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;27.有以下程序 #include stdio.h main() int
11、i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:1.00)A.7 5 1B.7 5 3C.3 6 9D.3 5 728.有以下程序 #include stdio.h void fun(int *a,int n)/*fun 函数的功能是将 a 所指数组元素从大到小排序*/ int t,i,j; for(i=0;in-1;i+) for(i=i+1;jn;j+) if(aiaj) t=ai;ai=aj;aj=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; fun
12、(c+4,6); for(i=0;i10;i+) printf(“%d,“,ci); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.1,2,3,4,9,8,7,6,5,0,B.0,9,8,7,6,5,1,2,3,4,C.0,9,8,7,6,5,4,3,2,1,D.1,2,3,4,5,6,7,8,9,0,29.有以下程序(strcat 函数用以连接两个字符串) #include stdio.h #include string.h main() char a20=“ABCD/0EFG/0“,b=“IJK“; strcat(a,b); printf(“%s/n“,a); 程序
13、运行后的输出结果是_。(分数:1.00)A.ABCDIJKB.ABCDE/0FG/0IJKC.IJKD.EFGIJK30.有以下程序段 char name20; int num; scanf(“name=%s num=%d“,name, 当执行上述程序段,并从键盘输入:name=Lili num=1001回车后,name 的值为_。(分数:1.00)A.Lili num=B.name=LiliC.LiliD.name=Lili num=100131.有以下程序 #include stdio.h main() char ch=“uvwxyz“,*pc; pc=ch; printf(“%c/n“,
14、*(pc+5); 程序运行后的输出结果是_。(分数:1.00)AzB.0C.元素 ch5的地址D.字符 y 的地址32.有以下程序 #include stdio.h main() char s=“012xy“; int i,n=0; for(i=0;si!=0;i+) if(si=“a“ printf(“%d/n“,n); 程序运行后的输出结果是_。(分数:1.00)A.0B.2C.3D.533.有以下程序 #include stdio.h int fun(int n if(n=1) return 1; else return(n+fun(n-1); main() int x; scanf(“
15、%d“, x=fun(x); printf(“%d/n“,x); 执行程序时,给变量 x 输入 10,程序的输出结果是_。(分数:1.00)A.55B.54C.65D.4534.有以下程序 #include stdio.h int f(int m) static int n=0; n+=m; return n; main() int n=0; printf(“%d,“,f(+n); printf(“%d/n“,f(n+); 程序运行后的输出结果是_。(分数:1.00)A.1,1B.1,2C.2,3D.3,335.若有以下语句 typedef struct TT char c;int a4; C
16、IN; 则下面叙述中正确的是_。(分数:1.00)A.CIN 是 struct TT 类型的变量B.TT 是 struct 类型的变量C.可以用 TT 定义结构体变量D.可以用 CIN 定义结构体变量36.有以下程序 #include stdio.h struct ord int x,y; dt2=1,2,3,4; main() struct ord *p=dt; printf(“%d,“,+(p-x); printf(“%d/n“,+(p-y); 程序运行后的输出结果是_。(分数:1.00)A.2,3B.4,1C.3,4D.1,237.有以下程序 #include stdio.h #defi
17、ne SUB(a) (a)-(a) main() int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.0B.-12C.-20D.1038.有以下程序 #include stdio.h main() int a=2,b; b=a2; printf(“%d/n“,b); 程序运行后的输出结果是_。(分数:1.00)A.8B.4C.6D.239.下列关于 C 语言文件的叙述中正确的是_。(分数:1.00)A.文件由结构序列组成,可以构成二进制文件或文本文件B.文件由数据序列组成,可以构成二进制文件或文本
18、文件C.文件由一系列数据依次排列组成,只能构成二进制文件D.文件由字符序列组成,其类型只能是文本文件40.有以下程序 #include stdio.h main() FILE *fp; int a10=1,2,3,0,0,i; fp=topen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+) printf(“%d,“
19、,ai); 程序的运行结果是_。(分数:1.00)A.1,2,3,0,0,1,2,3,0,0,B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.1,2,3,0,0,0,0,0,0,0,二、程序填空题(总题数:1,分数:20.00)41.给定程序中,函数 fun 的功能是:计算下式前 n 项的和作为函数值返回。 (分数:20.00)三、程序改错题(总题数:1,分数:20.00)42.给定程序 MODI1.C 中函数 fun 的功能是:统计 substr 所指子字符串在 str 所指字符串中出现的次数。 例如,若字符串为 aaas lkaaas,子
20、字符串为 as,则应输出 2。 请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include stdio.h int fun(char *str,char *substr) int i,j,k,num=0; /*found*/ for(i=0,stri,i+) for(j=i,k=0;substrk=strj;k+,j+) /*found*/ If(substrk+1=“/0“) num+; break; return num; main() char str80,substr80; printf(“Inp
21、ut a string:“); gets(str); printf(“Input a substring:“); gets(substr); printf(“%d/n“,fun(str,substr); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.请编写一个函数 fun,它的功能是:根据以下公式求 的值(要求满足精度 0.0005,即某项小于0.0005 时停止迭代): (分数:20.00)_二级 C 语言-4-1 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列关于栈叙述正确的是_。(分数:1.00)A.栈
22、顶元素最先能被删除 B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先能被删除解析:解析 栈是先进后出的数据结构,因此栈顶元素最后入栈却最先被删除,栈底元素最先入栈却最后被删除,所以本题答案为 A。2.下列叙述中正确的是_。(分数:1.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D.在栈中,栈中元素不会随栈底指针与栈顶指针的变化而动态变化解析:解析 栈是先进后出的数据结构,在对栈操作的整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的
23、变化来完成,因此本题答案为 C。3.某二叉树共有 7 个结点,其中叶子结点只有 1 个,则该二叉树的深度为(假设根结点在第 1 层)_。(分数:1.00)A.3B.4C.6D.7 解析:解析 根据二叉树的基本性质 3:在任意一棵二叉树中,度为 0 的叶子结点总比度为 2 的结点多一个,因此本题中度为 2 的结点为 1-1=0 个,据此可以知道本题目中的二叉树的每一个结点都有一个分支,所以共 7 个结点共 7 层,即深度为 7,选择 D。4.软件按功能可以分为应用软件、系统软件和支撑软件(工具软件),下面属于应用软件的是_。(分数:1.00)A.学生成绩管理系统 B.C 语言编译程序C.UNIX
24、 操作系统D.数据库管理系统解析:解析 软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件,因此 B、C、D 都是系统软件,只有 A 是应用软件。5.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO 跳转 C.选择(分支)结构D.重复(循环)结构解析:解析 1966 年,Boehm 和 Jacopini 证明了程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式的结构化程序设计方法,因此本题答案为 B。6.下面描述中错误的是_。(分数:1.00)A.系统总体结构图支
25、持软件系统的详细设计 B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具解析:解析 详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节,因此 A 描述错误。7.负责数据库中查询操作的数据库语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.数据操纵语言 D.数据控制语言解析:解析 数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,包括查询及增加、删除、修改等操作;数据控制语言:负责数据完整性、安
26、全性的定义与检查以及并发控制、故障恢复等功能。因此本题答案为 C。8.一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程间的联系是_。(分数:1.00)A.1:1 联系B.1:m 联系C.m:1 联系D.m:n 联系 解析:解析 因为一名教师可讲授多门课程,而一门课程又能由多名教师讲授,所以教师和课程之间是多对多的关系,可以表示为 m:n,选择 D。9.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C a 1 2 d 2 1 T A B C b 2 1 c 3 1 则由关系 R 和 S 得到关系 T 的操作是_。(分数:1.
27、00)A.自然连接B并C交D差 解析:解析 关系 T 中的元组是关系 R 中有而关系 S 中没有的元组的集合,即从关系 R 中除去与关系 S中相同元组后得到的关系 T,因此做的是差的运算,选择 D。10.定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是_。(分数:1.00)A.-369B.369 C.0.369D.整数集合1,2,3,4,5解析:解析 只有 B 选项 369 可以用无符号整数来表示和存储。A 选项-369 有负号,选项 C0.369 是小数,它们都不能用无符号整数类存储。选项 D 是一个整数集合需要用数组来存储。11.以下叙述中错误的是_。(分数:1.00)
28、A.算法正确的程序可以有零个输出 B.算法正确的程序最终一定会结束C.算法正确的程序可以有零个输入D.算法正确的程序对于相同的输入一定有相同的结果解析:解析 算法有零个或多个输入,有一个或多个输出,所以 A 错误。12.以下叙述中正确的是_。(分数:1.00)A.简单 C 语句必须以分号结束 B.C 程序中的每一行只能写一条语句C.C 语言程序中的注释必须与语句写在同一行D.C 语句必须在一行内写完解析:解析 语句必须以分号结束,所以 A 正确,C 语言中书写格式自由,所以 B、C、D 错误。13.以下选项中关于 C 语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型常量和非数值
29、型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量 D.所谓常量,是指在程序运行过程中,其值不能被改变的量解析:解析 常量是在程序运行时,其值不能被改变的量,跟是否经常使用没关系,所以 C 错误。14.以下选项中,不合法的 C 语言用户标识符是_。(分数:1.00)A.a-b B.AaBcC.a_bD._1解析:解析 用户标识符命名规则为:由数字、字母或下划线组成,且首字母不能是数字,不能和关键字重复,所以 A 错误。15.若变量均已被正确定义并赋值,以下合法的 C 语言赋值语句是_。(分数:1.00)A.x=n%2.5;B.x=y=5; C.x+n=
30、i;D.x=5=4+1;解析:解析 %取余操作数只能是整数,x+n 和数值 5 不能作为赋值的左值,所以 A、C、D 错误。16.若有定义 int a; float b; 执行 scanf(“%2d%f“, 语句时,若从键盘输入 876543.0 则 a 和 b 的值分别是_。(分数:1.00)A.87 和 6.0 B.876 和 543.0C.87 和 543.0D.76 和 543.0解析:解析 本题考查了格式化输入函数 scanf()的运用。scanf()函数的一般形式为:scanf(格式控制,地址表列)。其中,“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息
31、:格式说明,由“%”和格式字符组成;普通字符,即需要原样输入的字符。“地址表列”是需要接收输入数据的一系列变量的地址。本题中的“格式控制”是“%2d%f”,其中%2d 的意思是要输入一个整数,但该整数最宽只占 2 个字符,而%f 要输入一个浮点数。而题目要求输入的是 876 和 543.0,所以scanf()函数将 87 赋给 a,6 赋给 b。17.有以下定义语句,编译时会出现编译错误的是_。(分数:1.00)A.char a=“/x2d“;B.char a=“/n“;C.char a=“a“;D.char a=“aa“; 解析:解析 D 选项不能将一个字符串赋值给一个字符变量,所以选择 D
32、。18.当变量 c 的值不为 2、4、6 时,值也为“真”的表达式是_。(分数:1.00)A.(c=2 else y=sqrt(-x);B.y=sqrt(x);if(x0) y=sqrt(-x); C.if(x=0) y=sqrt(x);if(x0) y=sqrt(-x);D.y=sqrt(x=0 x:-x);解析:解析 应该先判断 x 是正数还是负数,然后再调用 sqrt 函数,B 选项开始没有判断,所以 B 错误。20.有以下程序 #include stdio.h main() int y=10; while(y-); printf(“y=%d/n“,y); 程序执行后的输出结果是_。(分
33、数:1.00)A.y=-1 B.y=0C.y=1D.while 构成无限循环解析:解析 当 y 为 0 时,y-表达式为 0,条件为假,循环结束,执行判断条件后 y 为-1,所以选择A。21.有以下程序 #include stdio.h main() int i; for(i=1;i=40;i+) if(i+%5=0) if(+i%8=0) printf(“%d“,i); printf(“/n“); 执行后的输出结果是_。(分数:1.00)A.32 B.24C.5D.40解析:解析 本题考查了自增运算符。自增运算符“+”分为前缀和后缀两种形式。两种形式的作用效果是一样的,都是使运算分量的值加
34、1,但是它们的表达式的值不一样,前缀形式表达式的值为运算分量加 1 之后的值,而后缀形式表达式的值为运算分量加 1 之前的值。题目中使用了一个 for 循环,循环变量i 从 1 递增到 40。在循环体中有两条嵌套的 if 语句,首先判断 i+%5=0,即判断 i+的值(i 加 1 之前的值)是否能被 5 整除(判断后 i 被加 1),然后再判断+i 的值(i 加 1 之后的值)是否能被 8 整除(判断后 i被加 1),若两个条件都满足了,就输出 i 的值,只有 i=30 时,满足 i+%5=0,此时 i=31,+i%8=0 成立,此时 i=32。22.有以下程序 #include stdio.
35、h main() int s; scanf(“%d“, while(s0) switch(s) case 1:printf(“%d“,s+5); case 2:printf(“%d“,s+4);break; case 3:printf(“%d“,s+3); default:printf(“%d“,s+1);break; scanf(“%d“, 运行时,若输入 1 2 3 4 5 0回车,则输出结果是_。(分数:1.00)A.66666B.66656C.6566456 D.6666656解析:解析 第一次循环输出 65;然后 s 接收到 2,第二次循环输出 6;s 接收到 3,第三次循环输出64
36、;接收到 4,第四次循环输出 5;接收到 5,第五次循环输出 6;接收到 0,结束循环,所以答案为 C。23.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,以下选项中错误的程序是_。(分数:1.00)A.main() x=fun(2,10);float fun(int a,int b) B.float fun(int a,int b)main() x=fun(i,j);C.float fun(int,int);main()x=fun(2,10);float fun(int a,int b)D.main() float fun(int i,int j);x
37、=fun(i,j);float fun(int a,int b)解析:解析 在函数调用前,需要定义或声明,A 选项错误。24.若有定义语句 int year=2009,*p= 以下不能使变量 year 中的值增至 2010 的语句是_。(分数:1.00)A.*p+=1;B.(*p)+;C.+(*p);D.*p+; 解析:解析 +优先级高于*,*p+值为 year 下一个变量的值(如果有的话),不能满足题意,所以选择D。25.若有定义语句 int a,b,c,*p= 接着执行以下选项中的语句,则能正确执行的语句是_。(分数:1.00)A.scanf(“%d%d%d“,a,b,c);B.scanf
38、(“%d“,p); C.scanf(“%d“,a,b,c);D.scanf(“%d“,解析:解析 scanf 中参数列表,需为地址,B 符合题意,所以选择 B。26.以下错误的定义语句是_。(分数:1.00)A.int x4=1,2,3,1,2,3,1,2,3,1,2,3; B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;解析:解析 二维数组定义行数可以省略,列数不能省略,所以答案选择 A。27.有以下程序 #include stdio.h main() int i,t3=9,8,7,6,5,4,3,2
39、,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:1.00)A.7 5 1B.7 5 3C.3 6 9D.3 5 7 解析:解析 for 分别输出 t20,t11,t02分别为 3 5 7,答案选择 D。28.有以下程序 #include stdio.h void fun(int *a,int n)/*fun 函数的功能是将 a 所指数组元素从大到小排序*/ int t,i,j; for(i=0;in-1;i+) for(i=i+1;jn;j+) if(aiaj) t=ai;ai=aj;aj=t; main() int c10=1,
40、2,3,4,5,6,7,8,9,0,i; fun(c+4,6); for(i=0;i10;i+) printf(“%d,“,ci); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.1,2,3,4,9,8,7,6,5,0, B.0,9,8,7,6,5,1,2,3,4,C.0,9,8,7,6,5,4,3,2,1,D.1,2,3,4,5,6,7,8,9,0,解析:解析 在本题中,主函数在调用 fun()函数进行排序时,传递的参数是 c+4 和 6,fun()函数实现的功能是将数组 c 的第 5 个元素开始的 6 个元素依次进行从大到小的顺序排列。排序之后,数组 c 的内容变为
41、1,2,3,4,9,8,7,6,5,0。29.有以下程序(strcat 函数用以连接两个字符串) #include stdio.h #include string.h main() char a20=“ABCD/0EFG/0“,b=“IJK“; strcat(a,b); printf(“%s/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.ABCDIJK B.ABCDE/0FG/0IJKC.IJKD.EFGIJK解析:解析 strcat 函数从/0 开始往后链接,所以结果为 A。30.有以下程序段 char name20; int num; scanf(“name=%s num=
42、%d“,name, 当执行上述程序段,并从键盘输入:name=Lili num=1001回车后,name 的值为_。(分数:1.00)A.Lili num=B.name=LiliC.Lili D.name=Lili num=1001解析:解析 scanf 中 name 得到 Lili,num 得到 1001,所以结果选择 C。31.有以下程序 #include stdio.h main() char ch=“uvwxyz“,*pc; pc=ch; printf(“%c/n“,*(pc+5); 程序运行后的输出结果是_。(分数:1.00)Az B.0C.元素 ch5的地址D.字符 y 的地址解析
43、:解析 main 数输出字符串第 6 个元素对应的数据,所以答案为 A。32.有以下程序 #include stdio.h main() char s=“012xy“; int i,n=0; for(i=0;si!=0;i+) if(si=“a“ printf(“%d/n“,n); 程序运行后的输出结果是_。(分数:1.00)A.0B.2 C.3D.5解析:解析 for 循环是统计字符串中小写字符的个数,所以输出结果为 2。33.有以下程序 #include stdio.h int fun(int n if(n=1) return 1; else return(n+fun(n-1); main
44、() int x; scanf(“%d“, x=fun(x); printf(“%d/n“,x); 执行程序时,给变量 x 输入 10,程序的输出结果是_。(分数:1.00)A.55 B.54C.65D.45解析:解析 本题考查的是递归算法的分析。一个直接或间接地调用自身的算法称为递归算法。在一个递归算法中,至少要包含一个初始值和一个递归关系。本题的 fun()函数在 n 等于 1 时返回 1,而在其余情况下返回 n+fun(n-1),所以本题的递归算法可以这样来表示: fun(n)=1(n=1)(初始值) fun(n)=n+fun(n-1)(n1)(递归关系) 此时不难看出,该递归算法实现的
45、是计算 1+2+3+n,而且 n 必须大于 0,否则会陷入死循环。故题目输出的结果是 1+2+3+10=55,应该选择 A。34.有以下程序 #include stdio.h int f(int m) static int n=0; n+=m; return n; main() int n=0; printf(“%d,“,f(+n); printf(“%d/n“,f(n+); 程序运行后的输出结果是_。(分数:1.00)A.1,1B.1,2 C.2,3D.3,3解析:解析 fun(+n)返回值为 1,fun(n+)因为 fun 函数内 n 为 static 类型,仍保持原值 1,函数返回值为 2,所以答案选择 B。35.若有以下语句 typedef struct TT char c;int a4; CIN; 则下面叙述中正确的是_。(分数:1.00)A.CIN 是 struct TT 类型的变量B.TT 是 struct 类型的变量C.可以用 TT 定义结构体变量D.可以用 CIN 定义结构体变量 解析:解析 CIN