c语言第五次作业
更新时间:2023-10-09 15:18:01 阅读量: 综合文库 文档下载
- c语言第五次作业推荐度:
- 相关推荐
第五次作业:函数
1. 自然数的计算
编写自己的两个函数,分别求出两个整数的最大公约数和最小的公倍数。
编写一个程序,功能是能够由键盘输入两个整数,并能调用自己编写的函数,计算并输出这两个整数的最大公约数和最小公倍数。
程序代码:
#include
intgreatest_common(intx,int y) { inti,min; if (x>y)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 (x>y) max=x; else max=y; for (i=max;;i++) if((i%x==0)&&(i%y==0)) return (i); }
2. 字符串连接
请使用字符数组,编写自己的字符串连接函数。 编写一个程序,功能是能够由键盘输入两个字符串,并能调用自己编写的字符串连接函数,输出新的字符串。
#include
char link(char a[40],char b[20]) { inti,j; i=strlen(a); for(j=0;b[j]!=0;j++) a[i+j]=b[j];
}
return(a[i]);
3. 三角函数
请使用台劳级数编写自己的常用三角近似值计算函数,用于自己程序的调用。台劳级数为:
xx3x5x7sinx?????...
1!3!5!7!x0x2x4x6cosx?????...
1!2!4!6!舍去的值由自己定义一个最小值。
请用自己的函数计算下面两个表达式的值,并且与VC++提供的标准函数之间的误差进行比较。请输入结果。
?
y?1?cos?o,(??60) 2?
oy?2*sin2x?sinx?cosx-cos2x,(x?45)
#include
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(\ y3=sqrt((1-cos(a))/2); y4=sin(b)*(2*sin(b)+cos(b))-cos(b)*cos(b); printf(\}
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. 弦截法解方程
用弦截法求解方程f(x)=x
3
-5x2+16x-80=0的根。
要求使用和编写如下的函数:
32
? float f(float x)代表f(x)=x-5x+16x-80的值
? float xpoint(float x1, float x2) 来求出(x1,f(x1))与 (x2,f(x2))的连线与x
轴的交点x坐标;
? float root(float x1, float x2)用于求出 (x1,x2)区间的近似根。 要求使用的x1与x2的初始值分别为 -10.5 和 20
#include
float f(float x)
/*定义f函数,以实现f(x)=x3-5x2+16x-80 */ {
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*y1>0) /*f(x)与f(x1)同符号 */ { y1=y; x1=x; } else x2=x; } while (fabs(y)>=0.0002); return (x); }
void main() /*主函数*/ { float x1,x2,f1,f2,x; do { printf(\scanf(\ f1=f(x1); f2=f(x2); } while(f1*f2>=0); x=root(x1,x2);
printf(\}
5. 最长单词
编写一个自己的函数,能够将一个字符串中最长的单词查找出来。 编写一个程序,功能是能够由键盘输入一行字符,并能调用自己编写的最长单词查找函数,输出这个单词。
#include
char longest(intn,charstr[100]) { char a[100][100],b[100]={\ inti,j=0,k,max=0,m; int length; length=strlen(str); for(k=0,i=0,j=0;i k=-1; continue; } } return(b[n]); } void main() { charstr[100],a[100]={\ inti; gets(str); for(i=0;a[i]!='';i++) a[i]=longest(i,str); puts(a); } 6. 勒让德多项式 用递归思想求n阶勒让德多项式的值,该多项式为: 1 n?0??pn(x)??x n?1?((2n?1)*x*p(x)?(n?1)*p(x))/n n?1n?1n?2? #include 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(n-2,x))/n; return(y); int p(intn,int x); intn,x,y; printf(\scanf(\if(n<0) { } y=p(n,x); printf(\ printf(\scanf(\ } 7. 角夫猜想 日本数学家角夫提出了如下的猜想: 任意一个自然数,比如奇数,将其乘以3再加1;如果是偶数将其除以2;反复运算。请大家编写程序,看会出现什么结果? 编写程序功能要求能够不停的输入自然数,遇到输入自然数0时,程序结束。如 ? 输入: 请输入自然数n:30 ? 输出: 自然数n按照角夫猜想运算规则变化的各次结果:15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 。。。。。。(直到结果收敛,不再变化) #include n=y; } printf(\ } } 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时,程序结束。如 ? 输入: 请输入自然数n: 7754 ? 输出: 自然数n按照以上运算规则变化的各次规律:(7754,4577,3177) (7731, 1377,6534)(6543,3456,3087) (8730,0378,8352) (8532,2358,6174)。。。。。(直到结果收敛,不再变化) #include intn,m,i,arr[3]={0}; void f(intx,intarr[3]); while(n!=0) { printf(\ scanf(\ while((m-n)!=0) { m=n; f(n,arr); printf(\ n=arr[2]; } printf(\ } } void f(intx,intarr[3]) { int m=0,n=0,i,j,t; int a[4]; for(i=0;i<=3;i++) a[i]=fmod(floor(x/pow(10,i)),10); for(i=0;i<=3;i++) { for(j=0;j<=3;j++) { if(a[j] 9. 设计递归程序 任意给定输入的一个小写英文字符串a1a2a3…an-1an(n≥5) 输出:字符串Ana1An-1a2An-2a3…A2an-1A1an,其中Ai为ai的大写形式 例如,输入aybdx,则递归程序输出XaDyBbYdAx #include void f(char a[20]) { char b[20]; int l,i; l=strlen(a); for (i=0;i<=l-1;i++) b[i]=a[l-i-1]-32; } for (i=0;i<=l-1;i++) printf(\ 10. 成绩排名 期中考试快要结束了,老师需要进行年级成绩排名。排名的规则如下: ? 以期中考试的平均成绩为排名依据(满分为100分); ? 对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排 名为K+1; ? 如果学生A和学生B的平均成绩相同,则他们的排名相同。 要求编写几个函数,分别实现以下的功能: ? 函数1:输入N个同学的学号、姓名、平均成绩 ? 函数2:按平均成绩由大到小的顺序进行排序,学号、姓名也随之调整,并请按照 上述规则进行排名 ? 函数3:输入一个同学的学号,能够用折半查找法找出该同学的姓名、平均成绩、 排名等信息 编写一个程序来使用验证上述函数。 ? 输入、输出格式要求: (1) 第一行为一个整数N(1 < N <200),表示学生的人数。随后有N行,每 行有两个非负整数和字符串描述一个学生的信息,依次为学号、姓名和平均成绩。 (2) 随机输入一个同学的学号,请输出这个同学的姓名、平均成绩、排名等信 息。如果学号不存在,输出错误提示信息。 (3) 输入 学号0000000000 时,程序退出。 #include void input(int n,int number[200],char name[200][10],int grade[200]) { int i; for(i=0;i void rank(int n,int number[200],char name[200][10],int grade[200],int r[200]) { int i,j,k,t; for(i=0;i void find(int n,int number[200],char name[200][10],int grade[200],int r[200]) { int x,i,j,k,t; for(i=0;i k=i; for(j=i;j void main() { } char name[200][10]; int n,i,number[200],grade[200],r[200]; printf(\scanf(\ printf(\input(n,number,name,grade); rank(n,number,name,grade,r); find(n,number,name,grade,r); 11. 日历计算 请使用已学的知识来编写一个自己的日历计算程序。功能要求任意输入一个日期(年、月、日),请输出该日期为该年度的第几天、第几周、星期几。 请不要使用VC 环境提供的日期计算函数。 已知公元1年1月1日为星期一。 #include int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; void time(int a,int b,int c,int d[3]) { 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;i<=b-2;i++) date+=monthday[i]; date=date+c; } if((b>2)&&((a%4==0)&&(a0!=0)||(a@0==0))) date++; //计算到上一年末有多少天 for(year=1;year void main() { int i,year,month,day,d[3]; for(i=0;i<=5;i++) { printf(\ scanf(\ time(year,month,day,d); printf(\第%d天,第%d周,星期%d\\n\ } } (以下为选作题,请用递归思想尝试编写程序) 12. 分书问题 有编号分别为1,2,3,4,5的五本书,准备分给A,B,C,D,E五个人,每个人阅读兴趣用一个二维数组加以描述: ?1 i喜欢j书 like[i][j]?? 0 i不喜欢j书?希望你写一个程序,输出所有分书方案,让人人皆大欢喜。假定5个人对5本书的阅读兴 趣如下表: 人人人人人书A B C D E 0 0 1 0 0 0 书1 0 1 1 0 1 书2 1 0 1 0 0 书3 1 0 0 1 0 书4 0 1 1 0 1 1、定义一个整型的二维数组,将上表中的阅读喜好 用初始化的方法赋给这个二维数组。 可定义:(为了方便,数组第0行、第0列不用) int Like[6][6] = {{0}, {0, 0,0,1,1,0}, {0, 1,1,0,0,1}, {0, 0,1,1,0,1}, {0, 0,0,0,1,0}, {0, 0,1,0,0,1}}; 2、定义一个整型一维数组BookFlag[6]用来记录书是否已被选用。用后五个下标作为五本书的标号,被选用的元素值为1, 未被选用的值为0, 初始化皆为0. intBookFlag[6] = {0}; 3、定义一个整型一维数组BookTaken[6]用来记录每一个人选用了哪一本书。用数组元素的下标来作为人的标号,用数组元素的值来表示书号。如果某个人还没有选好书,则相应的元素值为0。初始化时,所有的元素值均为0。 intBookTaken[6] = {0}; 4、循环变量i表示人,j 表示书,i, j ? {1, 2, 3, 4, 5} #include int Like[6][6]={{0},{0,0,0,1,1,0}, {0, 1, 1, 0, 0, 1}, {0, 0, 1, 1, 0, 1}, {0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1}}; int BookFlag[6]={0}; int BookTaken[6]={0}; void main() { person(1); } void person(int i) { int j,k; for(j=1;j<=5;j++) { if((BookFlag[j]!=0)||(Like[i][j]==0)) continue; BookTaken[i]=j; BookFlag[j]=1; if(i==5) { for(k=1;k<=5;k++) printf(\ printf(\ } else { person(i+1); } BookTaken[i]=0; BookFlag[j]=0; } }
正在阅读:
c语言第五次作业10-09
做理想信念坚定的共产党员201-31
淮南市2014-2015第一学期期末九年级物理(沪粤版)试卷及答案10-27
中国政法大学翻译硕士法律翻译专业介绍06-03
2013年6月化学会考试题及答案08-16
山西刀削面(优秀9篇)04-02
公开课听课后体会感想08-20
卓越绩效自评报告-2008年深圳市市长质量奖获奖单位04-10
基础版教材答案206-10
幼儿园教职工考核与评价制度02-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 作业
- 语言
- 20131017清晖PMP课堂测试题二(5-7章)含答案
- 工地试验室临时资质管理办法
- 卫生知识试题
- C语言第四次作业
- 社会工作概论复习
- 2016-2022年中国电镀产业发展态势及十三五发展策略分析报告
- 2018部编人教版七年级语文上册第15课《 诫子书》导学案
- 24诗词五首《饮酒(其五)》《春望》《雁门太守行》《赤壁》《渔家傲》教案(1)
- 广东省皮鞋生产企业名录2018版4110家 - 图文
- 3.3 绿色植物的光合作用(第1课时) 学案(鲁科版七年级上)
- 《微机原理与接口技术课程设计》教学大纲
- 土木工程专业毕业设计(东北农业大学宿舍楼计算书)讲解
- 51单片机课后三章答案孙育才东南大学
- 《结构化面试试题》
- 基于Matlab的无失真模拟滤波器设计(1)
- 曹晓论文0525
- 大武口区矿热炉安全调研报告
- 2011年微波技术与天习题
- 冲刺强化训练
- 南昌航空大学材料学院关于组织开展