C语言 粗心大意竟然被“=“与“==”浪费半小时

近日写一个关于猴子吃桃的数学题目,求出猴子第一天摘的桃子总数目。

原题为:猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,就只剩下一个桃子了。C语言编程求第1天共摘了多少个桃子。 

分析问题:每一天吃的桃子为前1天剩下桃子的一半加1,第十天只剩下1只,反推之,前一天的桃子总数为当天(未吃)的桃子数加上1的2倍,如第9天桃子的总数为2*(1+1)=4,第8天的为2*(4+1)=10,第7天的为2*(10+1)=22......以此类推。

接下来是思考如何用编程来实现,我采取的是递归求解的方式进行编程,如下所示:

#include<stdio.h>

int num(int temp)
{
    int count;
    if(temp=10)
    {
        count=1;
    }
    else
    {
        count=(num(temp+1)+1)*2;//第temp天的桃子总数        
    }
    return count;
}
int main()
{
    int i;
    i=num(1);//代入实参1,赋值给i,即i表示第一天的桃子总数
    printf("第一天的桃子总数是%d个\n",i);
    return 0;
}

 但是调试的结果是错误的:

root@LAPTOP-LUU3AAQE:/mnt/d/C_Code# gcc c58.c -o main
root@LAPTOP-LUU3AAQE:/mnt/d/C_Code# ./main
第一天的桃子总数是1个
root@LAPTOP-LUU3AAQE:/mnt/d/C_Code#

为什么呢?原因出现在“=”,在C语言中一个“=”表示赋值,“==”才是等于,所以代码只能执行到前面的if语句,else是执行不到的。

改正后:

#include<stdio.h>

int num(int temp)
{
    int count;//桃子总数
    if(temp==10)//"=="才是等于
    {
        count=1;
    }
    else
    {
        count=(num(temp+1)+1)*2; 
        printf("第%d天桃子总数count=%d\n",temp,count);//调试用,可注释掉
        printf("------\n");           
    }
    return count;
}
int main()
{
    int i;
    i=num(1);
    printf("第一天的桃子总数是%d个\n",i);
    return 0;
}

root@LAPTOP-LUU3AAQE:/mnt/d/C_Code# gcc c58.c -o main
root@LAPTOP-LUU3AAQE:/mnt/d/C_Code# ./main
第9天桃子总数count=4
------
第8天桃子总数count=10
------
第7天桃子总数count=22
------
第6天桃子总数count=46
------
第5天桃子总数count=94
------
第4天桃子总数count=190
------
第3天桃子总数count=382
------
第2天桃子总数count=766
------
第1天桃子总数count=1534
------
第一天的桃子总数是1534个
root@LAPTOP-LUU3AAQE:/mnt/d/C_Code# 

总结:千里之堤,溃于蚁穴,细节很重要,基础要牢固。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值