有人可以向我解释一下这段代码是如何工作的吗?

标签 c arrays

#include <stdio.h>


int main() {
    int array[101]={0},i=0,n;
    printf("Enter numbers: \n");
    for (int i=0; i<1000 ;i++){
      do {
          scanf("%d",&n);
          if ((n<0 || n>100) && n!=-1) {printf("Numbers must be between 0 and 100!\n");}
      } while ((n<0 || n>100) && n!=-1);
    if (n==-1) break;
    array[n]++;
    }

    for (i=0;i<=100;i++) {
      if (array[i]!=0) printf("Number %d occurs %d times.\n",i,array[i]);

    }
}

这个程序让用户输入很多0到100之间的数字,然后计算每次数字出现的次数,例如如果用户输入3 3 3 1,程序会写“数字3出现3次数字1出现 1 次” .. 代码可以工作,但我不明白它为什么工作以及如何工作。尤其是最后一个 for 循环。有人可以向我分解这段代码并逐步解释它是如何工作的吗? 预先感谢您

最佳答案

数组变量(int array[101])是一个数组,用于计算数字 i 被引入的次数。它的所有位置都初始化为零。例如,array[5] 包含输入数字 5 的次数。每次键入时,其值都会递增。

该指令增加数量:

array[n]++; where n is the number typed

最后一个循环遍历数组并仅显示已输入的数字 (array[i]!= 0)

for (i=0;i<=100;i++) { if (array[i]!=0) printf("Number %d occurs %d times.\n",i,array[i]); }

关于有人可以向我解释一下这段代码是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886174/

相关文章:

c - 关于取消引用 'void *' 指针

mysql - 兼容 mysql 插入的 Perl 格式数组元素

c - 使用 cvSaveImage 保存 IplImage(不是 IplImage*)

java - 为什么这个 lambda 不是一个单一对象?

java - 如何使用 java 中数组中的值更新 JTable

python - 如何缩放矩阵的每一列

arrays - 数组遍历中没有 var 或可破坏的 : How to "break" when a predicate is met,?

c - GDB 在进入断点时抛出错误

c - 我试图编写一个函数来查找两个数组的交集

c - 为什么它说 'expected declaration specifiers before ' main''