gpt4 book ai didi

arrays - Kernighan 和 Ritchie 的主题 1.6

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:07 25 4
gpt4 key购买 nike

我正在阅读 Kernighan 和 Ritchie 合着的“The C Programming language”一书,但我陷入了一个话题。

主题编号 1.6 讨论数组。在书中,他们包含了一个计算数字、空格和其他字符的程序。程序是这样的:

#include <stdio.h>

main(){
int c,i,nother,nwhite;
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=='\t'||c=='\n')
++nwhite;
else
++nother;


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


}

首先,我不明白第一个 for 循环的目的是:

 for(i=0;i<10;++i)
ndigit[i]=0;

其次,我无法理解这部分 while 循环背后的逻辑:

if (c>='0' && c<='9')
++ndigit[c-'0'];

我真的需要有人向我解释程序背后的逻辑,以便我可以进一步进行 C 编程。

感谢您的帮助!

最佳答案

这个循环

for(i=0;i<10;++i)
ndigit[i]=0;

用于设置数组ndigit的所有元素到 0。数组将计算 eneterd 数字的个数。

您可以在声明数组时将数组的所有元素初始初始化为 0,而不是此循环。

int ndigit[10] = { 0 };

至于这个说法

if (c>='0' && c<='9')
++ndigit[c-'0'];

那么如果输入的字符是数字 c>='0' && c<='9'然后表达式 c-'0'给你数字的整数值。字符常量'0' - '9'对应的字符在计算机内存中由它们的 ASCII 或一些其他编码方案代码表示。例如 cgaracter '0'在 ASCII 中有内部代码 48 , 字符 '1' - 49 , 字符 '2' - 50等等。例如在 EBCDIC cgaracter '0'还有一个代码240 , 字符 '1' - 241等等。

C 标准保证所有数字都相互跟随。

所以如果变量c保留一些数字然后表达 c - '0'给出从 0(如果 c 保持 '0' )到 9(如果 c 保持字符 '9' )的数字。

此值(从 0 到 9)用作数组 ndigit 中的索引.

例如,假设 c 保留字符 '6' .那么c - '0'将等于整数 6。因此 ndigit[6] 增加

++ndigit[c-'0']

索引为 6 的数组的这个元素计算输入字符“6”的次数。

关于arrays - Kernighan 和 Ritchie 的主题 1.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648256/

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