求助一个C语言随机函数的问题
有50名学生,学号与五门成绩随机生成,还要求总成绩和平均分。
程序代码:
#include <stdio.h>
#include <windows.h>
#include <time.h>
#define N 10 //学生人数
#define M 5 //课程数
typedef struct {
int sn;
double grade[M];
double sum;
double ave;
} STU;
//随机生成唯一学号
void initSn(STU *p) {
int a[N], i, j, t, flag = 0;
for(i = 0; i < N; i++) {
a[i] = i + 1;
flag += a[i];
}
while(flag) {
t = 1 + (int)(N * rand() / (RAND_MAX + 1.0));
for(j = 0; j < N; j++) {
if(a[j] == t) {
flag -= a[j];
a[j] = 0;
(p++)->sn = j + 1;
break;
}
}
}
}
//随机打分 求总分 求平均分
void rate(STU *p) {
int i, j;
double sum;
for(i = 0; i < N; i++) {
sum = 0;
for(j = 0; j < M; j++) {
p->grade[j] = 59 + (41.0 * rand() / (RAND_MAX + 1.0));
sum += p->grade[j];
}
p->sum = sum;
p->ave = sum / M;
p++;
}
}
//打印五门成绩
void prtRate(STU *p) {
int i = 0;
for(; i < M; i++) {
printf("%.1f\t", p->grade[i]);
}
}
//打印全部数据表单
void display(STU *p) {
int i;
printf("学号\t\t----- 成 绩 -----\t\t总分\t平均\n");
for(i = 0; i < N; i++) {
printf("%03d\t", (p + i)->sn);
prtRate(p + i);
printf("%.1f\t%.1f\n", (p + i)->sum, (p + i)->ave);
}
}
int main(void) {
STU stu[N], *pstu = stu;
srand((unsigned int)time(NULL)); //以当前时间生成随机种子
initSn(pstu);
rate(pstu);
display(pstu);
return 0;
}
