问题:输入数量不确定的0到9范围内的整数,统计每一个数字不出现的次数(可以输入-1表示结束)
思考:首先,输入0到9范围内的数字好实现,但是如何记录他们呢?如果我们想编写的程序更加轻松一点,因此我们开始使用数组帮助我解决问题。
然而。此时又出现了一个问题,我们使用的数组,需要它去充当什么作用呢?是充当计数器,还是成为像上一个程序一样成为数据的存放器呢?这需要我们好好思考,因为这里的数组作用不同,编写的程序量也不同,我简单为读者提供两套思路:
思路一:将其完全成为计数器
#include<stdio.h>
int main() {
int a;
scanf_s("%d", &a);
int num[10] = { 0 };//
while (a != -1) {
if (a >= 0 && a <= 9) {
num[a]++;
}
scanf_s("%d", &a);
}
for(int x=0;x<10;x++)
printf("%d的个数有%d个\n", x, num[x]);
return 0;
}
注解:在上面这个程序中,我们打开了num[10]的计数器,意思是当读取的数据的值和计数器的值相等的时候,计数器就相应的加1,最后再使用一个循环,将所有计数器的值展现出来。
尤其注意,在使用数组作为计数器的时候,要格外对其进行初始化,初始化也有两种思路,这里提供的是较为简单的那种,你也可以将//处改为 for(int i=0;i<=9;i++){num[i]=0;}
这两种都可以做到初始化为零的效果。
思路二:将其不完全转化为计数器,一部分变为储存数值的量(注意此处引用了函数的定义,为了减少函数的出口,同时方便管理)
#include<stdio.h>
void countnumbers(int number[], int a) {
int count [10] = { 0 };
for (int i = 0; i <= a; i++) {
if (number[i] >= 0 && number[i] <= 9) {
count[number[i]]++;
}
}
for(int i = 0; i <= a;i++ ){
printf("数字%d出现了%d次", i, count[i]);
}
}
int main() {
printf("请输入您最大输入的数字个数:\n");
int num;
scanf("%d", &num);
int number[num];
printf("请输入数字:\n");
int a;
scanf("%d", &a);
int i;
for(int z=1;z<num;z++) {
printf("请输入数字:\n");
scanf("%d", &a);
for (i = 0; i < num; i++) {
number[i] = a;
}
}
countnumbers(number, num);
return 0;
}
注解:这种方法虽然将输入的数值进入数组中储存,但是后面不得不又引用一个计数器数组,使得整个程序看起来较为臃肿,理解较为复杂,建议使用思路一。