鱼C论坛

 找回密码
 立即注册
查看: 418|回复: 1

[已解决]指针与二维数组

[复制链接]
发表于 2023-8-21 21:01:59 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        float pm25[3][12] = {
                {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
        };
        int year, month;

        printf("请输入待查询年月分(年-月): ");
        scanf("%d-%d", &year, &month);

        if (year < 2014 || year > 2016 || month < 1 || month > 12)
        {
                printf("输入数据错误!\n");
        }
        else
        {
                year -= 2014;
                month -= 1;
                if (pm25[year][month])
                {
                        printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25[year][month]);
                }
                else
                {
                        printf("抱歉,该月份未收录数据!\n");
                }
        }

        return 0;
}

对于以上代码,其中
year -= 2014;
month -= 1;
是怎么理解呢?不应该是
year += 2014;
month += 1;
吗?
还有 printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25[year][month]); ,为什么是year + 2014, month + 1, ,那假如客户输入的year是2015,month是12,那岂不是成2015+2014,  12+1 ?
我不是很理解,希望可以解释一下,谢谢
最佳答案
2023-8-21 21:03:11
对于这两个问题,请允许我逐一解释。

1. year -= 2014 和 month -= 1 的理解

在这段代码中,year -= 2014month -= 1 是对输入的年份和月份进行调整的操作。

首先,我们需要注意到数组 pm25 中的数据是从 2014 年开始的,而用户输入的年份从 2014 年开始计算。所以为了与数组索引对应,需要将用户输入的年份减去 2014。例如,如果用户输入的年份是 2015,那么 year 变量的值就是 2015 - 2014,即 1。同样地,如果用户输入的月份是 12,那么 month 变量的值就是 12 - 1,即 11。这样就可以正确获取数组 pm25 中对应的数据。

使用减法而不是加法的原因是将用户输入的年份和月份转换为数组索引时,需要进行减法操作,而不是加法操作。因此,正确的写法是 year -= 2014month -= 1

2. printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25[year][month]); 的解释

在这段代码中,printf 函数用于输出结果。格式化字符串 "%d年%d月广州的PM2.5值是: %.2f\n" 包含了多个格式占位符,用于指定输出的内容和格式。

对于年份和月份来说,我们需要将其还原为用户输入的值。由于之前进行了减法操作,将年份从 2014 转换为索引值,所以在输出时需要将其重新加上 2014,year + 2014 表示将转换后的年份再加上 2014,得到用户输入的年份。同样地,month + 1 表示将转换后的月份再加上 1,得到用户输入的月份。

例如,如果用户输入的年份是 2015,月份是 12,经过转换后,year 的值为 1,month 的值为 11。在结果输出时,year + 2014 的值就是 1 + 2014,即 2015,month + 1 的值就是 11 + 1,即 12,与用户输入的年份和月份一致。

希望以上解答对你有帮助。如果还有其他问题,请随时提问。下面是修改后的完整代码:
  1. #include <stdio.h>
  2. int main() {
  3.     float pm25[3][12] = {
  4.         {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
  5.         {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
  6.         {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
  7.     };
  8.     int year, month;
  9.     printf("请输入待查询年月分(年-月): ");
  10.     scanf("%d-%d", &year, &month);
  11.     if (year < 2014 || year > 2016 || month < 1 || month > 12) {
  12.         printf("输入数据错误!\n");
  13.     } else {
  14.         year -= 2014;
  15.         month -= 1;
  16.         if (pm25[year][month]) {
  17.             printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25[year][month]);
  18.         } else {
  19.             printf("抱歉,该月份未收录数据!\n");
  20.         }
  21.     }
  22.     return 0;
  23. }
复制代码

祝编程愉快!如有需要,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-21 21:03:11 | 显示全部楼层    本楼为最佳答案   
对于这两个问题,请允许我逐一解释。

1. year -= 2014 和 month -= 1 的理解

在这段代码中,year -= 2014month -= 1 是对输入的年份和月份进行调整的操作。

首先,我们需要注意到数组 pm25 中的数据是从 2014 年开始的,而用户输入的年份从 2014 年开始计算。所以为了与数组索引对应,需要将用户输入的年份减去 2014。例如,如果用户输入的年份是 2015,那么 year 变量的值就是 2015 - 2014,即 1。同样地,如果用户输入的月份是 12,那么 month 变量的值就是 12 - 1,即 11。这样就可以正确获取数组 pm25 中对应的数据。

使用减法而不是加法的原因是将用户输入的年份和月份转换为数组索引时,需要进行减法操作,而不是加法操作。因此,正确的写法是 year -= 2014month -= 1

2. printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25[year][month]); 的解释

在这段代码中,printf 函数用于输出结果。格式化字符串 "%d年%d月广州的PM2.5值是: %.2f\n" 包含了多个格式占位符,用于指定输出的内容和格式。

对于年份和月份来说,我们需要将其还原为用户输入的值。由于之前进行了减法操作,将年份从 2014 转换为索引值,所以在输出时需要将其重新加上 2014,year + 2014 表示将转换后的年份再加上 2014,得到用户输入的年份。同样地,month + 1 表示将转换后的月份再加上 1,得到用户输入的月份。

例如,如果用户输入的年份是 2015,月份是 12,经过转换后,year 的值为 1,month 的值为 11。在结果输出时,year + 2014 的值就是 1 + 2014,即 2015,month + 1 的值就是 11 + 1,即 12,与用户输入的年份和月份一致。

希望以上解答对你有帮助。如果还有其他问题,请随时提问。下面是修改后的完整代码:
  1. #include <stdio.h>
  2. int main() {
  3.     float pm25[3][12] = {
  4.         {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.3, 35.5, 58.7, 49.6, 55.5},
  5.         {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38.5, 41.5, 44.7, 38.1, 41.5},
  6.         {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34.3, 0.0, 0.0, 0.0, 0.0}
  7.     };
  8.     int year, month;
  9.     printf("请输入待查询年月分(年-月): ");
  10.     scanf("%d-%d", &year, &month);
  11.     if (year < 2014 || year > 2016 || month < 1 || month > 12) {
  12.         printf("输入数据错误!\n");
  13.     } else {
  14.         year -= 2014;
  15.         month -= 1;
  16.         if (pm25[year][month]) {
  17.             printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25[year][month]);
  18.         } else {
  19.             printf("抱歉,该月份未收录数据!\n");
  20.         }
  21.     }
  22.     return 0;
  23. }
复制代码

祝编程愉快!如有需要,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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