常用算法举例_第1页
常用算法举例_第2页
常用算法举例_第3页
常用算法举例_第4页
常用算法举例_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

常用算法举例

一、求面积、体积、方程的根,将公式的表达

式用变量或常量表示出来,输出即可;

二、累加、累乘(包括偶数和奇数的变换运算)

三、典型算法举例:

1、求两个数或三个数或多个数的最大值、最小值

思路:用表判断的if语句就可完成,也可使用函数的调用;

若是多个数,则采取从键盘上输入第一个数,并假定它

是最大值存放在变量max中,以后每输入一个数便与max

比较,若输入的数较大,则最大值是新的数值,存放到

max中,数据输入完,最大值也就确定了。

main()

(

intci,b,c,d;

scanf%d,%d〃.&a,&b,&c);

d=max(a,b,c);

printf(''max=%d,z,d);

}

intmax(x,y,z)

intx,y,z;

(

intp;

P二x;

if(p<y)p=y;

if(p<z)p=z;

returr.(p);

)

求10个数的最大值

main()

intI,k,nax;

scanf&max);

for(I=2;I<11;I++)

(

scanf(、'*d〃,&k);

if(max<k)mzk=k;

)

printf(''max=%d\n/z,max);

)

2、判断是否为闰年

思路:闰年应满足条件之一:

(a)能被4整除,但不能被100整除;

(b)能被4整除又能被400整除

main()

(

intyear,leap;

scanf&year);

if(year%4==0)

{if(year%100==0)

{if(year%400==0)

leap=l:

elseleap=0;}

else

leap=l;}

else

leap=0;

if(leap)

printf(''%disyear);

else

printf(''%disnot”,year);

printf(''aleapyear/n,/);

}

此程序还可以简化用(year%4==0&&year%100!=0|ycar%400==0)直接

进行判断也可;此题还可求某范围内的闰年。

3、判断是否为素数

思路:一个自然数,若除了1和它本身外天能被其他整数整除,

则为素数。如果M不能被2到SQRTW中的任何整数整除,则可

说明它是素数,当I>=SQRT(M)+1时结束循环。

ttinclude''math.h〃

main()

(

intm,I,k;

scanf,&m);

k=sqrt(m);

for(I=2;T<=k;T++)

if(m%I==0)break;

if(I>=k+1)printf(''%disaprimenumber\n〃,m);

elseprintf(''%disnotaprimenumber\n,/,m);

)

此程序还可改成对某范围求全部素数:

^include''math.h〃

main()

(

intm,k,I,n=0;

for(m=101;m<=200;m=m।2)

{if(n%10==0)printf(、'\n〃);

k=sqrt(m);

for(I=2;I<=k;I++)

if(m%I==0)break;

if(I>=k+1)

{printf(''%d,z,m);n=n+l;}

)

)

4、求最大公约数和最小公倍数

思路:若已知整数X和Y的最大公约数是K,则它们的最小公倍

数是x*y/ko

求解最大公约数有两种方法:

a.辗转相除法

两个数相除,若余数为0,则除数就是这两个数的最大公约数;

若余数不为0,则以除数作为新的被除数,以余数作为新的除

数,继续相除,直到余数为0,除数就是最人公约数。

niain()

(

intp,r,n,m,temp;

printf(''请输入两个整数n,m:〃);

scanf(、'%d,%d〃,&n,&m);

if(n<m)

{tempon;n=m;m=Iemp;}

p=n*m;

while(m!=0)

{r=n%m;n=m;m=r;?

printf(''最大公约数是%d〃,n);

printf(''最小公倍数是%d〃,p/n);

)

此题还可考虑如果输入时的m=0该如何处理。

b.相减法

两个数中从大数中减去小数,所得的差若与小数相等,则该数

为最大公约数;若不等,对所得的差和小数,继续从大数中减

去小数,直到两个数相等为止。

main()

(

intx,y,a,b,t;

scanf(''%d,%d",&x,&y);

a=x;b=y;

while(a!=b)

if(a>b)a=a-b;

elseb=b-a;

printf(z,%d,%d〃,a,x*y/a);

)

5、求Fibonacci数列:1,2,3,5,8,...的前40个数,即

Fl=l(n=l)F2=l(n=2)Fn=Fn-l+Fn-2(n>=3)

main()

{longintfl,f2;

intI;

fl=l;f2=l;

for(I=l;I<=20;I++)

(

printf(、*121d%121d、、,f1,f2);

if(I%2==0)printf(''\n/,);

fl=fl+f2;f2=f2+f1;

)

1

6、输入某学生的成绩,输出该学生的成绩和等级(A级:90-100,

B级:80-89,C级:60-79,D级:0-59)

a.if语句

main()

(

intx;

printf(''Pleaseinputx(0<=x<=100)\n");

scanf(、'%d〃,&x);

if(x>100||x<0)printf(''x=%ddataerror!\n/z,x);

else

if(x>=90)printf(''x=%d-A\nz,,x);

elseif(x>=80)printf(''x=%d-B\n,/,x);

elseif(x>=60)printf(、'x二%d-C\n〃,x);

elseprintf((''x/d-D\n〃,x);

}

b.switch语句

main()

(

floatx;

printf(''Pleaseinputx:\n);

scanf&x);

switch((int)(x/10))

(

case10:

case9:printf(A\nz/,x);break;

case8:printf(''x=%f—B\n〃,x);break;

case7:

case6:printf(''x=%f-C\nz/,x);break;

case5:

case4:

case3:

case2:

case1:

case0:printf(''x=%f-D\nz,,x);break;

dcfault:printf(''x=%fdataerror!\n〃,x);

)

7、打印水仙花数

思路:“水仙花数”是指一个3位数字的立方和等于该数本身。

例:153=P+5$+3s

main()

(

intI,j,k,n;

printf(''"水仙花数”是:〃);

for(n=100;n<1000;n++)

(

I=n/100;j=n/10-I*10;k=n%10;

if(n==I*I*I+j*j*j+k*k*k)

printfn);

)

)

8、打印九九乘法表

例:

1*1=1

1*2=22*2=4

1*3=32*3=63*3=9

1*4=42*4=83*4=124*4=16

思路:该题有列数、乘数的变化,而且其中一个乘数的变化跟另

一个乘数有关。

main()

(

intI,j;

for(I=1;K=9;I++)

(

for(j=l;j<=I;j++)

printf(''%2d*%2d=%2d,z,j,I,I*j);

printf(''\n,z);

)

9、打印如下图案

*思路:此题应考虑上、下两个三角形,其中有空格、

***行数、星号等参数的变化

J、J、J、J*5、z*Zijz%

main()

(

intI,j,k;

for(I=0;K=3;I++)

f

for(j=0;j<=2-I;j++)printf(''");

for(k=0;k<=2*I;k++)printf(''*〃);

printf(、'\n〃);

)

for(1=0;I<=2;I++)

{

for(j=0;j<=I;j++)printf(''〃);

for(k=0;k<=4-2*I;k++)printf(''*〃);

printf(''\nzz);

}

}

若图案居中,则可改为:

for(I=1;K=4;I++)

{for(j=l;j<=31-I;j++)printf(、'〃);

for(k=l;k<=2*I-l;k++)printf(''*〃);

printf(''\nz,);l

10、Sn=a+aa+aaa+...+aa..a,其中a是一个数字。例如

2+22+222=?

main()

{inta,n,1=1,sn=0,tn=0;

printf(''a,n=:〃);

scanf(''%d,%d,,»&a,&n);

while(I<=n)

{tn=tn+a;sn=sn+tn;a=a*10;1++;}

printf(''a+aa+aaa...=%d\n/,,sn);}

11、给定一个不多于5位的正整数,要求:求它是几位数;分

别打印出每一位数字;按逆序打印各位数字。例如:321要求输

出123

main()

{longintnum;

intindiv,ten.hundred,thousand,tenthousand,place;

printf(''请输入一个整数:");

scanf(''%ld〃,&num);

if(num>9999)place=5;

elseif(num>999)place=4;

elseif(num>99)place=3;

elseif(num>9)place=2;

elseplace=l;

printf(''place=%d,z,place);

printf。'每位数字为:〃);

ten_thousand=(int)(num/10000);

thousand=(int)(num-tenthousand*10000)/I000;

hundred=(int)(num-ten_thousand*10000-thousand*1000)/I00;

ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*l

00)/10;

indiv=(int)(num-ten_thousand*l0000-thousand*1000-hundrcd

*100-ten*10);

switch(place)

{case5:

printf%d,%d,%d,%d,z,tenthousand,thousand,hundred,te

n,indiv);

printf(''\n反序数字为:〃);

printf(''%d%d%d%d%d%d\nz/,indiv,ten,hundred,thousand,ten_t

housand,);

break;

case4:

}

}

12、完数:一个数如果恰好等于它的因子之和/

方法一:

main()

(

intm,s,T;

for(m=2;m<1000;m++)

{s=0;

for(1=1;T<m;T++)

if((m%I)==0)s=s+s+I;

温馨提示

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

评论

0/150

提交评论