毛驴子哈 发表于 2020-8-11 17:32:50

带你学C带你飞 sle15 课后最作业动动手 请指教

#include <stdio.h>

int main()
{
      int ch;

      printf("请输入明文:");

      while ((ch = getchar()) != '\n')
      {
                if (ch >= 'a' && ch <= 'z')
                {
                        putchar('a' + (ch - 'a' + 3) % 26);    //请问这里为什么要这样写,百思不得其解
                        continue;
                }

                if (ch >= 'A' && ch <= 'Z')
                {
                        putchar('A' + (ch - 'A' + 3) % 26);
                        continue;
                }

                putchar(ch);
      }

      putchar('\n');

      return 0;
}

zltzlt 发表于 2020-8-11 17:36:45

题目要求偏移量为 3 。

如果 ch 为 'a' 那么 ch - 'a' + 3 为 3,如果 ch 为 'b' 那么 ch - 'b' + 3 为 4 等等。

这里的 + 3 代表偏移量为 3 。

由于如果 ch 为 'x'、'y'、'z',ch - 'a' + 3 会超过 (25 + 3),所以需要对它进行取余。

最后再把这个数字转化为字符,+ 'a'

baige 发表于 2020-8-11 17:53:58

楼上正解

Cool_Breeze 发表于 2020-8-11 18:03:53

(ch - 'a' + 3) % 26 保证数字在0(包括0)到26(不包括26)之间

小黑玩C++ 发表于 2020-8-12 08:20:38

这样可以保证他在1-25之间

毛驴子哈 发表于 2020-8-12 10:10:29

zltzlt 发表于 2020-8-11 17:36
题目要求偏移量为 3 。

如果 ch 为 'a' 那么 ch - 'a' + 3 为 3,如果 ch 为 'b' 那么 ch - 'b' + 3 为...

害,才了解到4 % 26 = 4,求模运算符左侧小于右侧,结果等于左侧的数字{:10_243:}

闲鱼君 发表于 2020-8-12 10:46:22

{:7_146:}

sai_wq 发表于 2020-8-12 10:48:31

{:5_106:}

2904350515 发表于 2020-8-26 06:54:44

我也来学习学习

hornwong 发表于 2020-8-26 10:24:18

{:5_95:}

象棋爱好者 发表于 2020-8-27 13:29:56

鱼币

hacker蹇 发表于 2020-8-27 13:43:04

。。。

毛驴子哈 发表于 2020-8-28 09:58:36

象棋爱好者 发表于 2020-8-27 13:29
鱼币

都是来蹭我币的{:10_266:}

象棋爱好者 发表于 2020-8-28 13:15:45

毛驴子哈 发表于 2020-8-28 09:58
都是来蹭我币的

嘿嘿嘿{:10_256:}
页: [1]
查看完整版本: 带你学C带你飞 sle15 课后最作业动动手 请指教