当前位置: 首页 > news >正文

C语言典型例题55

《C程序设计教程(第四版)——谭浩强》


题目:


例题4.7  兔子的繁殖。这是一个有趣的古典问题:有一对兔子,从出生后的第3个月开始起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?
编程序求出前40个月的兔子数。


题目分析:

思想:

像这种有数据每到某一个时间段循环变化的数据,脑子里可以自动给他划上“幼年”“青年”“中年”“老年”“暮年”……这样的标签,这样会更加容易理解。

下面将以这个题目为例子来帮你理解这种思想:

月份小兔子中兔子老兔子兔子总对数
11001
20101
31012
41113
52125
63238
……
40

规律:

可以看到,后一个的兔子对总数等于前两个兔子总对数的和。即

x3=x1+x2


代码:

//《C程序设计教程(第四版)——谭浩强》
//例题4.7 兔子的繁殖。这是一个有趣的古典问题:有一对兔子,从出生后的第3个月开始起每个月都生一对兔子。
//		  小兔子长到第3个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?
//		  编程序求出前40个月的兔子数。#include <stdio.h>
int main()
{int x1=1;//有一对兔子int x2=1;int x3=0;printf("第1个月的兔子对数%d\n",x1);printf("第2个月的兔子对数%d\n",x2);int i=3;//月份while(i<=40){x3=x1+x2;
//		printf("第%d个月的兔子对数%d\n",i,x3);x1=x2;x2=x3;i++;//		x2=x3;
//		x1=x2;
//		x3=x1+x2;}printf("第40个月的兔子对数:%d\n",x3);return 0;
}

运行结果:


编写代码时遇见的问题:

1.不需要在额外创建一个变量sum来存放兔子的总对数

x3就是兔子的总对数,不需要在额外创建一个变量sum来存放兔子的总对数。

2.不要创建数组来存放兔子的对数

通过创建数组来存放兔子的对数,这样写虽然也可以,但是在逻辑上理解起来更复杂一点点,没有通过直接创建数写起来更加简洁简单。

3.C语言中int类型的变量一直增加问什么最后无论怎么变值都为-2?

在C语言中,当int类型的变量值增加到超出其能表示的最大值时,它会回绕(wrap around)到最小值,即-2147483648。

这是因为int类型在计算机内部使用补码形式表示,当数值增加到int类型的最大值2147483647后,如果继续增加,就会发生溢出,导致数值回绕到最小值-2147483648。这种现象通常被称为整数溢出(integer overflow)。

在计算机系统中,int类型一般采用补码表示法。补码是一种用于表示有符号整数的计算机中常用的编码方式。对于正数,补码就是其二进制表示;对于负数,补码是其绝对值的二进制表示取反后加1得到的。当int类型的变量值增加到一个非常大的数时,如果这个数超过了int类型能表示的最大范围(-2147483648到2147483647),就会发生溢出。此时,数值会回绕到int类型的最小值,即-2147483648。这是因为计算机内部存储和计算是基于二进制进行的,而二进制数的特性决定了当数值达到某个极限时,它会回绕到另一个极限值。

为了避免这种情况,可以使用更大范围的数据类型,如long long int,或者在编程时仔细管理数值的大小和范围,以防止溢出导致的错误结果‌

4.调试代码:

调试过程

调试代码小技巧:

可以在一些代码的关键位置插入一些输出数据,这样可以更加清楚直观的看到数据的变化规律,以便于更加清楚的掌握数据的变化

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux日志的查看方法
  • LuaJit分析(七)LuaJit -b 命令分析
  • 骨传导耳机哪款更值得入手?这五款精选让你避免踩雷的风险!
  • 阿里云数智服务创新挑战赛总决赛铜奖比赛攻略_NJUSME队
  • 【JVM原理】类加载机制
  • 《比较教育研究》
  • Qt Creator 配置pcl1.14.1
  • 电脑屏幕怎么添加水印
  • Qt 学习第7天:Qt核心特性
  • Vue——认识day04_计算属性(案例:实时预览)
  • 望繁信科技亮相2024数博会:以流程智能引领数字化转型新未来
  • KTH5701 系列低功耗、高精度 3D 霍尔传感器
  • 【蓝牙协议栈】【BLE】【GATT】精讲GATT Profile架构(图文并茂精华版)
  • Cesium 和 three.js 对数深度缓冲原理简析
  • 【58同城-注册安全分析报告】
  • Centos6.8 使用rpm安装mysql5.7
  • es6要点
  • HashMap ConcurrentHashMap
  • java第三方包学习之lombok
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql_config not found
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SAP云平台里Global Account和Sub Account的关系
  • session共享问题解决方案
  • SQL 难点解决:记录的引用
  • Zepto.js源码学习之二
  • 微信小程序--------语音识别(前端自己也能玩)
  • 项目管理碎碎念系列之一:干系人管理
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 怎么将电脑中的声音录制成WAV格式
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​iOS安全加固方法及实现
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​MySQL主从复制一致性检测
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # C++之functional库用法整理
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #android不同版本废弃api,新api。
  • $.ajax()方法详解
  • ()、[]、{}、(())、[[]]命令替换
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (zhuan) 一些RL的文献(及笔记)
  • (办公)springboot配置aop处理请求.
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (算法)硬币问题
  • (转)【Hibernate总结系列】使用举例
  • (转)http协议
  • (转)德国人的记事本
  • (转)关于pipe()的详细解析
  • (转)视频码率,帧率和分辨率的联系与区别
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET程序集编辑器/调试器 dnSpy 使用介绍