印度国王蛇罕褒奖宰相达依尔(国际象棋发明者)

国王只要在国际象棋的棋盘第一格子放一粒麦子,第二格放2粒麦子,第三格放4粒麦子,依此比例每一格增加一倍,一直放到64格(国际象棋棋盘时8*8=64格)

根据估算,1立方米小麦约有1.42*10的8次方粒。

#include<stdio.h>
#include<math.h>
#include<windows.h>
//国王只要在国际象棋的棋盘第一格子放一粒麦子,第二格放2粒麦子,第三格放4粒麦子,依此比例每一格增加一倍,一直放到64格(国际象棋棋盘时8*8=64格)

//根据估算,1立方米小麦约有1.42*10的8次方粒

//错误程序,p,t,为赋值,运算出错,会运算出负数导致结果错误
void test01()
{
    double p, t, v;                      /*p = 麦子粒数,t=麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 1; i < 64; i++)       //执行63此循环
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);

}
//正确程序如下
void test02()
{
    double p = 1, t  = 1, v;                      /*p = 麦子粒数,t=麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 1; i < 64; i++)
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);

}

void main()
{
    test01();
    test02();
    system("pause");
}

增加测试类型如下:

#include<stdio.h>
#include<math.h>
#include<windows.h>
//国王只要在国际象棋的棋盘第一格子放一粒麦子,第二格放2粒麦子,第三格放4粒麦子,依此比例每一格增加一倍,一直放到64格(国际象棋棋盘时8*8=64格)

//根据估算,1立方米小麦约有1.42*10的8次方粒

//错误程序,p,t,为赋值,运算出错,会运算出负数导致结果错误
void test01()
{
    double p, t, v;                      /*p = 麦子粒数,t=麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 1; i < 64; i++)       //执行63此循环
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);

}
//正确程序如下
void test02()
{
    double p = 1, t  = 1, v;                      /*p = 麦子粒数,t=麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 1; i < 64; i++)       //可使用这种方法,for循环也可以从1到63次 共循环了63次,得到正确运算结果
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);

}

void test03()
{
    double p =1 , t = 1 , v;                      /*p = 麦子粒数,t=麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 1; i <= 64; i++)       //执行64此循环的错误结果,多运算一次结果刚好翻倍
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);
}


void test04()
{
    double p = 1 , t = 1 , v;                      /*p = 当前一格中麦子粒数,t=当前麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 0; i < 64; i++)       //错误循环,for循环也可以从0词到63次 共循环了64次,多了一次结果翻倍,从0循环后面总循环数需要减一
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);
}

void test05()
{
    double p = 1 , t = 1 , v;                      /*p = 当前一格中麦子粒数,t=当前麦子总粒数,v为麦子的总体积*/  
    int i;
    for(i = 0; i < 63; i++)       //可使用这种方法,for循环也可以从0词到62次 共循环了63次,多了一次结果翻倍,从0循环后面总循环数需要减一
    {
        p = p * 2;
        t = t + p;
    }
    v = t / 1.42e8;
    printf("total=%e\n", t);
    printf("volume=%e\n", v);
}


void main()
{
    test01();
    test02();
    test03();
    test04();
    test05();
    system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值