《C Primer Plus》第6版 编程练习 第十二章 第五,六题

又见面咯!

这次带来《C Primer Plus》第6版 编程练习 第十二章 第五,六题

如果可以,各位大佬请使用 PC端查看,拜托了.....如果可以的话,麻烦各位大佬们用 PC端 查看,拜托了,美感真的很重要!!!

编译环境:VS2017 Community

运行平台:Win 10 ×64

第五题题目:

/*	12-5 ---编写一个程序,生成100个 1~10 范围内的随机数,并以降序排列 */

分析题目:

  1. 生成100个 1~10 范围内的随机数
  2. 降序排列     这里我使用冒泡算法排序

需要包含的头文件:

#include <stdio.h>
#include <time.h>					//time()函数
#include <stdlib.h>					//提供随机数函数
#include <Windows.h>					//sleep()函数

<Windows.h>过会解释......

源代码如下:

/*	12-5 ---编写一个程序,生成100个 1~10 范围内的随机数,并以降序排列 */

//main.c
#include <stdio.h>
#include <time.h>			    //time()函数
#include <stdlib.h>			    //提供随机数函数
#include <Windows.h>		            //sleep()函数
#define SIZE 100

int main(void)
{
	int arrnum[SIZE];
	int times, count;		                //循环计数变量

	printf("等待10秒钟呦!\n");
	//随机生成100个 1~10 内的随机数
	for (times = 0; times < SIZE; times++)
	{
		srand((unsigned int)time(NULL));	//生成随机数种子
		arrnum[times] = rand() % 10 + 1;	//生成范围 1~10
		Sleep(100);				//避免生成的随机数一样
	}

	//冒泡算法降序排序数组
	for (times = 0; times < SIZE - 1; times++)
	{					        //因为是从0开始归位,所以n - 1循环
		for (count = 0; count < SIZE - times; count++)
		{
			if (arrnum[count] < arrnum[count + 1])
			{
				int temp = arrnum[count];
				arrnum[count] = arrnum[count + 1];
				arrnum[count + 1] = temp;
			}
		}
	}

	//打印结果
	system("cls");					//清屏
	printf("我们随机生成了100个 1~10的数字:\n");
	for (times = 0; times < SIZE; times++)
	{
		printf("%d) ", times);
		if (times < 10)				//保持数字对其
			putchar(' ');
		printf("%d\n", arrnum[times]);
	}

	return 0;
}

看一下程序的运行效果哈:

 

解释一些 Windows.h

 在测试的时候发现,通常电脑的运算速度会很快,100个随机数甚至0.1秒都不要就计算完成了

这会导致出现的随机数完全相同,所以使用Sleep()函数让它停留一会。

 

继续

第六题题目:

/* 12-6.c -----编写一个程序,生成1000个 1~10范围内的随机数。
	不用保存或打印这些数组,仅打印每个数出现的次数。
	用10个不同的种子值运行,生成的数字出现的次数是否相同?
	这是一个测试特定随机数生成器随机性的方法
*/

分析题目:

  1. 循环10次,分别获取不同的随机数种子
  2. 生成并打印这些随机数在1~10范围内出现的次数

(这里我使用桶排序      自行百度

包含的头文件:

#include <stdio.h>
#include <stdlib.h>		//srand()和rand()函数
#include <Windows.h>            //Sleep()函数

咳咳,这次的Sleep()函数过会你们就知道用在哪里了。。。。

<stdlib.h>更包含了 system()函数

 

源代码

/* 12-6.c -----编写一个程序,生成1000个 1~10范围内的随机数。
	不用保存或打印这些数组,仅打印每个数出现的次数。
	用10个不同的种子值运行,生成的数字出现的次数是否相同?
	这是一个测试特定随机数生成器随机性的方法
*/

#include <stdio.h>
#include <stdlib.h>                        //srand()和rand()函数
#include <Windows.h>

void B_P_seed(int num, unsigned int seed); //传入随机数种子,打印出每个数出现的次数

int main(void)
{
	int times = 0;
	int seed = 0;

	while (times <= 10)
	{
		printf("输入 10 个种子值,我会告诉你生成的 1-10 内的随机数\n");

                //检查非法输入
		while (scanf_s("%d", &seed) != 1)
		{    
			printf("那不是一个有意义的输入,再试一次:\n");
			continue;
		}

                //生成并打印 1000 个随机数出现1~10的次数
		B_P_seed(1000, seed);	
		times++;
	}

	return 0;
}

//传入随机数种子,打印出每个数出现的次数
void B_P_seed(int num, unsigned int seed)
{               //num	生成随机数的数量
		//seed	随机数种子种子

	int numarr[11] = { 0 };	
	int number = 0;

	//使用桶排序算法
	for (int times = 1; times <= num; times++)
	{
		srand(seed);				//设置随机数种子
		number = rand() % 10 + 1;		//生成随机数 1~10

		switch (number)				//根据生成的随机数记录出现的次数
		{
		case 1:
			numarr[number]++;
			break;
		case 2:
			numarr[number]++;
			break;
		case 3:
			numarr[number]++;
			break;
		case 4:
			numarr[number]++;
			break;
		case 5:
			numarr[number]++;
			break;
		case 6:
			numarr[number]++;
			break;
		case 7:
			numarr[number]++;
			break;
		case 8:
			numarr[number]++;
			break;
		case 9:
			numarr[number]++;
			break;
		case 10:
			numarr[number]++;
			break;
		default:
			printf("Program error!\n");
			break;
		}
	}

	//打印结果
	for (int times = 1; times <= 10; times++)
	{
		printf("%d 出现了 %d 次\n", times, numarr[times]);
	}
	printf("数据只能保存5秒\n");
	Sleep(5000);
	system("cls");					//清屏

	return;
}

还是看看运行效果:

 

好了,一切搞定!

 

Alex Mercer(boy) 鸣谢

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值