随机产生N 个正整数(10 < Ν ≤20 )存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数)
tips:下面代码可供参考
代码如下:
#include
#include /*srand()用头文件stdlib.h;time(NULL)用time.h*/
#include
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
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
count[score[i]] ++;
}
统–打印统计结果,设置一个循环,按count数组元素的值,打印相应个数的符号’*’
tips:下面代码可供参考
代码如下:
#include
#include
#include
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
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]={0}; int count[100]={0};
4.注意:不完全初始化”和“完全不初始化”不一样。如果“完全不初始化”,即只定义“int a[5];”而不初始化,那么各个元素的值就不是0了,所有元素都是垃圾值。
可参考:http://c.biancheng.net/view/184.html