1、二级 C 语言笔试 11 及答案解析(总分:88.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.有以下程序: #include stdio.h main() int a=1,2,3,4,5,6,7,8,9,10,11,12,*p=a+5,*q=NULL; *q=*(p+5); printf(“%d %d /n“,*p,*q); 程序运行后的输出结果是( )。(分数:1.00)A.运行后报错B.66C.611D.5102.有以下程序: main() int i; for(i=0;i3;i+) switch(i) case 0: prinft(“%d“,i);
2、Case 2: prinft(“%d“,i); default: prinft(“%d“,i); 程序运行后的输出结果是( )。(分数:1.00)A.022111B.021021C.000122D.0123.若有如下定义: int x=6,y=3,z=2; 则表达式 x=y|yz while(z-0 printf(“%d,%d,%d/n“,x,y,z); 程序执行后的输出结果是( )。(分数:1.00)A.3,2,0B.3,2,-1C.4,3,-1D.5,-2,-55.设有定义:int n=0,*p=,则以下选项中,正确的赋值语句是( )。(分数:1.00)A.p=1;B.*q=2;C.q=p
3、;D.*p=5;6.设有二元关系 R 和三元关系 S,下列运算中合法的是( )。(分数:1.00)A.RUSB.RNSC.R-SD.RXS7.下面程序的功能是输出以下形式的金字塔图案: * * * * main() int i,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+)printf(“ “); for(j=1;j=( );j+)printf(“*“); printf(“/n“); 在下划线处应填入的是( )。(分数:1.00)A.iB.2*-1C.2*i+1D.i+28.设有以下定义: int a=0; double b=1.25; char c=A; #defi
4、ne d 2 则下面语句中错误的是( )。(分数:1.00)A.a+;B.b+;C.c+;D.d+;9.有以下程序: main() unsigned char a,b,c; a=0x3; b=a|0x8; c=b1; printf(“%d%d/n“,b,C); 程序运行后的输出结果是( )。(分数:1.00)A.-11 12B.-6 -13C.12 24D.11 2210.有以下程序: #include stdlib.h main() char *p,*q; p=(char*)malloc(sizeof(char)*20); q=p; scanf(“%s%s“,p,q); ptintf(“%s
5、%s/n“,p,q); 若从键盘输入 abc def回车,则输出的结果是( )。(分数:1.00)A.def defB.abc defC.abc dD.d d11.在面向对象的程序设计中,能表示类之间相似性质的机制是( )。(分数:1.00)A.继承B.封装C.分类D.动态连接12.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )。(分数:1.00)A.char s10=“abcdefg“;B.char t=“abcdefg“,*s=t;C.char s10;s=“abcdefg“;D.char s10;strcpy(s,“abcdefg“);13.在一个容量为 15 的循环队
6、列中,若头指针 front=6,尾指针 rear=14,则该循环队列中元素个数为( )。(分数:1.00)A.8B.9C.14D.1514.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0), s=a; for(b=1;b=c;b+) s=s+1; 则与上述程序段功能等价的赋值语句是( )。(分数:1.00)A.s=a+b;B.s=a+c;C.s=s+c;D.s=b+c;15.有以下程序: void f(int a,int i,int j) int t; if(ij) t=ai;ai=aj;aj=t; f(a,i+1,j-1); main() int
7、 i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;i5;i+) printf(“%d,“,aai); printf(“/n“); 执行后输出结果是( )。(分数:1.00)A.5,4,3,2,1,B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,16.软件调试的目的是( )。(分数:1.00)A.发现错误B.改正错误C.改善软件的性能D.挖掘软件的潜能17.设有如下程序段: x=2002,y=2003; printf(“%d/n“,(x,y); 则以下叙述中正确的是( )。(分数:1.00)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输
8、出B.运行时产生出错信息C.输出值为 2002D.输出值为 200318.有以下程序: main() int i,n=0; for(i=2;i5;i+) do if(i%3) continue; n+; while(!i); n+; printf(“n=%d/n“,n); 程序执行后的输出结果是( )。(分数:1.00)A.n=5B.n=2C.n=3D.n=419.有以下程序: fun (iht a,int b) if(ab)return(a); else return(b); main() int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf(“%d/
9、n“,r); 程序运行后的输出结果是( )。(分数:1.00)A.3B.6C.8D.1220.在一个 C 程序中( )。(分数:1.00)A.main 函数必须出现在所有函数之前B.main 函数可以在任何地方出现C.main 函数必须出现在所有函数之后D.main 函数必须出现在固定位置21.有以下程序: main() int a=666,b=888; printf(“%d/n“,a,b); 程序运行后的输出结果是( )。(分数:1.00)A.错误信息B.666C.888D.666,88822.在函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 又调用了函数 funA
10、,则( )。(分数:1.00)A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C 语言中不允许这样的递归调用23.有以下程序: main() int i,s=0; for(i=1;i10;i+=2) s+=i+1; ptintf(“%d/n“,s); 程序执行后的输出结果是( )。(分数:1.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和24.有以下程序: void sort(int a,int n) int i,j,t; for(i=0;in-1;i+=2) for(j=i+2;jn;j+=
11、2) if(aiaj)t=ai;ai=aj;aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(aa,10); for(i=0;i10;i+) printf(“%d“,aai); printf(“/n“); 其输出结果是( )。(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.9,2,7,4,5,6,3,8,1,10,D.1,10,3,8,5,6,7,4,9,2,25.若有定义“int*p3;”,则以下叙述中正确的是( )。(分数:1.00)A.定义了一个基类型为 int 的指针变
12、量 p,该变量具有 3 个指针B.定义了一个指针数组 p,该数组含有 3 个元素,每个元素都是基类型为 int 的指针C.定义了一个名为*p 的整型数组,该数组含有 3 个 int 类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组应具有 3 个 int 类型元素26.若以下选项中的变量已正确定义,则正确的赋值语句是( )。(分数:1.00)A.x1=26.8%3;B.1+2=x2C.x3=0x12;D.x4=1+2=3;27.有以下程序: void f(int v,int w) int t; t=v;V=W;W=t; main() int x=1,y=3,z=2; if(xy)
13、 f(x,y); else if(yz) f(y,z); else f(x,z); printf(“%d,%d%d/n“,x,y,Z); 执行后输出结果是( )。(分数:1.00)A.1,2,3B.3,1,2C.1,3,2D.2,3,128.若程序中定义了以下函数: double myadd(double a,double b) return (a+b); 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。(分数:1.00)A.double myadd(double a,;B.double myadd(double,doubl;C.double myadd
14、(double b,double ;D.double myadd(double x,double ;29.s1 和 s2 已正确定义并分别指向两个字符串。若要求:当 s1 所指字符串大于 s2 所指字符串时,执行语句 S;则以下选项中正确的是( )。(分数:1.00)A.if(sls2)S;B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s10)S;D.if(strcm(s1,s2)0)S;30.有以下程序段: int a10=1,2,3,4,5,6,7,8,9,10,*p= b=p5; b 中的值是( )。(分数:1.00)A.5B.6C.8D.931.以下程序试图把从
15、终端输入的字符输出到名为 abc.txt 的文件中,直到从终端读入字符#时结束输入和输出操作,但程序有错。 #includestdio.h main() FILE *fout; char ch; fout=fopen(abc.txt,W); ch=fgetc(stdin); while (ch!=#) fputc (ch,fout); ch=fgetc(stdin); fclose (fout); 出错的原因是( )。(分数:1.00)A.函数 fopen 调用形式错误B.输入文件没有关闭C.函数 fgetc 调用形式错误D.文件指针 stdin 没有定义32.一个算法应该具有“确定性”等 5
16、 个特性,下面对另外 4 个特性的描述中错误的是( )。(分数:1.00)A.有零个或多个输入B.有零个或多个输出C.有穷性D.可行性33.关系数据库的数据及更新操作必须遵循( )等完整性规则。(分数:1.00)A.实体完整性和参照完整性B.参照完整性和用户自定义完整性C.实体完整性和用户自定义完整性D.实体完整性、参照完整性和用户自定义完整性34.有以下程序: char fun(char x,char y) if(xy) return x; return y; main() int a=9,b=8,c=7; printf(“%c/n“,fun(fun(a,b),fun(b,c); 程序的执行
17、结果是( )。(分数:1.00)A.函数调用出错B.8C.9D.735.有以下程序: int f(int b4) int i,j,s=0; for(j=0;i4;i+) i=j; if(i2) i=3-j; s+=bij; return s; main() int a44=1,2,3,4,0,2,4,6,3,6,9,12,3,2,1,0; printf(“%d/n“,f(a); 执行后的输出结果是( )。(分数:1.00)A.12B.11C.18D.1636.下列叙述中正确的是( )。(分数:1.00)A.C 语言中既有逻辑类型也有集合类型B.C 语言中没有逻辑类型但有集合类型C.C 语言中有
18、逻辑类型但没有集合类型D.C 语言中既没有逻辑类型也没有集合类型37.一个栈的入栈序列是 1,2,3,n,其输出序列为 P1,P 2,P 3,P n,若 p1=n,则 pi为( )。(分数:1.00)A.iB.n=iC.n-i+1D.不确定38.有以下程序: #includestdio.h main() FILE *fp; int i,k=0,n=0; fp=fopen(“d1.dat“,“w“);for(i=1;i4;i+) fprintf(fp,“%d“,i); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d%d“, printf(“%d
19、 %d/n“, k,n); fclose(fp); 执行后输出结果是( )。(分数:1.00)A.1 2B.123 0C.1 23D.0 039.概要设计是软件系统结构的总体设计,以下选项中不属于概要设计的是( )。(分数:1.00)A.把软件划分成模块B.确定模块之间的调用关系C.确定各个模块的功能D.设计每个模块的伪代码40.规范化理论中分解( )主要是消除其中多余的数据相关性。(分数:1.00)A.关系运算B.内模式C.外模式D.视图41.有以下程序: #include string.h main(int argc, char *argv ) int i,len=0; for(i=1;i
20、argc;i+=2) len+=strlen(argvi); printf(“%d/n“,len); 经编译链接后生成的可执行文件是 ex.exe,若运行时输入以下带参数的命令行 ex abcd efg h3 k44 执行后输出的结果是( )。(分数:1.00)A.14B.12C.8D.642.有以下程序: main() char *p10=“abc“,“aabdfg“,“dcdbe“,“abbd“,“cd“); printf(“%d/n“, strlen(p4); 执行后输出结果是( )。(分数:1.00)A.2B.3C.4D.543.若 x 和 y 代表整型数,以下表达式中不能正确表示数学
21、关系|x-y|10 的是( )。(分数:1.00)A.abs(x-10B.x-y-10,则合法的赋值语句是( )。(分数:1.00)A.p=100;B.p=a5C.p=a2+2D.p=a+2;45.有以下程序: struct STU char num10; float score3;); main() struct stu s3=“20021“,90,95,85, “20022“,95,80,75, “20023“,100,95,90,*p=s; int i; float sum=0; for(i=0;i3,i+) sum=sum+p-scorei; printf(“%6.2f/n“,sum)
22、; 程序运行后的输出结果是( )。(分数:1.00)A.260.00B.270.00C.280.00D.285.0046.下面程序的输出结果是( )。 include stcdio.h f(int b,int n) int i,r; r = 1; for(i=0;i=n;i+) r=r*bi; return r; main() int x,a=2,3,4,5,6,7,8,9; x=f(a,3); printf(“%d/n“,x); (分数:1.00)A.720B.120C.24D.647.下列工具中,属于需求分析常用工具的是( )。(分数:1.00)A.PFDB.PADC.N-SD.DFD48
23、.一个数据元素第一个元素的存储地址是 100,每个元素的长度为 2,则第 5 个元素的地址是( )。(分数:1.00)A.110B.108C.100D.12049.有以下定义: #include stdio.h char a10,*b=a; 不能给数组 a 输入字符串的语句是( )。(分数:1.00)A.gets(B.gets(a10)C.gets( X=12; y=012; z=0l2; printf(“%d,%d,%d/n“,x,y,z); (分数:2.00)填空项 1:_57.若有如下定义: int=11,24,56,19,29,39),*t=s; 则不移动指针 t,且通过指针 t 引用
24、数组中值为29 的元素的表达式是U 【7】 /U。(分数:2.00)填空项 1:_58.执行下面程序段时输出 suet,请填空。 main() static char a=“student“; char *p; for(p=a;pU 【8】 /U;p+=2) putchar(*p); (分数:2.00)填空项 1:_59.有以下程序: #include stdio.h main() char c; while(c=getchar()!=?) putchar(-c); 程序运行时,如果从键盘输入 Y?N?回车,则输出结果为U 【9】 /U。(分数:2.00)填空项 1:_60.以下程序的输出结果
25、是U 【10】 /U。 main() int a=1,b=2; a=a+b;b=a-b;a=a-b; printf(“%d,%d/n“,a,b); (分数:2.00)填空项 1:_61.若有如下程序: main() int s=8,a=3,b=5,c=6; if(ab) s=a; a=b; b=s; if(ac) s=a; a=c;b=s); if(bc) s=b; b=c;c=s; printf(“%d,%d,%d/n“,a,b,c); 则程序运行后的输出结果是U 【11】 /U。(分数:2.00)填空项 1:_62.下面程序的输出结果是U 【12】 /U。 main() int arr10
26、,i,k=0; for(i=0;i10;i+) arri=i; for(i=0;i4;i+) k+=arri=i; printf(“%d/n“,k); (分数:2.00)填空项 1:_63.函数 YangHui 的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是,第 0 列元素和主对角线元素均为 1,其余元素为其左上方和正上方元素之和,数据的个数每行递增 1。请将程序补充完整。 #defint N 6 void YangHui(int*NN) int i,j; x00=1 for(i=1; iN; i+) xi
27、 0=U 【13】 /U=1 for(j=1;ji;j+ ) xij=U 【14】 /U; (分数:2.00)填空项 1:_64.以下 sstrcpy()函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。清填空。 void sstrcpy(char *s,char *t) while(*s+=U 【15】 /U); main() char str1100,str2=“abcdefgh“; strcpy(str1,str2); printf(%s/n“,str1); (分数:2.00)填空项 1:_65.下列程序的运行结果是U 【16】 /U。 #in
28、clude string.h char *ss(char *s) return s+strlen(s)/2; main() char *p,*str=“abcdefgh“; p=ss(str); printf(“%/n“,p); (分数:2.00)填空项 1:_66.下面程序的运行结果是U 【17】 /U。 int f( int a, int n) if(n1) return a0+f( else return a0; main () int aa3=1,2,3),s; s=f( printf(“%d/n“,s); (分数:2.00)填空项 1:_67.以下程序中给指针 p 分配 3 个 do
29、uble 型动态内存单元,请填空。 # include stdio.h main () double *p; p=(double *)malloc(U 【18】 /U); p0=1.5;p1=2.5;p2=3.5; printf(“%f%f%f/n“,p0,p1,p2); (分数:2.00)填空项 1:_68.以下程序的运行结果是U 【19】 /U。 #includestring.h typedef struct student char name10; long sno; float score; STU; main() STU a=“Zhangsan“,2001,95,b=“Shangxi
30、an“,2002,90, c=“Anhua“,2003,95,d,*p= d=a; if(strcmp(a.name,b.name)0) d=b; if(strcmp(c.name,d.name)0) d=c; printf(“%1d%s/n“,d.sno,p-name); (分数:2.00)填空项 1:_69.以下 sum 函数的功能是计算下列级数之和。 (分数:2.00)填空项 1:_二级 C 语言笔试 11 答案解析(总分:88.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.有以下程序: #include stdio.h main() int a=1,
31、2,3,4,5,6,7,8,9,10,11,12,*p=a+5,*q=NULL; *q=*(p+5); printf(“%d %d /n“,*p,*q); 程序运行后的输出结果是( )。(分数:1.00)A.运行后报错 B.66C.611D.510解析:解析 本题中首先定义了一个一维数组 a 并初始化,该数组的长度为初值的个数即 12。数组名 a代表数组的首地址,所以*p=a+5 语句使得 p 指向数组的第 6 个元素,还一个指针变量 q,q 为空指针,实际上程序并没有在内存中为指针 q 开辟存储空间。语句 *q=*(p+5);向 q 的存储空间赋值是错误的,故该程序运行后报错。2.有以下程序
32、: main() int i; for(i=0;i3;i+) switch(i) case 0: prinft(“%d“,i); Case 2: prinft(“%d“,i); default: prinft(“%d“,i); 程序运行后的输出结果是( )。(分数:1.00)A.022111B.021021C.000122 D.012解析:解析 程序中 for 循环了三次,第一次 i=O,执行 switch 语句中 case0:分支,直到遇到default 语句,退出 switch,这里共执行了 3 个输出语句分别输出 0、0、0,第二次循环 i=1,switch 语句中没有匹配的分支,故只执
33、行 default 语句输出 1,退出 switch 语句;第三次循环 i=2,从 switch 语句中的 case2:开始执行,共执行了两个输出语句输出 2、2。最后输出的结果为 000122。所以, 4 个选项中选项 C 符合题意。3.若有如下定义: int x=6,y=3,z=2; 则表达式 x=y|yz while(z-0 printf(“%d,%d,%d/n“,x,y,z); 程序执行后的输出结果是( )。(分数:1.00)A.3,2,0B.3,2,-1 C.4,3,-1D.5,-2,-5解析:解析 本题中首先定义了 3 个整型变量 x、y 和 z,并分别赋值为 0、5 和 3,wh
34、ile 循环的判定条件为 z-0,则以下选项中,正确的赋值语句是( )。(分数:1.00)A.p=1;B.*q=2;C.q=p;D.*p=5; 解析:解析 本题中首先定义了整型变量 n,其初值为 0,接着定义一个指针变量 p 并让它指向 n,然后定义了一个指向指针的指针变量 q,并让它指向 p。选项 A 中将常量 1 赋给指针 p,而 p 的值应为地址,所以不正确。选项 B 中*p 的值也应为地址,故将常量 2 复制给*p 不正确。选项 C 中将 p 的值赋给 q,使q 也指向 p 所指向的存储单元,该存储单元中存放的是常量 0,而 q 被定义为一个指向指针的指针变量,它所指向的存储单元中应该
35、存放的是地址值,故不正确。所以,4 个选项中选项 D 符合题意。6.设有二元关系 R 和三元关系 S,下列运算中合法的是( )。(分数:1.00)A.RUSB.RNSC.R-SD.RXS 解析:解析 本题中,关系 R 与 S 的表格框架不同,R 是二元关系,S 是三元关系。而在并、交、差-运算中,都要求参加运算的两个关系具有相同的属性名表,其运算结果也与它们具有相同的属性名,即表框架相同。两个不同框架的关系可以做笛卡尔积运算。7.下面程序的功能是输出以下形式的金字塔图案: * * * * main() int i,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+)prin
36、tf(“ “); for(j=1;j=( );j+)printf(“*“); printf(“/n“); 在下划线处应填入的是( )。(分数:1.00)A.iB.2*-1 C.2*i+1D.i+2解析:解析 观察可知图形共 4 行,主函数中通过一个 for5 循环循环 4 次,输出 4 行。第 1 行输出 3 个空格和 1 个*,第 2 行输出 2 个空格和 3 个*,第 3 行输出 1 个空格和 5 个*,第 4 行输出 7 个*,主函数中通过第 2 个循环控制每行的输出空格数,第 3 个 for 循环控制输出*的个数,总结规律:每行输出*的个数,总比前一行的多 2 个,且第 1 行的个数为
37、 1,可以断定每行输出*的个数组成了一个公差为 2 的等差数列,所以每行输出。的个数即该等差数列的通项,故该空白处应该填写 2*i-1,所以,4 个选项中选项B 符合题意。8.设有以下定义: int a=0; double b=1.25; char c=A; #define d 2 则下面语句中错误的是( )。(分数:1.00)A.a+;B.b+;C.c+;D.d+; 解析:解析 自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中,#defined2 定义了 d 为常数 2,d 是符号常量不能进行自加运算。故选项 D 是个不正确的语句。9.有以下程序: main() un
38、signed char a,b,c; a=0x3; b=a|0x8; c=b1; printf(“%d%d/n“,b,C); 程序运行后的输出结果是( )。(分数:1.00)A.-11 12B.-6 -13C.12 24D.11 22 解析:解析 将 a 的值用二进制表示:00000011。a 与 Ox8(二进制表示为 00001000)按位或,得到结果00001011 赋值给 b,b 的值为 11。再将 b 左移一位得到:00010110,赋值给 c,c 的值为 22。所以最后输出的 b,c 的值为 11,22。10.有以下程序: #include stdlib.h main() char
39、*p,*q; p=(char*)malloc(sizeof(char)*20); q=p; scanf(“%s%s“,p,q); ptintf(“%s%s/n“,p,q); 若从键盘输入 abc def回车,则输出的结果是( )。(分数:1.00)A.def def B.abc defC.abc dD.d d解析:解析 本题首先定义两个字符型指针变量 p 和 q,通过 malloc()函数申请 20 个字符的存储空间,并把它的首地址赋给 p,再把 p 的值赋给小 p 和 q 指向同一个存储区。在 scanf()语句中读取字符串到 p和 q 指向的字符串,先把 abc 读取到 p 指向的存储区中
40、,第一个空格是结束标记,第二个空格是分隔符,再把 def 存放到 q 指向的存储区,把原先的内容覆盖。所以 p 和 q 指向的存储区内容是 def,故最后输出的 def,def。4 个选项中 A 正确。11.在面向对象的程序设计中,能表示类之间相似性质的机制是( )。(分数:1.00)A.继承 B.封装C.分类D.动态连接解析:解析 在面向对象的程序设计中,继承是表示类之间相似性的机制。12.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )。(分数:1.00)A.char s10=“abcdefg“;B.char t=“abcdefg“,*s=t;C.char s10;s=“a
41、bcdefg“; D.char s10;strcpy(s,“abcdefg“);解析:解析 选项 A 中定义了一个字符型数组并使用字符串常量给它赋初值,故选项 A 正确。选项 B 定义了一个字符型数组 t 并初始化,然后定义了一个指针变量 s 并让它指向 t,故选项 B 正确。选项 C 先定义了一个长度为 10 的字符型数组,然后再给它赋值,这时应该分别给数组中的每个元素赋值,故选项 C不正确;选项 D 中先定义了一个长度为 10 的字符型数组 s,然后通过字符串复制函数将字符串“abcdefg”赋值给它,选项 D 正确。所以,4 个选项中选项 C 符合题意。13.在一个容量为 15 的循环队
42、列中,若头指针 front=6,尾指针 rear=14,则该循环队列中元素个数为( )。(分数:1.00)A.8 B.9C.14D.15解析:解析 设循环队列的容量为 m,如果 rearfront,则循环队列中的元素个数为 rear-front;如果 rearfront,则循环队列中的元素个数为 m+(rear-front)。根据题意,本题中,front=6,rear=14,即 rearfront,因此,循环队列中的元素个数为 rear-front=14 -6=8。本题的正确答案为 8。14.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0), s=
43、a; for(b=1;b=c;b+) s=s+1; 则与上述程序段功能等价的赋值语句是( )。(分数:1.00)A.s=a+b;B.s=a+c; C.s=s+c;D.s=b+c;解析:解析 本程序中 for 循环共循环了 c 次,而每循环一次 s 的值加 1,所以 s 的值为 s+c。最开始 s的值为 a,故 4 个选项中选项 B 符合题意。15.有以下程序: void f(int a,int i,int j) int t; if(ij) t=ai;ai=aj;aj=t; f(a,i+1,j-1); main() int i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;
44、i5;i+) printf(“%d,“,aai); printf(“/n“); 执行后输出结果是( )。(分数:1.00)A.5,4,3,2,1, B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,解析:解析 在 C 语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数 f(a,i,j)为一递归函数,其功能是当 ij 时,将数组中的元素 ai和 aj交换,然后再调用函数 f(a,i+1,j-1),将数组中 ai+1和 aj-交换,这样一直递归到数组下标
45、 i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了一个长度为 5 的数组 aa 并初始化,然后调用f(a,0,4),将数组 a 中的元素依次互换,故最后 for 循环输出的数组 aa 中各元素的值为5、4、3、2、1,所以,4 个选项中选项 A 符合题意。16.软件调试的目的是( )。(分数:1.00)A.发现错误B.改正错误 C.改善软件的性能D.挖掘软件的潜能解析:解析 软件调试的目的是发现错误的位置,并改正错误。17.设有如下程序段: x=2002,y=2003; printf(“%d/n“,(x,y); 则以下叙述中正确的是( )。(分数:1.00)A.输出语句中
46、格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 2003 解析:解析 “x,y”是一个逗号表达式,逗号运算符的结合性为从左到右,逗号表达式一般形式为“表达式 1,表达式 2,表达式 n”,整个表达式的值为表达式 n 的值,故本题是输出 y 的值 2003。所以,4 个选项中选项 D 符合题意。18.有以下程序: main() int i,n=0; for(i=2;i5;i+) do if(i%3) continue; n+; while(!i); n+; printf(“n=%d/n“,n); 程序执行后的输出结果是( )。(分数:1.00)A.n=5B.n=2C.n=3D.n=4 解析:解析 for 循环当 i=2 时,执行 do 循环。由于 if 表达式的条件为真,执行 continue 语句,结束本次循环,判断 while 循环条件为假,故退出 while 循环,执行