void P(Student students[],int m,int n) { int i; for(i=0;i<n;i++) { int k; char keyword[21]; scanf("%d%s",&k,keyword); int found=0; int j; for(j=0;j<m;j++) { if(k==1&&strcmp(students[j].id,keyword)==0) { printf("%d\n",j+1); found=1; break; } else if(k==2&&strcmp(students[j].phone,keyword)==0) { printf("%d\n",j+1); found=1; break; } else if(k==3&&strcmp(students[j].email,keyword)==0) { printf("%d\n",j+1); found=1; break; } } if(!found) { printf("Not Found\n"); } } }
时间: 2023-12-10 20:05:11 浏览: 76
这段代码是一个函数P,它有三个参数:一个Student类型的数组students,一个整型m表示students数组中元素的个数,一个整型n表示要查找的关键字的数量。函数的作用是根据关键字在students数组中查找对应的元素,并输出其在数组中的下标。
具体来说,函数会循环n次,每次输入一个整型k和一个字符串keyword,表示要根据哪个属性进行查找,以及要查找的关键字。然后函数会遍历students数组,查找是否存在符合条件的元素。如果找到了,则输出该元素在数组中的下标(注意下标从1开始)。如果没有找到,则输出"Not Found"。
其中,关键字的属性(id、phone、email)分别用1、2、3来表示。函数中使用了strcmp函数来比较字符串。
相关问题
// 获取学生总分 void get_total_score(Student *student) { int total = 0; for (int i = 0; i < MAX_COURSE_NUM; i++) { student->total_score = total; } } // 显示学生信息 int show_student_info( Student *student) { printf("学号:%d\t姓名:%s\t成绩:%d %d %d\t总分:%d\n",student->id, student->name,student->scores[0], student->scores[1], student->scores[2],student->total_score); } // 显示所有学生信息及总排名 void show_all_students(Student *student) { // 计算总分 for (int i = 0; i < student_count; i++) { students[i].total_score = get_total_score(&students[i]); } // 排序 for (int i = 0; i < student_count - 1; i++) { for (int j = i + 1; j < student_count; j++) { if (students[i].total_score < students[j].total_score) { Student temp = students[i]; students[i] = students[j]; students[j] = temp; } } } // 显示信息 printf("\n所有学生信息及总排名:\n"); for (int i = 0; i < student_count; i++) { show_student_info(&students[i]); } }哪错了
在函数 get_total_score 中,你每次循环都将总分赋值为0,然后又用循环内的最后一个分数覆盖了总分,所以每个学生的总分都是最后一个分数。应该在循环结束后再将总分赋值给学生。
修改后的代码如下:
```
void get_total_score(Student *student) {
int total = 0;
for (int i = 0; i < MAX_COURSE_NUM; i++) {
total += student->scores[i];
}
student->total_score = total;
}
int show_student_info(Student *student) {
printf("学号:%d\t姓名:%s\t成绩:%d %d %d\t总分:%d\n", student->id, student->name,
student->scores[0], student->scores[1], student->scores[2], student->total_score);
}
void show_all_students(Student *students) {
// 计算总分
for (int i = 0; i < student_count; i++) {
get_total_score(&students[i]);
}
// 排序
for (int i = 0; i < student_count - 1; i++) {
for (int j = i + 1; j < student_count; j++) {
if (students[i].total_score < students[j].total_score) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 显示信息
printf("\n所有学生信息及总排名:\n");
for (int i = 0; i < student_count; i++) {
show_student_info(&students[i]);
}
}
```
#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`表示保留两位小数的浮点数,分别为三门课的成绩和平均成绩。
阅读全文