ImageVerifierCode 换一换
格式:DOCX , 页数:88 ,大小:49.02KB ,
资源ID:18185596      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18185596.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c语言机试上级答案解析2140.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c语言机试上级答案解析2140.docx

1、c语言机试上级答案解析2140第二十一套:一、请补充main函数,该函数的功能是:打印出满足个位的数字、十位上的数字和百位上的数字都相等的所有三位数。本题的结果为:111 222 333 444 555 666 777 888 999。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include void main() int g, s, b; system(CLS); for(g=1; g10; g+) for (s=1; s10; s+) for(b=1; b10; b+) if(【

2、1】) printf(%5d,【2】); 答案:【1】g=s&s=b或者g=b&s=b或者g=s&g=b 【2】g+s*10+b*100【解析】填空1:变量g表示三位数的个位数字,变量s表示三位数的十位数字,变量b表示三位数的百位数字。注意,表示三个数字都相等时,不能写成g=s=b,而要写成g=s&s=b或者g=b&s=b或者g=s&g=b。填空2:一个三位数可以表示为:百位数字乘以100加上十位数字乘以10,再加上个位数字。二、下列给定程序中,函数fun的功能是:求S的值。设S=(22/(1*3)*(42/(3*5)*(62/(5*7)*(2k)2/(2k-1)*(2k+1)例如,当k为10

3、时,函数的值应为1.533852。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include #include /*found*/fun(int k) int n; float s, w, p, q; n=1; s=1.0; while(n=k) w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n+; /*found*/ return svoid main() system(CLS); printf(%fn ,fun(10);答案:(1)错误:fun(

4、int k) 正确:double fun(int k)(2)错误:return s 正确:return s ;【解析】这样一道数学题要是用C程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。一个是简单的函数调用的定义错误,另一个是语法错误。三、请编写函数fun,该函数的功能是:计算并输出S=1+(1+20.5)+(1+20.5+30.5)+(1+20.5+30.5+n0.5)例如,若主函数从键盘给n输入20后,则输出为s=534.188884。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:

5、#include #include double fun(int n) void main() int n; double s; printf(nnInput n: ); scanf(%d,&n); s=fun(n); printf(nns=%fnn,s);答案:double fun(int n) int i; double s=0.0,s1=0.0; for(i=1;i=n;i+) s1=s1+pow(i,0.5); /*求每一项*/ s=s+s1; /*按公式求出s*/ return s;【解析】我们先用数学的思路读懂该程序,并用1个字符表示()内的值。在本程序中用s1来表示题中每个小括号

6、内的值,第1项相当于有1个10.5 (它还是1),第2项相当于第1项的值加上20.5,第3项相当于第2项的值加上30.5,依次类推。函数pow(x,y)的功能是求出x的y次方,该函数已在库函数中定义(即可直接使用)。程序中用s来表示总的结果,每1次循环加1次s1,即加1项。第二十二套:一、请补充函数fun,该函数的功能是:判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回yes!,否则返回no!。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include #include #include

7、 char *fun(int n) int g,s,b; g=n%10; s=n/10%10; b=【1】; if(g+b)=s) return【2】; else return【3】;void main() int num=0; system(CLS); printf(*Input data *n); scanf(%d,&num); printf(nnn); printf(* The result *n); printf(nnn%s,fun(num);答案:【1】n/100%10 【2】yes! 【3】no!【解析】填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所

8、以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,返回yes!。填空3:当个位数字和百位数字之和不等于十位数字时,返回no!。二、下列给定程序中,函数fun的功能是:计算并输出下列数的前N项之和SN,直到SN+1大于q为止,q的值通过形参传入。例如,若q的值为50.0,则函数值为49.394948。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include double fun(double q)int n;doubl

9、e s,t;n=2;s=2.0;while (s = q)t=s;/*found*/s=s+ (n+1)/n;n+;printf(n=%dn,n);/*found*/return s;main ( )printf(%fn,fun(50);答案:(1)错误:s=s + (n+1)/n 正确:s=s + (double)(n+1)/n;(2)错误:return s 正确:return t;【解析】(1)在c语言中,整数除以整数得出的结果也是整数,题中是计算小数的,所以要转变类型。(2)观察while循环,假如返回值是s的话,那么返回的是大于q的值,题中所要返回的是小于q的值,所以应该返回t。三、请

10、编写函数fun,其功能是:计算并输出下列多项式值。S=(1-1/2)+(1/3-1/4)+(1/(2n-1)-1/2n)例如,若主函数从键盘给n输入8后,则输出为S=0.662872。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include double fun(int n)void main() int n; double s; printf(nInput n: ); scanf(%d,&n); s=fun(n); printf(ns=%fn ,s);答案:double fun(int n) int i;

11、double s=0.0; for(i=1;i=n;i+) s=s+(1.0/(2*i-1)-1.0/(2*i); /*计算S=(1-1/2)+(1/3-1/4)+(1/(2n-1)-1/2n)*/ return s;【解析】本题中s=s+(1.0/(2*i-1)-1.0/(2*i);语句是用C程序表达题目中的每一项,这是关键的一步,其他问题不难理解。第二十三套:一、请补充函数fun,该函数的功能是:把数组aa中的偶数元素按原来的先后顺序放在原数组后面。例如,输入33,67,42,58,25,76,85,16,41,56,输出结果33,67,25,85,41,42,58,76,16,56。注意

12、:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include #include #define N 10void fun(int aa) int I, j=0,k=0; int bbN; for (I=0;IN; I+) if (【1】) bbk+=aaI; else aaj+=aaI; for(I=0;【2】;I+,j+) aaj=bbI;void main() int i; int aaN=33,67,42,58,25,76,85,16,41,56; system(CLS); printf(n* origi

13、nal list *n); for (i=0;iN; i+) printf(%4d,aai); fun(aa); printf(n* new list *n ); for (i=0; iN; i+) printf(%4d,aai);答案:【1】aaI%2=0 【2】Ik【解析】填空1:如果一个数对2求余,结果为0,那么这个数为偶数,把这个数暂时存在数组bb中。否则这个数为奇数,存在数组aa中。填空2:最后,将数组bb中的偶数都拷贝到数组aa中奇数的后面。变量k记录了原数组aa中偶数的个数,所以for循环的条件是Ik。二、下列给定程序中,函数fun的功能是:求表达式s=aaaa-aa-aa-a(

14、此处aaaa表示n个a,a和n的值在1至9之间)的值。例如a=3,n=6,则以上表达式为:s=333333-33333-3333-333-33-3其值是296298。a和n是函数fun的形参,表达式的值作为函数值传回main函数。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include long fun (int a,int n)int j;/*found*/long s=0, t=1;/*found*/for (j=0; j=n; j+) t=t*10+a;s=t;for(j=1; jn; j+

15、)/*found*/t=t%10;s=s-t;return(s);main ( ) int a , n;printf(nPlease enter a and n:);scanf(%d%d,&a,&n);printf(The value of function is%idn,fun(a,n);答案:(1)错误:long s=0,t=1 正确:long s=0, t=0;(2)错误:for (j=0; j=n; j+) 正确:for (j=0; jn; j+)(3)错误:t=t%10 正确:t=t/10; 【解析】(1)用带入法就可看出,结果是错误的,它的个位出现了问题。(2)从题中给出的例题就可

16、以看出,当n=6,a=3时,得到的最大数为33333,是一个五位数,所以这里只要从0开始循环6次,就可以了。(3)根据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数。三、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的冰号之外,将串中其他*号全部删除。在编写函数时,不得使用c语言提供的字符串函数。例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容则应当是料*ABCDEFG。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include #includ

17、e #include void fun(char *a)main ( )char s81;printf(Enter astring:n);gets(s);fun(s);printf(The string after deleted:n);puts(s);答案:void fun(char *a)int i=0;char *p=a;while(*p&*p=*)ai=*p;i+;p+;while(*p)if(*p!=*)ai=*p;i+;p+;ai=0;【解析】函数fun的功能是除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,1、定义一个临时指针p,初始指向原串首地址;2、利用循环把字符

18、串前导*号拷贝到原串;3、继续移动指针,把串中和串尾的非*号字符拷贝到原串;4、为修改后的字符串赋结尾字符0。第二十四套:一、请补充函数fun,该函数的功能是:判断某一个年份是否为闰年。例如,1900年不是闰年,2004是闰年。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include #include #include int fun(int n) int flag=0; if(n%4=0) if (【1】) flag=1; if (【2】) flag=1; return【3】;void main()

19、int year; system(CLS); printf(Input the year:); scanf(%d,&year); if (fun(year) printf(%d is a leap year. n,year); else printf(%d is not a leap year.n,year);答案:【1】n%100!=0或n%100 【2】n%400=0 【3】flag【解析】填空1:判断闰年的方法是,年份能被4整除但不能被100整除,或者年份能被400整除。n不能被100整除,即对100取余非零。填空2:能被400整除的年份也是闰年,n能被400整除,即对400取余为零。填

20、空3:flag标记年份n是否为闰年,当flag为1时是闰年,相反,当flag为0时不是闰年。二、下列给定程序中,函数fun的功能是:判断一个整数m是否是素数,若是返回1,否则返回0。在main函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include int fun(int m) int k=2; while (k=m&(m%k)/*found*/ k+ /*found*/ if(m=k) return 1; el

21、se return 0;void main() int n; system(CLS); printf(nPlease enter n: );scanf(%d,&n); if(fun(n) printf(YESn); else printf(NO!n);答案:(1)错误:k+ 正确:k+ ;(2)错误:if(m=k) 正确:if(m=k)【解析】函数fun的功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。三、请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函

22、数中输出YES,否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include #define N 80int fun (char *str)main ( )char sN;char *test = 1234321, 123421, 123321, abcdCBA;int i;printf(Enter a string:);gets(s) ;printf(nn);puts(s) ;if(fu

23、n(s)printf( YESn);else printf( NOn);答案:int fun(char *str)int i,n=0,fg=1;char *p=str;while (*p) /*将指针p置位到字符串末尾,并统计字符数*/n+;p+;for(i=0;in/2;i+) /*循环比较字符*/if(stri=strn-1-i) ; /*相同,什么都不作*/else /*不同,直接跳出循环*/fg=0;break;return fg; 【解析】判断回文数就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依次类推,直到中间的字符,如果比较的结果都是相同,那么这个字符串

24、就是回文数,否则不是。第二十五套:一、给定程序的功能是:判断字符ch是否与串str中的某个字符相同,若相同什么也不做,若不同则插在串的最后。注意:部分源程序给出如下。请勿改动函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。试题程序:#include #include void fun(char *str,char ch)while (*str & *str!=ch)str+;if (*str【1】ch)str0 = ch;【2】=0;main ( )char s81,c;printf(nPlease enter a string:n);gets(s);printf(

25、n Please enter the character to search:);c=getchar();fun(【3】);printf(nThe result is %sn,s);答案:【1】!= 【2】str1或*(str+1) 【3】s,c【解析】填空1:根据题意若相同什么也不做,则应填入!=。填空2:若不同则插在串的最后,那么0就在字符串的倒数第二个了。填空3:函数传递的参数为输入的两个字符串,则填入s,c。二、下列给定程序中,函数fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组

26、合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include int fun() int i,j,k,sum=0; printf(nThe result :nn );/*found*/ for(i=0;i=3;i+) for (j=1;j=1&k=6) sum=sum+1; printf(red:%4d white:%4dblack:%4dn ,i,j,k); return sum;void main() int sum; sum=fun(); printf(sum=%4dnn ,sum);答案:(1)错误:for(i=0;i=3;i+) 正确:for(i=1;i=1&k=1&k=6)&(i!=0)&(j!=0)|(k=0)【解析】该题是一道教材习题的变体,如果单纯从数学的排列组合角度来分析,实在简单不过,那怎么才能用C语言实现题目中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1