【问题标题】:C language exerciseC语言练习
【发布时间】:2020-10-21 20:43:12
【问题描述】:

这是我的另一个问题。 我不明白那些代码。 提供的代码的输出是:

N
O
R
c
u
y
z

我的问题是:

  1. a[i] > a[i + 1] 它们是字符,而不是数字。为什么要比较两个字符? 这没有意义。还是我应该期望它们产生布尔值?
  2. printf ("%c\n", a[i] + 2);--> a[i] + 2 数组元素的顺序似乎正在发生一些事情。如何以及为什么? 我知道输出应该是 7 行单个字符。
#include <stdio.h>
int main (void)
{
  char a[] = { 'w', 's', 'x', 'a', 'P', 'L', 'M' };
  int i, tmp, flag;
  do
    {
      flag = 0;
      for (i = 0; i < 7; i++)
    {
      if (a[i] > a[i + 1])
        {
          tmp = a[i];
          a[i] = a[i + 1];
          a[i + 1] = tmp;
          flag = 1;
        }
    }
    }
  while (flag == 1);
  for (i = 0; i < 7; i++)
    printf ("%c\n", a[i] + 2);
  printf ("\n");
  return 0;
}

【问题讨论】:

  • i在第一个循环中为6时,代码读取a缓冲区的末尾。
  • @Turuudo 你在哪里找到了这个糟糕的代码?不要在这里拖任何垃圾
  • 与其弄清楚这段代码,不如阅读 C 编程简介。
  • “我们为什么要比较两个字符?这没有意义” - 为什么不呢?您从未在字典中或电话簿中查找过一个词吗?
  • 能详细描述一下吗?

标签: c for-loop if-statement char do-while


【解决方案1】:
  1. 字符由 ASCII 码表示,因此它们是数字。查看 ASCII 表。
  2. a[i] + 2 不影响订单。会影响性格。再次查看 ASCII 表。

【讨论】:

    【解决方案2】:

    基本上,当您存储字符时,它会存储每个字符的ASCII 值。所以本质上,当你比较 a[i] 和 a[i+1] 时,它只是比较字符的 ASCII 值(这是一个小于 128 的数值)。当您执行 a[i] + 2 时也会发生同样的事情。它只是将 2 添加到 ASCII 值并使用该 ASCII 值打印该字符。由于您的程序似乎对字符数组进行了排序,因此第一个字符将是“L”(大写 L)。它将 +2 添加到此,因此变为“N”。

    【讨论】:

      【解决方案3】:

      每个字符都有一个数值。 你可以在这里读到它: https://en.wikipedia.org/wiki/ASCII 或者要查看将每个字符与其数值相关联的表格,您可以使用以下链接:http://www.asciitable.com/

      祝你有美好的一天!!!

      【讨论】:

        【解决方案4】:

        char 类型是整数类型。字符具有相关的数字编码,这就是正在比较的内容。在 ASCII 中,该编码是

        'A' == 65
        'B' == 66
        'C' == 67
        

        等等。因此,比较 char 值并对它们进行算术运算是有意义的。这些值被映射到字形以进行显示,但在内部它们只是数值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多