c语言上机试题.pdf
全国及四川二级C语言上机题目第一套-、填空题请补充f u n函数,f u n函数的功能是求m的阶乘。请勿改动主函数ma i n与其他函数中的任何内容,仅在f u n函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#i nclu d e long f u n(i nt m)(i f(1 )r e t u r n(m*f u n(_2 _);r e t u r n _3 _;)ma i nO(p r i nt f(8!=%ld n,f u n(8):二、改错题下列给定程序的功能是:读入 个整数n(2 WnW5 0 0 0),打印它的所有为素数的因子。例如,若输入整数1 2 3 4,则应输出:2、6 1 70请修改程序中的错误,使程序能得出正确的结果。注意:不要改动ma i n函数,不能增行或删行,也不能更改程序的结构。#i nclu d e#i nclu d e /*e r r or*/Pr i me(i nt m);i nt j,p;P=l;/*e r r or*/f or(j=2;j m;j+)i f!(m%j)(p=0;br e a k;)r e t u r n(p);ma i nO(i nt i,n;p r i nt f(*np le a s e e nt e r a n i nt e g e r nu mbe r be t w e e n 2 a nd 5 0 0 0:);sc an f&n);p r i nt f (,znnTh c p r i me f a ct or (s)of%d i s (a r e):n);f or(i=2;i n;i+)i f(!(n%i)&(Pr i me(i)p r i nt f (%4 d,”,i);p r i nt f(n);)三、编程题数组p oi nt 中存放着m个人的成绩,请编写函数f u n,它的功能是:返回高于平均分的人数,并将高于平均分的分数放在h i g h 所指的数组中。例如,当p oi nt 数组中的数据为5 0、6 0、6 5、7 0、7 5、8 0、8 8、9 0、9 5 时,函数返回的人数应该是5,h i g h中的数据应为7 5、8 0、8 8、9 0、9 5。请勿改动主函数ma i n与其他函数中的任何内容,仅在函数f u n的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#i nclu d e#i nclu d e#i nclu d e i nt f u n(i nt p oi nt,i nt n,i nt h i g h)(ma i n()(i nt j,m,h i g h 9;i nt p oi nt 9 =5 0,6 0,6 5,7 0,7 5,8 0,8 8,9 0,9 5;FILE*ou t;m=f u n(p oi nt,9,h i g h);p r i nt f(nHi g h t h e a v e r a g e p oi nt a r e :);ou t=f op e n(/zou t f i le.d a t ,w );f or(j=0;j l(2)m-1 (3)1【一起来审题】(1)该程序功能是对阶乘的实现。其中,阶乘的手算公式定义为:-m!=m*(m-l)*(m-2)*1 mlm l时,应该用什么程序来实现阶乘的计算:二是当m=l 时,函数直接返回1 即可。【解题思路】第一空:i f(1 )是要根据m的取值来判断使用何种阶乘的计算公式的。这里根据第2 句递归调用语句,可知该语句是用来计算当时的阶乘。因此第一空i f 语句里面的条件应该是满足m l。所以,第一空应填m l。第二空:r e t u r n (m*f u n(2)很显然是采用递归函数来实现阶乘的计算,所以,第二空应填mT。第三空:r e t u r n _ 3 该语句是要实现当时的阶乘计算。所以,第三空应填1。【主要考点】递归函数。二、改错题【答案及难度指数】(1)P r i m e(i n t m)(2)i f(!(r e j)【起来审题】(1)整数n 的素数因子为整除n 的所有素数,但不含n 本身。素数是指能被1 和本身整除的正整数(1),所以判别n 是否为素数,只要用2、3、n T 这些数逐个去除n,观察余数是否为0即可,只要有次相除余数为0,n 就不是素数,否则n 为素数。因此,求整数n 的素数因子,要从求整数n 的因子和判断该因子是否为素数的两方面来看。(2)从已给定源程序的m a i n 主函数开始入手,核心部分是循环判断i f (!(n%i)&(P r i m e(i),!(n%i)为判断i 是否是n 的因子,P r i m e 自定义函数的功能是判断i 是否为索数,&与逻辑是指当两个判断条件都为真的时候,i 即为n 的素因子。【解题思路】(1)第一个标识下面的P r i m e (i n t m);在程序中显然是一个函数,因此应将后面的分号去掉。(2)第二个标识下面的f o r 语句最简单的应用形式为:f o r (循环变量赋初值;循环条件;循环变量增值)语句。显然i f 语句后面缺少括号,因此,i f !(瞰J)改为i f(!(m%j)。该题主要考查标点符号、运算符、基本定义。【主要考点】i f 条件语句;函数定义。三、编程题【答案及难度指数】i n t j,k=0,a v e r a ge=0;f o r(j=0;j n;j+)a v c r a ge+=po i n t j ;统计总分数a v e r a ge/=n;/求平均分f o r(j=0;j a v e r a ge)逐个判断每个分数是否大于平均分(h i gh k =po i n t j ;将高于平均分的人放入h i gh 数组k+;统计大于平均分的人数)r e t u r n k;【一起来审题】(1)该程序功能是返回高于平均分的人数。它的解题思路可以分解为以下几步:求总分一求平均分一逐个元素与平均分比较一统计高于平均分的人数。(2)从已给部分源程序的m a i n 主函数开始入手,核心函数f u n (po i n t,9,h i gh)中的参数由题目可知,po i n t存放着m 个人的成绩,h i gh 存放高于平均分的分数。另外,根据po i n t 的定义,可知9为po i n t 数组中元素的个数,传给函数f u n 中的参数n。【解题思路】进入f u n 函数,根据前面的分析:首先,定义变量a v e r a ge,通过循环,用a v e r a ge+二 po i n t j 计算总分数,然后通过a v e r a ge/二 n;语句来计算平均分。其次,通过循环,让每个分数利平均分比较,高于平均分数的分数给h i gh 口 (h i gh k =po i n t j ;)o在进行以上循环的同时,定义了一个变量匕每当发现一个大于平均分的分数,k 自动加1 (k+;)。最后,返回k 值,即是数组p o i n t 口中高于平均分的元素个数。【主要考点】数组操作;i f 条件语句;f o r 循环语句。第二套一、填空题请补充f u n 函数,该函数的功能是:判断一个年份是否为闺年。例如,2 0 0 7 年不是闰年,2 0 0 8 是闰年。请勿改动主函数m a i n 与其他函数中的任何内容,仅在f u n 函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#i n c l u d e#i n c l u d e i n t f u n(i n t n)i n t f l a g=0;i f(n%4=0)i f(1 )f l a g=l;i f(2 )f l a g=l;r e t u r n _ _3 _ _ _;m a i n ()(i n t y e a r;p r i n t f(I n p u t t h e y e a r:);s c a n f(%d,&y e a r);i f(f u n(y e a r)p r i n t f C%d i s a l e a p y e a r.n,y e a r);e l s ep r i n t f r%d i s n o t a l e a p y e a r.n ,y e a r i ;二、改错题下列给定程序中,f u n 函数的功能是:根据形参n,计算如下公式的值。例如,若输入5,则应输出2.2 8 3 3 3。请修改程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动m a i n 函数,不能增行或删行,也不能更改程序的结构。#i n c l u d e#i n c l u d e d o u b l e f u n(i n t n)(d o u b l e s=l.0;i n t i;/*e r r o r*/f o r(i=2;i =n;i+)s+=l.0/k;/*e r r o r*/填 空)m a i n()(i n t n;p r i n t f(X n p l e a s e e n t e r 1 i n t e g e r n u m b e r s:n);s c a n f (%d ,&n);p r i n t f C n n t h e r e s u l t i s%l f n*,f u n(n);)三、编程题请编写函数f u n,它的功能是:求出1 到5 0 0 之内能被7 或1 1 整除,但不能同时被7 和1 1 整除的所有整数,并将它们放在b 所指的数组中,通过m 返回这些数的个数。请勿改动主函数m a i n 与其他函数中的任何内容,仅在函数f u n 的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#i n c l u d e#i n c l u d e v o i d f u n (i n t *b,i n t *m)()m a i n ()i n t a 5 0 0,m,i;FI L E *o u t;f u n (a,&m);o u t=f o p e n(o u t f i l e.d a t,w);f o r (i=0;i m;i+)i f(i+l)%1 0=0)(p r i n t f (,/%5 d n,,a i);f p r i n t f (o u t,d n,a i);e l s e(p r i n t f (5 d,a i);f p r i n t f (o u t,%d,a i);)f c l o s e(o u t);)答案一、填空题【答案及难度指数】(1)n%1 0 0!=0 (2)n%40 0=0 (3)f l a g【一起来审题】(1)该题中函数功能是判断一个年份是否为闰年。其中,闰年的条件是年数可以被4整除,即为闰年;被1 0 0 整除而不能被40 0 整除的为平年;被1 0 0 整除也可被40 0 整除的为闰年。(2)从已给部分源程序的m a i n 主函数开始入手,主函数中的 i f (f u n (y e a r)判断语句,调用函数f u n 对年数进行判断。(3)进入f u n 函数,利用i f 对年数进行判断。【解题思路】第一空:根据闰年的条件和已有的语句“i f(n%4=0),知道这里的条件应该是能被4整除但要排除被1 0 0 整除的整数,所以第一空填限1 0 0!二 0”。第二空:被1 0 0 整除也可被4 0 0 整除的为闰年,所以第二空填n%4 0 0=0 第三空:主函数中 i f(f u n(y e a r)语句是对函数返回值的判断,所以f u n函数应该将对n的判断的门a g值返回,第三空填f l a g”。【主要考点】i f 条件语句。二、改错题【答案及难度指数】(1)s+=l.0/i;(2)r e t u r n s;起来审题】该题中函数功能是求题干累加公式的值。从已给定源程序的m a i n主函数开始入手,通过pr i nt f(n nt h er e s u l t i s%l f n,f u n(n)语句调用f u n函数,求得公式值。【解题思路】(1)第一个标识下,在以i 为循环参数的f or 循环中进行公式累加,每一项为1.0/i,所以 s+=L0/k;改为“s+:1.0/i;(2)第二个标识下,首先根据题干,将填空删除,函数定义为d ou b l e f u n(i nt n),它有d ou b l e 型的返回值,所以这里返回累加公式的计算结果,即“r e t u r n s;。【主要考点】函数功能;函数返回。三、编程题【答案及难度指数】i nt j,k=0;f or(j=2;j 50 0;j+)循环条件i f(j%7=0|I j%l l=0)&j%77!=0)判断是否符合题干要求b k+=j;将结果放入数组b*m=k;将累加器值赋值给m【一 起来审题】(1)该程序的解题思路,可以分解为以下儿步:判断是否被7整除一判断或者是否被1 1 整除f并且不被77整除f按要求返回计算结果。(2)从已给部分源程序的m a i n主函数开始入手,核心函数f u n(a,&m);,其中m 返回这些数的个数,a 传给函数中的参数,存放计算结果的数组b。【解题思路】进入f u n函数,根据前面的分析:首先,定义变量k,设置为累计器,计算符合条件的数的个数。然后,通过循环,判断小于50 0 的每一个整数是否符合题干中的要求。其中的判断条件能否被7或者被1 1 整除为j%7=0 j%l l=0,不能被1 1 和7同时整除为j%77!=0,它们之间的并关系就用&连接,最后结果即为(j%7=0|j%U=0)&j%77!=0 o最后,将符合条件的整数存入数组b 中,同时对k 进行自加,将k 值赋给m,返回结果。【主要考点】数组操作;函数传值;i f 条件语句;f or 循环语句。第三套一、填空题函数f u n的功能是:从三个形参x、y、z 中找出中间的那个数,作为函数值返回。例如,当x=1 2 1,y=4 56,z=3 3 3 时,中间的数为3 3 3。请勿改动主函数m a i n与其他函数中的任何内容,仅在f u n函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#i nc l u d e i nt f u n(i nt a,i nt b,i nt c)(i nt t e m p;t e m p=(a b)?(b c?b :(a c?c :_ _ _ 1 _ _ _):(a c)?2:(b c)?c :3 _);re turn te m p;)m a i n O(i n t x=1 2 1,y=4 5 6,z=3 3 3,m i d;m i d=f un(x,y,z);pri n tf (X n Th e m i d d l e n um b e r i s:%d n”,m i d);)二、改错题下列给定程序中,函数f un 和que st的功能是:用二分法求方程2 x3-4 x、3 x-6=0 的一个根,并要求绝对误差不超过0.0 0 1。例如,若给m 输入-5 0,给n 输入3 0,则函数求得的一个根值为2.0 0 0。清修改程序中的错误,得出正确的结果。注意:不要改动m a i n 函数,不能增行或删行,也不能更改程序的结构。#i n c l ud e#i n c l ud e d o ub l e que st(d o ub l e x)(re turn (2*x*x*x-4*x*x+3*x-6);d o ub l e f un(d o ub l e m,d o ub l e n)(/*e rro r*/i n t r;r=(m+n)/2;/*e rr()r*/wh i l e(f a b s(n-m)0.0 0 1)i f (que st(r)*que st(n)0)m=r;e l sen=r;r=(m+n)/2;re turn r;)m a i n()(d o ub l e m,n,re sul t;pri n tf(P l e a se i n put m n :n);sc a n f&m,&n);re sul t=f un(m,n);pri n tf(re sul t=%6.3 f n”,re sul t);三、编程题请编写函数vo i d f un(i n t y,i n t b ,i n t*m),它的功能是:求出能整除y且是奇数的各整数,并按从小到大的顺序放在b 所指的数组中,这些除数的个数通过形参m 返回。例如,若y中的值为9 0,则有4 个数符合要求,它们是1、3、5、9、1 5、4 5。请勿改动主函数m a i n 与其他函数中的任何内容,仅在函数f un 的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#i n c l ud e#i n c l ud e vo i d f un(i n t y,i n t b ,i n t*m)(m a i n ()(i n t y,a 5 0 0 ,m,j;FI L E *o ut;pri n tf (*X n P l e a se i n put a n i n te g e r n um b e r:n,z);sc a n f&y);f un(y,a,&m);f o r(j=0;j m:j+)pri n tf(*%d ”,a j );pri n tf(n);f un (7 3 0,a,&m);o ut=f o pe n(o utf i l e.d a t,w);f o r(j=0;j b)?(b c?表示a b c,根据题目要求,则中间值为b,若只是满足第一个”?前面的条件,而c b,则选择执行(a c?c :1 当a c 时取值c,所以a c 时中间值为a,所以第一空填飞.第二空:语句(a c)?是对a、c 的比较选择,第三空处的(b c)?c 根据b、c 的判断,题目已经给出了c,所以这里应该是a,这样第三空中对于b、c 的判断选择缺少b,所以这里填b ,同样也可以根据第一空的逻辑关系进行分析,来填写第二空和第三空。【主要考点】选择语句。二、改错题【答案及难度指数】(1)d o u b l e r;(2)w h i l e(f a b s(n-m)0.001)【一起来审题】(1)该题中函数功能是二分法求方程根。其中,二分法的求根过程,是将含根区间平均分为两个小区间,然后判断哪个区间是含根区间。在此基础上,将这里的小含根区间进步划分为两个更小的区间,继续判断根所在区间。继续细分下去,含根区间将划分地越来越小,区间的范围也越来越小。经过多次细分后,就可以将此很小区间的中点近似为方程的根了。(2)从已给定源程序的m a i n 主函数开始入手,通过“r e s u l t=f u n(叫n);语句调用f u n 函数求得方程根,其中f u n 函数对q u e s t 函数进行调用,对根进行判断。【解题思路】(1)f u n 函数要求返回方程的一个根,由r e t u r n 语句来实现,而函数f u n 是定义为d o u b l e 型的,但第一个标识下面的r 却被定义为i n i 类型。所以i n t r;改为 d o u b l e r;(2)检杏w h i l e 循环的控制表达式”(f a b s(n-l)0.001)”。【主要考点】变量定义;逻辑关系。【答案及难度指数】i n t j=l,i=0,k=0,*s=b;f o r(j=0;j=y;j+)i f(j%2!=0)判断j 是否是奇数(s i =j;将小于y 的奇数存入数组si+;/累加小于y 的奇数个数)f o r(j=0;j s j ;将符合条件的结果存入数组bk+;累加符合条件的结果个数)*m=k;【一起来审题】(1)该程序的解题思路可以分解为以下几步:从。开始逐个求得小于y 的奇数一按顺序将这些奇数存入数组一逐个判断该数组中的值是否能整除y 累加能整除y 的数值个数最后按要求传回结果。由于采取的是按照小于y 的所有整数按照j+逐个增加的顺序进行判断并依次进行存储的思路,所以最后求得的结果是符合要求的,是由小到大排列的。(2)从已给部分源程序的m a i n 主函数开始入手,核心函数”f u n(y,a,如1);,其中m 返回这些数的个数,a传给函数中的参数存放计算结果的数组b。【解题思路】进入f u n 函数,根 据(1)的分析:首先,通过小于y 的循环条件,判断小于y 的每一个整数是否是奇数。其中的判断条件“i f(j%2!=0),并且累计这些奇数个数 i+;”。然后,对前面求得的数组中的数值逐个进行判断,判断其是否能整除y,其中的判断条件i f(y%s j =O),并且累计这些奇数个数 k+;。最后,将符合条件的整数存入数组b 中,将k 值赋给m,返回结果。【主要考点】数组操作;函数传值;i f 条件语句;f o r 循环语句。第四套一、填空题函数f u n 的功能是:从三个形参x、y、z 中找出中间的那个数,作为函数值返回。例如,当x=4 2L y=4 5 6,z=333时,中间的数为333。请勿改动主函数m a i n 与其他函数中的任何内容,仅在f u n 函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#i n c l u de i n t f u n(i n t a,i n t b,i n t c)(i n t t e m p;t e m p=(a b)?(b c?b :(a c?c :_ _ _ 1 _ _ _):(a c)?2:(b c)?c :3);r e t u r n t e m p;)m a i n O(i n t x=1 21,y=4 5 6,z=333,m i d;m i d=f u n(x,y,z);p r i n t f(n T h e m i ddl e n u m b e r i s :%dn ,m i d);)二、改错题下列给定程序中,函数f u n 和q u e s t 的功能是:用二分法求方程2x L4 x 2+3x-6=0 的一个根,并要求绝对误差不超过0.0 0 1。例如,若给m 输入-5 0,给n 输入3 0,则函数求得的个根值为2.0 0 0。请修改程序中的错误,得出正确的结果。注意:不要改动m a i n 函数,不能增行或删行,也不能更改程序的结构。#i n c l u de#i n c l u de do u b l e q u e s t(do u b l e x)(r e t u r n (2*x*x*x-4*x*x+3*x-6);)do u b l e f u n(do u b l e m,do u b l e n)(/*e r r c)r*/i n t r;r=(m+n)/2;/*e r r o r*/w h i l e(f a b s(n-m)0.0 0 1)i f(q u e s t(r)*q u e s t(n)0)m=r;e l s en=r;r=(m+n)/2:)r e t u r n r;m a i n O(do u b l e m,n,r e s u l t;p r i n t f(P l e a s e i n p u t m n :n);s c a n f (“%&m,&.n);r e s u l t=f u n(m,n);p r i n t f (z,r e s u l t=%6.r e s u l t);)三、编程题请编写函数v o i d f u n(i n t y,i n t b,它的功能是:求出能整除y 且是奇数的各整数,并按从小到大的顺序放在b 所指的数组中,这些除数的个数通过形参m 返回。例如,若y 中的值为9 0,则有4 个数符合要求,它们是1、3、5、9、1 5、4 5。请勿改动主函数m a i n 与其他函数中的任何内容,仅在函数f u n 的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#i n c l u de#i n c l u de v o i d f u n(i n t y,i n t b,i n t *m)(m a i n ()(i n t y,a 5 0 0,m,j;F I LE *o u t;p r i n t f(*n P l e a s e i n p u t a n i n t e g e r n u m b e r:Xn);s c a n f (d,&y);f u n(y,a,&m);f o r(j=0;j m;j+)p r i n t f (/z%d,a j);p r i n t f(n);f u n (730,a,&m);o u t=f o p e n(o u t f i l e.da t,w);f o r(j=0;j b)?(b c?表示a b c,根据题目要求,则中间值为b,若只是满足第一个”?前面的条件,而c b,则选择执行(a c?c :1 )当a c时取值c,所以ac时中间值为a,所以第一空填a。第二空:语句(a c)?是对a、c的比较选择,第三空处的(b c)?c根据b、c的判断,题目已经给出了c,所以这里应该是a,这样第三空中对于b、c的判断选择缺少b,所以这里填b”,同样也可以根据第一空的逻辑关系进行分析,来填写第二空和第三空。【主要考点】选择语句。二、改错题【答案及难度指数】(1)d oub le r;(2)while(f a b s(n-m)0.0 0 1)【一 起来审题】(1)该题中函数功能是二分法求方程根。其中,二分法的求根过程,是将含根区间平均分为两个小区间,然后判断哪个区间是含根区间。在此基础匕将这里的小含根区间进一步划分为两个更小的区间,继续判断根所在区间。继续细分下去,含根区间将划分地越来越小,区间的范围也越来越小。经过多次细分后,就可以将此很小区间的中点近似为方程的根了。(2)从已给定源程序的ma in主函数开始入手,通过 re sult=f un(m,n);语句调用f un函数求得方程根,其中f un函数对que st函数进行调用,对根进行判断。【解题思路】(1)f un函数要求返回方程的个根,由re turn语句来实现,而函数f un是定义为d oub le型的,但第个标识下面的r却被定义为int类型。所以int r;改 为 d oub le r;(2)检查while循环的控制表达式(f a b s(n-m)0.0 0 1)”,知道开始的循环值为8 0,必然不会进入循环体,不符合逻辑,所以应该为:while(f a b s(n-m)0.0 0 1)【主要考点】变量定义;逻辑关系。三、编程题【答案及难度指数】int j=l,i=0,k=0,*s=b;f or(j=0;j=y;j+)if(j%2!=0)判断j是否是奇数s i=j;将小于y的奇数存入数组si+;累加小于y的奇数个数)f or(j=0;j i;j+)if(y%s j=0)判断y是否被s j 整除(b k=s j;将符合条件的结果存入数组bk+;累加符合条件的结果个数*m=k;【一 起来审题】(1)该程序的解题思路可以分解为以下几步:从0 开始逐个求得小于y的奇数一按顺序将这些奇数存入数组一逐个判断该数组中的值是否能整除y-累加能整除y的数值个数一最后按要求传回结果。由于采取的是按照小于y的所有整数按照j+逐个增加的顺序进行判断并依次进行存储的思路,所以最后求得的结果是符合要求的,是由小到大排列的。(2)从已给部分源程序的m ain 主函数开始入手,核心函数f un(y,a,&m);,其中m 返回这些数的个数,a传给函数中的参数存放计算结果的数组b。【解题思路】进入f un 函数,根 据(1)的分析:首先,通过小于y 的循环条件,判断小于y 的每一个整数是否是奇数。其中的判断条件“if(我2!=0),并且累计这些奇数个数 i+;。然后,对前面求得的数组中的数值逐个进行判断,判断其是否能整除y,其中的判断条件 if(y%s j =0),并且累计这些奇数个数 k+;。最后,将符合条件的整数存入数组b 中,将k 值赋给m,返回结果。【主要考点】数组操作;函数传值;if 条件语句;f o r 循环语句。第五套一、填空题请补充m ain 函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-666,结果为:666o仅在横线上填写所需的若干表达式或语句,请勿改动函数中的其他任何内容。注意:部分源程序给出如下。#in cl ude#in cl ude m ain O(l o n g in t a;p r in tf(E n ter th e data:n );scan f (_ _ _ 1_ _ _);p r in tf(T h e o r ig ial data is%l d n”,a);if(a 0)2 _;p r in tf(n);p r in tf (3.);二、改错题下列给定程序中函数f un 的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NU L L。例如,当字符串中的内容为ab cdab f ab cdx,I 中的内容为ab 时,输出结果应是:ab cdxo 当字符串中的内容为ab cdab f ab cdx,t中的内容为ab d时,则程序输出未找到信息n o t f o un d!”。请修改程序中的错误,使程序能得出正确的结果。注意:不要改动m ain 函数,不能增行或删行,也不能更改程序的结构。#in cl ude#in cl ude#in cl ude ch ar *f un(ch ar *str,ch ar *t)(ch ar *p,*r,*s;/*cr r o i、*/s=NuL L;wh il e(*str)p=str;r=t;wh il e(*r)/*r r o r*/if(r=p)(r+;P+;)el se(b r eak;)if(*r=0)s=str;str+;)r etur n s;m ain O(ch ar str 100,t 100,*p;p r in tf (z,n p l ease en ter str in g s:);s c a nfs t r);p r in tf (z,n p l ease en ter sub str in g t:);scan f t);p=f un(str,t);if (p)p r in tf C n th e r esul t is:%s n ,p);el sep r in tf (z/n n o t f o un d!nz/);三、编程题编写函数in i f un(in t in m,in t b M A X),该函数的功能是求出小于或等于nu n的所有素数,并放在b数组中,该函数返回所求出的素数的个数。请勿改动主函数main与其他函数中的任何内容,仅在函数fu n的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#inclu de#inclu de#define MA X 1 00int fu n(int mm,int bMA X)main()(int m,i,su m;int bMA X;F ILE *ou t;pr int f(inpu t a dat a:Xn);scanf(,zsu m=fu n(m,b);for(i=0;i su m;i+)if(i%1 0=0&i!=0)pr int f(n);pr int f(%5 d,bi);)su m=fu n(2 8,b);ou t=fopen(,zou t f i le.dat ,w );for(i=0;i su m;i+)fpr int f(ou t,bi);fclose(ou t);)一、填空题【答案及难度指数】(1)(2)a=-a(3)【一起来审题】该题中函数功能是取长整数的绝对值。此类题的解题思路是判断键盘输入的长整数的正负,然后对其进行操作。【解题思路】第一空:获得由键盘输入的长整数,根据C 语言提供的标准输入函数scanf函数格式,第一空填飞第二空:if(al;i一)(fdr(j=2;j=i)若是素数,将其存入b(bk=i;k+;累加素数个数)return k+;【一起来审题】该程序功能是求定范围内的素数.素数是只能被1和自身除尽的数。判断i是不是素数最简单的方法就是用2(i-1)去除i,只要能除尽就不是素数。【解题思路】进入fun函数,根据前面的分析:(1)首先,判断i是否是素数,即是否能被2(i-1)整除。(2)若是素数,就将i存入数组b,并对计数器k加1。(3)最后返回素数的个数k。其中,对于素数的判断并不只局限于上面提到的方法,也可以采用其他的方法进行判断。【主要考点】数组操作;i f 条件语句;f o r循环语句。第6套一、填空题请补充函数f u n,它的功能是:计算并输出m (包括m)以内能被2 或5 整除的所有白然数的倒数之和。例如,在主函数中从键盘给m 输入2 1 后,输 出 为:s=l.7 3 1 1 5 1 o请勿改动主函数m a i n 与其他函数中的任何内容,仅在f u n 函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#i n c l u d e d o u b l e f u n(i n t m)(i n t j;d o u b l e t o a l=0.0;f o r(j=l;_ 1 _ _ _;j+)i f(j%2=0 2 到 5=0)t o a l+=3 /j;re t u rn t o a l;m a i n ()(i n t m;d o u b l e f;p ri n t f(X n l n p u t m:);s c a n f(“%d ,&m);f=f u n(m);p ri n t f(n n s=%f n”,f);)二、改错题下列给定程序中,函数f u n 的功能是:按以下递归公式求函数值。1 0 (n=l)f u n(n)=f u n(n-l)+2 (n l)例如,当给n 输入6 时,函数值为2 0。请修改程序中的错误,得出正确的结果。注意:不要改动m a i n 函数,不能增行或删行,也不能更改程序的结构。#i n c l u d e /*c rro r*/i n t f u n(n)(i n t m;/*e rrc)r*/i f(n=l)m=1 0;e l s em=f u n(n-l)+2;re t u rn (m);m a i n ()i n t n;p ri n t f(E n t e r n:);s c a n f (*%d/z,&n);p ri n t f(T h e re s u l t:%d n n*,f u n(n);三、编程题请编写函数f u n,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按A S C I I码降序排列。例如,原来的字符串为Ju s t abc,则排序后输出为Ju t s bac。请勿改动主函数m ain与其他函数中的任何内容,仅在函数fu n的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#in cl u de#in cl u de#in cl u de#in cl u de v o id fu n(char *s t r,in t n)()m ain ()(char s t r 10;F ILE *o u t;p r in t f(in p u t s t r in g w it h s ev en char act er s/);g et s(s t r);fu n (s t r,7);p r in t f(n%s,s t r);o u t=fo p en(o u t f il e.dat ,w );s t r cp y(s t r,Ju s t s df);fp r in t f(o u t,%s”,s t r);fcl o s e(o u t);)一、填空题【答案及难度指数】(1)j=m (2)|(3)1.0【起来审题】(1)该程序功能是求小于等于m的所有被2或5整除的所有自然数的倒数之和。从已给部分源程序的m ain主