C语言学习笔记(二)——循环实例

循环结构进阶版代码

#include <windows.h>
system("cls")清屏函数
/*皮球从height米的高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,如此反复。
皮球在第n次反弹落地时,在空中经过的路程是多少米?第n次反弹的高度是多少?*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i;
    float height,distance;
    printf("Input height: ");
    scanf("%f",&height);
    printf("Input n: ");
    scanf("%d",&n);
    for(i=1,distance=height;i<=n;i++)
    {
        height=height*1.0/2;
        distance=distance+height*2;
    }
    printf("distance=%.1f\nheight=%.1f",distance,height);
    return 0;
}

/*将1-1000之内的所有完数输出(1不是完数)。
若一个数等于其所有真因子之和则称之为完数,
如28=1+2+4+7+14*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,sum;
    for(n=3;n<=1000;n++)
    {
        sum=0;
        for (i=2;i<n;i++)
        {
            if(n%i==0)
                sum=sum+i;
        }
        if(n==sum+1)
            printf("%d,",n);
    }
    return 0;
}

/*输入2个正整数a和n,
求a+aa+aaa+aa…a(n个a)之和。例如,
输入2和3,输出246(2+22+222)*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int a,n,s=0,i,m;
    printf("Input a, n: ");
    scanf("%d%d",&a,&n);
    for(i=2,m=a; i<=n; i++)
    {
        m=m+a*(int)pow(10,i-1);
        s=s+m;
    }
    printf("s=%d",s+a);




}

/*读入1个正实数eps,
计算并输出下式的值,
精确到最后一项的绝对值小于eps(保留6 位小数)
。请使用while 语句实现循环。*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float i=1.0,s=0,m;
    double eps;
    printf("Input eps: ");
    scanf("%lf",&eps);
    while(1)
    {
       m=(1.0/(i))*(int)pow(-1,i+1);
       i=i+3;
       if(fabs(m)>=eps)
            s=s+m;
       else
       break;
    }
    printf("s=%f",s);
    return 0;
}

/*我国古代数学家张丘建在《算经》一书中提出的数学问题:
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x,y,z;
    for (z=0;z<300;z++)
    {
       for (x=1;x<20;x++)
       {
           for (y=1;y<33;y++)
           {
               if (5*x+3*y+z/3==100&&x+y+z==100)
               {
                   printf("%d %d %d",x,y,z);
                   break;
               }


           }

       }
    }
    return 0;
}

/*输入两个正整数m和n(m≥1,n≤500),
输出m和n之间的所有素数,
每行输出6个。素数是指只能被1和自身整除的正整数,
最小的素数是2*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,m,n,j;
    int t=0;
    printf("Input m: ");
    scanf("%d",&m);
    printf("Input n: ");
    scanf("%d",&n);
    for (i=m;i<=n;i++)
    {
        for(j=2;j<=sqrt(i);j++)
        {
            if(i%j==0)
                break;
        }

        while(1)
        {
           if(j<=sqrt(i)||i==1)
             break;
           else
           {
               printf("%4d",i);
               t++;
               if(t==6)
               {
                  printf("\n");
                  t=0;
               }

               break;
           }


        }


    }
    return 0;
}

/*Chuckie Lucky赢了100万美元,
他把它存入一个每年赢得8%的帐户,
在每年的最后一天,Chuckie取出10万美元。
编写一个程序,计算需要多少年Chuckie就会清空他的账户*/。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float money=100;
    int i=0;
    while(money>0)
    {

        money=money*1.08;
        money=money-10;
        i++;
    }
    printf("%d",i);
    return 0;
}

/*输入两个正整数m和n(m&ge;1,n&le;1000)
,输出m到n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数例如,
153的各位数字的立方和是13+53+33=153*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int m,n,i;
    int ge,shi,bai;
    printf("Input m: ");
    scanf("%d",&m);
    printf("Input n: ");
    scanf("%d",&n);
    for (i=m;i<=n;i++)
    {
       ge=i%10;
       shi=i/10%10;
       bai=i/100;
       if (powf(ge,3)+powf(shi,3)+powf(bai,3)==i)
            printf("%d\n",i);
    }
    return 0;
}

/*一个小球来回弹跳*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
    int i,j,a,b;
    int x=5;
    int y=0;

    int v_x=1;
    int v_y=1;
    int left=0;
    int right=20;
    int top=0;
    int bottom=10;

    for (i=1;i<=20;i++)
    {

       x=v_x+x;
       y=v_y+y;
       system("cls");
       for (i=1;i<=y;i++)
       {
           printf("\n");

       }
       for (j=1;j<=x;j++)
       {

           printf(" ");
       }
       printf("o\n");
       Sleep(50);

       if ((x==left) || (x==right))
       {
           v_x=-v_x;
           printf("\a");
       }

       if ((y==top) || (y==bottom))
       {
           v_y=-v_y;
           printf("\a");
       }

    }


    return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值