如何为10名学生的结构生成随机ID和测试分数

时间:2017-01-23 23:00:32

标签: c arrays memory-management random struct

这是我对C的第一个编程任务,我对如何实现随机数非常困惑。在我的程序中,我已经创建了一个struct student,并创建了一个包含10名学生的数组。现在我必须为这10名学生生成随机身份证号码和考试成绩,但我的老师从未明白如何做到这一点。我也不允许更改变量或函数声明。到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct student {
     int id;
     int score;
};

struct student *allocate() {
     return calloc(sizeof(struct student), 10);
}

void generate(struct student* students){
     /*
      *Generate random ID and scores for 10 students, ID being between 0 and 
      * scores equal to (id* 10 % 50)
      */
}
int main() {
     struct student *stud = allocate();
     generate(stud);

    return 0;
}

他也给出了这个指示: “编写一个函数void generate(struct student* students),填充作为参数传递的10个学生数组的id和score字段。每个学生应该有一个与数组中的索引相对应的id(即数组中的第一个学生应该有id 0)。如果每个学生的id是x,那么学生的分数应该是(10 * x) % 50。“

1 个答案:

答案 0 :(得分:1)

尝试以下方法。 struct student*用于迭代10名学生,其中students指向10名连续存储的学生中的第一名。请注意,s++会将指针增加struct student

的大小
void generate(struct student* students){
    /*
     *Generate random ID and scores for 10 students, ID being between 0 and
     * scores equal to (id* 10 % 50)
     */
    struct student* s = &students[0];
    for (int i=0; i<10; i++) {
        s->id = i;
        s->score = (i*10)%50;
        s++;
    }
}

请注意 - 正如DYZ所指出的那样 - 您也可以直接使用变量students进行迭代;这是一个喜欢是否想要保留原来传递的值的问题:

void generate(struct student* students){
    for (int i=0; i<10; i++) {
        students->id = i;
        students->score = (i*10)%50;
        students++;
    }
}