常用算法举例.docx
- 文档编号:30757642
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:13
- 大小:17.78KB
常用算法举例.docx
《常用算法举例.docx》由会员分享,可在线阅读,更多相关《常用算法举例.docx(13页珍藏版)》请在冰豆网上搜索。
常用算法举例
常用算法举例
一、求面积、体积、方程的根,将公式的表达式用变量或常量表示出来,输出即可;
二、累加、累乘(包括偶数和奇数的变换运算)
三、典型算法举例:
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常用 算法 举例
![提示](https://static.bdocx.com/images/bang_tan.gif)