设为首页 加入收藏

TOP

C语言的学习基础,100个经典的算法 (二)
2014-11-23 22:57:37 来源: 作者: 【 】 浏览:21
Tags:语言 学习 基础 100 经典 算法
_________________

程序分析:利用while语句,条件为输入的字符不为'\n'.

___________________________________________________________________

程序源代码:

#include "stdio.h"

main()

{char c;

 int letters=0,space=0,digit=0,others=0;

 printf("please input some characters\n");

 while((c=getchar())!='\n')

 {

 if(c>='a'&&c<='z'||c>='A'&&c<='Z')

  letters++;

 else if(c==' ')

  space++;

   else if(c>='0'&&c<='9')

       digit++;

     else

       others++;

}

printf("all in all:char=%d space=%d digit=%d others=%


d\n",letters,space,digit,others);

}

题目:求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);

}

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2


+3.编程找出1000以内的所有完数。

___________________________________________________________________

程序源代码:

main()

{

static int k[10];

int i,j,n,s;

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

 {

 n=-1;

 s=j;

  for(i=1;i   {

   if((j%i)==0)

   { n++;

    s=s-i;

    k[n]=i;

   }

  }

 if(s==0)

 {

 printf("%d is a wanshu",j);

 for(i=0;i  printf("%d,",k);

 printf("%d\n",k[n]);

 }

}

}


题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,


求它在第10次落地时,共经过多少米?第10次反弹多高?

___________________________________________________________________

程序源代码:

main()

{

float sn=100.0,hn=sn/2;

int n;

for(n=2;n<=10;n++)

 {

  sn=sn+2*hn;/*第n次落地时共经过的米数*/

  hn=hn/2; /*第n次反跳高度*/

 }

printf("the total of road is %f\n",sn);

printf("the tenth is %f meter\n",hn);

}

题目:一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的


一半又多吃了一个,到第十天的时候发现还有一个.

___________________________________________________________________

程序源代码:

/* 猴子吃桃问题 */

main()

{

int i,s,n=1;

for(i=1;i<10;i++)

{

s=(n+1)*2

n=s;

}

printf("第一天共摘了%d个桃\n",s);

}


迭代法求方程根


___________________________________________________________________


/* 迭代法求一个数的平方根 */

#define Epsilon 1.0E-6 /*控制解的精度*/

#include

main()

{

float a,x0,x1;

printf("请输入要求的数:");

scanf("%f",&a);

x0=a/2;

x1=(x0+a/x0)/2;

while(fabs(x1-x0)>=Epsilon)

  {

  x0=x1;

  x1=(x0+a/x0)/2;

  }

printf("%f的平方根:%f.5\n",x1);

}


/* 上题的另一种算法 */

#define Epsilon 1.0E-6 /*控制解的精度*/

#include

#include

main()

{

float num,pre,this;

do

  {

  scanf("%f",&num);/*输入要求平方根的数*/

  }while(num<0);

if (num==0)

  printf("the root is 0");

else

  {

   this=1;

   do

   {

    pre=this;

    this=(pre+num/pre)/2;

    }while(fabs(pre-this)>Epsilon);/*用解的精度,控制循环次数*/

   }

printf("the root is %f",this);

}

用牛顿迭代法 求方程 2*x*x*x-4*x*x+3*x-6 的根

/* 牛顿迭代法 */

#define Epsilon 1.0E-6 /*控制解的精度*/

#include

main()

{

   float x1,x0=1.5;

   x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);

   while(fabs(x1-x0>=Epsilon)

   {  

      x0=x1;

      x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);

   }

   printf("方程的根为%f\n",x1);

}

用二分法求上题

/* 二分法 */

#define Epsilon 1.0E-5 /*控制解的精度*/

#include


main()

{

   folat x1,x2,x0,f1,f2,f0;

   x0=(x1+x2)/2;

   f0=2*x0*x0*x0-4*x0*x0+3*x0-6;   /* 求中点的函数值 */

   while(fabs(f0)>=Epsilon)

   {

     if(f0*f1<0)

     { x2=x0;

f2=2*x2*x2*x2-4*x2*x2+3*x2-6;

     }

     if(f0*f2<0)

     { x1=x0;

f1=2*x1*x1*x1-4*x1*x1+3*x1-6;

     }

     x0=(x1+x2)/2;

     f0=2*x0*x0*x0-4*x0*x0+3*x0-6;

   }

   pri

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇多维数组的实现 下一篇大型项目中C语言的模块化建议

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: