c语言解题.docx

上传人:b****2 文档编号:18005262 上传时间:2023-04-24 格式:DOCX 页数:15 大小:86.99KB
下载 相关 举报
c语言解题.docx_第1页
第1页 / 共15页
c语言解题.docx_第2页
第2页 / 共15页
c语言解题.docx_第3页
第3页 / 共15页
c语言解题.docx_第4页
第4页 / 共15页
c语言解题.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

c语言解题.docx

《c语言解题.docx》由会员分享,可在线阅读,更多相关《c语言解题.docx(15页珍藏版)》请在冰豆网上搜索。

c语言解题.docx

c语言解题

第五次作业:

函数

计算并输

1.自然数的计算编写自己的两个函数,分别求出两个整数的最大公约数和最小的公倍数。

编写一个程序,功能是能够由键盘输入两个整数,并能调用自己编写的函数,出这两个整数的最大公约数和最小公倍数。

#include

voidmain()

{

inta,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);

}

intys(intx,inty)

{

inti;

for(i=x;i>=1;i--)

if(x%i==0&&y%i==0)

return(i);

}

intbs(intx,inty)

{

inti;

for(i=x;i<=x*y;i++)

if(i%x==0&&i%y==0)

return(i);

}

bd

2.字符串连接

请使用字符数组,编写自己的字符串连接函数。

编写一个程序,功能是能够由键盘输入两个字符串,并能调用自己编写的字符串连接函

数,输出新的字符串。

#include

voidmain()

{charIj(charx[],chary[],charz[]);

inti,j;

chara[100],b[100],c[200];

gets(a);

gets(b);

lj(a,b,c);

for(i=0;i

printf("%c",c[i]);

printf("\n");

}

charlj(charx[],chary[],charz[])

{

inti,j;

for(i=0;i

z[i]=x[i];

for(i=strlen(x);i<=strlen(x)+strlen(y)-1;i++)z[i]=y[i-strlen(x)];

}

W"C:

\Debug\l.exe"

abedsfgh

ijkinnap

ab&defghijkinnap

Pressanykeytocontinue^

3.三角函数

请使用台劳级数编写自己的常用三角近似值计算函数,用于自己程序的调用。

台劳级数

为:

357

xxxx

sinx=—————-——-...

1!

3!

5!

7!

0

2

4

6

x

x

x

x

cosx-

+

+

1!

2!

4!

6!

舍去的值由自己定义一个最小值。

请用自己的函数计算下面两个表达式的值,并且与VC++提供的标准函数之间的误差进

行比较。

请输入结果。

—C0sc0

y初2E)

y=2*sinxsirxcosc-coSx,(x=450)

#include

#inelude

voidmain()

{floats(floatx);

floatc(floatx);

floata,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);

}

floats(floatx)

{

inti;

floaty=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);

}

floatc(floatx)

{

inti;

floaty=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.弦截法解方程

32

用弦截法求解方程f(x)=x3-5x2+16x-80=0的根。

要求使用和编写如下的函数:

32

代表f(x)=x3-5x2+16x-80的值

#include

voidmain()

{floatroot(floatx1,floatx2);

floatx1,x2,x;

do

{scanf("%f%f",&x1,&x2);

}while(f(x1)*f(x2)>0);x=root(x1,x2);

printf("therootis%f",x);

}

floatf(floatx)

{

floaty;y=x*x*x-5*x*x+16*x-80;return(y);

}

floatxpoint(floatx1,floatx2)

{floaty;y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));returny;

}

floatroot(floatx1,floatx2)

{

floatx;

do

{x=xpoint(x1,x2);if(f(x)*f(x1)<0)x2=x;

elsex1=x;

}while(fabs(f(x))>=1e-6);return(x);

}

5.最长单词编写一个自己的函数,能够将一个字符串中最长的单词查找出来。

编写一个程序,功能是能够由键盘输入一行字符,并能调用自己编写的最长单词查找函数,输出这个单词。

#include

voidmain()

{

chara[1000],b[1000][1000];

inti,k,f;

for(i=0;i<1000;i++)

scanf("%c",&a[i]);

b[k][f]=longest(a);

for(i=0;i

printf("%c",b[k][i]);

}

charlongest(chara[])

{

inti,j,f,k,n,y;

charx[1000],b[1000][1000];n=strlen(a);

if(a[0]!

='')

{

for(i=0,f=0;i

{

if(a[i]=='')

break;

else

{

b[0][f]=a[i];

f++;

}

x[0]=f;

}

}

else

{

for(i=0,k=0;i

{

if(a[i+1]!

='')

{

for(j=i+1,f=0;j

{

if(a[j]=='')

break;

else

{

b[k][f]=a[j];

f++;

}

x[k]=f;

}

}

k++;

}

y=k;

}

for(k=0;k

return(b[k][f]);

}

intMax(inta[],intfirst,intn)

{

intmax;

if(first==n-1)returna[first];

max=Max(a,first+1,n);if(max

returna[first];

elsereturnmax;

6.勒让德多项式

用递归思想求n阶勒让德多项式的值,该多项式为:

1((2n—1)*x—pn_1(x)—(n—1)*pgx)/n21

#include

voidmain()

{floatp(floatx,intn);

floatx,y;

intn;

scan("%f%d",&x,&n);

y=p(x,n);

printf("%f\n",y);

}

floatp(floatx,intn)

{floaty;

if(n==0)return

(1);

elseif(n==1)return(x);

elsey=((2*n-1)*x-p(x,n-1)-(n-1)*p(x,n-2)/2);return(y);

}

T"C:

\Debug\8498.exe"|

2Q3

Heseeeee

Pressanijkeijtocontirua

7.角夫猜想

日本数学家角夫提出了如下的猜想:

任意一个自然数,比如奇数,将其乘以3再加1;

如果是偶数将其除以2;反复运算。

请大家编写程序,看会出现什么结果?

编写程序功能要求能够不停的输入自然数,遇到输入自然数0时,程序结束。

输入:

请输入自然数n:

30

输出:

自然数n按照角夫猜想运算规则变化的各次结果:

1546237035

10653160804020105168。

(直到结果收敛,不再

变化)

#include

voidmain()

{intjf(intn);

intn,k;

do

{

scan("%d",&n);

k=n;

jf(n);

}while(k!

=0);

}

intjf(intn)

{intn1;

if(n%2==0)n1=n/2,printf("%d",n1);

elsen仁n*3+1,printf("%d",n1);

if(n1!

=n)jf(n1);

8.数学黑洞

任意一个4位自然数(除4个数字完全一样除外,例如4444、7777等),,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍然为一个自然数,重复上述运算,你会发现一个神秘数。

编写程序功能要求能够不停的输入自然数,遇到输入0时,程序结束。

输入:

请输入自然数n:

7754

输出:

自然数n按照以上运算规则变化的各次规律:

(7754,4577,3177)(7731,

1377,6534)(6543,3456,3087)(8730,0378,8352)(8532,2358,6174)。

(直到结果收敛,不再变化)

#inelude

voidmain()

{intn,max,min;

scanf("%d",&n);

sort(n);

}sort(intn)

{inta[4];

inti,j,temp;

intmax,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]

{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.设计递归程序

任意给定输入的一个小写英文字符串aia2a3…an-ian(n>5)

输出:

字符串AndiAi-1a2An-233•…A2an-1Aldn,其中A为a的大与形式

例如,输入aybdx,则递归程序输出XaDyBbYdAx

i0.成绩排名

期中考试快要结束了,老师需要进行年级成绩排名。

排名的规则如下:

以期中考试的平均成绩为排名依据(满分为i00分);

对学生A,如果一共有K个学生的平均成绩比A的平均成绩高,则学生A的年级排名为K+i;

如果学生A和学生B的平均成绩相同,则他们的排名相同。

要求编写几个函数,分别实现以下的功能:

函数1:

输入10个同学的学号、姓名、平均成绩

函数2:

按平均成绩由大到小的顺序进行排序,学号、姓名也随之调整,并请按照上述规则进行排名

函数3:

输入一个同学的学号,能够用折半查找法找出该同学的姓名、平均成绩、排名等信息

编写一个程序来使用验证上述函数。

输入、输出格式要求:

(1)第一行为一个整数N(1

随后有N行,每行有两个非负整数和字符串描述一个学生的信息,依次为学号、姓名和平均成绩。

(2)随机输入一个同学的学号,请输出这个同学的姓名、平均成绩、排名等信息。

如果学号不存在,输出错误提示信息。

(3)输入学号0000000000时,程序退出。

11.日历计算

请使用已学的知识来编写一个自己的日历计算程序。

功能要求任意输入一个日期(年、月、日),请输出该日期为该年度的第几天、第几周、星期几。

请不要使用VC环境提供的日期计算函数。

已知公元1年1月1日为星期一。

(以下为选作题,请用递归思想尝试编写程序)

12.分书问题

有编号分别为1,2,3,4,5的五本书,准备分给A,B,C,D,E五个人,每个人阅读兴趣用一个二维数组加以描述:

i喜欢j书

i不喜欢j书

希望你写一个程序,输出所有分书方案,让人人皆大欢喜。

假定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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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