资源描述:
《c语言常见编程算法实例》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
常见编程算法实例一、关于数字上的一些编程算法1.输出9*9口诀乘法表。分析:分行与列考虑,共9行9列,i控制行,j控制列。#include"stdio.h"main(){inti,j,result;printf(" ");for(i=1;i<10;i++){for(j=1;j<=i;j++){result=i*j;printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/}printf(" ");/*每一行后换行*/}}2.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。分析:关键是计算出每一项的值。main(){inta,n,count=1;longintsn=0,tn=0;printf("pleaseinputaandn ");scanf("%d,%d",&a,&n);printf("a=%d,n=%d ",a,n);while(count<=n){tn=tn+a;sn=sn+tn;a=a*10;++count;}printf("a+aa+...=%ld ",sn);}3.公式∏/4=1-1/3+1/5-1/7+...+1/n,求∏ 的近似值,直到最后一项1/n的绝对值小于0.000001。#include#includemain(){intf=1;doublepi=0,t=1,v=1;while(fabs(t)>1e-6){pi=pi+t;v+=2;f=-f;t=f/v;}pi*=4;printf("∏=%f ",pi);}1.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。规律:分子是前一项分子分母之和,分母是前一项的分子。main(){intn,t,number=20;floata=2,b=1,s=0;for(n=1;n<=number;n++){s=s+a/b;t=a;a=a+b;b=t;/*序列规律的实现*/}printf("sumis%9.6f ",s);}2.判断11<=x<=10000中的数那些是回文数,统计回文数个数,回文数每行输出10个。分析:(1)让x重新构成新的数t,如果x==t则是回文数.(2)分解出x的各位,进行首尾比较,如果都相等则是回文数。fun1()//算法一{longx,i,t=0,s=10,cnt=0;for(x=11;x<10000;x++) {i=x;while(i!=0)//构成新的数{t=t*s+i%10;i=i/10;}if(t==x){printf("%5d",x);cnt++;if(cnt%10==0)printf(" ");}t=0;}printf(" cnt=%5d",cnt);}fun2()//算法二{longx,i,t=0,j=0,s=10,x1,cnt=0;inta[10];for(x=11;x<10000;x++){x1=x;while(x1!=0)//分解出各位{a[j]=x1%10;x1=x1/10;j++;}i=0;j--;while(i=j){printf("%5d",x);cnt++;if(cnt%10==0)printf(" ");}j=0;}printf(" cnt=%5d",cnt);}main(){fun1();}1.求1+2!+3!+...+20!的和。main() {floatn,s=0,t=1;for(n=1;n<=20;n++){t*=n;//实现阶乘s+=t;//将阶乘累加}printf("1+2!+3!...+20!=%e ",s);//%e为科学计数法输出}1.输入一个年份判断它是否是闰年,满足下面条件之一就称为闰年:(1).能被4整除而不能被100整除。(2).能被100整除也能被400整除。#includemain(){longintyear;printf("inputyear:");scanf("%d",&year);if(year%4==0&&year%100!=0||year%100==0&&year%400==0)printf("yes");elseprintf("No");}2.将十进制数转换成任意进制。分析:将输入的数循环除以基数取余直到商为0,然后逆序输出。#includevoidmain()//idec为十进制数,ibase为要转换成数的基{intidec,i,idr,p=0,ibase;charstrdr[20],t;printf("输入要转换的十进制数idec=");scanf("%d",&idec);printf(" 输入要转换成的进制基数(如:八进制则输入8)ibase=");scanf("%d",&ibase);while(idec!=0)//循环除以基数取余直到商为0{idr=idec%ibase; if(idr>=10)strdr[p++]=idr-10+65;//将16进制的10,11,12,13,14,15与A,B,C,D,E,F对应elsestrdr[p++]=idr+48;//将数字转换为数字字符idec/=ibase;//得到商,把这个商的值重新赋值给idec}//下面for循环的目的是将取余的各数逆序存放,for(i=0;i