全国及四川二级C语言上机题目_第1页
全国及四川二级C语言上机题目_第2页
全国及四川二级C语言上机题目_第3页
全国及四川二级C语言上机题目_第4页
全国及四川二级C语言上机题目_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、全国及四川二级C语言上机题目第一套一、填空题请补充fun函数,fun函数的功能是求m的阶乘。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的假设干表达式或语句。注意:局部源程序给出如下。# include long fun(int m) if(_1_) return (m*fun(_2_); return _3_;main() printf(8!=%ldn,fun(8);二、改错题以下给定程序的功能是:读入一个整数n2n5000,打印它的所有为素数的因子。例如,假设输入整数1234,那么应输出:2、617。请修改程序中的错误,使程序能得出正确的结果。注意:不要改动

2、main函数,不能增行或删行,也不能更改程序的结构。# include # include /*error*/Prime(int m); int j,p; p=1;/*error*/ for(j=2;jm;j+) if!(m%j) p=0; break; return(p);main() int i,n; printf(nplease enter an integer number between 2 and 5000:); scanf(%d,&n); printf(nnThe prime factor(s) of %d is(are):,n); for(i=2;in;i+) if(!(n%i

3、) & (Prime(i) printf( %4d,i); printf(n);三、编程题数组point中存放着m个人的成绩,请编写函数fun,它的功能是:返回高于平均分的人数,并将高于平均分的分数放在high所指的数组中。例如,当point数组中的数据为50、60、65、70、75、80、88、90、95时,函数返回的人数应该是5,high中的数据应为75、80、88、90、95。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include # include # include int fun(int point

4、,int n,int high) main() int j,m,high9; int point9=50,60,65,70,75,80,88,90,95; FILE *out; m=fun(point,9,high); printf(nHigh the average point are :); out=fopen(outfile.dat,w); for(j=0;j12m-131【一起来审题】1该程序功能是对阶乘的实现。其中,阶乘的计算公式定义为: 公式分为参数m是1和大于1的两种情况,例如,1的阶乘1!1;5的阶乘5!54321。2从已给局部源程序的main主函数开始入手,主函数执行prin

5、tf输出语句,该语句调用自定义的fun函数,并将数值8传递给fun函数的m参数。其中fun函数就是对阶乘算法的实现。3进入fun函数,根据前面的定义,它对阶乘算法的实现可以分为两种情况,一是当m1时,应该用什么程序来实现阶乘的计算;二是当m1时,函数直接返回1即可。【解题思路】第一空:if(_1_)是要根据m的取值来判断使用何种阶乘的计算公式的。这里根据第2句递归调用语句,可知该语句是用来计算当m1时的阶乘。因此第一空if语句里面的条件应该是满足m1。所以,第一空应填m1。第二空:return (m*fun(_2_)很显然是采用递归函数来实现阶乘的计算,所以,第二空应填m-1。第三空:retu

6、rn _3_该语句是要实现当m=1时的阶乘计算。所以,第三空应填1。【主要考点】递归函数。二、改错题【答案及难度指数】1Prime(int m)2if(!(m%j)【一起来审题】1整数n的素数因子为整除n的所有素数,但不含n本身。素数是指能被1和本身整除的正整数1,所以判别n是否为素数,只要用2、3、n-1这些数逐个去除n,观察余数是否为0即可,只要有一次相除余数为0,n就不是素数,否那么n为素数。因此,求整数n的素数因子,要从求整数n的因子和判断该因子是否为素数的两方面来看。2从已给定源程序的main主函数开始入手,核心局部是循环判断if(!(n%i) & (Prime(i),!(n%i)为

7、判断i是否是n的因子,Prime自定义函数的功能是判断i是否为素数,&与逻辑是指当两个判断条件都为真的时候,i即为n的素因子。【解题思路】1第一个标识下面的Primeint m;在程序中显然是一个函数,因此应将后面的分号去掉。2第二个标识下面的for语句最简单的应用形式为:for循环变量赋初值;循环条件;循环变量增值语句。显然if语句后面缺少括号,因此,if !(m%j)改为if(!(m%j)。该题主要考查标点符号、运算符、根本定义。【主要考点】if条件语句;函数定义。三、编程题【答案及难度指数】int j,k=0,average=0;for(j=0;jn;j+) average+=point

8、j; /统计总分数 average/=n;/求平均分 for(j=0;javerage) /逐个判断每个分数是否大于平均分 highk=pointj; /将高于平均分的人放入high数组 k+; /统计大于平均分的人数 return k; 【一起来审题】1该程序功能是返回高于平均分的人数。它的解题思路可以分解为以下几步:求总分求平均分逐个元素与平均分比拟统计高于平均分的人数。2从已给局部源程序的main主函数开始入手,核心函数fun(point,9,high)中的参数由题目可知,point存放着m个人的成绩,high存放高于平均分的分数。另外,根据point的定义,可知9为point数组中元素

9、的个数,传给函数fun中的参数n。【解题思路】进入fun函数,根据前面的分析:首先,定义变量average,通过循环,用average+=pointj计算总分数,然后通过average/=n;语句来计算平均分。其次,通过循环,让每个分数和平均分比拟,高于平均分数的分数给highhighk=pointj;。在进行以上循环的同时,定义了一个变量k,每当发现一个大于平均分的分数,k自动加1k+;。最后,返回k值,即是数组point中高于平均分的元素个数。【主要考点】数组操作;if条件语句;for循环语句。第二套一、填空题请补充fun函数,该函数的功能是:判断一个年份是否为闰年。例如,2007年不是闰

10、年,2021是闰年。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的假设干表达式或语句。注意:局部源程序给出如下。# include # include int fun(int n) int flag=0; if(n%4=0) if(_1_) flag=1; if(_2_) flag=1; return _3_;main() int year; printf(Input the year:); scanf(%d,&year); if(fun(year) printf(%d is a leap year.n,year); else printf(%d is not

11、a leap year.n,year);二、改错题以下给定程序中,fun函数的功能是:根据形参n,计算如下公式的值。例如,假设输入5,那么应输出2.28333。请修改程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include double fun(int n) double s=1.0; int i; /*error*/ for(i=2;i=n;i+) s+=1.0/k; /*error*/ _填 空_main() int n; printf(nplease enter 1

12、integer numbers:n); scanf(%d,&n); printf(nnthe result is %lfn,fun(n);三、编程题请编写函数fun,它的功能是:求出1到500之内能被7或11整除,但不能同时被7和11整除的所有整数,并将它们放在b所指的数组中,通过m返回这些数的个数。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include # include void fun(int *b,int *m) main() int a500,m,i; FILE *out; fun(a,&m); ou

13、t=fopen(outfile.dat,w); for(i=0;im;i+) if(i+1)%10=0) printf(%5dn,ai); fprintf(out,dn,ai); else printf(%5d,ai); fprintf(out,%d,ai); fclose(out);答案一、填空题【答案及难度指数】1n%100!=02n%400=03flag【一起来审题】1该题中函数功能是判断一个年份是否为闰年。其中,闰年的条件是年数可以被4整除,即为闰年;被100整除而不能被400整除的为平年;被100整除也可被400整除的为闰年。2从已给局部源程序的main主函数开始入手,主函数中的if

14、(fun(year)判断语句,调用函数fun对年数进行判断。3进入fun函数,利用if对年数进行判断。 【解题思路】第一空:根据闰年的条件和已有的语句if(n%4=0),知道这里的条件应该是能被4整除但要排除被100整除的整数,所以第一空填n%100!=0。第二空:被100整除也可被400整除的为闰年,所以第二空填n%400=0。第三空:主函数中if(fun(year)语句是对函数返回值的判断,所以fun函数应该将对n的判断的flag值返回,第三空填flag。【主要考点】if条件语句。二、改错题【答案及难度指数】1s+=1.0/i;2return s;【一起来审题】该题中函数功能是求题干累加公

15、式的值。从已给定源程序的main主函数开始入手,通过printf(nnthe result is%lfn,fun(n);语句调用fun函数,求得公式值。【解题思路】1第一个标识下,在以i为循环参数的for循环中进行公式累加,每一项为1.0/i,所以s+=1.0/k;改为s+=1.0/i;。2第二个标识下,首先根据题干,将填空删除,函数定义为double fun(int n),它有double型的返回值,所以这里返回累加公式的计算结果,即return s;。【主要考点】函数功能;函数返回。三、编程题【答案及难度指数】int j,k=0; for(j=2;j500;j+) /循环条件if(j%7=

16、0|j%11=0)&j%77!=0) /判断是否符合题干要求 bk+=j; /将结果放入数组b *m=k; /将累加器值赋值给m【一起来审题】1该程序的解题思路,可以分解为以下几步:判断是否被7整除判断或者是否被11整除并且不被77整除按要求返回计算结果。2从已给局部源程序的main主函数开始入手,核心函数fun(a,&m);,其中m返回这些数的个数,a传给函数中的参数,存放计算结果的数组b。【解题思路】进入fun函数,根据前面的分析:首先,定义变量k,设置为累计器,计算符合条件的数的个数。然后,通过循环,判断小于500的每一个整数是否符合题干中的要求。其中的判断条件能否被7或者被11整除为j

17、%7=0|j%11=0,不能被11和7同时整除为j%77!=0,它们之间的并关系就用&连接,最后结果即为(j%7=0|j%11=0) & j%77!=0。最后,将符合条件的整数存入数组b中,同时对k进行自加,将k值赋给m,返回结果。【主要考点】数组操作;函数传值;if条件语句;for循环语句。第三套一、填空题函数fun的功能是:从三个形参x、y、z中找出中间的那个数,作为函数值返回。例如,当x=121,y=456,z=333时,中间的数为333。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的假设干表达式或语句。注意:局部源程序给出如下。# include int

18、 fun(int a,int b,int c) int temp; temp=(ab) ? (bc ? b : (ac ? c : _1_) : (ac) ? _2_ : (bc) ? c : _3_); return temp;main() int x=121,y=456,z=333,mid; mid=fun(x,y,z); printf(nThe middle number is : %dn,mid);二、改错题以下给定程序中,函数fun和quest的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,假设给m输入-50,给n输入30,那么函数

19、求得的一个根值为2.000。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include double quest(double x) return (2*x*x*x-4*x*x+3*x-6);double fun(double m,double n) /*error*/ int r; r=(m+n)/2; /*error*/ while(fabs(n-m)0.001) if(quest(r)*quest(n)0) m=r; else n=r; r=(m+n)/2; return r;main() double m

20、,n,result; printf(Please input m n : n); scanf(%lf%lf,&m,&n); result=fun(m,n); printf(result=%6.3fn,result);三、编程题请编写函数void fun(int y,int b,int*m),它的功能是:求出能整除y且是奇数的各整数,并按从小到大的顺序放在b所指的数组中,这些除数的个数通过形参m返回。例如,假设y中的值为90,那么有4个数符合要求,它们是1、3、5、9、15、45。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如

21、下。# include # include void fun(int y,int b,int *m) main() int y,a500,m,j; FILE *out; printf(nPlease input an integer number:n); scanf(%d,&y); fun(y,a,&m); for(j=0;jm;j+) printf(%d ,aj); printf(n); fun(730,a,&m); out=fopen(outfile.dat,w); for(j=0;jb) ? (bc ?表示a bc,根据题目要求,那么中间值为b,假设只是满足第一个?前面的条件,而cb,那

22、么选择执行(ac ? c : _1_),当ac时取值c,所以ac) ?是对a、c的比拟选择,第三空处的(bc) ? c根据b、c的判断,题目已经给出了c,所以这里应该是a,这样第三空中对于b、c的判断选择缺少b,所以这里填b,同样也可以根据第一空的逻辑关系进行分析,来填写第二空和第三空。【主要考点】选择语句。二、改错题【答案及难度指数】1double r;2while(fabs(n-m)0.001)【一起来审题】1该题中函数功能是二分法求方程根。其中,二分法的求根过程,是将含根区间平均分为两个小区间,然后判断哪个区间是含根区间。在此根底上,将这里的小含根区间进一步划分为两个更小的区间,继续判断

23、根所在区间。继续细分下去,含根区间将划分地越来越小,区间的范围也越来越小。经过屡次细分后,就可以将此很小区间的中点近似为方程的根了。2从已给定源程序的main主函数开始入手,通过result=fun(m,n);语句调用fun函数求得方程根,其中fun函数对quest函数进行调用,对根进行判断。【解题思路】1fun函数要求返回方程的一个根,由return语句来实现,而函数fun是定义为double型的,但第一个标识下面的r却被定义为int类型。所以int r;改为double r;。2检查while循环的控制表达式(fabs(n-m)0.001)。【主要考点】变量定义;逻辑关系。【答案及难度指数

24、】int j=1,i=0,k=0,*s=b;for(j=0;j=y;j+) if(j%2!=0) /判断j是否是奇数 si=j;/将小于y的奇数存入数组s i+; /累加小于y的奇数个数 for(j=0;ji;j+) if(y%sj=0) /判断y是否被sj整除 bk=sj;/将符合条件的结果存入数组b k+; /累加符合条件的结果个数 *m=k; 三【一起来审题】1该程序的解题思路可以分解为以下几步:从0开始逐个求得小于y的奇数按顺序将这些奇数存入数组逐个判断该数组中的值是否能整除y累加能整除y的数值个数最后按要求传回结果。由于采取的是按照小于y的所有整数按照j+逐个增加的顺序进行判断并依次

25、进行存储的思路,所以最后求得的结果是符合要求的,是由小到大排列的。2从已给局部源程序的main主函数开始入手,核心函数fun(y,a,&m);,其中m返回这些数的个数,a传给函数中的参数存放计算结果的数组b。【解题思路】进入fun函数,根据1的分析:首先,通过小于y的循环条件,判断小于y的每一个整数是否是奇数。其中的判断条件if(j%2!=0),并且累计这些奇数个数i+;。然后,对前面求得的数组中的数值逐个进行判断,判断其是否能整除y,其中的判断条件if(y%sj=0),并且累计这些奇数个数k+;。最后,将符合条件的整数存入数组b中,将k值赋给m,返回结果。【主要考点】数组操作;函数传值;if

26、条件语句;for循环语句。第四套一、填空题函数fun的功能是:从三个形参x、y、z中找出中间的那个数,作为函数值返回。例如,当x=121,y=456,z=333时,中间的数为333。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的假设干表达式或语句。注意:局部源程序给出如下。# include int fun(int a,int b,int c) int temp; temp=(ab) ? (bc ? b : (ac ? c : _1_) : (ac) ? _2_ : (bc) ? c : _3_); return temp;main() int x=121,y=

27、456,z=333,mid; mid=fun(x,y,z); printf(nThe middle number is : %dn,mid);二、改错题以下给定程序中,函数fun和quest的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,假设给m输入-50,给n输入30,那么函数求得的一个根值为2.000。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include double quest(double x) return (2*x*x*x-4*x*x+3*x-

28、6);double fun(double m,double n) /*error*/ int r; r=(m+n)/2; /*error*/ while(fabs(n-m)0.001) if(quest(r)*quest(n)0) m=r; else n=r; r=(m+n)/2; return r;main() double m,n,result; printf(Please input m n : n); scanf(%lf%lf,&m,&n); result=fun(m,n); printf(result=%6.3fn,result);三、编程题请编写函数void fun(int y,i

29、nt b,int*m),它的功能是:求出能整除y且是奇数的各整数,并按从小到大的顺序放在b所指的数组中,这些除数的个数通过形参m返回。例如,假设y中的值为90,那么有4个数符合要求,它们是1、3、5、9、15、45。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include # include void fun(int y,int b,int *m) main() int y,a500,m,j; FILE *out; printf(nPlease input an integer number:n); scanf(

30、%d,&y); fun(y,a,&m); for(j=0;jm;j+) printf(%d ,aj); printf(n); fun(730,a,&m); out=fopen(outfile.dat,w); for(j=0;jb) ? (bc ?表示a bc,根据题目要求,那么中间值为b,假设只是满足第一个?前面的条件,而cb,那么选择执行(ac ? c : _1_),当ac时取值c,所以ac) ?是对a、c的比拟选择,第三空处的(bc) ? c根据b、c的判断,题目已经给出了c,所以这里应该是a,这样第三空中对于b、c的判断选择缺少b,所以这里填b,同样也可以根据第一空的逻辑关系进行分析,来

31、填写第二空和第三空。【主要考点】选择语句。二、改错题【答案及难度指数】1double r;2while(fabs(n-m)0.001)【一起来审题】1该题中函数功能是二分法求方程根。其中,二分法的求根过程,是将含根区间平均分为两个小区间,然后判断哪个区间是含根区间。在此根底上,将这里的小含根区间进一步划分为两个更小的区间,继续判断根所在区间。继续细分下去,含根区间将划分地越来越小,区间的范围也越来越小。经过屡次细分后,就可以将此很小区间的中点近似为方程的根了。2从已给定源程序的main主函数开始入手,通过result=fun(m,n);语句调用fun函数求得方程根,其中fun函数对quest函

32、数进行调用,对根进行判断。【解题思路】1fun函数要求返回方程的一个根,由return语句来实现,而函数fun是定义为double型的,但第一个标识下面的r却被定义为int类型。所以int r;改为double r;。2检查while循环的控制表达式(fabs(n-m)0.001)。【主要考点】变量定义;逻辑关系。三、编程题【答案及难度指数】int j=1,i=0,k=0,*s=b;for(j=0;j=y;j+) if(j%2!=0) /判断j是否是奇数 si=j;/将小于y的奇数存入数组s i+; /累加小于y的奇数个数 for(j=0;ji;j+) if(y%sj=0) /判断y是否被sj

33、整除 bk=sj;/将符合条件的结果存入数组b k+; /累加符合条件的结果个数 *m=k; 【一起来审题】1该程序的解题思路可以分解为以下几步:从0开始逐个求得小于y的奇数按顺序将这些奇数存入数组逐个判断该数组中的值是否能整除y累加能整除y的数值个数最后按要求传回结果。由于采取的是按照小于y的所有整数按照j+逐个增加的顺序进行判断并依次进行存储的思路,所以最后求得的结果是符合要求的,是由小到大排列的。2从已给局部源程序的main主函数开始入手,核心函数fun(y,a,&m);,其中m返回这些数的个数,a传给函数中的参数存放计算结果的数组b。【解题思路】进入fun函数,根据1的分析:首先,通过

34、小于y的循环条件,判断小于y的每一个整数是否是奇数。其中的判断条件if(j%2!=0),并且累计这些奇数个数i+;。然后,对前面求得的数组中的数值逐个进行判断,判断其是否能整除y,其中的判断条件if(y%sj=0),并且累计这些奇数个数k+;。最后,将符合条件的整数存入数组b中,将k值赋给m,返回结果。【主要考点】数组操作;函数传值;if条件语句;for循环语句。第五套一、填空题请补充main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,那么取它的绝对值,并显示出来。例如,输入:-666,结果为:666。仅在横线上填写所需的假设干表达式或语句,请勿改动函数中的其他任何内容。注意

35、:局部源程序给出如下。# include # include main() long int a; printf(Enter the data:n); scanf(_1_); printf(The origial data is %ldn,a); if(a0) _2_; printf(n); printf(_3_);二、改错题以下给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;假设未找到,那么函数值为NULL。例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是:abcdx。当字符串中的

36、内容为abcdabfabcdx,t中的内容为abd时,那么程序输出未找到信息not found!。请修改程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include # include char *fun(char *str,char *t) char *p,*r,*s; /*error*/ s=NuLL; while(*str) p=str; r=t; while(*r) /*error*/ if(r=p) r+; p+; else break; if(*r=0) s=str; str+; return s;m

37、ain() char str100,t100,*p; printf(nplease enter string s:); scanf(%s,str); printf(nplease enter substring t:); scanf(%s,t); p=fun(str,t); if(p) printf(nthe result is:%sn,p); else printf(nnot found!n);三、编程题编写函数int fun(int mm,int bMAX),该函数的功能是求出小于或等于mm的所有素数,并放在b数组中,该函数返回所求出的素数的个数。请勿改动主函数main与其他函数中的任何内

38、容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include # include # define MAX 100int fun(int mm,int bMAX) main() int m,i,sum; int bMAX ; FILE *out; printf(input a data:n); scanf( %d,&m); sum=fun(m,b); for(i=0 ;isum;i+) if(i%10=0 & i!=0) printf(n); printf(%5d,bi); sum=fun(28,b); out=fopen(outfile.dat,w); f

39、or(i=0 ;isum;i+) fprintf(out,%dn,bi); fclose(out);一、填空题【答案及难度指数】1%ld,&a2a=-a3%ld,a【一起来审题】该题中函数功能是取长整数的绝对值。此类题的解题思路是判断键盘输入的长整数的正负,然后对其进行操作。【解题思路】第一空:获得由键盘输入的长整数,根据C语言提供的标准输入函数scanf函数格式,第一空填%ld,&a。第二空:if(a1;i-) for(j=2;j=i) /假设是素数,将其存入b bk=i; k+; /累加素数个数 return k+;【一起来审题】该程序功能是求一定范围内的素数。素数是只能被1和自身除尽的数

40、。判断i是不是素数最简单的方法就是用2i-1去除i,只要能除尽就不是素数。【解题思路】进入fun函数,根据前面的分析:1首先,判断i是否是素数,即是否能被2i-1整除。2假设是素数,就将i存入数组b,并对计数器k加1。3最后返回素数的个数k。其中,对于素数的判断并不只局限于上面提到的方法,也可以采用其他的方法进行判断。【主要考点】数组操作;if条件语句;for循环语句。第6套一、填空题请补充函数fun,它的功能是:计算并输出m包括m以内能被2或5整除的所有自然数的倒数之和。例如,在主函数中从键盘给m输入21后,输出为:s=1.731151。请勿改动主函数main与其他函数中的任何内容,仅在fu

41、n函数的横线上填写所需的假设干表达式或语句。注意:局部源程序给出如下。# include double fun(int m) int j; double toal=0.0; for(j=1;_1_;j+) if(j%2=0 _2_ j%5=0) toal+=_3_/j; return toal;main() int m; double f; printf(nInput m: ); scanf(%d,&m); f=fun(m); printf(nns=%fn,f);二、改错题以下给定程序中,函数fun的功能是:按以下递归公式求函数值。10(n=1)fun(n)=fun(n-1)+2(n1)例如,

42、当给n输入6时,函数值为20。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include /*error*/int fun(n) int m; /*error*/ if(n=1) m=10; else m=fun(n-1)+2; return (m);main() int n; printf(Enter n: ); scanf(%d,&n); printf(The result:%dnn,fun(n);三、编程题请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为Ju

43、stabc,那么排序后输出为Jutsbac。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include # include # include # include void fun(char *str,int n) main() char str10; FILE *out; printf(input string with seven characters:); gets(str); fun(str,7); printf(n%s,str); out=fopen(outfile.dat,w); strcpy(str,

44、Justsdf); fprintf(out,%s,str); fclose(out);一、填空题【答案及难度指数】1j=m2|31.0【一起来审题】1该程序功能是求小于等于m的所有被2或5整除的所有自然数的倒数之和。从已给局部源程序的main主函数开始入手,主函数f=fun(m);通过键盘输入自然数m,作为参数传给函数double fun(int m)中的m。2进入fun函数,首先通过循环对小于m的自然数进行判断,求得所有被2或5整除的自然数,然后求得该自然数的倒数并对其求和。【解题思路】第一空:for(j=1;_1_;j+),根据题目要求,对所有小于等于m的数值进行循环判断,条件应该是满足j

45、=m,因此第一空应填j=m。第二空:判断是否能被2或5整除,其中的判断条件中的或用逻辑语句应为|,因此第二空应填|。第三空:toal+=_3_/j;语句是对满足被2或5整除的自然数的倒数求和,函数的返回值为double型,所以j的倒数为1.0/j,因此第三空应填1.0。【主要考点】逻辑语句。二、改错题【答案及难度指数】1int fun(int n)2if(n=1)【一起来审题】1该题中函数功能是按题目中给出的递归公式求函数值。其中,递归是指函数直接或者间接调用函数本身的一种方法。2从已给定源程序的main主函数开始入手,从键盘获得输入的参数n,然后通过printf(The result:%dn

46、n,fun(n);语句调用fun函数,计算公式的值。【解题思路】1定义函数fun时,形参n并没有指定参数类型,因此,int fun(n)改为int fun(int n)。2根据题目要求,原题中的if(n=1)应该是用于判断n是否等于1,但是被错误表示成赋值表达式。因此,if(n=1)应该改为if(n=1)。【主要考点】函数定义;逻辑表达式。三、编程题【答案及难度指数】char t;int i,j;for(i=1;in-2;i+) /对n个元素进行循环选择 for(j=i+1;jn-1;j+) if(stristrj) /将stri设为最大值,和剩下的jn-1进行比拟 t=stri; stri=

47、strj; strj=t; 【一起来审题】该程序功能是对字符的排序。字符的排序有多种方法,如冒泡排序、选择排序等。此题答案中采用的是选择排序。其中,选择排序法的降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的n-1个元素中再跳出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比拟完最后两个元素。【解题思路】进入fun函数,根据前面的分析:选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的n-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比拟完最后两个元素。【主要考点】数组操作;函数传值

48、;if条件语句;for循环语句。第七套一、填空题请补充fun函数,该函数的功能是把从键盘输入的3个整数按从大到小输出。例如,输入11 65 13,结果输出65 13 11。仅在横线上填写所需的假设干表达式或语句,请勿改动函数中的其他任何内容。注意:局部源程序给出如下。# include # include main() int a,b,c,t; printf(Input a,b,cn); scanf(%d%d%d,&a,&b,&c); if(_1_) t=a; a=b; b=t; if(_2_) t=c; c=a; a=t; if(_3_) t=b; b=c; c=t; printf(The

49、resultn); printf(from big to small: %d %d %dn,a,b,c);二、改错题以下给定程序中,计算如下公式的值:函数fun的功能是:根据整型形参m的值,计算上面公式。例如,假设m的值为10,那么应输出:0.450232。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include double fun(int m) double c=1.0; int k;/*error*/ for(k=2;km;k+) /*error*/ c-=1/(k*k); return(c);main(

50、) int para=10; printf(nThe result is %1fn,fun(para);三、编程题请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数不得调用C语言提供的将字符串转换为整数的函数。例如,假设输入字符串:-999,那么函数把它转换为整数值:-999。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include # include long fun(char *str) main() char s10; long n; FILE *out; char *t=123,789,71

51、02,-4356; printf(Enter a string:n); gets(s); n=fun(s); printf(%ldn,n); out=fopen(outfile.dat,w); for(n=0;n4;n+) fprintf(out,%ldn,fun(tn); fclose(out);一、填空题【答案及难度指数】1ab2ac3bc【一起来审题】该题中函数功能是把从键盘输入的三个整数按从大到小的顺序输出。此题中函数的实现过程是通过if语句分别对三个整数进行两两判断。【解题思路】第一空:根据第一空下面的三条赋值语句,可以很清楚地知道第一个if条件语句中是对a与b进行比拟。题干要求对三

52、个数按从大到小的顺序输出,if下面的交换关系说明,当a小于b时要对a与b的位置进行交换,所以第一空填ab。同理,第二空填ac,第三空填bc。【主要考点】if条件语句。二、改错题【答案及难度指数】1for(k=2;k=m;k+)2c-=1.0/(k*k);【一起来审题】该程序功能是根据题目要求计算公式。从已给定源程序的main主函数开始入手,printf(nThe result is%1fn,fun(para);语句中的fun(para)将参数para传给函数double fun(int m)中的m,实现公式的计算结果。【解题思路】1第一个标识下面,for(k=2;km;k+)中的循环条件根据题

53、干中的公式,可以知道要计算的公式中应包括k=m时的值,所以循环条件应该改为for(k=2;k=m;k+)。2第二个标识下面,因为c被定义为浮点型,k被定义为整型,所以1/(k*k)的计算结果为整型,即c-=1/(k*k);的返回值为整型,随着k的增加,计算结果一直为0,因此改为c-=1.0/(k*k);。【主要考点】C语言根本语法;变量类型。三、编程题【答案及难度指数】long s=0,t;int i=0,j,n=strlen(str),k,s1;/求得字符串长度nif(str0=-) i+;for(j=i;j=n-1;j+) t=strj-0;/把字符变成数值 s1=10; for(k=j;

54、kn-1;k+) t*=s1; /把t中原来的数值增加10倍,即向左移动一位 s+=t; /把转换后的数值t加在个位 if(str0=-) /判断数字字符是否为负数 return-s; /负数返回-s else return s; /正数返回s【一起来审题】该程序功能是将一个数字字符串转换为一个整数。其中,解题思路是将每位数字字符串的ASCII码减去48字符0的ASCII码值,变成数值09。然后再不断进行高位乘以10加低位的运算,或者反过来从低位向高位求,即不断进行低位加高位乘以10的运算。【解题思路】进入fun函数,根据前面的分析:从左到右移动指针str,利用上一步不断把t中的数据左移一位,

55、把str当前所指字符转换成数字再加上低位,从而把数字字符串转换成一个整数。【主要考点】数组操作;for循环语句。第8套一、填空题给定程序的功能是分别统计字符串中大写字母和小写字母的个数。例如,给字符串str输入:sfd34ddfoFFDEsd23sdf,那么输出结果应为:cap=4,min=13请勿改动函数中的其他内容,仅在横线上填写所需的假设干表达式或语句。注意:局部源程序给出如下。# include void fun(char *str,int *x,int *y) while(*str) if(*str=A & *str=a & *str=z) _2_; str+; main() cha

56、r str100; int cap=0,min=0; printf(nPlease a string to count : ); gets(str); fun(str,&cap,&min); printf(n cap=%d min=%dn,_3_);二、改错题以下给定程序中,函数fun的功能是:根据以下公式求值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。请修改程序中的错误,使程序能得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include # include double fu

57、n(double eps) double r,temp; int m=1; r=0.0; /*error*/ temp=0; /*error*/ while(temp=eps) r+=temp; temp=(temp*m)/(2*m+1); m+; return (r*2);main() double x; printf(nPlease enter a precision: ); scanf(%lf,&x); printf(neps=%lf,Pi=%lfnn,x,fun(x);三、编程题请编写一个函数fun,它的功能是:比拟两个字符串的长度(不得调用C语言提供的求字符串长度的函数),函数返回较

58、长的字符串。假设两个字符串长度相同,那么返回第一个字符串。例如,输入beijing和shanghai两个字符串,函数将返回shanghai。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的假设干语句。注意:局部源程序给出如下。# include char *fun(char *str,char *t) main() char a20,b10,*p,*q; int i; FILE *out; printf(Input one string:); gets(a); printf(Input another string:); gets(b); printf(%sn

59、,fun(a,b); out=fopen(outfile.dat,w); fprintf(out,%s,fun(hunan,changsha); fclose(out);一、填空题【答案及难度指数】1(*x)+2(*y)+3cap,min【一起来审题】1该程序功能是统计字符串中大写字母和小写字母的个数。2从已给局部源程序的main主函数开始入手,主函数执行fun(str,&cap,&min);,将参数cap、min传递给fun函数的x、y参数,void fun(char *str,int *x,int *y)对大、小写字母进行统计。3进入fun函数,通过while循环对字符串中的每一个字符进行

60、判断,然后对其进行计数统计。【解题思路】第一空:if(*str=A & *str=eps)【一起来审题】该题中函数功能是根据公式计算值。从已给定源程序的main主函数开始入手,通过键盘输入制定精度,然后通过printf(neps=%lf,Pi=%lfnn,x,fun(x);语句来调用fun函数。【解题思路】1根据题目中的公式,应该从1开始加。如果temp起始为0,结果就少加一个1。又由于temp定义为浮点数,所以,第一个错误标识下应该将temp=0;改为temp=1.0;。2根据题目知,当精度大于等于给定的精度变量eps时,就会继续进行计算,直到满足精度小于给定的eps,所以,第二个标识下应该

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论