常见编程算法实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常见编程算法实例

关于数字上的一些编程算法

1. 输出9*9口诀乘法表

分析:分行与列考虑,共9行9列,i控制行,j控制列。

#include "stdio.h"

main()

{ int i,j,result;

printf("\n");

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("\n");/*每一行后换行*/

}}

2. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

【分析】关键是计算出每一项的值。

main()

{ int a,n,count=1;

long int sn=0,tn=0;

printf("please input a and n\n");

scanf("%d,%d",&a,&n);

printf("a=%d,n=%d\n",a,n);

while(count<=n)

{ tn=tn+a;

sn=sn+tn;

a=a*10;

++count;

}printf("a+aa+...=%ld\n",sn); }

公式∏/4=1-1/3+1/5-1/7+...+ 1/n ,求∏的近似值,直到最后一项1/n 的绝对值小于0.000001。

#include

#include

main()

{ int f=1;

double pi=0,t=1,v=1;

while(fabs(t)>1e-6)

{ pi=pi+t;

v+=2;

f=-f;

t=f/v;

}

pi*=4;

printf("∏=%f\n",pi); }

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

规律:分子是前一项分子分母之和,分母是前一项的分子。

main()

{ int n,t,number=20;

float a=2,b=1,s=0;

for(n=1;n<=number;n++)

{s=s+a/b;

t=a;a=a+b;b=t;/*序列规律的实现*/

}

printf("sum is %9.6f\n",s); }

判断11<=x<=10000中的数那些是回文数,统计回文数个数,回文数每行输出10个。分析:(1) 让x重新构成新的数t,如果x==t则是回文数.(2) 分解出x的各位,进行首尾比较,如果都相等则是回文数。

fun1()//算法一

{ long x,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("\n"); }

t=0; }

printf("\ncnt=%5d",cnt);

}

fun2()//算法二

{ long x,i,t=0,j=0,s=10,x1,cnt=0;

int a[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

if(a[i]==a[j])

i++,j--;

else break;

if(i>=j)

{printf("%5d",x);

cnt++;

if(cnt%10==0)

printf("\n"); }

j=0; }

printf("\ncnt=%5d",cnt); }

main()

{fun1(); }

求1+2!+3!+...+20!的和。

main()

{float n,s=0,t=1;

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

{ t*=n; //实现阶乘

s+=t; //将阶乘累加

}

printf("1+2!+3!...+20!=%e\n",s); //%e 为科学计数法输出

}

输入一个年份判断它是否是闰年,满足下面条件之一就称为闰年:(1).能被4整除而不能被100整除。(2).能被100整除也能被400整除。

#include

main()

{long int year;

printf("input year:");

scanf("%d",&year);

if(year%4==0&& year%100!=0||year%100==0&&year%400==0)

printf("yes");

else printf("No"); }

将十进制数转换成任意进制。分析:将输入的数循环除以基数取余直到商为0 ,然后逆序输出。#include

void main() // idec为十进制数,ibase为要转换成数的基

{int idec,i, idr, p=0,ibase;

char strdr[20],t;

printf("输入要转换的十进制数idec=");

scanf("%d",&idec);

printf("\n输入要转换成的进制基数(如:八进制则输入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对应

else strdr[p++]=idr+48; //将数字转换为数字字符

idec/=ibase; //得到商,把这个商的值重新赋值给idec

} //下面for循环的目的是将取余的各数逆序存放,

for(i=0; i

{ t=strdr[i];

strdr[i]=strdr[p-i-1];

strdr[p-i-1]=t; }

strdr[p]='\0';

printf("\n转换成%d进制后的数为:%s",ibase,strdr);

printf("\n"); }

将一个数组逆序输出。分析:用第一个与最后一个交换,然后用第二个与倒数第二个交换,其余依此类推。

#define N 5

main()

{int a[N]={9,6,5,4,1},i,temp;

printf("\n original array:\n");

for(i=0;i

printf("%4d",a[i]);

for(i=0;i

{temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp; }

printf("\n sorted array:\n");

for(i=0;i

printf("%4d",a[i]); }

相关文档
最新文档