C语言典型例题55

news2024/11/6 3:15:30

《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.调试代码:

调试过程

调试代码小技巧:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度解读SGM41511电源管理芯片I2C通讯协议REG08寄存器解释

REG08 是 SGM41511 的第九个寄存器&#xff0c;地址为 0x08。这是一个只读&#xff08;R&#xff09;寄存器&#xff0c;用于报告各种状态信息。上电复位值&#xff08;PORV&#xff09;为 xxxxxxxx&#xff0c;表示上电时的初始状态是不确定的。这个寄存器提供了充电器当前状态…

HarmonyOS--合理使用页面间转场

一、概述 页面间转场是用户从一个页面切换到另一个页面时的过程&#xff0c;一个无缝流畅的转场动效可以提升用户的交互体验。从主页到详情页、从列表页到结果页都需要去设置一些转场动效使得用户体验更加流畅。基于用户行为和应用设计模式&#xff0c;我们总结出了一些常见的转…

C#/.net core “hello”.IndexOf(“\0”,2)中的坑

先想想看&#xff0c;你认为下面代码返回值是多少&#xff1f; "hello".IndexOf("", 2); "hello".IndexOf("\0", 2); "hello".IndexOf(\0, 2); 今天和大家分享关于.net core中与字符相关的一些奇怪问题。 首先我们先以.N…

Golang | Leetcode Golang题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; func canConstruct(ransomNote, magazine string) bool {if len(ransomNote) > len(magazine) {return false}cnt : [26]int{}for _, ch : range magazine {cnt[ch-a]}for _, ch : range ransomNote {cnt[ch-a]--if cnt[ch-a] < 0 {r…

大模型知识检索RAG业务实践实践(初级篇)

大模型知识检索RAG业务实践实践(初级篇) 1.知识检索大图 大模型是现在一个非常热门的话题,大模型表现出的生成能力也是非常惊艳。但是强如 GPT4 这样的大模型,它在知识更新和幻觉上也会存在问题。比如说我们问互联网行业有什么大事,GPT4 的回答是三年前的内容。主要是说疫…

机械学习—零基础学习日志(如何理解概率论12)

假设检验 假设检验是有一些参数&#xff0c;已知条件&#xff0c;让你检验某种假设是否成立。 我们通过具体的题目来说明&#xff1a; 这里我们需要确认使用什么公式&#xff1a; 使用下面的公式如下图&#xff1a; 题目中&#xff0c;以21作为分界线&#xff0c;所以我们将是…

用manim证明函数的左右极限

http://t.csdnimg.cn/2pVdFhttp://t.csdnimg.cn/2pVdF在上一节的最后两个示例中&#xff0c;我们看到了两个不存在的限制。然而&#xff0c;对于每个例子来说&#xff0c;每个限制不存在的原因是不同的。 我们看一下下面的例子&#xff1a; 极限不存在&#xff0c;因为函数没有…

Redis基本全局命令

文章目录 get和setkeysexistsdelexpirettltype redis全局命令&#xff1a; redis支持很多种数据结构&#xff0c;整体上来说。redis是键值对结构&#xff0c;key固定就是字符串&#xff0c;value实际上就会有很多种&#xff0c;比如说&#xff1a; 字符串哈希表列表有序集合 …

linux系统编程-网络-tcp(29)

C/S B/S P2p模型 在Linux系统编程中&#xff0c;C/S&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09;和B/S&#xff08;Browser/Server&#xff0c;浏览器/服务器&#xff09;模型是两种常见的架构模式&#xff0c;用于构建分布式应用程序。它们在设计和实现上…

C语言 | Leetcode C语言题解之第384题打乱数组

题目&#xff1a; 题解&#xff1a; typedef struct {int* num;int* src;int numsize; } Solution;Solution *obj NULL;Solution* solutionCreate(int* nums, int numsSize) {if (obj ! NULL) {return obj;}Solution *obj (Solution*)malloc(sizeof(Solution));obj->nums…

#C++ 笔记二

四、运算符重载 1.友元 1.1 概念 类实现了数据的隐藏和封装&#xff0c;类的数据成员一般定义为私有成员&#xff0c;仅能通过类的公有成员函数才能进行读写。 如果数据成员定义成公共的&#xff0c;则又破坏了封装性。但是在某些情况下&#xff0c;需要频繁的读写数据成员…

Java 7.3 - 分布式 id

分布式 ID 介绍 什么是 ID&#xff1f; ID 就是 数据的唯一标识。 什么是分布式 ID&#xff1f; 分布式 ID 是 分布式系统中的 ID&#xff0c;它不存在于现实生活&#xff0c;只存在于分布式系统中。 分库分表&#xff1a; 一个项目&#xff0c;在上线初期使用的是单机 My…

2-80 基于matlab-GUI,实现kalman滤波对目标物的位置进行检测跟踪

基于matlab-GUI,实现kalman滤波对目标物的位置进行检测跟踪。检测汽车中心和最大半径&#xff0c;与背景差分选择较大差异的区域进行形态学处理&#xff0c;用冒泡法对目标面积从大到小排序。程序已调通&#xff0c;可直接运行。 2-80 kalman视频跟踪滤波 - 小红书 (xiaohongsh…

光学涡旋Talbot阵列照明器的matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 光学涡旋 Talbot 阵列照明器是一种利用光学涡旋&#xff08;Optical Vortex&#xff09;和 Talbot 效应&#xff08;Talbot Effect&#xff09;相结合的技术&…

【HTML源码】上传即可使用的在线叫号系统源码

这个叫号系统的过程是这样的 接了一个任务&#xff0c;某学校要对学生进行逐个面试&#xff0c;希望能有类似医院门诊那种叫号系统。 条件&#xff1a;首先说硬件&#xff0c;就是教室里边一台笔记本电脑&#xff0c;同屏到教室外面的电视机。 需求&#xff1a;软件需求是可…

汉诺塔递归解决思路图解分析,python代码实现

目录 4.假设四层汉诺塔&#xff0c;n4&#xff0c;利用整体思想分解为两层的情况 3.分解到n3 3.1 分解上面n4时第一个步骤&#xff1a; 3.2 分解上面n4时第三个步骤&#xff1a; 2.继续分解到n2 &#xff08;同理略&#xff09; 1.当分解到n1 python代码 问题&#xff1…

【Linux】升级OpenSSH版本规避远程代码执行漏洞

本文首发于 ❄️慕雪的寒舍 升级OpenSSH版本规避远程代码执行漏洞。 说明 今天早上逛别人的博客的时候看到了这个重磅消息。OpenSSH爆出能远程通过root身份执行任意代码的漏洞&#xff0c;影响版本是 8.5p1 < OpenSSH < 9.8p1&#xff0c;奇安信的报告可以点我查看。 上…

计算机三级网络第4套练习记背

计算机三级网络第4套练习记背

全志/RK安卓屏一体机:医疗自助服务终端,支持鸿蒙国产化

医疗自助服务终端 为了解决传统医疗模式下的“看病难、看病慢”等问题&#xff0c;提高医疗品质、效率与效益&#xff0c;自助服务业务的推广成为智慧医疗领域实现信息化建设、高效运作的重要环节。 医疗自助服务终端是智慧医疗应用场景中最常见的智能设备之一&#xff0c;它通…

Linux学习笔记(4)----Debian压力测试方法

使用命令行终端压力测试需要两个实用工具&#xff1a;s-tui和stress sudo apt install s-tui stress 安装完成后&#xff0c;在终端中启动 s-tui实用工具&#xff1a; s-tui 执行后如下图&#xff1a; 你可以使用鼠标或键盘箭头键浏览菜单&#xff0c;然后点击“压力选项(Str…