国二考试题目

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

机试真题1、函数fun的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。#includeconio.h#includestdio.hintfun(intn){int_1__,s=0;/*能整除n的自然数即称为因子*/for(i=2;in;i++)if(n%i==0)s=___2__;return(s);}main()/*主函数*/{printf(%d\n,fun(120));}解析:本题的考核点是计算n所有因子的算法。解题思路:判断因子的方法是:能被n整除的数。由于题意中指明需将1和n除外,所以循环的范围应从2至n-1。答案:1:i2:s+i2、已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序modi.c中函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为:23.197745。请改正函数fun中的错误,使程序能输出正确的结果。注意:不要改动main函数,#includeconio.h#includestdio.h#includemath.h/************found************/fun(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;for(k=4;k=n;k++){s=s0+s1+s2;sum+=sqrt(s);s0=s1;s1=s2;s2=s;}/************found************/returnsum}main(){intn;clrscr();printf(InputN=);scanf(%d,&n);printf(%f\n,fun(n));}解析:本题的考核点是C语言中的函数的入口参数和类型转换。C语言规定,凡不加类型说明的函数,一律自动按整型处理。如果函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。根据题意,函数返回值为实型,所以第一处错误fun(intn)应改为floatfun(intn)或具有相同作用的句子。函数的返回值是通过函数中的return语句获得的。return语句后面的括弧可以不要,但分号不能少,必须加分号。所以,第二处错误应改为returnsum;或相同作用的句子。如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据可以自动进行类型转换。即函数类型决定返回值的类型。本评析仅作参考。3、请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)例如:t=1000时,函数值为987。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includemath.h#includestdio.hintfun(intt){……}main(){intn;clrscr();n=1000;printf(n=%d,f=%d\n,n,fun(n));}解析:intfun(intt){inta=1,b=1,c=0,i;/*a代表第n-2项,b代表第n-1项,c代表第n项*//*如果求得的数c比指定比较的数小,则计算下一个Fibonacci数,对a,b重新置数*/do{c=a+b;a=b;b=c;}while(ct);/*如果求得的数c比指定比较的数大时,退出循环*/c=a;/*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/returnc;}4、下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a初值为8,b初值为3,程序运行后a中的值为3,b中的值为8。试题程序:#includeconio.h#includestdio.hintfun(int*x,inty){__1___t;t=*x;*x=y;return(t)__2__}main(){inta=3,b=8;printf(%d%d\n,a,b);b=fun(__3__,b);printf(%d%d\n,a,b);}解析:填空1:根据题目的意思,这里应该是声名一个新的变量t,由后面的赋值语句以及返回语句可以明白这个变量应该是整型的(因为函数的返回值类型是int)。填空2:根据题目的意思,此处是子函数的返回语句,由C语言的知识,每个语句的结尾都应该使用;。填空3:fun()函数的调用方式说明fun()函数的参数应当为指针类型,即应该把变量的地址作为参数传递(符号&是取地址操作)。答案:【1】int【2】;【3】&a5、给定程序modi.c中函数fun的功能是:求两个形参的乘积和商数,并通过形参返回调用程序。例如输入:61.82和12.65,输出为:c=782.023000d=4.886957。请改正fun函数中的错误,使它能得出正确的结果。注意:不要改动main函数,#includestdio.h#includeconio.h/**********found**********/voidfun(doublea,b,doublex,y){/**********found**********/x=a*b;y=a/b;}main(){doublea,b,c,d;clrscr();printf(Entera,b:);scanf(%lf%lf,&a,&b);fun(a,b,&c,&d);printf(c=%fd=%f\n,c,d);}解析:本题的考核点是C语言中函数的入口参数和指针的使用。函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普通的变量说明不同,函数参数必须同时具有变量类型和变量名,因此应该把程序中voidfun(doublea,b,doublex,y)语句改为voidfun(doublea,doubleb,double*x,double*y)或相同作用的语句。从主函数里的fun(a,b,&c,&d);语句可以看出,fun函数后两个参数应为长浮点型数据的指针,因此应该把程序中x=a*b;y=a/b;语句改为*x=a*b;*y=a/b;或相同作用的语句。6、请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。注意:部分源程序存在文件prog.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includestdio.h#includeconio.hfloatfun(floath){……}main(){floata;clrscr();printf(Entera:);scanf(%f,&a);printf(Theoriginaldatais:);printf(%f\n\n,a);printf(Theresult:%f\n,fun(a));}解析:本题的考核点是类型转换与小数四舍五入的算法。提示思路:先将原数值加上要保留位上的位权值的一半,再除以要保留位上的位权值,通过类型的转换将要舍去部分去掉,最后再通过类型转换将其转换为最终结果。floatfun(floath){longnum;h=h+0.005;h=h*100;num=h;/*对h求整*/h=num;h=h/100;returnh;}7、给定程序的功能是删除w数组中下标为k的元素中的值。程序中,调用了getindex、arrout和arrdel三个函数,getindex用以输入所删元素的下标函数中对输入的下标进行检查,若越界,则要求重新输入,直到正确为止。arrout用以输出数组中的数据,arrdel进行所要求的删除操作。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。#includestdio.h#defineNUM10arrout(int*w,intm){intk;/************found************/for(k=0;k___1___;k++)printf(%d,w[k]);printf(\n);}arrdel(int*w,intn,intk){inti;for(i=k;in-1;i++)w[i]=w[i+1];n--;/************found************/return___2___;}getindex(intn){inti;/************found************/___3___{printf(\nEntertheindex[0=i%d]:,n);scanf(%d,&i);}while(i0||in-1);returni;}main(){intn,d,a[NUM]={21,22,23,24,25,26,27,28,29,30};n=NUM;printf(Outputprimarydata:\n);arrout(a,n);d=getindex(n);n=arrdel(a,n,d);printf(Outputthedataafterdelete:\n);arrout(a,n);}解析:本题的考核点是数组和循环语句是使用。题中第一个空填m:km用于控制循环的结束。题中第二个空填n:returnn用于将n返回给调用它的函数。题中第三个空填do:循环有两种,当型和直到型。While为当型循环,do…while是直到型循环。答案:【1】m【2】n【3】do8、给定程序modi.c中,函数fun的功能是:根据整型形参n,计算如下公式的值。A1=1,A2=1/(1+A1),A3=1/(1+A2),……An=1/(1+An-1)例如:若n=10,则应输出:0.617977。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,#includeconio.h#includestdio.h/************found************/intfun(intn){floatA=1;inti;/************found************/for(i=2;in;i++)A=1.0/(1+A);returnA;}main(){intn;clrscr();printf(\nPleaseentern:);scanf(%d,&n);printf(A%d=%f\n,n,fun(n));}解析:本题着重考察考生对C语言中函数的定义、引用和参数传递的掌握情况。本题中的第一个错误:由主函数中可知,函数fun返回的应为float或double型的值,所以程序中的语句intfun(intn)应改为floatfun(intn)或doublefun(intn);本题中的第二个错误:由题意可知,程序要求出An的值,循环的终止值应为n,所以程序中的语句for(i=2;in;i++)应改为for(i=2;i=n;i++)或相同作用的语句。9、请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includestdio.hvoidfun(int*a,int*n){……}main(){intaa[1000],n,k;clrscr();fun(aa,&n

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功