void print_student(struct student *s) { printf("%-*s %-*s %-*s %s\n", MAX_NAME_LEN, s->name, MAX_NAME_LEN, s->surname, MAX_CLASS_LEN, s->Class, s->id); }
时间: 2024-03-18 21:44:47 浏览: 20
这段代码定义了一个名为 print_student 的函数,参数为指向结构体 student 的指针。函数通过 printf 函数输出该学生的姓名、姓氏、班级和学号,其中使用了左对齐和最大长度限制,以确保输出格式整齐对齐。MAX_NAME_LEN 和 MAX_CLASS_LEN 是预定义的常量,分别表示姓名和班级字符串的最大长度,s->name、s->surname、s->Class 和 s->id 分别表示该学生的姓名、姓氏、班级和学号。
相关问题
(4)基于结构体,编写一个班级成绩排序系统。 定义一个结构体 Student ,包含姓名( name ,字符串)、学号( id , int 型)、3门课程成绩( score , double 数组)、平均成绩( avg _ score , double 型)。输入每个学生的姓名、学号、3 门课程成绩。计算平均成绩,按平均成绩由高到低排序后输出。 填写下列程序。 # include < stdio . h > # define N 3/*学生人数*/ struct Student void input _ student info ( struct Student * p , int n ) int i ; for ( i -0:i< n ; i ++_ printf " printf (" student % dn ", i +1); printf (" name :"); gets ( printf (" id :"); scanf ("% d " printf (" scores :"); scanf ("%1f%1f%1f", printf ("- fflush ( stdin ); - An "); An "); void calculate _ avg _ score ( struct Student * p . int n ) inti ; for ( i -0; i < n ; itt , p -> avg _ score = void print student info ( struct Student * p , int n ) int i ; printf (" -\ n "); printf ("%15s%8s%8s%8s%8s%12sn"," name "," id "," scorel ","score2","score3"," avg score "); for ( i =0; i < n ; itt , ptt )
#include <stdio.h>
#include <string.h>
#define N 3
// 定义结构体
struct Student {
char name[20]; // 姓名
int id; // 学号
double score[3]; // 3门课程成绩
double avg_score; // 平均成绩
};
// 输入每个学生的信息
void input_student_info(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++, p++) {
printf("student %d\n", i+1);
printf("name: ");
getchar(); // 清空输入缓存
gets(p->name);
printf("id: ");
scanf("%d", &p->id);
printf("scores: ");
scanf("%lf%lf%lf", &p->score[0], &p->score[1], &p->score[2]);
}
}
// 计算每个学生的平均成绩
void calculate_avg_score(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++, p++) {
p->avg_score = (p->score[0] + p->score[1] + p->score[2]) / 3.0;
}
}
// 按平均成绩由高到低排序后输出
void print_student_info(struct Student *p, int n) {
int i, j;
struct Student temp;
// 冒泡排序
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-1-i; j++) {
if (p[j].avg_score < p[j+1].avg_score) {
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
// 输出排序结果
printf("\n%15s%8s%8s%8s%8s%12s\n", "name", "id", "score1", "score2", "score3", "avg score");
for (i = 0; i < n; i++, p++) {
printf("%15s%8d%8.1lf%8.1lf%8.1lf%12.1lf\n", p->name, p->id, p->score[0], p->score[1], p->score[2], p->avg_score);
}
}
int main() {
struct Student stu[N];
input_student_info(stu, N); // 输入每个学生的信息
calculate_avg_score(stu, N); // 计算每个学生的平均成绩
print_student_info(stu, N); // 按平均成绩由高到低排序后输出
return 0;
}
#include <stdio.h> #include <string.h> #define N 3 // 学生人数 struct Student { char name[20]; int id; double score[3]; double avg_score; }; void input_student_info(struct Student *p, int n) { int i; for (i = 0; i < n; i++) { printf("Student %d\n", i+1); printf("Name: "); scanf("%s", p[i].name); printf("ID: "); scanf("%d", &p[i].id); printf("Scores: "); scanf("%lf %lf %lf", &p[i].score[0], &p[i].score[1], &p[i].score[2]); } } void calculate_avg_score(struct Student *p, int n) { int i; for (i = 0; i < n; i++) { p[i].avg_score = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0; } } void print_student_info(struct Student *p, int n) { int i, j; struct Student tmp; for (i = 0; i < n-1; i++) { for (j = i+1; j < n; j++) { if (p[j].avg_score > p[i].avg_score) { tmp = p[i]; p[i] = p[j]; p[j] = tmp; } } } printf("Sorted by average score:\n"); for (i = 0; i < n; i++) { printf("%d. %s (ID: %d) - Scores: %.2f %.2f %.2f - Average score: %.2f\n", i+1, p[i].name, p[i].id, p[i].score[0], p[i].score[1], p[i].score[2], p[i].avg_score); } } int main() { struct Student students[N]; input_student_info(students, N); calculate_avg_score(students, N); print_student_info(students, N); return 0; }解每条语句
这是一个学生信息管理程序,可以输入学生的姓名、学号和三门课的成绩,然后计算每个学生的平均成绩,并按照平均成绩从高到低排序输出学生的信息。
代码如下:
```c
#include <stdio.h>
#include <string.h>
#define N 3 // 学生人数
struct Student {
char name[20];
int id;
double score[3];
double avg_score;
};
// 输入学生信息
void input_student_info(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++) {
printf("Student %d\n", i+1);
printf("Name: ");
scanf("%s", p[i].name);
printf("ID: ");
scanf("%d", &p[i].id);
printf("Scores: ");
scanf("%lf %lf %lf", &p[i].score[0], &p[i].score[1], &p[i].score[2]);
}
}
// 计算每个学生的平均成绩
void calculate_avg_score(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++) {
p[i].avg_score = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;
}
}
// 按照平均成绩从高到低排序并输出学生信息
void print_student_info(struct Student *p, int n) {
int i, j;
struct Student tmp;
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (p[j].avg_score > p[i].avg_score) {
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
printf("Sorted by average score:\n");
for (i = 0; i < n; i++) {
printf("%d. %s (ID: %d) - Scores: %.2f %.2f %.2f - Average score: %.2f\n",
i+1, p[i].name, p[i].id, p[i].score[0], p[i].score[1], p[i].score[2], p[i].avg_score);
}
}
int main() {
struct Student students[N];
input_student_info(students, N);
calculate_avg_score(students, N);
print_student_info(students, N);
return 0;
}
```
代码注释如下:
1. 定义了一个结构体`Student`,表示学生的信息,包括姓名、学号、三门课程的成绩和平均成绩。
2. 定义了一个宏`N`,表示学生人数。
3. `input_student_info`函数用于输入学生信息,参数为一个指向`Student`类型的结构体指针和学生人数。
4. `calculate_avg_score`函数用于计算每个学生的平均成绩,参数为一个指向`Student`类型的结构体指针和学生人数。
5. `print_student_info`函数用于按照平均成绩从高到低排序并输出学生信息,参数为一个指向`Student`类型的结构体指针和学生人数。
6. `main`函数定义了一个`Student`类型的结构体数组`students`,调用`input_student_info`函数输入学生信息,调用`calculate_avg_score`函数计算每个学生的平均成绩,最后调用`print_student_info`函数按照平均成绩从高到低排序并输出学生信息。
7. `if (p[j].avg_score > p[i].avg_score)`表示比较第i个和第j个学生的平均成绩,如果第j个学生的平均成绩更高,则交换它们的位置,使得第j个学生排在第i个学生前面。
8. `printf("%d. %s (ID: %d) - Scores: %.2f %.2f %.2f - Average score: %.2f\n",`表示输出每个学生的信息,其中`%d`表示序号,`%s`表示姓名,`%d`表示学号,`%.2f`表示保留两位小数的浮点数,分别为三门课的成绩和平均成绩。