常用算法举例.docx

上传人:b****5 文档编号:30757642 上传时间:2023-08-20 格式:DOCX 页数:13 大小:17.78KB
下载 相关 举报
常用算法举例.docx_第1页
第1页 / 共13页
常用算法举例.docx_第2页
第2页 / 共13页
常用算法举例.docx_第3页
第3页 / 共13页
常用算法举例.docx_第4页
第4页 / 共13页
常用算法举例.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

常用算法举例.docx

《常用算法举例.docx》由会员分享,可在线阅读,更多相关《常用算法举例.docx(13页珍藏版)》请在冰豆网上搜索。

常用算法举例.docx

常用算法举例

常用算法举例

一、求面积、体积、方程的根,将公式的表达式用变量或常量表示出来,输出即可;

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

三、典型算法举例:

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

思路:

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

若是多个数,则采取从键盘上输入第一个数,并假定它是最大值存放在变量max中,以后每输入一个数便与max比较,若输入的数较大,则最大值是新的数值,存放到max中,数据输入完,最大值也就确定了。

main()

{

inta,b,c,d;

scanf(“%d,%d,%d”.&a,&b,&c);

d=max(a,b,c);

printf(“max=%d”,d);

}

intmax(x,y,z)

intx,y,z;

{

intp;

p=x;

if(p

if(p

return(p);

}

求10个数的最大值

main()

{

intI,k,max;

scanf(“%d”,&max);

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

{

scanf(“%d”,&k);

if(max

}

printf(“max=%d\n”,max);

}

2、判断是否为闰年

思路:

闰年应满足条件之一:

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

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

main()

{

intyear,leap;

scanf("%d",&year);

if(year%4==0)

{if(year%100==0)

{if(year%400==0)

leap=1;

elseleap=0;}

else

leap=1;}

else

leap=0;

if(leap)

printf(“%dis“,year);

else

printf(“%disnot”,year);

printf(“aleapyear/n”);

}

此程序还可以简化用(year%4==0&&year%100!

=0||year%400==0)直接进行判断也可;此题还可求某范围内的闰年。

3、判断是否为素数

思路:

一个自然数,若除了1和它本身外不能被其他整数整除,则为素数。

如果M不能被2到SQRT(M)中的任何整数整除,则可说明它是素数,当I>=SQRT(M)+1时结束循环。

#include“math.h”

main()

{

intm,I,k;

scanf(“%d”,&m);

k=sqrt(m);

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

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”,m);n=n+1;}

}

}

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

思路:

若已知整数X和Y的最大公约数是K,则它们的最小公倍数是x*y/k。

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

a.辗转相除法

两个数相除,若余数为0,则除数就是这两个数的最大公约数;若余数不为0,则以除数作为新的被除数,以余数作为新的除数,继续相除,直到余数为0,除数就是最大公约数。

main()

{

intp,r,n,m,temp;

printf(“请输入两个整数n,m:

”);

scanf(“%d,%d”,&n,&m);

if(n

{temp=n;n=m;m=temp;}

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(”%d,%d”,a,x*y/a);

}

5、求Fibonacci数列:

1,2,3,5,8,……的前40个数,即

F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)

main()

{longintf1,f2;

intI;

f1=1;f2=1;

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

{

printf(“%12ld%12ld“,f1,f2);

if(I%2==0)printf(“\n”);

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

}

}

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”,x);

else

if(x>=90)printf(“x=%d—A\n”,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(“%f”,&x);

switch((int)(x/10))

{

case10:

case9:

printf(“x=%f—A\n”,x);break;

case8:

printf(“x=%f—B\n”,x);break;

case7:

case6:

printf(“x=%f—C\n”,x);break;

case5:

case4:

case3:

case2:

case1:

case0:

printf(“x=%f—D\n”,x);break;

default:

printf(“x=%fdataerror!

\n”,x);

}

}

7、打印水仙花数

思路:

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

例:

153=13+53+33

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)

printf(“%4d”,n);

}

}

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;I<=9;I++)

{

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

printf(“%2d*%2d=%2d”,j,I,I*j);

printf(“\n”);

}

}

 

9、打印如下图案

*思路:

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

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

*****

*******

*****

***

*

main()

{

intI,j,k;

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

{

for(j=0;j<=2-I;j++)printf(“”);

for(k=0;k<=2*I;k++)printf(“*”);

printf(“\n”);

}

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

{

for(j=0;j<=I;j++)printf(“”);

for(k=0;k<=4-2*I;k++)printf(“*”);

printf(“\n”);

}

}

若图案居中,则可改为:

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

{for(j=1;j<=31-I;j++)printf(“”);

for(k=1;k<=2*I-1;k++)printf(“*”);

printf(“\n”);}

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

例如2+22+222=?

main()

{inta,n,I=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;I++;}

printf(“a+aa+aaa…=%d\n”,sn);}

11、给定一个不多于5位的正整数,要求:

求它是几位数;分别打印出每一位数字;按逆序打印各位数字。

例如:

321要求输出123

main()

{longintnum;

intindiv,ten,hundred,thousand,ten_thousand,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=1;

printf(“place=%d”,place);

printf(“每位数字为:

”);

ten_thousand=(int)(num/10000);

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

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

ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;

indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);

switch(place)

{case5:

printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);

printf(“\n反序数字为:

”);

printf(“%d%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand,);

break;

case4:

……

}

}

12、完数:

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

方法一:

main()

{

intm,s,I;

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

{s=0;

for(I=1;I

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

if(s==m)

{printf(“%d是一个完数,它的因子是”,m);

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

if(m%I==0)printf(“%d”,I);

printf(“\n”);

}

}

}

方法二:

#defineM1000

main()

{intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;

intI,a,n,s;

for(a=2;a<=M;a++)

{n=0;s=a;

for(I=1;I

if(a%I==0)

{n++;s=s-I;

switch(n)

{case1:

k1=I;break;

case2:

k2=I;break;

case10:

k10=I;break;

}

}

if(s==0)

{printf(“%ditsfactorsare”,a);

if(n>1)printf(“%d,%d”,k1,k2);

if(n>2)printf(“,%d”,k3);

if(n>9)printf(“,%d”,k10);

printf(“\n”);

}

}

}

方法三:

运用数组

 

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

当前位置:首页 > 小学教育 > 小升初

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

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