#include<stdio.h> #include<string.h> struct student { int class_num, id, t, j; double e_score, math, c_score, pinjun; char name[20]; }a[1000]; void input(struct student a[10]) { int i; for (i = 0; i <= 3; i++) { printf("请输入班号"); scanf_s("%d", &a[i].class_num); printf("请输入学号"); scanf_s("%d", &a[i].id); printf("请输入名字"); scanf_s("%c", a[i].name); printf("请输入英语成绩"); scanf_s("%lf", &a[i].e_score); printf("请输入c语言成绩"); scanf_s("%lf", &a[i].c_score); printf("请输入数学成绩"); scanf_s("%lf", &a[i].math); } } void jisuan(struct student a[]) { int i; for (i = 0; i <= 3; i++) { a[i].pinjun = (a[i].e_score + a[i].c_score + a[i].math) / 3; printf("%lf\n", a[i].pinjun); } } void paixv(struct student a[])//对英语程序进行排序 { for (int i = 0; i < 3; i++) { for (int j = i + 1; j < 4; j++) { if (a[j].pinjun > a[i].pinjun) { double t = a[j].pinjun; a[j].pinjun = a[i].pinjun; a[i].pinjun = t; } } } for (int i = 0; i < 4; i++) printf("平均分从高到低排序:%s:%f\n", a[i].name, a[i].pinjun); printf("\n"); return; } int main(void) { struct student a[10]; struct qiuzhi; struct paixv; int i; printf("***********************************************************\n"); printf("* 欢迎使用学生成绩管理系统 *\n"); printf("***********************************************************\n"); printf("* 1.输入所有学生信息 2.计算个人平均成绩 *\n"); printf("* 3.按课程成绩排序 4.计算课程平均成绩 *\n"); printf("* 5.按学号查询个人信息 6.退出 *\n"); printf("***********************************************************\n"); printf("\n"); printf("请选择要执行的功能1~6:"); scanf_s("%d", &i); while (i != 0) { switch (i) { case 1: input(a); break; case 2: jisuan(a); break; case 3: paixv(a); break; case 4: //4.0 break; case 5://补一个利用于查询个人信息的函数 printf("输入要查找的学号:"); printf("5"); //scanf("%d",&j); //search(); break; case 6://退出程序 break; default:printf("error!\n"); break; } scanf_s("%d", &i); }return 0; }
时间: 2023-07-23 22:03:42 浏览: 158
这段代码存在一些问题需要注意:
1. 在使用 `scanf_s` 函数读取字符数组 `name` 时,应该使用 `%s` 格式,而不是 `%c`。所以应该将 `scanf_s("%c", a[i].name);` 修改为 `scanf_s("%s", a[i].name, sizeof(a[i].name));`。
2. 函数 `paixv()` 中的排序代码有误。在交换两个元素的位置时,应该交换结构体 `student` 而不是其中的 `pinjun` 字段。修改为 `struct student t = a[j]; a[j] = a[i]; a[i] = t;`。
3. 在 `main()` 函数中,声明的 `struct qiuzhi` 和 `struct paixv` 没有被使用,可以删除这两行。
4. 在 `main()` 函数的 `switch` 语句中,当输入为 5 时,应该调用查询个人信息的函数,而不是直接输出 "5"。可以编写一个函数用于根据学号查询个人信息。
5. 在 `main()` 函数的最后一行的返回值应该是 `return 0;` 而不是 `}return 0;`。
对以上问题进行修改后,代码如下所示:
```c
#include <stdio.h>
#include <string.h>
struct student
{
int class_num, id;
int t, j;
double e_score, math, c_score, pinjun;
char name[20];
};
void input(struct student a[])
{
int i;
for (i = 0; i < 4; i++)
{
printf("请输入班号:");
scanf_s("%d", &a[i].class_num);
printf("请输入学号:");
scanf_s("%d", &a[i].id);
printf("请输入名字:");
scanf_s("%s", a[i].name, sizeof(a[i].name));
printf("请输入英语成绩:");
scanf_s("%lf", &a[i].e_score);
printf("请输入C语言成绩:");
scanf_s("%lf", &a[i].c_score);
printf("请输入数学成绩:");
scanf_s("%lf", &a[i].math);
}
}
void jisuan(struct student a[])
{
int i;
for (i = 0; i < 4; i++)
{
a[i].pinjun = (a[i].e_score + a[i].c_score + a[i].math) / 3;
printf("%lf\n", a[i].pinjun);
}
}
void paixv(struct student a[])
{
for (int i = 0; i < 3; i++)
{
for (int j = i + 1; j < 4; j++)
{
if (a[j].pinjun > a[i].pinjun)
{
struct student t = a[j];
a[j] = a[i];
a[i] = t;
}
}
}
for (int i = 0; i < 4; i++)
{
printf("平均分从高到低排序:%s:%f\n", a[i].name, a[i].pinjun);
}
printf("\n");
}
void search(struct student a[], int id)
{
for (int i = 0; i < 4; i++)
{
if (a[i].id == id)
{
printf("学号:%d\n", a[i].id);
printf("班号:%d\n", a[i].class_num);
printf("名字:%s\n", a[i].name);
printf("英语成绩:%lf\n", a[i].e_score);
printf("C语言成绩:%lf\n", a[i].c_score);
printf("数学成绩:%lf\n", a[i].math);
printf("平均分:%lf\n", a[i].pinjun);
return;
}
}
printf("未找到该学号对应的信息。\n");
}
int main(void)
{
struct student a[10];
int i;
printf("***********************************************************\n");
printf("* 欢迎使用学生成绩管理系统 *\n");
printf("***********************************************************\n");
printf("* 1.输入所有学生信息 2.计算个人平均成绩 *\n");
printf("* 3.按课程成绩排序 4.计算课程平均成绩 *\n");
printf("* 5.按学号查询个人信息 6.退出 *\n");
printf("***********************************************************\n");
printf("\n");
printf("请选择要执行的功能1~6:");
scanf_s("%d", &i);
while (i != 0)
{
switch (i)
{
case 1:
input(a);
break;
case 2:
jisuan(a);
break;
case 3:
paixv(a);
break;
case 4:
// TODO: 计算课程平均成绩
break;
case 5:
printf("输入要查找的学号:");
int id;
scanf_s("%d", &id);
search(a, id);
break;
case 6:
return 0;
default:
printf("error!\n");
break;
}
scanf_s("%d", &i);
}
return 0;
}
```
请注意,这只是对您提供的代码进行了修正和修改,可能还有其他方面的问题需要您自行调试和处理。
阅读全文