深圳大学电信C语言 排序与直方图绘制程序(综合实验2)

一、实验目的

(1) 进一步掌握C 语言中的选择结构、循环控制的编程方法;  (2) 学习C 语言中的数组定义和引用的编程方法;

  (3) 理解和掌握冒泡排序法选择排序法的基本原理,掌握其程序实现方法

二、实验要求

本实验任务包括2 个部分,说明如下:

一、 第一部分实验程序的具体要求如下:

1)在VC++中建立一个工程;

2)在程序开始的注释行中写上你自己的信息;

3 定义一个可以存放20 个整型数元素的一维整型数组rArray,用随机数生成函数(参考 基本实验 6 )生成20 1-50 之间的随机整数,并把它们存放在该整型数组中。

4 定义一个可以存放51 个字符元素的一维字符型数组cArray,并将其全部初始化为数值0

5 按照数组 rArray 下标顺序在屏幕上输出数组中的这 20 个随机整数。并按照数组下标顺序在屏幕上显示出这 20个随机整数的棒图。

    关于棒图的说明:最简单的棒图可以用显示字符 ’*’ 的数量来表示。例如,若随机整数是 13,则在一行中显示13  ’*’;也可以首先将13  ’*’ 写入字符型数组cArray,然后使用字符串形式显示出来。

6)等待键盘输入回车键。然后进行下面的过程:

7)用 冒泡排序算法 对这20 个随机数按照由大到小的顺序排序,将排序结果存放到原数组之中。

8 按照排序后的数组下标顺序,在屏幕上输出数组中的这20 个随机整数。同时在屏幕上显示出已经排序后的数组的棒图。

9)等待键盘输入回车键。然后进行下面的过程:

10)用 选择排序算法 再对上述 7) 中得到的数组的 20 个数按照由小到大的顺序排序,将排序结果存放到原数组之中。

11按照排序后的数组下标顺序,在屏幕上输出数组中的这20 个随机整数。同时在屏幕上显示出已经排序后的数组的棒图。

二、 第二部分实验程序的具体要求:

1)在VC++中建立一个新的工程;

2)在程序开始的注释行中写上你自己的信息;

3参考第一部分实验,定义一个可以存放25 个整型数元素的一维整型数组,用随机数生成函数生成25 0-23 之间的随机整数,并把它们存放在该整型数组中。

4利用你学过的二维数组的知识,在屏幕上输出这25 个随机数的直方图(垂直棒图)

    要求:直方图的每个垂直列中的高度分别等于各个随机数的值,直方图的垂直列之间有2 个空列的 间隔。

5每个垂直列下面显示该列所对应的整数值。

6等待键盘输入回车键。

7)用 冒泡排序算法 对这35 个随机数按照由小到大的顺序排序,将排序结果存放到原数组之中。

8 在屏幕上输出排序后的数组中的这35 个数的直方图,输出形式如5)所示。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
	int rArray[20], aa;
	int i, j, t, k;
	int count = 0;

	srand((unsigned)time(NULL));

	for (i = 0; i < 20; i++)
	{
		aa = rand() % 50 + 1;
		rArray[i] = aa;
	}
	char cArray[51] = { 0 };
	for (i = 0; i < 20; i++)
	{
		printf("[%d]	%2d ", i, rArray[i]);
		for (j = 0; j < rArray[i]; j++)
			printf("*");
		printf("\n");
	}
	printf("等待键盘打回车后进行冒泡排序.....");
	getchar();
	fflush(stdin);

	int num = 20;
	for (i = 1; i < num; i++)
	{
		for (j = 0; j < num - i; j++)
			if (rArray[j] <= rArray[j + 1])
			{
				t = rArray[j];
				rArray[j ] = rArray[j+1];
				rArray[j+1] = t;
			}
	}
		for (i = 0; i < 20; i++)
		{
			printf("[%d]	%2d ", i, rArray[i]);
			for (j = 0; j < rArray[i]; j++)
				printf("*");
			printf("\n");
		}

		printf("等待键盘打回车后进行选择排序.....");
		getchar();
		fflush(stdin);

		for (i = 0; i < num - 1; i++)
		{
			k = i;
			for(j=i+1;j<num;j++)
			{
				if (rArray[k] >= rArray[j])
				
					
					k = j;
				
				if(k!=i)
				{
					t = rArray[i];
					rArray[i] = rArray[k];
					rArray[k] = t;
				}

			}
		}
		for (i = 0; i < 20; i++)
		{
			printf("[%d]	%2d ", i, rArray[i]);
			for (j = 0; j < rArray[i]; j++)
				printf("*");
			printf("\n");
		}
		printf("等待回车后结束.....");
		getchar();
		fflush(stdin);

	
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CcsoSad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值