沈工大C语言程序设计复习题.doc
《沈工大C语言程序设计复习题.doc》由会员分享,可在线阅读,更多相关《沈工大C语言程序设计复习题.doc(20页珍藏版)》请在咨信网上搜索。
C语言程序设计复习题 题型:填空、选择、读程序写结果(参看实验教程)、编程题 编程题如下: 1.输出100~1000以内的所有3位水仙花数。所谓水仙花数是指所有位的数字的立方和等于该数。例如153=1³+5³+3³(实验教程P25) 解:#include<stdio.h> void main() { int i; int w1,w2,w3; for(i=100;i<999;i++) { w1=i%10; w2=i/10%10; w1=i/100%10; if(i==w1*w1*w1+w2*w2*w2+w3*w3*w3) /*判断是否是水仙花数*/ printf(“%d”,i); } } 2.使用冒泡法对从键盘上输入的10个数进行排序(由大到小)。(实验教程P33) 解:#include<stdio.h> void main() { int i,j,temp; int a[10]; printf(“Input 10 numbers:\n”); for(j=0;j<10;i++) scanf(“%d”,&a[j]); printf(“\n”); for(i=1;i<10;i++) for(j=0;j<10-I;j++) if(a[j]<a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } Printf(“The sorted numbers is:\n”); for(j=0;j<10;j++) printf(“%5d”,a[j]); printf(“\n”); } 3.设计一个实用程序,为比赛选手评分。要求:从十名评委的评分中扣除一个最高分,扣除一个最低分,然后统计总分,并除以8,最后得到这个选手的最后得分(打分采用百分制)。(实验教程P37) 解:分析:定义一个一维数组用来存放10名评委为选手所给的成绩,从键盘上输入10名评委所给的成绩,计算成绩的总和,然后减掉最高分和最低分,再除以8,就可以得到选手的最后得分。 程序清单: #include<stdio.h> void main() { int score[10]; /*定义数组存放10个评委的成绩*/ float mark; int i; int max=0; /*最高分*/ int min=0; /*最低分*/ int sum=0; /*10评委的总和*/ for(i=0;i<10;i++) /*输入10个评委的成绩*/ { printf(“Please Enter the Score of No.%d:”,i+1); scanf(“%d”,&score[i]); sum=sum+score[i]; /*将10个成绩求和*/ } for(i=0;i<10;i++) /*查找最高分*/ { if(scanf[i]>max) max=score[i]; } for(i=0;i<10;i++) /*查找最低分*/ { if(score[i]<min) min=score[i]; } mark=(sum-max-min)/8.0; /*计算平均成绩*/ printf(“The mark of the player is %.2f\n”,mark); } 4.在主函数中输2~100之间的整数,调用函数判断其是否为素数,在主函数中输出这些素数。(实验教程P60) 提示:在第四章中的4.4.5中第2题给出了判断素数的方法。还有一种方法就是:如果一个整数能被小于它的某一个整数出尽,该数一定不是素数。 解:#include<stdio.h> void main() { int i; for(i=2;i<a;i++) if(a% i ==0) return(0); return(1); } void main() { int j; for(j=2;j<100;j++) if(is_ prime(j)) printf(“\n”); } 5.使用递归方法,利用碾转相除法,求两个正整数的最大公约数,并在主函数调用该函数,输出计算结果。(实验教程P64) 解:#include<stdio.h> Int gcd(int a,int b) { if(a% b==0) return b; else return gcd(b,a% b); /*递归调用*/ } void main() { int x,y,t; printf(“Please input 2 number(x,y):\n”); scanf(“%d%d”,&x,&y); while(x<0||y<0) /*如果是负数重新输入*/ { printf(“ERROR!Please input 2 number(x,y):\n”); scanf(“%d%d” ,&x,&y); } t=gcd(x,y); /*函数调用*/ printf(“G,C,D(%d,%d)=%d\n”,x,y,t); } 6.使用递归调用的方法计算n阶勒让德多项式的值。(实验教程P66) 提示:n阶勒让德多项式的递推公式为: = { 1 (n=0) fn(x) X (n=1) ((2n-1)xfn-1(x)-(n-1)fn-2(x)/n (n>1) 解:#include<stdio.h> float fun(int n,int x); /*定义递归函数*/ { int t; if(n==0) /*如果n=0返回1*/ return(1); else if(n==1) /*如果n=1返回x*/ return(x); else /*否则递归计算*/ return(((2*n-1)*x*fun((n-1),x)-(n-1)*fun((n-2),x))/n; } void main() { int x,n; printf(“Please input n and x:\n”); scanf(“%d%d”,&n,&x); printf(“The result is:%f\n”,fun(n,x)); } 7.编写程序,利用子函数实现计算字符串的长度。(实验教程P92) 解:程序代码如下: #include<stdio.h> int length(char*s); void main() { char a[100]; int i; printf(“Please input the string:\n”); gets(a); i=length(a); printf(“\nThe length of string is %d”,i); } int length(char*s) { char*p=s; while(*p) p++; return(p-s); } 8.编写程序,利用字符串实现两个字符串的合并。(实验教程P93) 解:程序代码如下: #include“stdio.h” char *link(char*p1,char*p2); void main() { char str1[100],str2[100]; printf(“Please input the first string:\n”); gets(str1); printf(“nPlease input the second string:\n”); gets(str2); link(str1,str2); printf(“\nThe linked result is:\n”); puts(str1); } char*link(char*p1,char*p2) { char*p; p=p1; while(*p1) pl++; while(*p2) { *p1=*p2; P1++; P2++; } *p1=’\0’; return(p); } 9.将一个整数字符串转换为一个整数,如“-1234”转换为-1234。(实验教程P98) 解:#include<stdio.h> #include<string.h> int chnum(char*p); void main() { char s[6]; int n; gets(s); if(*s==’-’) n= -chnum(s+1); printf(“%d\n”,n); } chnum(char*p) { int num=0,k,len,j; len=strlen(p); for(;*p!=’\0’;p++) { k=*p-‘0’; j=(- -len); while(j-->0) k=k*10; num=num+k; } Return(num); } 10.编写计算个人所得税的程序输入一个纳税人的个人月收入,计算应纳的个人所得税。(程序设计教程P65) 纳税是每个公民的义务。我国的个人所得税税率表如下表所示: 级数 应纳税金额(月收入-1600) 税率% 1 不超过500元 5 2 500元~2000元 10 3 2001~5000元 15 4 5001~20000元 20 5 20001~40000元 25 6 40001元~60000元 30 7 60001元~80000元 35 8 80001元~100000元 40 9 超过100000元 45 解:源程序清单如下: #include”stdio.h” void main() { double salary,s,tax; printf(“please input your salary one month:”); scanf(“%lf”,&salary); s=salary-1600; if(s<=500) tax=s*0.05; else if(s<=2000) tax=(s-500)*0.1+500*0.05; else if(s<=5000) tax=(s-2000)*0.15+1500*0.1+500*0.05; else if(s<=20000) tax=(s-5000)*0.2+3000*0.15+1500*0.1+500*0.05; else if(s<=40000) tax=(s-20000)*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.\05; else if(s<=60000) tax=(s-40000)*0.3+20000*0.25+15000*0.2+3000*0.15+1500*\0.1+500*0.05; else if(s<=80000) tax=(s-60000)*0.35+20000*0.3+20000*0.25+15000*0.2+3000\*0.15+1500*0.1+500*0.05; else if(s<=100000) tax=(s-80000)*0.4+20000*0.35+20000*0.3+20000*0.25+1500\0*0.2+3000*0.15+1500*0.1+500*0.05; else if(s<=100000) tax=(s-100000)*0.45+20000*0.4+20000*0.35+20000*0.3+200\00*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05; printf(“tax is %10.2f\n”,tax); } 程序说明:1)变量salary中存放的是月收入;s存放月收入中应纳税的金额,月收入减去减免税金额,即月收入减去1600元; tax是计算出来的纳税额。2)公式中的“\”是换行符,由于写不下,用“\”符号标识下一行是本行的续行。3)本例要处理多种情况,最适合使用else if形式。因为很难找到月收入中应纳税的金额与一个常量之间的关系,因此不适合使用switch语句。 11.求出斐波那契数列的前20项,存在数组中,并将他们输出。(程序设计教程P73){说明:【斐波那契数列是一递推数列,满足下面关系:fib(0)=1,fib(1)=1,fib(n)=fib(n-1)+fib(n-2)(n≧2)】 对于这个问题,可以定义一个整形数组,用于存放20个整数,先将fib(0)和fib(1)赋初值,然后建立一个循环,每次取出两个数进行递推求值,并将其存入数组中,每输出5项数据换行,直到前20项都被计算出来为止。} 解:源程序清单如下: #include<stdio.h> void main() { int i,fib[20]={1,1}; /*初始化*/ printf(”\n”); for(i=2;i<20;i++) /*计算后18项斐波那契数列中的数据并存入数组*/ fib[i]=fib[i-2]+fib[i-1]; for(i=0;i<20;i++) /*输出数组*/ { if(i%5==0) /*每输出5个数据换行*/ printf(“\n”); printf(“%10d”,fib[i]); } printf(“\n”) } {注:数组fib采用部分初始化法,将fib(0)和fib(1)初始化为1,其他各元素默认为0,用于存储后18项结果。使用for循环语句从数组的第3个元素开始递推计算后18项数据,并存储在数组fib中(从数组的第3位开始)。接下来又使用循环语句输出数据的全部元素,每输出5个数据就换行} 12.编写一函数,求x的m次方的值,其中m是整数。(程序设计教程P102) {求任意m个x的乘积,可把x和m作为函数的参数,数据从主调函数里传递,增强了函数的灵活性。使用循环结构设计该算法,最后将计算所得的值返回} 解:#include<stdio.h> double mul(double x,int m) { int i=0; double p=1.0; for(;i<m;i++) p=-p*x; return(p); } void main() { double x,y; int m; printf(“Input the numbers(x,m):\n”); scanf(“%lf%d”,&x,&m); y=mul(x,m); /*函数调用*/ printf(“The result is:%6.5lf\n”,y); } 说明:在程序中定义了mul()函数,其类型为double型,形参表中有两个形参x、m。由于函数定义在主调函数之前,在主调函数中就可以不对其进行函数声明。使用用户自定义函数时,要分清形参如何设定,包括其类型、个数及顺序,以便在发生函数调用时,准确地将实参值传递给实参,这样才不会出项错误。x、y定义为double类型,它的格式控制符为%lf,不能写成%f,以免出错。函数调用结束后,将计算结果输出。 13.在主调函数调用函数计算5!的值。(程序设计教程P120) 解:源程序清单如下: #include<stdio.h> int fun(int n) /*定义函数计算阶乘值*/ { int i; static int f=1; /*定义静态局部变量*/ for(i=1;i<=n;i++) /*循环计算n!乘值*/ f=f*i; return(f); /*返回函数值*/ } void main() { int n; printf(“Input the number:\n”); /*输入数据*/ scanf(“%d”,&n); printf(“%d!=%d\n”,n,fun(n)); /*调用函数*/ } 说明:在自定义函数fun()中,程序定义了静态局部变量f,用来存放每一次调用此函数计算后的值,该值在每次调用后保留其值并在下一次调用时继续使用,所以输出值为累乘的结果。 14.求一个数组中所有元素的最大值和最小值,并将其放入数组的最前面的两个元素的位置。(程序设计教程P143) 解:#include<stdio.h> void maxmin(int *p,int length); void main() { int a[10]={2,5,7,1,10,4,6,33,20,9}; maxmin(a,10); printf(“max=%d,min%d”,a[0],a[1]); } void maxmin(int *p,int length) { int k,max=0,min=0; for(k=1;k<length;k++) { if(p[k]>p[max]) max=k; else if(p[k]<p[min]) min=k; } p[0]=p[max]; p[1]=p[min]; } 说明:在子函数中实现了对数组中元素的最大值和最小值的求值,并把最大值和最小值放到了数组的最前面的两个元素中。因为函数传递的参数是数组的首地址,因此在子函数中对数组的全部操作,就是对主函数中数组的操作。 15.编写一个程序,将一个字符串写入文件“E:\test.txt”后,再从该文件中读出该字符串。(程序设计教程P198) 解:#include “stdio.h” void main() { FILE*fp; char ch[]=”C language”,*str; int x; fp=fopen(“E:\\test.txt”,”w”); if(fp==NULL) { printf(“\n Can’t open the file!”); return; } x=fputs(ch,fp); /*测试函数的返回值*/ printf(”x=%d”,x); printf(“\n Character input finished!\n”); fclose(fp); fp=fopen(“E:\\test.txt”,”r”); if(fp==NULL) { printf(“\n Can’t open the file!”); return; } puts(fgets(str,20,fp)); fclose(fp); } 程序说明:首先,程序以只写的方式打开E盘根下的文本文件test.txt,向文件中一次性写入字符串“C Lauguage”后,返回最后一个字符的ASCII值。最后一个字符是“e”,因此返回“e”的ASCII值,“x=101”。显示写入完成,并关闭文件。重新以只读的方式打开该文件,从文件中读出刚才写入的内容,最后关闭文件。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 沈工大 语言程序设计 复习题
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文