1、二级 C语言分类模拟题 520及答案解析(总分:51.50,做题时间:90 分钟)一、选择题(总题数:35,分数:51.50)1.若有以下定义;char a;int b; float c;double d;则表达式“a*b+d-c”值的类型为 _(分数:1.00)A.floatB.intC.charD.double2.表达式:(int)(double)9/2)-(9)%2 的值是_。(分数:1.00)A.0B.3C.4D.53.有以下程序 #include stdio.h fun(int x,int y) static int m=0,i=2; i+=m+1; m=i+x+y; return
2、m; main() int j=1,m=1,k; k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%d/n“,k); 执行后的输出结果是_。(分数:1.00)A.5,11B.5,5C.11,11D.11,54.有以下程序: #includestdio.h void fun(int*s,int n1,int n2) int i,j,t; i=n1;j=n2; while(ij) t=si;si=sj;sj=t;i+;j-; main() int a10=1,2,3,4,5,6,7,8,9,0,k; fun(a,0,3);fun(a,4,9);fu
3、n(a,0,9); for(k=0;k10;k+) printf(“%d“,ak); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.4321098765B.5678901234C.0987654321D.09876512345.设有如下定义: struct sk int m; float x; data,*q; 若要使 q指向 data中的 m域,正确的赋值语句是_。(分数:2.00)A.q=B.*q=data.m;C.q=(struct sk*)D.q=(struct sk*)data.m;6.有以下程序: #includestdio.h #includestd
4、lib.h main() FILE * fp; char ch, str5; if(fp=fopen(“file.txt“, “wb+“)=NULL) printf(“error!/n“); exit(0); ch=getchar(); while(ch!=“!“) fputc(ch, fp); ch=getchar(); rewind(fp); do fgets(str, 4, fp); puts(str); while(!feof(fp); fclose(fp); 程序运行时输入:c:/test! 回车,则程序的输出结果是_。(分数:1.00)A.c:/testB.c:/testC.c:t
5、estD.c:/test7.对下列二叉树进行中序遍历的结果是_。 (分数:1.00)A.ACBDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG8.已知字母 a的 ASCII码为十进制数 97,下面程序的输出结果是_。 #includestdio.h main() char cl,c2; c1=“a“+“6“-“0“; c2=“a“+“3“-“0“; printf(“%c,%c/n“,c1,c2);(分数:2.00)A.输出无定值B.d,eC.e,fD.g,d9.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_。(分数:1.00)A.C语言程序仅可以编译执
6、行B.C语言程序仅可以解释执行C.C语言程序既可以编译执行又可以解释执行D.以上说法都不对10.有以下程序: #includestdio.h main() int a,b; for(a=1,b=1;a=100;a+) if(b=20)break; if(b%3=1)b=b+3;continue; b=b-5; printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.10B.9C.8D.711.若以“a+”方式打开一个已存在的文件,以下叙述正确的是_。(分数:1.00)A.文件打开时,原有文件内容不被删除,可以进行添加和读操作B.文件打开时,原有文件内容不被删除,位置
7、指针移到文件开头,可以进行重写和读操作C.文件打开时,原有文件内容不被删除,位置指针移到文件中间,可以进行重写和读操作D.文件打开时,原有文件内容被删除,只可进行写操作12.若有以下定义和语句: #includestdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2); 则输出结果是_。(分数:1.00)A.10 7B.10 5C.5 5D.5 813.为了避免在嵌套的条件语句 if-else中产生二义性,C 语言中规定的 if-else配对原则是_。(分数:1.00)A.else子句与缩排位置相
8、同的 if配对B.else子句与其之前最近的未被配对的 if配对C.else子句与其之后最近的 if配对D.else子句与同一行上的 if配对14.若有以下程序 #includestdio.h #define N 4 void fun(int aN,int b,int flag) int i,j; for(i=0;iN;i+) bi=ai0; for(j=1;jN;j+) if(flag?(biaij):(biaij) bi=aij; main() int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y,1); for(i=0;
9、iN;i+)printf(“%d,yj); fun(x,y,0); for(i=0;iN;i+)printf(“%d,“,yi); printf(“/n“); 则程序的输出结果是_。(分数:2.00)A.1,5,9,13,4,8,12,16,B.4,8,12,16,1,5,9,13,C.1,2,3,4,13,14,15,16,D.13,14,15,16,1,2,3,4,15.以下叙述正确的是(分数:1.00)A.在 C语言中,只能用“/*“和“*/“对程序进行注释B.在 C语言注释语句中,“/“和“*“之间不可以有空格C.注释语句只能使用西文D.在 C程序中,注释说明只能位于一条语句的后面16
10、.若有定义语句:“int x=10;”,则表达式 x-=x+x的值为_。(分数:1.00)A.-20B.-10C.0D.1017.在高级语言中,对文件操作的一般步骤是_。(分数:1.00)A.打开文件-操作文件-关闭文件B.操作文件-修改文件-关闭文件C.读写文件-打开文件-关闭文件D.读文件-写文件-关闭文件18.有以下程序: #include stdio.h #include string.h main() char str20=“One* World“, “One* Dream!“,* p=str1; printf(“% d,“, strlen(p); printf( “% s/n“,
11、p); 程序运行后的输出结果是_。(分数:2.00)A.10, One * Dream!B.9, One * Dream!C.9, One * WorldD.10, One * World19.有以下计算公式 (分数:1.00)A.if(x=0) y=sqrt(x);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.有以下程序: #includestdio.h main() int a=7; while(a-); printf(“%d
12、/n“, a); 程序运行后的输出结果是_。(分数:1.00)A.-1B.0C.1D.721.若有定义“float a=25, b, *p=”,则下列对赋值语句“*p=a;”和“p=”的正确解释为_。(分数:2.50)A.两个语句都是将变量 a的值赋予变量 pB.*p=a是使 p指向变量 a,而 p= 给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(注:代表一个空格符)_。(分数:3.00)A.1, 2, 3回车B.1, 2, 3回车C.1, 2, 3回车D.123回车23.有以下程序: #includestdio.h void f(int b) int i; for(
13、i=2;i6;i+) bi*=2; main() int a10=1,2,3,4,5,6,7,8,9,10,i; f(a); for(i=0;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10,C.1,2,3,4,10,12,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,24.下列叙述中正确的是_。(分数:2.50)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变
14、化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定25.有以下程序: #includestdio.h int fun(int x,int n) static int sum=0,i; for(i=0;in;i+)sum+=xi; return sum; main() int a=1,2,3,4,5,b=6,7,8,9,s=0; s=fun(a,5)+fun(b,4); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.55B.50C.45D.6026.数据库系统的核心是_。(分数:2.0
15、0)A.数据模型B.数据库管理系统C.数据库D.数据库管理员27.已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量 “/101“是( )。(分数:1.00)A.字符 AB.字符 aC.字符 eD.非法的常量28.下列选项中,能正确定义数组的语句是_。(分数:1.00)A.int num02008;B.int num;C.int N=2008;int numN;D.#define N 2008int numN;29.在软件设计中不使用的工具是_。(分数:2.50)A.系统结构图B.PAD图C.数据流图(DFD 图)D.程序流程图30.以下
16、选项中正确的语句组是_。(分数:1.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“;C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;31.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(分数:1.00)A.安全性B.一致性C.可理解性D.合理性32.有以下程序 main() char a=“a“,“b“,“c“,“d“,“e“,“f“,“g“,“h“,“/0“;int i,j; i=sized(a);j=stden(a); printf(“%d,%d/n”,i,j); 程序运行后的
17、输出结果是(分数:1.00)A.9,9B.8,9C.1,8D.9,833.语句“pfintf(“a/bhow“are“y/bou/n“);”的输出结果是_。(分数:2.50)A.a/bhow“are“y/bouB.a/bhow“are“y/bouC.how“are“youD.ahow“are“y/bou34.下列定义数组的语句中,正确的是_。(分数:2.00)A.int x;B.int N=10;int xN;C.int x010;D.#define N 10int xN;35.下列叙述中正确的是_。(分数:2.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中
18、,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定二级 C语言分类模拟题 520答案解析(总分:51.50,做题时间:90 分钟)一、选择题(总题数:35,分数:51.50)1.若有以下定义;char a;int b; float c;double d;则表达式“a*b+d-c”值的类型为 _(分数:1.00)A.floatB.intC.charD.double 解析:2.表达式:(int)(double)9/2)-(9)%2 的值是_。(分数:1.00)A.0B.3 C.4D.
19、5解析:解析 本题考查了强制类型转换。9/2 为 double型,所以结果为 4.5,又强制转换为整型,所以结果为 4。9%2 为取余运算,结果为 1。最终结果 4-1=3。3.有以下程序 #include stdio.h fun(int x,int y) static int m=0,i=2; i+=m+1; m=i+x+y; return m; main() int j=1,m=1,k; k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%d/n“,k); 执行后的输出结果是_。(分数:1.00)A.5,11 B.5,5C.11,11D.11
20、,5解析:解析 声明静态局部变量:函数调用结束后,其占用的存储单元不释放,在下次该函数调用时,该变量保留上一次函数调用结束时的值。本题子函数 fun中的变量 i和 m均为静态局部变量。因此第一次调用 fun函数,返回 m的值为 5,第二次再调用 fun函数时,i 的值为 3,m 的值已经是 5了,所以执行i+=m+1,i 的值变为 9,m=i+x+y=9+1+1=11,故本题答案为 A。4.有以下程序: #includestdio.h void fun(int*s,int n1,int n2) int i,j,t; i=n1;j=n2; while(ij) t=si;si=sj;sj=t;i+
21、;j-; main() int a10=1,2,3,4,5,6,7,8,9,0,k; fun(a,0,3);fun(a,4,9);fun(a,0,9); for(k=0;k10;k+) printf(“%d“,ak); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.4321098765B.5678901234 C.0987654321D.0987651234解析:解析 该程序首先给一维数组赋值,然后三次调用 fun函数,其中 fun(a,0,3);功能是将一维数组中第 1个元素和第 4个元素互换,第 2个元素和第 3个元素互换;其中 fun(a,4,9);功能是将
22、一维数组中第 5个元素和第 10个元素互换,第 6个和第 9个元素互换,第 7个元素和第 8个元素互换;其中fun(a,0,9);功能是将将一维数组中第 1个元素和第 10个元素互换,第 2个元素和第 9个元素互换依此类推。因此 B选项正确。5.设有如下定义: struct sk int m; float x; data,*q; 若要使 q指向 data中的 m域,正确的赋值语句是_。(分数:2.00)A.q=B.*q=data.m;C.q=(struct sk*) D.q=(struct sk*)data.m;解析:6.有以下程序: #includestdio.h #includestdli
23、b.h main() FILE * fp; char ch, str5; if(fp=fopen(“file.txt“, “wb+“)=NULL) printf(“error!/n“); exit(0); ch=getchar(); while(ch!=“!“) fputc(ch, fp); ch=getchar(); rewind(fp); do fgets(str, 4, fp); puts(str); while(!feof(fp); fclose(fp); 程序运行时输入:c:/test! 回车,则程序的输出结果是_。(分数:1.00)A.c:/test B.c:/testC.c:te
24、stD.c:/test解析:解析 分析程序可知,程序是首先以可写方式打开文件 file.txt,然后使用 getchar()逐个读入输入的字符并写到文件 file.txt中,直到输入的字符是“!“,停止写入文件;然后使用 rewind()将文件指针定位到文件开头位置,再调用 fgets()函数,将文件中的内容读入 str字符数组中,再用 puts()输出,直到遇到文件结尾符,关闭文件。其中写入文件时是逐个写入的,而读出时调用 fgets(str, 4, fp),由此可知 fgets至多读取 3个字符到 str,然后在结尾自动加上“/0“字符,作为字符串的结尾标志,使用puts()输出时,输出
25、3个字符并完成换行,当输入 c:/test! 回车时,输出结果如下: c:/te st 故答案为 A选项。7.对下列二叉树进行中序遍历的结果是_。 (分数:1.00)A.ACBDFEG B.ACBDFGEC.ABDCGEFD.FCADBEG解析:8.已知字母 a的 ASCII码为十进制数 97,下面程序的输出结果是_。 #includestdio.h main() char cl,c2; c1=“a“+“6“-“0“; c2=“a“+“3“-“0“; printf(“%c,%c/n“,c1,c2);(分数:2.00)A.输出无定值B.d,eC.e,fD.g,d 解析:9.计算机高级语言程序的运
26、行方法有编译执行和解释执行两种,以下叙述中正确的是_。(分数:1.00)A.C语言程序仅可以编译执行 B.C语言程序仅可以解释执行C.C语言程序既可以编译执行又可以解释执行D.以上说法都不对解析:解析 解释执行是计算机语言的一种执行方式。由解释器现场解释执行,不生成目标程序。如BASIC便是解释执行。一般解释执行效率较低,低于编译执行。而 C语言程序是经过编译生成目标文件然后执行的,所以 C语言程序是编译执行。10.有以下程序: #includestdio.h main() int a,b; for(a=1,b=1;a=100;a+) if(b=20)break; if(b%3=1)b=b+3
27、;continue; b=b-5; printf(“%d/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.10B.9C.8 D.7解析:解析 首先注意 for循环的控制条件,当 b=20 或者 a100 则跳出 for循环,也即 b20 且a=100 时执行 for循环。第一次进入循环 a=1,b=1 均满足循环条件,但 b%3=1条件满足,故执行b=b+3,得到 b=4,注意有 continue,所以后面语句不执行,直接跳转到 a+这个语句,所以第一次循环完之后 a=2,b=4;进入第二轮循环,b%3=1 也是满足的,故再次 b=b+3,此轮循环执行之后 a=3,b=7,进入下
28、一轮。此后和前面循环同理,都是 b%3=1满足,因为每次都是加 3,而之后又去模 3,且都跳过 for后面语句直接执行 a+,所以,一直循环到 b=22跳出 for循环,此时 a为 8。综合起来就是,每次循环 b增加 3,a 增加 1,且当 b22 时跳出循环,结束程序。所以 b从 1增加到 22,有(22-1)/3 =7,所以a=1+7=8。因此 C选项正确。11.若以“a+”方式打开一个已存在的文件,以下叙述正确的是_。(分数:1.00)A.文件打开时,原有文件内容不被删除,可以进行添加和读操作 B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可以进行重写和读操作C.文件打开时
29、,原有文件内容不被删除,位置指针移到文件中间,可以进行重写和读操作D.文件打开时,原有文件内容被删除,只可进行写操作解析:解析 C 语言文件打开时,打开方式“a+”表示打开一个文本文件,从文件开始位置读,在文件尾部添加数据,如果指定的文件不存在,系统将使用调用 fopen()时指定的文件名创建一个新的文件,如果指定的文件存在,那么文件原有内容将被保存,新的数据追加到原有文件之后,本题答案为 A。12.若有以下定义和语句: #includestdio.h char s110=“abcd!“,*s2=“/n123/“; printf(“%d%d/n“,strlen(s1),strlen(s2);
30、则输出结果是_。(分数:1.00)A.10 7B.10 5C.5 5 D.5 8解析:解析 strlen 函数返回字符串的长度,求字符串长度时,遇到结束标识“/0“为止,但是长度不包括结束标识。字符数组 s1的后 5个元素没有赋值,都为“/0“,即“abcd!“后为“/0“,所以 strlen(s1)的值为 5。字符指针 s2所指向的字符串中,/n 为转义字符换行符,表示 1个字符,/也为转义字符,代表/,也是 1个字符,其后为字符串结束标识“0“;所以 strlen(s2)的值也为 5。因此 C选项正确。13.为了避免在嵌套的条件语句 if-else中产生二义性,C 语言中规定的 if-el
31、se配对原则是_。(分数:1.00)A.else子句与缩排位置相同的 if配对B.else子句与其之前最近的未被配对的 if配对 C.else子句与其之后最近的 if配对D.else子句与同一行上的 if配对解析:14.若有以下程序 #includestdio.h #define N 4 void fun(int aN,int b,int flag) int i,j; for(i=0;iN;i+) bi=ai0; for(j=1;jN;j+) if(flag?(biaij):(biaij) bi=aij; main() int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13
32、,14,15,16,yN,i; fun(x,y,1); for(i=0;iN;i+)printf(“%d,yj); fun(x,y,0); for(i=0;iN;i+)printf(“%d,“,yi); printf(“/n“); 则程序的输出结果是_。(分数:2.00)A.1,5,9,13,4,8,12,16, B.4,8,12,16,1,5,9,13,C.1,2,3,4,13,14,15,16,D.13,14,15,16,1,2,3,4,解析:解析 flag 为 1求出每行的最小值,flag 为 0求出每行的最大值,所以选择 A。15.以下叙述正确的是(分数:1.00)A.在 C语言中,只
33、能用“/*“和“*/“对程序进行注释B.在 C语言注释语句中,“/“和“*“之间不可以有空格 C.注释语句只能使用西文D.在 C程序中,注释说明只能位于一条语句的后面解析:解析 在 C语言程序段中可以对程序进行注释,注释部分必须用“/*”和“*/”括起来,其中,“/”和“*”之间不可有空格,注释可以是西文,也可以是中文,注释说明语同步以出现在程序的任意位置。综上所述,本题的答案为 B)。16.若有定义语句:“int x=10;”,则表达式 x-=x+x的值为_。(分数:1.00)A.-20B.-10 C.0D.10解析:解析 表达式 x=-x+x可以写成 x=x-(x+x),所以 x的值为-1
34、0。17.在高级语言中,对文件操作的一般步骤是_。(分数:1.00)A.打开文件-操作文件-关闭文件 B.操作文件-修改文件-关闭文件C.读写文件-打开文件-关闭文件D.读文件-写文件-关闭文件解析:18.有以下程序: #include stdio.h #include string.h main() char str20=“One* World“, “One* Dream!“,* p=str1; printf(“% d,“, strlen(p); printf( “% s/n“, p); 程序运行后的输出结果是_。(分数:2.00)A.10, One * Dream! B.9, One *
35、Dream!C.9, One * WorldD.10, One * World解析:解析 p 是指向二维字符数组第二行“One Dream!”的数组指针,所以长度是 10,打印输出的也是该字符串。19.有以下计算公式 (分数:1.00)A.if(x=0) y=sqrt(x);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.有以下
36、程序: #includestdio.h main() int a=7; while(a-); printf(“%d/n“, a); 程序运行后的输出结果是_。(分数:1.00)A.-1 B.0C.1D.7解析:解析 此题考查 a-和-a 之间的区别,当 while(a-)为真循环执行,a-是执行再减 1,所以答案选择 A。21.若有定义“float a=25, b, *p=”,则下列对赋值语句“*p=a;”和“p=”的正确解释为_。(分数:2.50)A.两个语句都是将变量 a的值赋予变量 pB.*p=a是使 p指向变量 a,而 p= 给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式
37、中错误的是(注:代表一个空格符)_。(分数:3.00)A.1, 2, 3回车B.1, 2, 3回车C.1, 2, 3回车D.123回车 解析:解析 本题考查的是格式化输入函数 scanf()基本用法。使用该语句时,要求除格式控制符以外的字符都要原样输入,“,”为非格式符,要原样输入。选项 D中没有输入非格式符“,”,所以是不正确的。23.有以下程序: #includestdio.h void f(int b) int i; for(i=2;i6;i+) bi*=2; main() int a10=1,2,3,4,5,6,7,8,9,10,i; f(a); for(i=0;i10;i+) pri
38、ntf(“%d,“,ai); 程序的运行结果是_。(分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10, C.1,2,3,4,10,12,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,解析:解析 数组名是常量,表示的是数组首元素的地址。当执行 f(a)的时候,由于传递的是首地址,相当于直接对数组 a进行操作,所以从数组 a的第 3个元素 a2到元素 a5,每个元素值扩大两倍,因此 B选项正确。24.下列叙述中正确的是_。(分数:2.50)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循
39、环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定 解析:解析 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构,因此 A错误;在循环队列中需要队头与队尾两个指针来共同反映队列中元素的动态变化情况,因此 B与 C错误,故本题答案为 D。25.有以下程序: #includestdio.h int fun(int x,int n) static int sum=0,i; for(i=0;in;i+)sum+=xi; return sum; main() int a=1,
40、2,3,4,5,b=6,7,8,9,s=0; s=fun(a,5)+fun(b,4); printf(“%d/n“,s); 程序执行后的输出结果是_。(分数:1.00)A.55B.50C.45D.60 解析:解析 内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。fun(a,5)的值是 15,再次调用后 sum=15,所以 fun(b,4)=45,s=45+15=60。因此 D选项正确。26.数据库系统的核心是_。(分数:2.00)A.数据模型B.数据库管理系统 C.数据库D.数据库管理员解析:解析 数据库管理系统是负责数据库中
41、的数据组织和数据操纵数据维护、控制及保护的数据服务。它是一种系统软件,是数据库系统的核心。27.已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量 “/101“是( )。(分数:1.00)A.字符 A B.字符 aC.字符 eD.非法的常量解析:解析 本题的关键是八进制 101的十进制是多少。八进制的 101转换为十进制为 65,也就是字符A的 ASCII码。故应该选择 A。28.下列选项中,能正确定义数组的语句是_。(分数:1.00)A.int num02008;B.int num;C.int N=2008;int numN;D.#de
42、fine N 2008int numN; 解析:解析 通过 define进行宏定义,将 N赋值为 2008,然后定义一个数组,整型长度为 2008,所以本题答案为 D。29.在软件设计中不使用的工具是_。(分数:2.50)A.系统结构图B.PAD图C.数据流图(DFD 图) D.程序流程图解析:解析 系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。PAD 图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图(DFD 图)是结构化分析方法中使用的工具,它以图形的
43、方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,因此它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以本题答案为 C。30.以下选项中正确的语句组是_。(分数:1.00)A.char*s;s=“BOOK!“; B.char*s;s=“BOOK!“;C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;解析:解析 字符指针可以用字符串直接赋值,字符数组不可以。所以选择 A。31.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(分数:1.00)A.安全性B.一致性C.可理解性 D.合
44、理性解析:解析 结构化程序设计方法设计出的程序具有明显的优点。其一,程序易于理解、使用和维护;其二,提交了编程工作的效率,降低了软件开发成本。其中,人们更重视前者。32.有以下程序 main() char a=“a“,“b“,“c“,“d“,“e“,“f“,“g“,“h“,“/0“;int i,j; i=sized(a);j=stden(a); printf(“%d,%d/n”,i,j); 程序运行后的输出结果是(分数:1.00)A.9,9B.8,9C.1,8D.9,8 解析:解析 本题中首先定义了字符数组 a,由于它的长度省略,所以其长度由初值个数确定,为 9。接着将 sizeof()函数返
45、回的值赋给 i(sizeof()函数的作用是返回运算对象占用的字符数),所以 i值为 9;然后将 strlen()函数的返回值赋给 j(strlen()函数的作用是返回字符串的长度,不包括字符串的结束标记“/0“),所以 j值为 8,所以最后输出的 i, j 的值为 9,8。33.语句“pfintf(“a/bhow“are“y/bou/n“);”的输出结果是_。(分数:2.50)A.a/bhow“are“y/bouB.a/bhow“are“y/bouC.how“are“you D.ahow“are“y/bou解析:34.下列定义数组的语句中,正确的是_。(分数:2.00)A.int x;B.i
46、nt N=10;int xN;C.int x010;D.#define N 10int xN; 解析:解析 定义数组长度必须为常数,所以 D正确。35.下列叙述中正确的是_。(分数:2.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定 解析:解析 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构,因此 A错误;在循环队列中需要队头与队尾两个指针来共同反映队列中元素的动态变化情况,因此 B与 C错误,故本题答案为 D。