请问c语言当中,如何统计数字各自出现的次数
在c语言当中,用数组的方法,统计输入的一串数字,统计其中各个数字出现的个数。比如:
1 2 3 4 4 1 3
这串数1出现了2次,2出现了一次,3出现了2次,4出现了两次。
请问高手怎么实现,不能用指针,因为还没学到。 展开
实现代码:
#include <stdio.h>
int main() {
int num = 0, i = 0;
printf("请输入一个整数:");
scanf("%d", &num);
int array[10] = {};
while(num) {
array[num % 10]++; //让数组下标代表所判断的数字
num /= 10;
}
for (i = 0; i < 10; i++) {
if (array[i] != 0)
printf ("%d有%d个\n", i, array[i]);
return 0;
}
扩展资料:
printf用法:
printf()函数的调用格式为:printf("&lt;格式化字符串&gt;",&lt;参量表&gt;)。
其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
比如:
inta=1234;
printf("a=%d\n",a);
输出结果为a=1234。
确定算法思路。
在C语言中,判断一个正整数中某个数字出现的次数可以利用整型变量之间的求模运算和除法的特性来解决。求模运算相当于求余数。比如11%10的结果为1,123%10的结果为2,利用这种特性,在十进制中,求除以10的余数就可以得到末尾的数字。
在C语言中,整型变量的除法中,商为不保留小数部分的结果,比如:3/2=1,102/10=10。因此可以不断除以10,就能去掉末尾数字。再结合求模运算,就可以从末尾到开头,依次得到每一位数字。
数据类型:
C的数据类型包括:整型(short、int、long、long long)、字符型(char)、实型或浮点型(单精度float和双精度double)、枚举类型(enum)、数组类型、结构体类型(struct)、共用体类型(union)、指针类型和空类型(void)。
变量是以某标识符为名字,其值可以改变的量。
标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
int main(void)
{ int num[10]={0} ; //定义数组,里面的元素全部为0,用来统计0--9出现的次数
int b[]={1,2,3,4,4,1,3}; //定义数组B,里面存放你要输入的数字串
int i ;
for(i=0;i<sizeof(b);i++)
num[ b[i] ] ++;
for(i=0;i<10;i++)
printf( "%d",num[i]);
return 0;
}
b[] ={1, 2 ,3 ,4 ,4 ,1 ,3}
a[10] = {0}
遍历b数组
a[b[i]]++;
最后输出a数组就行了。