努力学C的阿通 发表于 2023-8-21 21:01:59

指针与二维数组

#include <stdio.h>

int main()
{
      float pm25 = {
                {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)
                {
                        printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25);
                }
                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 + 2014, month + 1, ,那假如客户输入的year是2015,month是12,那岂不是成2015+2014,12+1 ?
我不是很理解,希望可以解释一下,谢谢

学习编程中的Ben 发表于 2023-8-21 21:03:11

对于这两个问题,请允许我逐一解释。

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

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

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

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

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

在这段代码中,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,与用户输入的年份和月份一致。

希望以上解答对你有帮助。如果还有其他问题,请随时提问。下面是修改后的完整代码:

#include <stdio.h>

int main() {
    float pm25 = {
      {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) {
            printf("%d年%d月广州的PM2.5值是: %.2f\n", year + 2014, month + 1, pm25);
      } else {
            printf("抱歉,该月份未收录数据!\n");
      }
    }

    return 0;
}


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

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 指针与二维数组