输出1到100内9出现的次数

本文介绍了一个简单的C语言程序,该程序用于计算从0到100的范围内数字9出现的总次数,包括个位和十位上的9。通过双重条件判断实现了这一功能,并最终输出计数结果。


#include<stdio.h>

int main()
{
int i;
int count = 0;
for (i = 0; i <=100 ; i++);
{
if (i % 10 == 9)
{
count++;
}
if (i / 10 == 9)
{
count++;
}
}
printf("the count is %d\n", count);
system("pause");



}
<think>根据用户要求,使用C语言生成19之间的随机数(注意:用户要求1-9,不是0-9),并统计每个数字出现的次数。 步骤: 1. 包含必要的头文件:<stdio.h>(标准输入输出),<stdlib.h>(随机数函数),<time.h>(初始化随机种子)。 2. 在main函数中: a. 定义一个数组count[10](索引0-9,但我们只使用1-9,所以0位置不用)用于统计次数,初始化为0。 b. 使用srand(time(0))初始化随机数种子,确保每次运行程序时随机数序列不同。 c. 生成随机数:由于rand()生成的随机数范围是0到RAND_MAX,我们可以通过取模运算和移位来得到1-9的随机数。 注意:直接使用 rand() % 9 会得到0-8,所以我们可以先取模9得到0-8,然后加1得到1-9。 即:rand_num = rand() % 9 + 1; d. 循环生成指定数量的随机数(比如100个),并将每个随机数对应的计数器加1。 e. 打印每个数字1-9)出现的次数。 注意:用户引用中提到了生成100个随机数,但用户当前问题没有指定数量,我们可以让用户输入随机数的个数,或者固定为100个。 根据用户引用[1]和[2]的示例,我们这里假设生成100个随机数。 但是用户引用[2]中有一个错误:它用a[i]作为随机数,然后S[a[i]]++,但数组S的大小为10,而随机数范围是0-9(但用户要求1-9,所以我们要调整)。 因此,我们调整如下: - 生成随机数:rand() % 9 + 1 -> 范围19 - 统计数组count,我们定义大小为10(即索引0到9),但我们只使用19,所以0位置不会被使用。 代码示例: 注意:用户引用[2]中初始化了统计数组为0,我们也需要初始化。 另外,为了清晰,我们可以输出每个数字出现的次数。 如果用户需要知道出现最多次数数字,我们可以再遍历统计数组找出最大值(以及对应的数字)。但用户问题只要求统计次数,所以先完成基本要求。 根据用户要求,我们生成100个随机数,然后统计。 但是,用户引用[1]中要求“找出出现最多次数数字”,因此我们也加上这个功能。 步骤: 1. 定义数组count[10] = {0}(这样所有元素初始化为0)。 2. srand(time(0)); 3. 循环100次:每次生成一个1-9的随机数,然后count[该随机数]++。 4. 打印1-9每个数字出现的次数。 5. 遍历count数组(从19),找出最大值和对应的数字(可能有多个数字出现次数相同且都是最大值,则都输出)。 代码实现:</think>以下是用C语言生成1-9随机数并统计出现次数的完整解决方案: ```c #include <stdio.h> #include <stdlib.h> // 包含rand()和srand()函数 #include <time.h> // 包含time()函数 int main() { int count[10] = {0}; // 创建统计数组(索引0-9),初始化为0 int totalNumbers = 100; // 要生成的随机数总数 int randomNumber; // 初始化随机数生成器(使用当前时间作为种子) srand(time(0)); // 生成1001-9的随机数并统计 for (int i = 0; i < totalNumbers; i++) { randomNumber = rand() % 9 + 1; // 生成1-9的随机数 count[randomNumber]++; // 对应计数器+1 } // 打印统计结果 printf("数字\t出现次数\n"); printf("----------------\n"); for (int i = 1; i <= 9; i++) { printf("%d\t%d次\n", i, count[i]); } // 找出出现次数最多的数字 int maxCount = 0; for (int i = 1; i <= 9; i++) { if (count[i] > maxCount) { maxCount = count[i]; } } // 打印出现次数最多的数字 printf("\n出现最多次的数字: "); for (int i = 1; i <= 9; i++) { if (count[i] == maxCount) { printf("%d ", i); } } printf("(出现%d次)\n", maxCount); return 0; } ``` ### 关键点说明: 1. **随机数生成**: - `rand() % 9 + 1`:生成1-9范围内的随机整数 - `srand(time(0))`:用当前时间初始化随机数生成器,确保每次运行结果不同 2. **统计机制**: - 创建`count[10]`数组(索引0-9),其中索引1-9对应数字1-9 - 当生成数字n时,执行`count[n]++`进行计数 3. **输出格式**: - 表格形式显示每个数字的出现次数 - 单独列出出现次数最多的数字(可能有多个并列) 4. **数学原理**: 每个数字出现的期望频率为: $$E(X_i) = \frac{N}{k} = \frac{100}{9} \approx 11.11$$ 其中$N$为总数,$k$为数字范围大小[^1] ### 运行示例: ``` 数字 出现次数 ---------------- 1 12次 2 10次 3 11次 4 14次 5 9次 6 13次 7 8次 8 119 12次 出现最多次的数字: 4 (出现14次) ``` > 注意:实际运行结果会因随机性而不同,但所有数字出现次数之和恒为100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值