gpt4 book ai didi

用C语言计算数字

转载 作者:行者123 更新时间:2023-11-30 21:35:06 25 4
gpt4 key购买 nike

我输入了一堆数字字符,3 4 5 6 6 。代码返回给我这个结果

digits = 0 0 0 1 1 1 2 0 0 0, white space = 5
, other = 0.

我不明白为什么“数字”给我返回这样的结果 0 0 0 1 1 1 2 0 0 0 。谁能解释一下为什么计算机会这样做?

#include<stdio.h>

main()
{
int c, i, nwhite, nother;
int ndigit[10];

nwhite = nother = 0;
for (i = 0; i < 10; ++ i)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;

printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d\n, other = %d\n", nwhite, nother);
}

最佳答案

理解这个问题的关键在于这个语句:++ndigit[c-'0'];

程序首先创建一个数组:

int ndigit[10]; /* creates an array of size 10 */

c中,当您创建数组时,您只会获得一 block 内存。该内存中的内容是未定义的。在更现代的语言中,您可能会得到一个包含 10 个零的数组,但在 c 中,当您第一次创建它时,其中可能会包含垃圾数据。

浏览您的代码,您应该能够确定程序如何准备数组以供使用。它确保数组中每个索引处的每个值都设置为 0

此时您的数组及其索引看起来像这样:

[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] /* array   */
0 1 2 3 4 5 6 7 8 9 /* indices */

因此,如果您要运行 ndigit[0],您将返回索引 0 处的值,即 0

c = getChar() 从输入中获取 1 个字符(您键入的数字)。但此时程序仅将这些数字视为 char 类型,而不是 int。这是您需要了解 ASCII 的地方。您的第一个 char 输入是 '3'。它的 ASCII 值为 51。该程序执行以下数学运算:'3'-'0'。它减去两个字符。这是可能的,因为 c 只是减去这些 charsASCII 值,实际上是 51-48 ,等于3

++ 运算符递增一个值:即。 ++00 递增到 1。我不会讨论 prepost 增量,因为您稍后会了解到这一点。

既然您已经掌握了所有这些,我的建议是画出数组 ndigit 及其值和索引以及 c 的值(当前char) 看起来像在 while 循环的每次迭代的末尾。对 while 循环的每次迭代执行此操作,您就会明白为什么您看到的输出是有意义的。

即:

c = 3
[ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ] /* array */
0 1 2 3 4 5 6 7 8 9 /* indices */

c = 4
...
...

/* and so on */

这里有一个有用的 ASCII 表指南的链接:http://www.asciitable.com/

关于用C语言计算数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48575799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com