1、国家二级(C 语言)机试模拟试卷 119 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.数据结构主要研究的是数据的逻辑结构、数据的运算和( )。(分数:2.00)A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储2.棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的结果是( )。(分数:2.00)A.DBACEFB.CBEFDAC.FDAEBCD.DFABEC3.在数据处理中,其处理的最小单位是( )。(分数:2.00)A.数据B.数据项C.数据结构D.数据元素4.在数据库系统的内部结构体系中
2、,索引属于( )。(分数:2.00)A.模式B.内模式C.外模式D.概念模式5.以下( )不属于对象的基本特征。(分数:2.00)A.继承性B.封装性C.分类性D.多态性6.数据库系统的核心是( )。(分数:2.00)A.数据模型B.软件开发C.数据库设计D.数据库管理系统7.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( )。(分数:2.00)A.软件矛盾B.软件危机C.软件耦合D.软件产生8.关系模型允许定义 3 类数据约束,下列不属于数据约束的是( )。(分数:2.00)A.实体完整性约束B.参照完整性约束C.属性完整性约束D.用户自定义的完整性约束9.关系表中的每一
3、行记录称为一个( )。(分数:2.00)A.字段B.元组C.属性D.关键码10.在数据库管理技术的发展中,数据独立性最高的是( )。(分数:2.00)A.人工管理B.文件系统C.数据库系统D.数据模型11.以下叙述错误的是( )。(分数:2.00)A.C 语言区分大小写B.C 程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改C.整数和实数都能用 C 语言准确无误地表示出来D.在 C 程序中,正整数可以用十进制、八进制和十六进制的形式来表示12.有以下程序段: lnt i,n; for(i=0;iA.for 循环语句固定执行 8 次B.当产生的随机数 n 为 4 时结
4、束循环操作C.当产生的随机数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行13.可在 C 程序中用作用户标识符的一组标识符是( )。(分数:2.00)A.void define WORDB.as_b3_123 IfC.Forabc caseD.2c DO SIG14.若变量已正确定义并赋值,则以下符合 C 语言语法的表达式是( )。(分数:2.00)A.a=a+7;B.a=7+b+c,a+C.int(1234)D.a=a+7=c+b15.有以下程序段 char ch;int k: ch=aI;k=1 2; printf(“c,d,“,ch,ch,k); pr
5、intf(“k=d/n“,k); 已知字符 a 的 ASCII 十进制代码为 97,则执行上述程序段后输出结果是( )。(分数:2.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=1216.下列叙述中错误的是( )。(分数:2.00)A.计算机不能直接执行用 C 语言编写的源程序B.C 程序经 C 编译程序编译后,生成后缀为obj 的文件是一个二进制文件C.后缀为obj 的文件,经连接程序生成后缀为exe 的文件是一个二进制文件D.后缀为obj 和exe 的二进制文件都可以直接运行17.有以下程
6、序 #inc1ude void main() int a=1,b=0; printf(“d,“,b=(a+)+(a+); printf(“d/n“,a+b); 程序运行后的输出结果是( )。(分数:2.00)A.4,6B.2,5C.3,5D.2,618.若有代数式 (分数:2.00)A.sqrt(abs(nx+ex)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(fabs(pow(n,x)+exp(x)D.sqrt(fabs(pow(x,n)+exp(x)19.设有定义:int k=0;,下列选项的 4 个表达式中与其他 3 个表达式的值不相同的是( )。(分数:2.0
7、0)A.k+B.k+=1C.HkD.k+l20.有下列程序,其中u 表示按无符号整数输出。 main() unsigned int x=0xFFFF;*x 的初值为十六进制数* printf(“u/n“,x); 程序运行后的输出结果是( )。(分数:2.00)A.一 1B.65535C.32767D.0xFFFF21.下面程序的运行结果是( )。for(i=3;id“,pdata) ; p=pnext; while (p ! =NULL) ; printf ( “End/n“) ; main () SLIST *head; int aN =11,12,15,18,19,22,25, 29;he
8、ad=creatlist (a) ; printf (“/nOutput from head:/n“) ; outlist (head) ; printf ( “/nOutput from tail: /n“) ; while (headnext != NULL) fun (head) ; printf (“/n/n“); printf(“/nOutput from head again :/n“) ; outlist (head) ; (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODI1C 中函数 fun 的功能是:逐个比较 p、q 所指两个字符串对应位
9、置中的字符,把ASCII 值大或相等的字符依次存放到 c 所指数组中,形成一个新的字符串。 例如,若主函数中 a 字符串为:aBCDeFgH,主函数中 b 字符串为:ABcd,则 c 中的字符串应为:aBcdeFgH。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 #include #include void fun(char *p,char *q,char *c) int k= 1; while (*p != *q ) else c k=*p; k+; main () char a 10=“aBCDeFgH“, fun (a
10、,b,c) ; printf (“The string a: “) ; puts (a) ; printf (“The string b:“) ; puts (b) ; printf (“The result: “) ; puts (c) ; (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun:在形参指针所指的 4 个整数中找出最大值和最小值,最大的放在 a 中,最小的放在 d中。 注意:部分源程序存在 PROGIC 中,请勿改动主函数 maln 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。 #include void NONO
11、(); void fun (int *a,int *b,int *c,int *d) main() int a,b, c,d; printf(“请输入 4 个整数:“); scanf(“d d d d“, &a, &b, &c, &d); printf(“原始顺序:d,d,d,d/n“,a,b,c,d); fun(a,b,c,d); printf(“处理后:d,d,d,d/n”,a,b,c,d); NONO(); void NONO() /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE *fp,*wf; int i,a,b, C,d; fp=fopen(“inda
12、t“,“r“); wf=fopen (“outdat“,“w“); for (i=0; i_国家二级(C 语言)机试模拟试卷 119 答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.数据结构主要研究的是数据的逻辑结构、数据的运算和( )。(分数:2.00)A.数据的方法B.数据的存储结构 C.数据的对象D.数据的逻辑存储解析:解析:数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含 3 个方面的内容,即数据的逻辑结构、存储结构和数据的运算。2.棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的
13、结果是( )。(分数:2.00)A.DBACEFB.CBEFDA C.FDAEBCD.DFABEC解析:解析:由于该二叉树的前序遍历结果是 ABCEDF,显然 A 结点为根结点,所以后序遍历时 A 结点是最后遍历的,其后序遍历的结果为 CBEFDA。3.在数据处理中,其处理的最小单位是( )。(分数:2.00)A.数据B.数据项 C.数据结构D.数据元素解析:解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。4.在数据库系统的内部结构体系中,索引属于( )。(分数:2.00)A.模式B.内模式 C.外模式D.概念模式解析:解析:内模
14、式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及 hash 等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘操作)。5.以下( )不属于对象的基本特征。(分数:2.00)A.继承性 B.封装性C.分类性D.多态性解析:解析:对象具有特征:标识惟一性,指对象是可区分的;分类性,指可以将具有相同属性和操作的对象抽象成类:多态性,指同一个操作可以是不同对象的行为;封装性,从外面看只能看到对象的外部特征,而不知道也无需知道数据的具体结构以及实现操作的算法;模块独立性好,对象是面向对象的软件的基本模块,对象内
15、部各种元素彼此结合得很紧密,内聚性强。6.数据库系统的核心是( )。(分数:2.00)A.数据模型B.软件开发C.数据库设计D.数据库管理系统 解析:解析:数据库管理系统 DBMS 是数据库系统的核心。DBMS 是负责数据库的建立、使用和维护的软件。DBMS 建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过 DBMS。另外,DBMS 还承担着数据库的安全保护工作,按照 DBA 所规定的要求,保证数据库的完整性和安全性。7.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( )。(分数:2.00)A.软件矛盾B.软件危机
16、 C.软件耦合D.软件产生解析:解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了入门难以控制软件发展的局面,即所谓的“软件危机”。8.关系模型允许定义 3 类数据约束,下列不属于数据约束的是( )。(分数:2.00)A.实体完整性约束B.参照完整性约束C.属性完整性约束 D.用户自定义的完整性约束解析:解析:关系模型允许 3 类数据约束,它们是: 实体完整性约束: 该约束要求关系的主键中属性值不能为空值,这是数据库完整性的最基本要求。 参照完整性约束:该约束是关系之间相关联的基本约束,它不允许关系引用不存
17、在的元组:即在关系中的外键要么是所关联关系中实际存在的元组,要么就为空值。用户定义的完整性约束:用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。9.关系表中的每一行记录称为一个( )。(分数:2.00)A.字段B.元组 C.属性D.关键码解析:解析:在关系表中,每一列称为一个属性,对应表中的一个字段;每一行称为一个元组,对应表中的一条记录。10.在数据库管理技术的发展中,数据独立性最高的是( )。(分数:2.00)A.人工管理B.文件系统C.数据库系统 D.数据模型解析:解析:在人工管理阶段,数据无法共享,冗余度大,不独立,完全依赖程序;
18、在文件系统阶段,数据共享性差;在数据库系统阶段,共享性好,独立性高。11.以下叙述错误的是( )。(分数:2.00)A.C 语言区分大小写B.C 程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改C.整数和实数都能用 C 语言准确无误地表示出来 D.在 C 程序中,正整数可以用十进制、八进制和十六进制的形式来表示解析:解析:本题涉及 C 语言最基本的 3 个概念: C 语言是区分大小写的,q 和 Q 是两个不同的变量; 变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改; 整数在允许的范围内可以准确的表示出来,但不可能
19、表示无限度的实数。正整数可用二进制、十进制、八进制和十六进制表示。12.有以下程序段: lnt i,n; for(i=0;iA.for 循环语句固定执行 8 次B.当产生的随机数 n 为 4 时结束循环操作C.当产生的随机数 n 为 1 和 2 时不做任何操作D.当产生的随机数 n 为 0 时结束程序运行 解析:解析:当产生的随机数 n 为 0 时,执行“case 0:exit(0)”这条语句,结束程序的运行。13.可在 C 程序中用作用户标识符的一组标识符是( )。(分数:2.00)A.void define WORDB.as_b3_123 If C.Forabc caseD.2c DO S
20、IG解析:解析:C 语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线,关键字不能用作用户标识符。14.若变量已正确定义并赋值,则以下符合 C 语言语法的表达式是( )。(分数:2.00)A.a=a+7;B.a=7+b+c,a+ C.int(1234)D.a=a+7=c+b解析:解析:选项 A)是一个 C 语句,不是表达式;选项 B)是利用一个逗号表达式给 a 赋值;选项 C)中的“”求余运算符要求两个运算对象都必须是整型;选项 D)中,不能用表达式给表达式赋值,但是变量可以给自身赋值,例如:a=a+l。15.有以下程序段 char ch;int k: ch=aI
21、;k=1 2; printf(“c,d,“,ch,ch,k); printf(“k=d/n“,k); 已知字符 a 的 ASCII 十进制代码为 97,则执行上述程序段后输出结果是( )。(分数:2.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=12 解析:解析:在用基本输出函数 printf 时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明个数多于输出项个数,则对于多余的格式项输出不定值或 0。16.下列叙述中错误的是( )。(分数:
22、2.00)A.计算机不能直接执行用 C 语言编写的源程序B.C 程序经 C 编译程序编译后,生成后缀为obj 的文件是一个二进制文件C.后缀为obj 的文件,经连接程序生成后缀为exe 的文件是一个二进制文件D.后缀为obj 和exe 的二进制文件都可以直接运行 解析:解析:C 源程序经过程序编译之后生成一个后缀为“obj”的二进制文件(称为目标文件),然后由称为“连接程序”的软件包文件与 C 语言提供的各种库函数连接起来生成一个后缀为“exe”的可运行文件。17.有以下程序 #inc1ude void main() int a=1,b=0; printf(“d,“,b=(a+)+(a+);
23、printf(“d/n“,a+b); 程序运行后的输出结果是( )。(分数:2.00)A.4,6B.2,5 C.3,5D.2,6解析:解析:在主函数中定义了两个整型变量 a 和 b,并把它们的初值分别设置为 l 和 0;在第二条语句中,首先计算 ba+a,然后 a 自增两次,因此第二句结束时,b=2,a=3,然后第三句,a+b=5。18.若有代数式 (分数:2.00)A.sqrt(abs(nx+ex)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(fabs(pow(n,x)+exp(x) D.sqrt(fabs(pow(x,n)+exp(x)解析:解析:n 和 e 的
24、x 幂次方,要分别调用 C 语言的数学库函数“double pow(n,x)”和“double exp(x)“,因为这两个函数的返回值都为 double 型,对两者的和计算绝对值,调用库函数“doublefabs(pow(n,x)+exp(x)”,求出和的绝对值,再调用开平方函数“double sqrt(fabs(pow(n,x)+exp(x)”,这样计算出的结果就是题干中表达式的值。19.设有定义:int k=0;,下列选项的 4 个表达式中与其他 3 个表达式的值不相同的是( )。(分数:2.00)A.k+ B.k+=1C.HkD.k+l解析:解析:因为题中有语句“int k=0; ”,所
25、以选项 B)、C)、D)都是对 k 的值加 1,选项 A)的语句 k+表示先利用 k 的值进行运算,然后 k 的值才加 1。20.有下列程序,其中u 表示按无符号整数输出。 main() unsigned int x=0xFFFF;*x 的初值为十六进制数* printf(“u/n“,x); 程序运行后的输出结果是( )。(分数:2.00)A.一 1B.65535 C.32767D.0xFFFF解析:解析:“u”格式符表示以十进制形式输出无符号整形变量。本题中无符号整形变量 x=0xFFFF 表示的是十六进制无符号整型变量的最大值 65535,所以最后输出的结果为 65535。21.下面程序的
26、运行结果是( )。for(i=3;i22.设有语句:if(a=1) b=2;c=3;,以下语句中与之等价的是( )。(分数:2.00)A.if(a=1)b=2;c=3;)B.if(a!=1);elseb=2;c=3;)C.if(a=1)c=3;b=2;D.(a=1)?b=2:a=a;c=3; 解析:解析:在 C 语言中,用分号表示一条语句的结束,用把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项 A)、B)、C)均与题中所给不同,而选项 D)相同。23.运行下列程序时,若输入数据为“321”,则输出结果是( )。 main() int num,i,j,k,
27、s; scanf(“d“,&num); if(num99) s=3; else if(num9) s=2; else s=l; i=num/100; j=(numi*100)/10; k=(numi*100j*10); switch(s) case 3:printf(“ddd/n“,k,j,i); break; case 2:printf(“dd/n“,k,j); case l:printf(“d/n“,k); (分数:2.00)A.123 B.1,2,3C.321D.3,2,1解析:解析:本题考查 ifelse 语句和 switch 语句。scanf 函数通过键盘读入 num 的值。因为“n
28、um=32199”,所以“s=3,i=3,j=2,k=1”。因为 s=3,所以执行 case 3输出 k,j,i 的值,然后通过 break 结束程序。24.有以下程序 #inc1ude #inc1ude struct A int a;char b10; double c; structA f(structAt); main() struct A a= 1001,“ZhangDa“,10980); a=f(a);printf(“d,s,61 f/n“,aa,ab,ac); struct Af(struct A t) ta=1002; strcpy(tb,“WangPeng“);tc=12200
29、;return t;) 程序运行后的输出结果是( )。(分数:2.00)A.1001,ZhangDa,10980B.1002,ZhangDa,12200C.1001,WangPeng,10980D.1002,WangPeng,12200 解析:解析:在主函数中定义结构体 A 的变量 a,并对其赋初值,再调用函数 f(a),在函数 f(a)中对结构体变量 a 的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。25.判断 char 型变量 c1 是否为小写字母的正确表达式为( )。(分数:2.00)A.a=a)&(c1=c1 | (z=a)&(c1=a“和“c1mB.*(p+)一mC.(*p
30、)mD.木(+p)一m 解析:解析:本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后定义了一个结构体变量s3,并赋了初值。在主程序中,定义了一个指向结构体变量 s 的指针 p,要使表达式的值为 5,就应该引用 s1m 的值,使指针 p 指向 s1,+p 可以实现将 p 指针加 1,指向 s1。29.下列程序的运行结果是( )。 #inc1ude void sub(int*s,int*y) static int m=4; *y=s0; m+; void main() int a=1,2,3,4,5),k; int x; printf(“/n“); for(k=0;knext; s=p
31、; while (tnext != NULL) t=t 1 ; printf(“ d “,_2_) ; snext=NULL; SLIST *creatlist (int *a) SLIST *h,*p,*q; int i; h=p= (SLIST *) malloc (sizeof (SLIST); cF (SLIST *) malloc (sizeof (SLIST); qdata=a i ; pnext=q; p=q; pnext=0; return h; void outlist (SLIST *h) SLIST *p; p=hnext ; if (p=NULL) printf(“/n
32、The list is NULL ! /n“) ; else printf (“/nHead“) ; do printf (“d“,pdata) ; p=pnext; while (p ! =NULL) ; printf ( “End/n“) ; main () SLIST *head; int aN =11,12,15,18,19,22,25, 29; head=creatlist (a) ; printf (“/nOutput from head:/n“) ; outlist (head) ; printf ( “/nOutput from tail: /n“) ; while (head
33、next != NULL) fun (head) ; printf (“/n/n“); printf(“/nOutput from head again :/n“) ; outlist (head) ; (分数:2.00)_正确答案:(正确答案:(1) next (2) tdata (3)t)解析:解析:un 函数的功能是输出链表尾部结点中的数据,并释放该结点,使链表缩短。由于链表是单向的,找到链表尾部结点需要利用循环从头结点开始查找,直至找到最后一个,找到之后输出尾部结点的数据,然后删除尾结点。 第一空:fun 函数中的循环目的是找到尾结点“while(tnext !=NULL)“,利用结点
34、变量 s 和 t,s 指向当前节点,t 不断指向下一个结点,因此第一空处应该是“t=next,”。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点 t,t 的数据是 tdata,因此第二空处应该为“printf(”d”,tdata); ”。第三空:输出尾结点数据之后删除尾结点,使用 free,又因为尾结点是 t,因此第三空处应该为“free(t); ”。三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODI1C 中函数 fun 的功能是:逐个比较 p、q 所指两个字符串对应位置中的字符,把ASCII 值大或相等的字符依次存放到 c 所指数组中,形成一个新的字符串。 例如
35、,若主函数中 a 字符串为:aBCDeFgH,主函数中 b 字符串为:ABcd,则 c 中的字符串应为:aBcdeFgH。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 #include #include void fun(char *p,char *q,char *c) int k= 1; while (*p != *q ) else c k=*p; k+; main () char a 10=“aBCDeFgH“, fun (a,b,c) ; printf (“The string a: “) ; puts (a) ; p
36、rintf (“The string b:“) ; puts (b) ; printf (“The result: “) ; puts (c) ; (分数:2.00)_正确答案:(正确答案:(1) int k1 改为 int k=0; (2) (* p!=* q)改为( *p | *q);)解析:解析:本题中函数 fun 的功能是:逐个比较 p、q 所指两个字符串对应位置中的字符,把 ASCII 值大或相等的字符依次存放到 c 所指数组中,形成一个新的字符串。While 循环为字符串比较的提供前提条件,然后再比较得到 p、q 两个字符串一一对应的符合条件中可用的一个字符,最终合并得到新的字符串
37、c。 (1)第一个错误在 fun 函数最开始定义的 k 的初始值。根据 fun 函数的功能我们可以知道这里 k 是新字符串 c 各字符的位置,然后根据比较结果一一对应新字符串个位置的字符。这里犯了一个明显的错误就是:从字符串的第一个字符比较,得到的第一个字符在字符串中的位置不是 c1而是 c0,所以 k 的初始值不是 1,而是 0。所以这里第一个改错是将 1 改为 0。 第二个错误在 while 循环的条件表达式,我们要知道的是 while 循环条件和 if 循环条件的区别。if 的条件为开始条件,即符合这条件开始循环,而这里 while 的循环条件则是为终止条件,意思是下面括号内的循环进行到
38、不符合 while 条件语句时终止,所以这里很明显错误,如果是这种条件的只要两个字符串中出现相同的字符即终止,以例子来说就是到第二个字符比较久终止,很明显不符合题意。所以为了完全比较这两个字符串,给出的终止条件应该是到两个字符串都结束,即两个字符串字符都为“/0”时终止,所以终止条件应该为“*p|*q”。 字符串、while 语句循环。四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun:在形参指针所指的 4 个整数中找出最大值和最小值,最大的放在 a 中,最小的放在 d中。 注意:部分源程序存在 PROGIC 中,请勿改动主函数 maln 和其他函数中的任何内容,仅在函数fu
39、n 的花括号中填入所编写的若干语句。 #include void NONO(); void fun (int *a,int *b,int *c,int *d) main() int a,b, c,d; printf(“请输入 4 个整数:“); scanf(“d d d d“, &a, &b, &c, &d); printf(“原始顺序:d,d,d,d/n“,a,b,c,d); fun(a,b,c,d); printf(“处理后:d,d,d,d/n”,a,b,c,d); NONO(); void NONO() /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE *f
40、p,*wf; int i,a,b, C,d; fp=fopen(“indat“,“r“); wf=fopen (“outdat“,“w“); for (i=0; i_正确答案:(正确答案:3 void fun(int *a,int *b,int *c,int *d) 4 int t; 5 if(* a解析:解析:本题中的函数功能主要是在形参指针所指的 4 个整数中找出最大值和最小值,最大的放在 a中,最小的放在 d 中。这个题目类似于排序,但是又不是严格的排序,只要重新排序最大值和最小值的位置即可。所以类似于排序,这一题需要相互比较 4 个数字,然后进行位置的调换。基本思路就是比较相邻的两个数
41、字,如果靠近 a 的数字比靠近 d 的数字要大,就不用进行交换,如果靠近 a 的数字比靠近 d 的数字小,就进行交换,这样的话最大的数字就会慢慢交换到 a 的位置,然后最小的数字就会慢慢交换到 d 的位置。所以根据分析我们就要用到 if 语句来进行判断和处理,只要经过几轮的 if 判断大小然后交换,就能实现题目条件所给出的位置的重置,得到要求的结果。 首先在主函数 main 中我们需要的就是四个数字,这四个数字需要手动输入,件程序代码第 1315 行,四个数字输入完城后就可以进入 fun 函数进行数据处理了。进入到 fun 函数中,只要从 a 到 d 进行比较,按照一开始的规则即可,如果 a 大于 b,不变,比较 a 与 c,若 a 小 b,a 与 b 交换位置,交换过后 a 就大于 b 了,这样就进行 a 与 c 的比较;a 与 c 的比较同理,这样的循环比较,就能发现,每比较一次,较大的数字就能交换到 a 的位置,较小的数字就离 a 越来越远,也就是到了 d 的位置,这样就完成了题目所给出的要求了,最大的数字放在 a 中,最小的数字放在 d 中。当新的排序排好后,就可以返回主函数进行输出了。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1