求助一个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; }