c语言第五次作业_第1页
c语言第五次作业_第2页
c语言第五次作业_第3页
c语言第五次作业_第4页
c语言第五次作业_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、第五次作业:函数1. 自然数的计算编写自己的两个函数,分别求出两个整数的最大公约数和最小的公倍数。编写一个程序,功能是能够由键盘输入两个整数,并能调用自己编写的函数,计算并输出这两个整数的最大公约数和最小公倍数。程序代码:#includevoid main()intgreatest_common(intx,int y),lowest_common(intx,int y);inta,b,c,d;printf(please input two integer:);scanf(%d,%d,&a,&b);c=greatest_common(a,b);d=lowest_common(a,b);print

2、f(最大公约数为%d,最小公倍数为%dn,c,d);intgreatest_common(intx,int y)inti,min;if (xy)min=y;else min=x;for(i=min;i=1;i-)if (x%i=0)&(y%i=0)return(i);intlowest_common(intx,int y)inti,max;if (xy)max=x;elsemax=y;for (i=max;i+)if(i%x=0)&(i%y=0)return (i);2. 字符串连接请使用字符数组,编写自己的字符串连接函数。编写一个程序,功能是能够由键盘输入两个字符串,并能调用自己编写的字符串

3、连接函数,输出新的字符串。#include#includevoid main()char link(char a40,char b20);char str140=0,str220;printf(请输入第一个字符串:);gets(str1);printf(请输入第二个字符串:);gets(str2);printf(合并后的字符串为:n);link(str1,str2);puts(str1);char link(char a40,char b20)inti,j;i=strlen(a);for(j=0;bj!=0;j+)ai+j=bj;return(ai);3. 三角函数请使用台劳级数编写自己的常用

4、三角近似值计算函数,用于自己程序的调用。台劳级数为:舍去的值由自己定义一个最小值。请用自己的函数计算下面两个表达式的值,并且与VC+提供的标准函数之间的误差进行比较。请输入结果。l ,()l ,()#include#includevoid main()float s(float x),c(float x);float y1,y2,y3,y4,a=3.14159/3,b=3.14159/4;y1=sqrt(1-c(a)/2);y2=s(b)*(2*s(b)+c(b)-c(b)*c(b);printf(y1=%f,y2=%fn,y1,y2);y3=sqrt(1-cos(a)/2);y4=sin(b

5、)*(2*sin(b)+cos(b)-cos(b)*cos(b);printf(y1=%f,y2=%fn,y3,y4);float s(float x)int m=1,i=0;float a=0,b=1,t=0;while(m=11)t=1./b*pow(x,m)*pow(-1,i);i+;a=a+t;m+;b*=m;m+;b*=m;return(a);float c(float x)float a=0,b=1,t=0;int m=0,i=0;while(m=12)t=1./b*pow(x,m)*pow(-1,i);i+;a=a+t;m+;b*=m;m+;b*=m;return(a);4. 弦

6、截法解方程用弦截法求解方程f(x)=x3-5x2+16x-80=0的根。要求使用和编写如下的函数:l float f(float x)代表f(x)=x3-5x2+16x-80的值l float xpoint(float x1, float x2) 来求出(x1,f(x1)与 (x2,f(x2)的连线与x轴的交点x坐标;l float root(float x1, float x2)用于求出 (x1,x2)区间的近似根。要求使用的x1与x2的初始值分别为 -10.5 和 20#include#includefloat f(float x) /*定义f函数,以实现f(x)=x3-5x2+16x-8

7、0 */float y; y=(x-5.0)*x+16.0)*x-80.0;return (y);float xpoint (float x1,float x2) /*定义xpoint函数,求出弦与x轴交点*/float y; y=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1);return (y); float root(float x1,float x2) /* 定义root函数,求近似根 */float x,y,y1; y1=f(x1);do x=xpoint(x1,x2);y=f(x);if (y*y10) /*f(x)与f(x1)同符号 */y1=y;x1=x;els

8、e x2=x; while (fabs(y)=0.0002);return (x);void main() /*主函数*/float x1,x2,f1,f2,x;do printf(input x1,x2:n);scanf(%f,%f,&x1,&x2); f1=f(x1); f2=f(x2); while(f1*f2=0); x=root(x1,x2);printf(A root of equation is %8.4fn,x);5. 最长单词编写一个自己的函数,能够将一个字符串中最长的单词查找出来。编写一个程序,功能是能够由键盘输入一行字符,并能调用自己编写的最长单词查找函数,输出这个单词。

9、#include#includechar longest(intn,charstr100)char a100100,b100=0;inti,j=0,k,max=0,m;int length;length=strlen(str);for(k=0,i=0,j=0;ilength;k+,i+)ajk=stri;if(stri=)if(maxk)max=k;for(m=0;mk;m+)bm=ajm;j+;k=-1;continue;return(bn);void main()charstr100,a100=0;inti;gets(str);for(i=0;ai!=;i+)ai=longest(i,st

10、r);puts(a);6. 勒让德多项式用递归思想求n阶勒让德多项式的值,该多项式为:#includevoid main()int p(intn,int x);intn,x,y;printf(please input n,x:);scanf(%d,%d,&n,&x);if(n0)printf(error!please input n,x:);scanf(%d,%d,&n,&x);y=p(n,x);printf(y=%dn,y);int p(intn,int x)int y;if(n=0)y=1;else if(n=1)y=x;else y=(2*n-1)*x*p(n-1,x)-(n-1)*p(

11、n-2,x)/n;return(y);7. 角夫猜想日本数学家角夫提出了如下的猜想: 任意一个自然数,比如奇数,将其乘以3再加1;如果是偶数将其除以2;反复运算。请大家编写程序,看会出现什么结果?编写程序功能要求能够不停的输入自然数,遇到输入自然数0时,程序结束。如l 输入: 请输入自然数n:30l 输出: 自然数n按照角夫猜想运算规则变化的各次结果:15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 。(直到结果收敛,不再变化)#includevoid main()intn,y,i,k;int f(int x);for(i=0;i+)printf(ple

12、ase input n=);scanf(%d,&n);if(n=0)break;while(n!=1)y=f(n);printf( %d ,y);n=y;printf(n);int f(int x)int y;if(x%2=0)y=x/2;else if(x%2!=0)y=3*x+1;return(y);8. 数学黑洞任意一个4位自然数(除4个数字完全一样除外,例如4444、7777等),将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍然为一个自然数,重复上述运算,你会发现一个神秘数。编写程序功能要求能够不停的输入自然数,遇到输入0时,程序结束。如l 输入: 请输

13、入自然数n: 7754l 输出: 自然数n按照以上运算规则变化的各次规律:(7754,4577,3177) (7731,1377,6534)(6543,3456,3087) (8730,0378,8352) (8532,2358,6174)。(直到结果收敛,不再变化)#include#includevoid main()intn,m,i,arr3=0;void f(intx,intarr3);while(n!=0)printf(please input n=);scanf(%d,&n);while(m-n)!=0)m=n;f(n,arr);printf( (%d,%d,%d) ,arr0, a

14、rr1, arr2);n=arr2;printf(n);void f(intx,intarr3)int m=0,n=0,i,j,t;int a4;for(i=0;i=3;i+)ai=fmod(floor(x/pow(10,i),10);for(i=0;i=3;i+)for(j=0;j=3;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i=3;i+)m+=ai*pow(10,3-i);n+=ai*pow(10,i);arr0=m;arr1=n;arr2=m-n;9. 设计递归程序任意给定输入的一个小写英文字符串a1a2a3an-1an(n5)输出:字符串Ana

15、1An-1a2An-2a3A2an-1A1an,其中Ai为ai的大写形式例如,输入aybdx,则递归程序输出XaDyBbYdAx#include#includevoid main()void f(char a20);char a20;printf(请输入字符串:);gets(a);f(a);putchar(n);void f(char a20)char b20;int l,i;l=strlen(a);for (i=0;i=l-1;i+) bi=al-i-1-32;for (i=0;i=l-1;i+)printf(%c%c,bi,ai);10. 成绩排名期中考试快要结束了,老师需要进行年级成绩排

16、名。排名的规则如下:l 以期中考试的平均成绩为排名依据(满分为100分);l 对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排名为K+1;l 如果学生A和学生B的平均成绩相同,则他们的排名相同。要求编写几个函数,分别实现以下的功能:l 函数1:输入N个同学的学号、姓名、平均成绩l 函数2:按平均成绩由大到小的顺序进行排序,学号、姓名也随之调整,并请按照上述规则进行排名l 函数3:输入一个同学的学号,能够用折半查找法找出该同学的姓名、平均成绩、排名等信息编写一个程序来使用验证上述函数。l 输入、输出格式要求:(1) 第一行为一个整数N(1 N 200),表示学生的人数。随

17、后有N行,每行有两个非负整数和字符串描述一个学生的信息,依次为学号、姓名和平均成绩。(2) 随机输入一个同学的学号,请输出这个同学的姓名、平均成绩、排名等信息。如果学号不存在,输出错误提示信息。(3) 输入 学号0000000000 时,程序退出。#includevoid input(int n,int number200,char name20010,int grade200)int i;for(i=0;in;i+)scanf(%d %s %d,&numberi,namei,&gradei);void rank(int n,int number200,char name20010,int g

18、rade200,int r200)int i,j,k,t;for(i=0;in;i+)k=i;for(j=i+1;j=n;j+)if(gradekgradej)k=j;if(k!=i)t=gradei;gradei=gradek;gradek=t;t=numberi;numberi=numberk;numberk=t;for(j=0;j20;j+)t=namekj;namekj=nameij;nameij=t;k=1;r0=1;for(i=1;in;i+)if(gradeigradei-1)k=i+1;ri=k;void find(int n,int number200,char name20

19、010,int grade200,int r200)int x,i,j,k,t;for(i=0;in;i+)/对学号排序k=i;for(j=i;jn;j+)if(numberknumberj) k=j;if(i!=k)t=numberk;numberk=numberi;numberi=t;t=gradek;gradek=gradei;gradei=t;t=rk;rk=ri;ri=t;for(j=0;j20;j+)t=namekj;namekj=nameij;nameij=t;printf(please input an student number:);/输入学号scanf(%d,&x);wh

20、ile(x!=0)t=n;i=0; j=n-1; while(inumberk) j=k-1; else i=k+1;if(tn)printf(name:%s grade:%d rank:%dn,namek,gradek,rk);else/没有找到printf(Erorr!This number doesnt exist.n); printf(Please input again:); scanf(%d,&x);void main()char name20010;int n,i,number200,grade200,r200;printf(please input the number of

21、the students:);scanf(%d,&n);printf(please input the information of the students:n);input(n,number,name,grade);rank(n,number,name,grade,r);find(n,number,name,grade,r);11. 日历计算请使用已学的知识来编写一个自己的日历计算程序。功能要求任意输入一个日期(年、月、日),请输出该日期为该年度的第几天、第几周、星期几。请不要使用VC 环境提供的日期计算函数。已知公元1年1月1日为星期一。#includeint monthday12=31

22、,28,31,30,31,30,31,31,30,31,30,31;void time(int a,int b,int c,int d3)int date=0,week,week1=0,week2=0,weekday=0;int i,year,totalday1=0,totalday2;/计算第几天if (b=1)date=c;else if (b=2)for (i=0;i2)&(a%4=0)&(a%100!=0)|(a%400=0)date+;/计算到上一年末有多少天for(year=1;yeara;year+)totalday1=totalday1+365;if(year%4=0)&(ye

23、ar%100!=0)|(year%400=0)totalday1+;week1=totalday1/7;/计算从1年1月1日至今多少天totalday2=totalday1+date;week2=totalday2/7;/计算第几周,星期几week=date/7;if(week=0)week+;else if(week!=0&(totalday1%7!=0&date%7=0)|date%7!=0)week+;if(totalday2%7=0)weekday=7;else if(totalday2%7!=0)weekday=totalday2%7;d0=date;d1=week;d2=weekd

24、ay;void main()int i,year,month,day,d3;for(i=0;i=5;i+)printf(please input the date:n);scanf(%d,%d,%d,&year,&month,&day);time(year,month,day,d);printf(第%d天,第%d周,星期%dn,d0,d1,d2);(以下为选作题,请用递归思想尝试编写程序)12. 分书问题有编号分别为1,2,3,4,5的五本书,准备分给A,B,C,D,E五个人,每个人阅读兴趣用一个二维数组加以描述:希望你写一个程序,输出所有分书方案,让人人皆大欢喜。假定5个人对5本书的阅读兴趣如下表:书0书1书2书3书4人A00110人B11001人C0110

温馨提示

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

评论

0/150

提交评论