一、实验目的
(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);
}