资源描述
9月全国计算机级别考试二级C语言笔试试题
一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)
(1)下列数据构造中,属于非线性构造是(C)
A)循环队列 B) 带链队列 C) 二叉树 D)带链栈
(2)下列数据成果中,可以根据“优秀后出”原则存取数据是(B)
A) 循环队列 B) 栈 C)队列 D)二叉树
(3)对于循环队列,下列论述中对旳是(D)
A)队头指针是固定不变
B)队头指针一定不小于队尾指针
C)队头指针一定不不小于队尾指针
D)队头指针可以不小于队尾指针,也可以不不小于队尾指针
(4)算法空间复杂度是指(A)
A)算法在实行过程中所需要计算机寄存空间
B)算法所解决数据量
C)算法程序中语句或指令条数
D)算法在实行过程中所需要临时工作单元数
(5)软件设计中划分模块一种准则是(B)
A) 低内聚低耦合
B) 高内聚低耦合
C) 低内聚高耦合
D) 高内聚高耦合
(6)下列选项中不属于构造化程序设计原则是(A)
A) 可封装
D) 自顶向下
C) 模块化
D) 逐渐求精
(7)软件具体设计产生图如下:
该图是(C)
A) N-S图
B) PAD图
C) 程序环节图
D) E-R图
(8)数据库管理系统是(B)
A)操作系统一部分
B) 在操作系统支持下系统软件
C) 一种编译系统
D) 一种操作系统
(9)在E-R图中,用来表达实体联系图形是(C)
A) 椭圆图
B) 矩形
C) 菱形
D) 三角形
(10)有三个关系R,S和T如下:
其中关系T由关系R和S通过某种操作得到,该操作为(D)
A) 选择
B) 投影
C) 交
D) 并
(11)如下论述中对旳是
A)程序设计任务就是编写程序代码并上机调试
B)程序设计任务就是拟定所用数据构造
C)程序设计任务就是拟定所用算法
D)以上三种说法所有不完整
解析:选D。原文见高教版二级教程P2,程序设计任务涉及A、B、c及有关文档。
(12)如下选项中,能用作顾客标记符是
A)void
B)8_8
C)_0_
D)unsigned
解析:选C。标记符由字母或下划线开头,核心字不能用作标记符。
A、D为核心字,B以数字开头,因此所有是错误。
(13)阅读如下程序
#include <stdio.h>
main()
{ int case; float printF;
printf(“请输入2个数:”);
scanf(“%d %f”,&case,&pjrintF);
printf(“%d %f\n”,case,printF);
}
该程序编译时产生错误,其出错因素是
A)定义语句出错,case是核心字,不能用作顾客自定义标记符
B)定义语句出错,printF不能用作顾客自定义标记符
C)定义语句无错,scanf不能作为输入函数使用
D)定义语句无错,printf不能输出case值
解析:选A。case是核心字,核心字不能用作标记符。C语言核心字见教材附录。
(注:标记符辨别大小写,printf是核心字,可用作标记符,固然printF也可以)
(14)表达式:(int)((double)9/2)-(9)%2值是
A)0 B)3 C)4 D)5
解析:选B。考点为运算符优先级。
括号>强制类型转换int>乘除>加减
(int)((double)9/2)一(9)%2=(int)(9.0/2)-(9)%2=(int)(4.5)-1=3
(15)若有定义语句:int x=10;,则表达式x-=x+x值为
A)-20 B)-10 C)0 D)10
解析:选B。考点为复合赋值运算符。(注意x+x作为一种整体)
x-=x+x→x=x-(x+x) →x=-x=-10
(16)有如下程序
#include <stdio.h>
main()
{ int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b);
}
程序运营后输出成果是
A)0,0 B)1,0 C)3,2 D)1,2
解析:选D。考点为赋值表达式使用,赋值表达式值和变量值是同样。
printf在输出赋值表达式值时,先赋值再输出。
b=a+b=l+0=1 a=2*b=2
17)设有定义:int a=1,b=2,c=3;,如下语句中实行效果和其他三个不同样是
A)if(a>b) c=a,a=b,b=c;
B)if(a>b) {c=a,a=b,b=c;}
C)if(a>b) c=a;a=b;b=c;
D)if(a>b) {c=a;a=b;b=c;}
解析:选C。考点为if句和逗号表达式使用。
逗号运算符也称为顺序求值运算符,依次实行逗号表达式中每个表选式。逗号表达式是一种整体,复合语句也是一种整体,当a>b时,A、B、D中if后语句可以作为整体被实行,把a、b值互换。C等价语句形式为:
if(a>b) c=a;
a=b;b=c; 不能实现a、b值互换。
(18)有如下程序
#include <stdio.h>
main()
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{ default: c+=k
case 2: c++;break;
case 4: c+=2;break;
}
printf(“%d\n”,c);
}
程序运营后输出成果是
A)3 B)5 C)7 D)9
解析:选A。考点为switch语句使用。
switch语句中case和default顺序可以任意,不影响程序成果。switch语句在循环中被实行2次。
k=l时, c+=k c=0+1=1 无break,继续实行
c++ c=2 有break,终结switch
k=2时,c++ c=3 有break,终结switch ,循环结束,输出c。
(19)如下程序段中,和语句:k=a>b?(b>c?1:0):0;功能相似是
A)if((a>b)&&(b>c)) k=1;
else k=0;
B)if((a>b)||(b>c) k=1;
else k=0;
C)if(a<=b) k=0;
else if(b<=c) k=1;
D)if(a>b) k=1;
else if(b>c) k=1;
else k=0;
解析:选A。考点为条件表达式使用。
语句功能为:
a>b且b>c时,k=l
a>b且b<=e时,k=0
a<=b时,k=0
符合语句功能只有A。
20)有如下程序
#include <stdio.h>
main()
{ char s[]={“012xy”};int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>=’a’&&s[i]<=’z’) n++;
printf(“%d\n”,n);
}
程序运营后输出成果是
A)0 B)2 C)3 D)5
解析:选B。考点为字符数组使用。C语言用字符数组寄存字符串,用\O作为结束标志。(\0是ASCII码值为0字符,也即数值0)程序功能为记录字符数组s中小写字符个数,n为计数器。
(21)有如下程序
#include <stdio.h>
main()
{ int n=2,k=0;
while(k++&&n++>2);
printf(“%d %d\n”,k,n);
}
程序运营后输出成果是
A)0 2 B)1 3 C)5 7 D)1 2
解析:选D。考点为while语句使用。该while(k++&&n++>2);循环体为空语句,因此程序是输出退出while循环后k、n值。k++为先使用k值再增1。先使用k值,k=0,逻辑和成果为。,第一次实行while循环时条件就不成立,直接退出循环,k值增1,n值没有任何变化。
(22)有如下定义语句,编译时会浮现编译错误是
A)char a=’a’;
B)char a=’\n’;
C)char a=’aa’;
D)char a=’\x2d’;
解析:选C。考点为字符型变量赋值和基本概念。字符型为单引号括起一种字符。
A为原则字符型赋值措施,
B为把一种转义字符赋值给字符变量,也是对旳。
C为单引号括起两个字符,不符合字符型定义。
D表面看上去是错误,其实是对旳,也是一种转义字符。
‘/x2d’表达ASCII码值为16进制数2d字符,即‘-’号。
(23)有如下程序
#include <stdio.h>
main()
{ char c1,c2;
c1=’A’+’8’-‘4’;
c2=’A’+’8’-‘5’;
printf(“%c,%d\n”,c1,c2);
}
已知字母AASCII码为65,程序运营后输出成果是
A)E,68 B)D,69 C)E,D D)输出无定值
解析:选A。考点为字符型数据使用和基本知识。字符型数据在内存中寄存是字符ASCII码值,可以作为整型数据来解决。英文字符和数字在ASCII码表中是按顺序排列。 c1=‘A’+‘8'-‘4’=‘A’+‘4’=E c2=‘A’+‘8’-‘5’=‘A’+3=‘D’
(24)有如下程序
#include <stdio.h>
void fun(int p)
{ int d=2;
p=d++; printf(“%d”,p);}
main()
{ int a=1;
fun(a); printf(“%d\n”,a);}
程序运营后输出成果是
A)32 B)12 C)21 D)22
解析:选C。考点为函数参数传播。c语言中函数参数传播是值传播,是把实参值传给形参,是单向传播,形参变化不会影响到实参值。程序中,把实参a值传给形参p,p=1,然后p=d++,再次赋值后p=2.输出p值2。返回到主程序中,输出a值1。(形参p变化不会影响到实参a值,a值仍为1)
(25)如下函数findmax拟实目前数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能
#define MIN -
int findmax (int x[],int n)
{ int i,max;
for(i=0;i<n;i++)
{ max=MIN;
if(max<x[i]) max=x[i];}
return max;
}
导致错误因素是
A)定义语句int i,max;中max未赋初值
B)赋值语句max=MIN;中,不应给max赋MIN值
C)语句if(max<x[i]) max=x[i];中鉴定条件设立错误
D)赋值语句max=MIN;放错了位置
解析:选D。考点为求最大值算法。max=MIN.不应当放在循环内,而应当放到for循环前面。先让max取最小整数,这样第1次循环时max就可以获得第1个数组元素值,然后在循环中把背面数组元素依次和max比较,让max取大值。
(26)有如下程序
#include <stdio.h>
main()
{ int m=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf(“%d,%d,%d,%d\n”,m,n,*p,*q);
}
程序运营后输出成果是
A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2
解析:选B。考点为指针基本概念。
p、q为指针,初始化时p指向m,q指向n。实行r=p; p:q;q:r;后,p和q值互换,从而p指向n,q指向m。指针变化不会影响m、n值,最后*p和*q值为n、m值。
(27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误赋值是
A)p=a
B)q[i]=a[i]
C)p=a[i]
D)p=&a[2][1]
解析:选A。考点为指向二维数组指针使用措施。
p为基类型为int指针,指向一种整型数据,也就可咀指向一种数组元素,因此D对旳。 a是二维数组名,寄存二维数组首地址,但二维数组名是一种行指针,其基类型为具有10个元素一维数组。因此A错误,两者基类型不一致(p+1指向下一种元素,而a+l指向二维数组下一行)。如果p定义为int(*p)[10],才可以赋值p=a。在C语言中,二维数组a[4][10]可以看做是由4个元素构成一维数组,这4个元素为a[0]、a[l]、a[2]、a[3],而其中每个元素又是由10个元素构成维数组。 在这里,a[i]也是一种数组名,可以表达一维数组首地址,但a[i]是一种列指针,基类型为int.指向一维数组第1个元素。同步,指针数组q每个数组元素q[i]基类型也为int,因此p、a[i]、q[i]基类型一致,选项B、C是对旳。
(28)有如下程序
#include <stdio.h>
#include<string.h>
main()
{ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];
printf(“%d,”,strlen(p));printf(“%s\n”,p);
}
程序运营后输出成果是
A)9,One*World
B)9,One*Dream
C)10,One*Dream
D)10,One*World
解析:选C。考点为二维字符数组使用和strlen()函数使用。
初始化p=str[l]后,p指向第二个字符串“One*Dream!”。strlen()函数计算字符串长度时不涉及结束标志,因此strlen(p)=10。
(29)有如下程序
#include <stdio.h>
main()
{ int a[ ]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ case 0:switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;
}break;
case 1:a[i[=0;
}
for(i=0;i<4;i++) printf(“%d”,a[i]); printf(“\n”);
}
A)3 3 4 4
B)2 0 5 0
C)3 0 4 0
D)0 3 0 4
解析:选C。考点为switch语句。
外部switch语句在循环中被实行4次。i=0时,实行case 0. 内部switch语句也实行case 0, a[i]++ a[0]=3
i=1时,实行case 1,a[l]=0 排除法,只有C对旳。
i=2时,实行case 0. 内部switch语句实行case 1. a[i]-- a[2]=4
i=3时,实行case 1,a[3]=0 最后依次输出为:3 0 4 0
(30)有如下程序
#include <stdio.h>
#include<string.h>
main()
{ char a[10]=”abcd”;
printf(“%d,%d\n”,strlen(a),sizeof(a));
}
程序运营后输出成果是
A)7,4 B)4,10 C)8,8 D)10,10
解析:选B。考点为strlen()函数和sizeof()运算符使用。
strlen()函数计算字符串长度时,遇到结束标志为止,且长度不涉及结束标
志,因此strlen(a)=4,排除法选B。
sizeof()运算符操作数可以是类型名或变量名、数组名等,当操作数是数组名时,其成果是数组总字节数,所咀sizeof(a)=10。
(31)下面是有关C语言字符数组描述,其中错误是
A)不可以用赋值语句给字符数组名赋字符串
B)可以用输入语句把字符串整体输入给字符数组
C)字符数组中内容不一定是字符串
D)字符数组只能寄存字符串
解析:选D。考点为字符数组使用。
字符数组名是数组首地址,是常量,不能被重新赋值,因此A对旳。可以用scanf(“%s”,str)对字符串整体输入,str可以是字符数组名或字符指针,因此B对旳。C和D说法对立,肯定有一种对旳,用排除法A、B选项主线不用看。字符数组所有元素可以只寄存一般字符,不寄存结束标志。因此D错误。
(32)下列函数功能是
fun(char * a,char * b)
{ while((*b=*a)!=’\0’) {a++,b++;} }
A)将a所指字符串赋给b所指空间
B)使指针b指向a所指字符串
C)将a所指字符串和b所指字符串进行比较
D)检查a和b所指字符串中与否有’\0’
解析:选A。考点为指针概念及while循环。
While循环条件为:(*b=*a)!='\0’,实行时先把指针a所指向字符赋给指针b所在内存单元,如果该字符不是结束标志“\0”,实行循环体a++;b++;,指针a、b分别指向下一种字符单元。再鉴定循环条件,如果成立,继续把指针a所指向字符赋给指针b所在内存单元,直到遇到结束标志为止。因此对旳答案为A。
(33)设有如下函数
void fun(int n,char * s) {……}
则下面对函数指针定义和赋值均是对旳是
A)void (*pf)(); pf=fun;
B)viod *pf(); pf=fun;
C)void *pf(); *pf=fun;
D)void (*pf)(int,char);pf=&fun;
解析:选A。考点为指向函数指针使用措施。
函数名代表函数入口地址。指向函数指针应当定义为void(*pf)( )。如果定义为void *pf( ),则表达函数pf返回值为一种基类型为void指针。综上,因此对旳答案为A。
(34)有如下程序
#include <stdio.h>
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf(“%d\n”,s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
}
程序运营后来输出成果是
A)7 B)8 C)9 D)10
解析:选C.考点为静态局部变量使用。
主函数和f函数中a所有为局部变量,作用域所有在本函数之内,互不影响。f函数中a为静态局部变量,占用固定内存单元,下一次调用时仍可保存上次调用时值。也就是说,如果多次调用f函数,a定义只在第一次调用时有效,从第二次调用开始,a定义相称于不存在,直接使用a值。主函数中调用了2次f(a),第一次调用,s=f(a)=f(3) f函数:n=3 a=l n=n+(a++)=4 a=2 返回n,主函数s=4。第二次调用,s=s+f(a)=4+f(3)(a值为主函数中a值) f函数n=3 a=2 n=n+(a++)=5 a=3 返回n,主函数s=4+f(3)=4+5=9 最后输出s值为9。
(35)有如下程序
#include <stdio.h>
#define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf(“%d,%d\n’,s,t);
}
程序运营后输出成果是
A)10,64 B)10,10 C)64,10 D)64,64
解析:选A。考点为带参数宏定义。
宏定义中参数授有类型,仅为字符序列,不能当作表达式运算。宏展开时,把实参字符串原样写在替代文本中。s=f(a+l)=a+l*a+l*a+l=10
t=f((a+1))=(a+1)*(a+1)*(a+1)=64
(36)下面构造体定义语句中,错误是
A)struct ord {int x;int y;int z;}; struct ord a;
B)struct ord {int x;int y;int z;} struct ord a;
C)struct ord {int x;int y;int z;} a;
D)struct {int x;int y;int z;} a;
解析:选B。考点为构造体变量定义。
可以先定义构造体类型,再定义构造体变量,如A。
可以在定义构造体类型同步定义构造体变量,如C。
可以直接定义构造体变量,没有类型名,如D。
B选项错误,定义构造体类型同步使用此类型。
(37)设有定义:char *c;,如下选项中可以使字符型指针c对旳指向一种字符串是
A)char str[ ]=”string”;c=str;
B)scanf(“%s”,c);
C)c=getchar();
D)*c=”string”;
解析:选A。考点为字符指针使用。
选项A为对旳使用措施。先将字符串存于字符数组中,然后将数组名赋给字符指针。(数组名代表数组首地址,定义数组时为其分派拟定地址)选项C错误。getchar( )函数输入个字符给字符型变量,而不是字符指针。选项B和D有类似错误,两个选项并无语法错误,但运营时也许会浮现问题。
因素:在选项B和D中,字符指针没有被赋值,是个不拟定值,指向一种不拟定内存区域,这个区域也许寄存有用指令或数据。在这个不拟定区域重新寄存字符串,也许会发生无法预知错误。
(38)有如下程序
#include <stdio.h>
#include<string.h>
struct A
{ int a; char b[10]; double c;};
struct A f(struct A t);
main()
{ struct A a={1001,”ZhangDa”,1098.0};
a=f(a);jprintf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);
}
struct A f(struct A t)
( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )
程序运营后输出成果是
A)1001,ZhangDa,1098.0
B)1001,ZhangDa,1202.0
C)1001,ChangRong,1098.0
D)1001,ChangRong,1202.0
解析:选D。考点为构造体类型在函数中应用。
由于使用构造体变量,程序看似很杂乱。但在使用中,构造体变量和一般变量作用是同样。如果这样看,程序实行环节如下:函数调用f(a)将实参a传给形参t,函数内部对t重新赋值,然后返回t;主函数a=f(a),把返回值t赋给a,然后输出a,其实就是t值。
(39)若有如下程序段
int r=8;
printf(“%d\n”,r>>1);
输出成果是
A)16
B)8
C)4
D)2
解析:选C。考点为位运算中右移运算符使用。
每右移一次,相称于除以2。本题中,r=(8)10=(0000 1000)2
r>>1后,r=( 0000 0100)2 =(4)10
(40)下列有关C语言文献论述中对旳是
A)文献由一系列数据依次排列构成,只能构成二进制文献
B)文献由构造序列构成,可以构成二进制文献或文本文献
C)文献由数据序列构成,可以构成二进制文献或文本文献
D)文献由字符序列构成,其类型只能是文本文献
解析:选C。C语言中根据数据组织形式,分为二进制文献和ASCII码文本文献。一种C文献是一种字节序列或二进制序列,而不是一种记录(构造)序列。
二、填空题(每空2分,共30分)
(1)某二叉树有5个度为2结点和3个度为1结点,则该二叉树中共有 14 个结点。
解析:度为2结点有5个,则度为0结点(叶子结点)为5+1=6个,度为1结点有3个,总结点数位5+6+3=14个。
(2)程序环节图中菱形框表达是 逻辑条件 。
(3)软件开发过程核心分为需求分析、设计、编码和测试四个阶段,其中 需求分析阶段产生“软件需求规格阐明书。
(4)在数据库技术中,实体集之间联系可以是一对一或一对多或多对多,那么“学生”和“可选课程”联系为 多对多 。
解析:一种学生可以选多门功课,一门功课可以多种学生选择。
(5)人员基本信息一般涉及:身份证号,姓名,性别,年龄等。其中可以作为主核心字是 身份证号码 。
解析:核心字值不能反复,只能是唯一。
(6)若有定义语句:int a=5;,则表达式:a++值是 5 。
解析:a++先使用a值再增长1。
(7)若有语句double x=17;int y;,当实行y=(int)(x/5)%2;后来y值为 1 。
解析:y=(int)(3. )%2=3%2=1。
(8)如下程序运营后输出成果是 1 0 。
#include <stdio.h>
main()
{ int x=20;
printf(“%d”,0<x<20);
printf(“%d\n”,0<x&&x<20); }
解析:“<”结合性为从左到右。计算O<x<20,x=20,O<x为1,然后1<20成果为1。关系运算符优先级不小于逻辑运算符。0<x&&x<20相称于(0<x)&&(x<20),成果为0。
(9)如下程序运营后输出成果是 5 。
#include <stdio.h>
main()
{ int a=1,b=7;
do {
b=b/2;a+=b;
} while (b>1);
printf(“%d\n”,a);}
解析:考点为do while语句使用措施。
程序实行环节:a=l b=7
实行循环体,b=b/2=3 a=4;b>l条件成立,再实行循环体,b=b/2=1 a=5;此时,b>l条件不成立,输出a值5。
(10)有如下程序
#include <stdio.h>
main()
{ int f,f1,f2,i;
f1=0;f2=1;
printf(“%d %d”,f1,f2);
for(i=3;i<=5;i++)
{ f=f1+f2; printf(“%d”,f);
f1=f2; f2=f;
}
printf(“\n”);
}
程序运营后输出成果是 0 1 123 。
解析:程序实行环节:
fl=0 f2=1输出:0 1
For循环变量中i只起到控制循环次数作用,循环3次。
i=3 f=f1+f2=0+1=1输出1;
f1=f2=1 f2=f=l
i=4 f=f1+f2=1+1=2输出2;
f1=f2=1 f2=f=2
i=5 f=f1+f2=1+2=3输出3;
f1=f2=2 f2=f=3
注意循环内输出格式控制符没有空格,因此123持续输出。
(11)有如下程序
#include <stdio.h>
int a=5;
void fun(int b)
{ int a=10;
a+=b;printf(“%d”,a);
}
main()
{ int c=20;
fun(c);a+=c;printf(“%d\n”,a);
}
程序运营后输出成果是 3025 。
解析:考点为全局变量和局部变量使用措施。
全局变量作用域为定义开始到文献结束。局部变量作用域为定义其函数内部。当局部变量和全局变量同名时,在局部变量作用域内,全局变量不起作用。
程序实行环节:调用函数fun(c),实参c传给形参b,b=20,局部变量a起作用,a=10,a+=b a=a+b=10+20=30,输出a值30。返回到主函数:a+=c 此时a为全局变量。a=a+c=5+20=25,输出a值25。注意格式控制符无空格,因此持续输出。
(12)设有定义:
struct person
{ int ID;char name[12];}p;
请将scanf(“%d”, &p.ID );语句补充完整,使其可觉得构造体变量p成员ID对旳读入数据。
解析:考点为构造体成员引用措施。
构造体变量成员引用措施: 构造体变量.成员名
(13)有如下程序
#include <stdio.h>
main()
{ char a[20]=”How are you?”,b[20];
scanf(“%s”,b);printf(“%s %s\n”,a,b);
}
程序运营时从键盘输入:How are you?<回车>
则输出成果为 How are you? How 。
解析:考点为字符串输人输出。
c语言中用字符数组寄存字符串,此题中字符数组a赋值和输出属于正常使用措施。核心是字符数组b输入,C语言把空格作为字符串输入分隔符,因此字符数组b只能接受到How。(具体参照教材P145页)
(14)有如下程序
#include <stdio.h>
typedef struct
{ int num;double s}REC;
void fun1( REC x ){x.num=23;x.s=88.5;}
main()
{ REC a={16,90.0 };
fun1(a);
printf(“%d\n”,a.num);}
程序运营后输出成果是 16 。
解析:考点为函数参数传播。C语言中函数参数传播是值传播,是把实参值传给形参,是单向传播,形参变化不会影响到实参值。此程序特殊地方是实参和形参所有是构造体变量,使用措施和一般变量是同样。
(15)有如下程序
#include <stdio.h>
fun(int x)
{ if(x/2>0) run(x/2);
printf(“%d ”,x);}
main( )
{ fun(6);printf(“\n”); }
程序运营后输出成果是 1 3 6 。
解析:考点为函数递归调用。程序实行过程是先递推、后递归过程。当x=1时,条件不成立,递归终结。
展开阅读全文