收藏 分销(赏)

c语言解题.doc

上传人:a199****6536 文档编号:3066180 上传时间:2024-06-14 格式:DOC 页数:11 大小:166KB 下载积分:8 金币
下载 相关 举报
c语言解题.doc_第1页
第1页 / 共11页
c语言解题.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
第五次作业:函数 1. 自然数的计算 编写自己的两个函数,分别求出两个整数的最大公约数和最小的公倍数。 编写一个程序,功能是能够由键盘输入两个整数,并能调用自己编写的函数,计算并输出这两个整数的最大公约数和最小公倍数。 #include <stdio.h> void main() { int a,b,c,d; scanf("%d%d",&a,&b); c=ys(a,b); d=bs(a,b); printf("a,b的最小公倍数是%d\n最大公约数是%d\n",d,c); } int ys(int x,int y) { int i; for(i=x;i>=1;i--) if(x%i==0&&y%i==0) return(i); } int bs(int x,int y) { int i; for(i=x;i<=x*y;i++) if(i%x==0&&i%y==0) return(i); } 2. 字符串连接 请使用字符数组,编写自己的字符串连接函数。 编写一个程序,功能是能够由键盘输入两个字符串,并能调用自己编写的字符串连接函数,输出新的字符串。 #include <stdio.h> void main() {char lj(char x[],char y[],char z[]); int i,j; char a[100],b[100],c[200]; gets(a); gets(b); lj(a,b,c); for(i=0;i<strlen(a)+strlen(b);i++) printf("%c",c[i]); printf("\n"); } char lj(char x[],char y[],char z[]) { int i,j; for(i=0;i<strlen(x);i++) z[i]=x[i]; for(i=strlen(x);i<=strlen(x)+strlen(y)-1;i++) z[i]=y[i-strlen(x)]; } 3. 三角函数 请使用台劳级数编写自己的常用三角近似值计算函数,用于自己程序的调用。台劳级数为: 舍去的值由自己定义一个最小值。 请用自己的函数计算下面两个表达式的值,并且与VC++提供的标准函数之间的误差进行比较。请输入结果。 l ,() l ,() #include <stdio.h> #include <math.h> void main() {float s(float x); float c(float x); float a,b,e,d; a=3.141592/3; d=3.141592/4; b=sqrt((1-c(a))/2); e=2*s(d)*s(d)+s(d)*c(d)-c(d)*c(d); printf("%f\n%f\n",b,e); } float s(float x) { int i; float y=0,s=1/x,t=1/2,w; for(i=1;w>1e-6||w<-1*1e-6;i++) { s=x*x*s; t=i*(i+1)*t; w=s/t; y=y+w; w=-1*w; } return(y); } float c(float x) { int i; float y=0,s=1/(x*x),t=1/2,w; for(i=1;w>1e-6||w<-1*1e-6;i++) { s=x*x*s; t=i*(i+1)*t; w=s/t; y=y+w; w=-1*w; } return(y); } 4. 弦截法解方程 用弦截法求解方程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<stdio.h> void main() {float root(float x1,float x2); float x1,x2,x; do {scanf("%f%f",&x1,&x2); }while(f(x1)*f(x2)>0); x=root(x1,x2); printf("the root is %f",x); } float f(float x) { float y; y=x*x*x-5*x*x+16*x-80; return(y); } float xpoint(float x1,float x2) {float y; y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); return y; } float root(float x1,float x2) { float x; do {x=xpoint(x1,x2); if(f(x)*f(x1)<0) x2=x; else x1=x; }while(fabs(f(x))>=1e-6); return(x); } 5. 最长单词 编写一个自己的函数,能够将一个字符串中最长的单词查找出来。 编写一个程序,功能是能够由键盘输入一行字符,并能调用自己编写的最长单词查找函数,输出这个单词。 #include <stdio.h> void main() { char a[1000],b[1000][1000]; int i,k,f; for(i=0;i<1000;i++) scanf("%c",&a[i]); b[k][f]=longest(a); for(i=0;i<f;i++) printf("%c",b[k][i]); } char longest(char a[]) { int i,j,f,k,n,y; char x[1000],b[1000][1000]; n=strlen(a); if(a[0]!=' ') { for(i=0,f=0;i<n;i++) { if(a[i]==' ') break; else { b[0][f]=a[i]; f++; } x[0]=f; } } else { for(i=0,k=0;i<n;i++) { if(a[i+1]!=' ') { for(j=i+1,f=0;j<n;j++) { if(a[j]==' ') break; else { b[k][f]=a[j]; f++; } x[k]=f; } } k++; } y=k; } for(k=0;k<y;k++) if(x[k]==Max(x,0,y)) return(b[k][f]); } int Max(int a[], int first, int n) { int max; if(first == n-1) return a[first]; max = Max(a, first+1, n); if(max < a[first]) return a[first]; else return max; } 6. 勒让德多项式 用递归思想求n阶勒让德多项式的值,该多项式为: #include <stdio.h> void main() {float p(float x,int n); float x,y; int n; scanf("%f%d",&x,&n); y=p(x,n); printf("%f\n",y); } float p(float x,int n) {float y; if(n==0) return(1); else if(n==1) return(x); else y=((2*n-1)*x-p(x,n-1)-(n-1)*p(x,n-2)/2); return(y); } 7. 角夫猜想 日本数学家角夫提出了如下的猜想: 任意一个自然数,比如奇数,将其乘以3再加1;如果是偶数将其除以2;反复运算。请大家编写程序,看会出现什么结果? 编写程序功能要求能够不停的输入自然数,遇到输入自然数0时,程序结束。如 l 输入: 请输入自然数n:30 l 输出: 自然数n按照角夫猜想运算规则变化的各次结果:15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 。。。。。。(直到结果收敛,不再变化) #include <stdio.h> void main() {int jf(int n); int n,k; do { scanf("%d",&n); k=n; jf(n); }while(k!=0); } int jf(int n) {int n1; if(n%2==0) n1=n/2,printf("%d ",n1); else n1=n*3+1,printf("%d ",n1); if(n1!=n) jf(n1); } 8. 数学黑洞 任意一个4位自然数(除4个数字完全一样除外,例如4444、7777等),,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍然为一个自然数,重复上述运算,你会发现一个神秘数。 编写程序功能要求能够不停的输入自然数,遇到输入0时,程序结束。如 l 输入: 请输入自然数n: 7754 l 输出: 自然数n按照以上运算规则变化的各次规律:(7754,4577,3177) (7731,1377,6534)(6543,3456,3087) (8730,0378,8352) (8532,2358,6174)。。。。。(直到结果收敛,不再变化) #include <stdio.h> void main() {int n,max,min; scanf("%d",&n); sort(n); } sort(int n) {int a[4]; int i,j,temp; int max,min; a[0]=n/1000; a[1]=n/100-n/1000*10; a[2]=n/10-n/100*10; a[3]=n-n/10*10; for(i=0;i<3;i++) for(j=i+1;j<3;j++) if(a[i]<a[j]) {temp=a[i]; a[i]=a[j]; a[j]=temp; } max=a[0]*1000+a[1]*100+a[2]*10+a[3]; for(i=0;i<3;i++) for(j=i+1;j<3;j++) if(a[i]>a[j]) {temp=a[i]; a[i]=a[j]; a[j]=temp; } min=a[0]*1000+a[1]*100+a[2]*10+a[3]; n=max-min; printf("(%d,%d,%d)",max,min,n); sort(n); } 9. 设计递归程序 任意给定输入的一个小写英文字符串a1a2a3…an-1an (n≥5) 输出:字符串Ana1An-1a2An-2a3…A2an-1A1an,其中Ai为ai的大写形式 例如,输入aybdx,则递归程序输出XaDyBbYdAx 10. 成绩排名 期中考试快要结束了,老师需要进行年级成绩排名。排名的规则如下: l 以期中考试的平均成绩为排名依据(满分为100分); l 对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排名为K+1; l 如果学生A和学生B的平均成绩相同,则他们的排名相同。 要求编写几个函数,分别实现以下的功能: l 函数1:输入10个同学的学号、姓名、平均成绩 l 函数2:按平均成绩由大到小的顺序进行排序,学号、姓名也随之调整,并请按照上述规则进行排名 l 函数3:输入一个同学的学号,能够用折半查找法找出该同学的姓名、平均成绩、排名等信息 编写一个程序来使用验证上述函数。 l 输入、输出格式要求: (1) 第一行为一个整数N(1 < N < 200),表示学生的人数。随后有N行,每行有两个非负整数和字符串描述一个学生的信息,依次为学号、姓名和平均成绩。 (2) 随机输入一个同学的学号,请输出这个同学的姓名、平均成绩、排名等信息。如果学号不存在,输出错误提示信息。 (3) 输入 学号0000000000 时,程序退出。 11. 日历计算 请使用已学的知识来编写一个自己的日历计算程序。功能要求任意输入一个日期(年、月、日),请输出该日期为该年度的第几天、第几周、星期几。 请不要使用VC 环境提供的日期计算函数。 已知公元1年1月1日为星期一。 (以下为选作题,请用递归思想尝试编写程序) 12. 分书问题 有编号分别为1,2,3,4,5的五本书,准备分给A,B,C,D,E五个人,每个人阅读兴趣用一个二维数组加以描述: 希望你写一个程序,输出所有分书方案,让人人皆大欢喜。假定5个人对5本书的阅读兴趣如下表: 书0 书1 书2 书3 书4 人A 0 0 1 1 0 人B 1 1 0 0 1 人C 0 1 1 0 1 人D 0 0 0 1 0 人E 0 1 0 0 1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服