鱼C论坛

 找回密码
 立即注册
查看: 725|回复: 3

[已解决]c语言数组章节课后题问题

[复制链接]
发表于 2023-6-27 22:15:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
数组章节“动动手”课后题中,题目是“用户输入年份,打印该年每个月的天数”。我对答案中的其中一行代码看不懂。
答案代码是:
#include <stdio.h>

int main()
{
        int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int i, year;

        printf("请输入一个年份:");
        scanf("%d", &year);

        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        {
                days[1] = 29;
        }

        for (i = 0; i < sizeof(days) / sizeof(days[0]); i++)
        {
                printf("%2d月份:%d天\n", i+1, days[i]);
        }


        return 0;
}


我对其中的 for (i = 0; i < sizeof(days) / sizeof(days[0]); i++)看不太懂,大神们可以给小白解释一下这行代码的意义吗?特别是 i < sizeof(days) / sizeof(days[0])代表什么呢?在这给大神鞠躬了
最佳答案
2023-6-27 22:53:55
在这行代码中,sizeof(days) 表示数组 days 的字节数,sizeof(days[0]) 表示数组中每个元素的字节数。通过将总字节数除以每个元素的字节数,我们可以得到数组的长度(也就是数组元素的个数)。

仍旧是 i < sizeof(days) / sizeof(days[0]) 表达式的含义是,只要变量 i 的值小于数组 days 的长度,循环就会继续进行。这样做是为了确保循环能够遍历整个数组,并打印出每个月的天数。

以这个具体的例子来说,数组 days 中有12个元素,而每个元素占用的字节数为4(int类型的字节数通常为4)。所以 sizeof(days) 将返回 12 * 4 = 48 字节,sizeof(days[0]) 将返回 4 字节。因此,sizeof(days) / sizeof(days[0]) 将等于 48 / 4 = 12,表示数组 days 的长度为12。

这段循环代码将 i 的值从 0 逐渐增加到数组长度减1的范围内,即 0 到 11。这正好对应了数组 days 中的每个元素,所以可以使用 i 来访问并打印出每个月的天数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-27 22:24:33 | 显示全部楼层
这行代码的含义是从数组的第一个元素开始循环,直到最后一个元素结束。这是一种常见的遍历数组的方式。

先来看 sizeof(days) 。 sizeof 是一个常用的C语言操作符,它可以返回一个对象或者类型所占的内存字节数。在这个代码里, days 是一个整数数组, sizeof(days) 返回的是数组整体所占的内存大小,以字节为单位。

然后是 sizeof(days[0]) , days[0] 表示数组 days 的第一个元素,因为 days 数组的元素是整型(int类型),所以 sizeof(days[0]) 返回的是一个int整型数据所占的内存大小。

sizeof(days) / sizeof(days[0]) 的结果就是数组 days 的元素个数。因为整个数组的大小除以一个元素的大小,自然就是元素的个数。

所以这个 for 循环的意思就是从数组的第一个元素开始,一直循环到最后一个元素。 i 就是数组元素的索引,它的初始值为0,每次循环增加1,直到达到数组的元素个数。

这是一种在C语言中常见的获取数组长度的方式。在其他一些语言中,数组或者集合类型可能有一个.length或者.count属性可以直接得到长度,但是C语言没有这样的特性,所以需要通过这种方式来计算数组的长度。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-27 22:45:39 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-6-27 22:47 编辑

在这段代码中,for 循环使用了 sizeof 运算符来确定数组 days 的长度。了解并正确使用这个表达式对于编写 C 语言程序是很重要的。

sizeof 是 C 语言中的一个运算符,用于计算对象在内存中所占的字节数。它可以用于计算各种数据类型(如整数、浮点数、数组、结构体等)的大小。

sizeof(days) 计算整个数组 days 占用的字节数。在这个例子中,数组 days 的类型是 int,它占用4个字节(32位系统)或者8个字节(64位系统),因此 sizeof(days) 返回的是整个数组占用的字节数。

而 sizeof(days[0]) 则计算数组中第一个元素的大小。由于数组 days 中的元素类型也是 int,所以 sizeof(days[0]) 返回的是一个整数的字节数。

通过将数组的总字节数除以第一个元素的字节数,我们可以得到数组的长度(即元素的个数)。这样做的原因是 C 语言中没有内建的方式来获取数组的长度,我们需要使用这种技巧来确保循环在正确的范围内执行。

在 for 循环的条件中,i 表示循环变量,它从 0 开始递增,当 i 小于数组 days 的长度时,循环继续执行。这样就保证了循环会遍历整个数组,并打印出每个月份和对应的天数。

希望通过这个解释,您能更好地理解代码中 for 循环的条件部分。如果还有其他问题,请随时问我。我会尽力帮助您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-27 22:53:55 | 显示全部楼层    本楼为最佳答案   
在这行代码中,sizeof(days) 表示数组 days 的字节数,sizeof(days[0]) 表示数组中每个元素的字节数。通过将总字节数除以每个元素的字节数,我们可以得到数组的长度(也就是数组元素的个数)。

仍旧是 i < sizeof(days) / sizeof(days[0]) 表达式的含义是,只要变量 i 的值小于数组 days 的长度,循环就会继续进行。这样做是为了确保循环能够遍历整个数组,并打印出每个月的天数。

以这个具体的例子来说,数组 days 中有12个元素,而每个元素占用的字节数为4(int类型的字节数通常为4)。所以 sizeof(days) 将返回 12 * 4 = 48 字节,sizeof(days[0]) 将返回 4 字节。因此,sizeof(days) / sizeof(days[0]) 将等于 48 / 4 = 12,表示数组 days 的长度为12。

这段循环代码将 i 的值从 0 逐渐增加到数组长度减1的范围内,即 0 到 11。这正好对应了数组 days 中的每个元素,所以可以使用 i 来访问并打印出每个月的天数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 13:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表