有序数据程序设计

题目一

随机产生N 个正整数(10 < Ν ≤20 )存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数)


tips:下面代码可供参考

代码如下:

#include<stdio.h>
#include<stdlib.h>/*srand()用头文件stdlib.h;time(NULL)用time.h*/
#include<time.h>
int main()
{
	int N, i,min,max;
	float sum = 0.00;
	int a[100] = { 0 };/*设定一个数组*/
	srand(unsigned(time(NULL)));/*这里可以用time_t  t ;srand(unsigned time(&t));表示*/
	/*用time(NULL)表示则不用定义time_t型的变量t*/
	N = rand() % 10 + 11; /*产生随机数的个数的范围在10<N<=20之间*/
	printf("随机数的个数为:%d\n", N);
	printf("这个随机数组为:\n");
	for ( i = 0; i <N; i++)
	{
		a[i] = rand()%100;/*随机数的范围在0~100之内,并且将产生的随机数输入一个数组中*/
		printf("a[%d]=%d\t", i,a[i]);
		sum = sum+a[i];/*计算数组中元素之和*/
		if (i==0)
		{
			max = min = a[i];
		}
		else
		{
			if (min>a[i])
			{
				min = a[i];
			}
			else if(max<a[i])
			{
				max = a[i];
			}
		}
	}
	printf("该数组的元素之和为:%.2f\n", sum);
	float average;
	average = sum/ N;
	printf("该数组中最大的值为:%d\t,最小的值为:%d\t,平均数为:%.2f\t", max, min, average);
	return 0;
}

题目二

##餐饮服务质量调查打分:
某公司的主管需要了解一年来公司的营业状况,比较一下各月份的销售收入状况。如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。
Grade Count Histogram
1 5 *****
2 10 **********
3 7 *******

10 3 ***
提示:
–定义数组score存放打的分数
–定义数组count为计数器(count[0]不用)
–计算统计结果:设置一个循环,依次检查数组元素值score[i],是1则将数组元素count【1】加1,是2则将数组元素count【2】加1,依此类推
for (i=0; i<STUDENTS; i++)
{
count[score[i]] ++;
}

统–打印统计结果,设置一个循环,按count数组元素的值,打印相应个数的符号’*’

tips:下面代码可供参考
代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int score[100] = { 0 };
	int count[100] = {0};
	int i, STUDENTS;
	STUDENTS = 40;
	srand(unsigned(time(NULL)));
	for (i = 0; i < STUDENTS; i++)
	{
		score[i] = rand() % 10 + 1;/*评分为1~10*/
		/*printf("%d\t", score[i]);*/
		count[score[i]] ++;
	}
	printf("Grade\tCount\tHistogram\n");
	  int h, k;
	  for (k = 1; k <= 10;k++)/*k相当于等级*/
	  {
		  printf("%d\t%d\t", k, count[k]);
		  for (h = 1; h <=count[k]; h++)
		  {
			  printf("%c",'*');
		  }
		  printf("\n");
	  }
	return 0;
}

题目三

##检验并打印魔方矩阵
在下面的5×5阶魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。
在这里插入图片描述
tips:下面代码可供参考
代码如下:

#include<stdio.h>
int main()
{
	int i, j,sum,N;
	sum = 0;
	int a[5][5] = { 17,24,1,8,15,23,5,7,14,16,4,6,13,20,22,10,12,19,21,3,11,18,25,2,9 };
	//若想测试其它矩阵是不是魔方矩阵,可以在这数组上面进行修改
	for ( i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			sum += a[i][j];
		}
	}
	N = sum / 5;//魔方矩阵的特点:每一行的和=每一列的和=对角线的和=全部元素的和的1/5
	for ( i = 0; i < 5; i++)
	{
		sum = 0;//每一次循环都要重置sum的值
		for ( j = 0; j < 5; j++)
		{
			sum += a[i][j];//求每一行的和
		}
		if (sum=N)
		{
			break;
		}
		else
		{
			printf("这不是魔方矩阵\n");
			return 0;
		}
	}
	for ( i = 0; i < 5; i++)
	{
		sum = 0;
		for ( j = 0; j < 5; j++)
		{
			sum += a[j][i];//求每一列的和
		}
		if (sum=N)
		{
			break;
		}
		else
		{
			printf("这不是魔方矩阵\n");
			return 0;
		}
	}
	int sum1, sum2;
	sum1 = sum2 = 0;
	for ( i = 0; i < 5; i++)
	{
		for ( j = 0; j < 5; j++)
		{
			if (i == j)
			{
				sum1+= a[i][j];//这是主对角线的和
			}
			if (i+j==4)
			{
				sum2 += a[i][j];//这是副对角线的和
			}
		}
	}
	if (sum1=sum2=N)
	{
		printf("这是个魔方矩阵:\n");
		for  (i = 0; i <5; i++)
		{
			for (j = 0; j < 5; j++)
			{
				printf("%d\t", a[i][j]);
			}
			printf("\n");
		}
	}
	else
	{
		printf("这不是魔方矩阵。\n");
	}

	return 0;
}

总结

1. 产生随机数,需要rand函数里的随机数发生器;而srand 函数是随机数发生器的初始化函数。srand()用头文件stdlib.h; srand函数: srand(unsigned seed );在产生随机数的时候,往往是使用系统的时间作为”种子“进行初始化,这样在产生两次的随机数就不会一样。当srand()的参数值固定的时候,rand()获得的数也是固定的。获取系统的时间,使用time函数。它的返回值为从1970/01/01 00:00:00 到现在所持续的秒数,然后将time_t型数据转化为unsigned型再传给srand函数,即: srand(unsigned time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand(unsigned (time(NULL)))
time(NULL)头文件用time.h //只能精确到秒
当随机函数使用for 循环时,运行速度非常快,在一秒之内就运行完成了,而 time() 函数得到的时间只能精确到秒,所以每次循环得到的时间都是一样的,这样一来,种子也就是一样的,随机数也就一样了。(可以使用sleep()来经过秒)

2.rand()函数的取值范围为:0~32767;rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在0~99之间。
可参考:
https://www.runoob.com/cprogramming/c-function-srand.html
https://blog.csdn.net/cx1165597739/article/details/89373765
3.当用int来定义一维数组的时候,当只定义一个数组的时候可以不用给数组设置初始值(即int a[100];可以使程序运行)。当给多个数组定义的时候,则必须给数组设置一个初始值(即int a[100]={0}; int b[100]={0};);虽然没有设置初始值也会运行程序,但是该显示的结果是错误的。
例如下面两张截图:

错误的:int score[100],count[100];错误的:int score[100],count[100];
正确的:int score[100]={0}; int count[100]={0};
错误的
4.注意:不完全初始化”和“完全不初始化”不一样。如果“完全不初始化”,即只定义“int a[5];”而不初始化,那么各个元素的值就不是0了,所有元素都是垃圾值。
可参考:http://c.biancheng.net/view/184.html

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值