这是我对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
。“
答案 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++;
}
}