![]() |
#2
rjsp2020-06-01 13:03
|

#include <stdio.h>
#include <string.h>
struct birthday
{
int year;
int month;
int day;
};
struct course
{
unsigned int cid; /* 科目编号 */
char cname[20]; /* 科目名字*/
double score; /* 分数 */
};
struct student
{
char sno[9]; /* 身份编号 */
char name[10]; /* 姓名 */
char sex;
struct birthday birth;
struct course sc[8]; /* 人数 */
double cavg, cmax, cmin,sum;
};
void find(struct student stu[], int n);
double computerAvg(struct student stu, int n);
void printinfos(struct student stu);
void test(struct student stu[], int n, unsigned int cid, char cname[20]);
double maxavg(struct student *stu);
int main()
{
int i = 0, num = 0;
char sno[9];
double max = {0.0}, avg[8] = {0.0};
struct student stu[8] =
{
{"9527001", "张无忌", 1, {2000, 8, 18}, {{101, "Kung fu", 89}, {102, "EQ", 78}, {103, "Face Score", 76}}},
{"9527002", "韦小宝", 1, {2001, 6, 16}, {{101, "Kung fu", 64}, {102, "EQ", 73}, {103, "Face Score", 91}}},
{"9527003", "李寻欢", 1, {2002, 5, 20}, {{101, "Kung fu", 75}, {102, "EQ", 34}, {103, "Face Score", 61}}},
{"9527004", "李小龙", 1, {2003, 5, 21}, {{101, "Kung fu", 98}, {102, "EQ", 79}, {103, "Face Score", 95}}},
{"9527005", "小龙女", 0, {2000, 5, 19}, {{101, "Kung fu", 64}, {102, "EQ", 35}, {103, "Face Score", 100}}},
{"9527006", "乔峰", 1, {2008, 3, 27}, {{101, "Kung fu", 85}, {102, "EQ", 15}, {103, "Face Score", 35}}},
{"9527007", "欧阳锋", 1, {2004, 5, 13}, {{101, "Kung fu", 76}, {102, "EQ", 46}, {103, "Face Score", 84}}},
{"9527008", "郭靖", 1, {2001, 7, 30}, {{101, "Kung fu", 67}, {102, "EQ", 35}, {103, "Face Score", 61}}},
};
// 菜单
printf("a.查看学生全部信息 b.查看平均分最高的学生信息\n");
printf("c.查看课程挂科的学生 d.查看课程平均成绩\n");
printf("e.查看成绩前三和后五的学生信息\n");
char ch = getchar(); // 走一步就行了
switch (ch)
{
case 'a':
find(stu, 8);
break;
case 'b':
maxavg(stu);
break;
default:
break;
}
return 0;
}
void test(struct student stu[], int n, unsigned int cid, char cname[20])
{
}
void find(struct student stu[], int n)
{
char sno[9];
printf("please input the sno you want to check:");
scanf("%s", sno);
int i = 0, j;
while (i < n)
{
if (strcmp(stu[i].sno, sno) == 0)
{
printf("\n===================================\n");
printf("sno: %s\n", stu[i].sno);
printf("name: %s\n", stu[i].name);
if (1 == stu[i].sex)
printf("sex: 男\n");
else
printf("sex: 女\n");
printf("bir: %d-%d-%d\n", stu[i].birth.year,
stu[i].birth.month, stu[i].birth.day);
printf("score;");
for (j = 0; j < 3; j++)
printf("%-4.0f", stu[i].sc[j].score);
printf("\n==================================\n");
break;
}
else
{
i++;
}
}
if (i >= n)
printf("it can't find this item.\n");
}
double computerAvg(struct student stu, int n)
{
int i;
double sum = 0.0;
for (i = 0; i < n; i++)
{
sum += stu.sc[i].score;
}
return sum / n;
}
double maxavg(struct student *stu) /* 找最大的平均分 */
{
struct student temp;
int index;
int i,j;
stu[i].cavg = computerAvg(stu[i], 3); /* !!!!!!!!! */
for (i = 0; i < 8; i++) //排序算法
{
index=i;
for (j = i+1; j < 9; j++)
{
if (stu[j].cavg>stu[index].cavg)
{
index=j;
}
}
temp=stu[index];
stu[index]=stu[i];
stu[i]=temp;
}
printf("The Avg max is ");
printinfos(stu[0]);
printf("cavg:%lf",stu[0].cavg);
}
void printinfos(struct student stu)
{
printf("sno:%s", stu.sno);
printf("name:%s", stu.name);
}
#include <string.h>
struct birthday
{
int year;
int month;
int day;
};
struct course
{
unsigned int cid; /* 科目编号 */
char cname[20]; /* 科目名字*/
double score; /* 分数 */
};
struct student
{
char sno[9]; /* 身份编号 */
char name[10]; /* 姓名 */
char sex;
struct birthday birth;
struct course sc[8]; /* 人数 */
double cavg, cmax, cmin,sum;
};
void find(struct student stu[], int n);
double computerAvg(struct student stu, int n);
void printinfos(struct student stu);
void test(struct student stu[], int n, unsigned int cid, char cname[20]);
double maxavg(struct student *stu);
int main()
{
int i = 0, num = 0;
char sno[9];
double max = {0.0}, avg[8] = {0.0};
struct student stu[8] =
{
{"9527001", "张无忌", 1, {2000, 8, 18}, {{101, "Kung fu", 89}, {102, "EQ", 78}, {103, "Face Score", 76}}},
{"9527002", "韦小宝", 1, {2001, 6, 16}, {{101, "Kung fu", 64}, {102, "EQ", 73}, {103, "Face Score", 91}}},
{"9527003", "李寻欢", 1, {2002, 5, 20}, {{101, "Kung fu", 75}, {102, "EQ", 34}, {103, "Face Score", 61}}},
{"9527004", "李小龙", 1, {2003, 5, 21}, {{101, "Kung fu", 98}, {102, "EQ", 79}, {103, "Face Score", 95}}},
{"9527005", "小龙女", 0, {2000, 5, 19}, {{101, "Kung fu", 64}, {102, "EQ", 35}, {103, "Face Score", 100}}},
{"9527006", "乔峰", 1, {2008, 3, 27}, {{101, "Kung fu", 85}, {102, "EQ", 15}, {103, "Face Score", 35}}},
{"9527007", "欧阳锋", 1, {2004, 5, 13}, {{101, "Kung fu", 76}, {102, "EQ", 46}, {103, "Face Score", 84}}},
{"9527008", "郭靖", 1, {2001, 7, 30}, {{101, "Kung fu", 67}, {102, "EQ", 35}, {103, "Face Score", 61}}},
};
// 菜单
printf("a.查看学生全部信息 b.查看平均分最高的学生信息\n");
printf("c.查看课程挂科的学生 d.查看课程平均成绩\n");
printf("e.查看成绩前三和后五的学生信息\n");
char ch = getchar(); // 走一步就行了
switch (ch)
{
case 'a':
find(stu, 8);
break;
case 'b':
maxavg(stu);
break;
default:
break;
}
return 0;
}
void test(struct student stu[], int n, unsigned int cid, char cname[20])
{
}
void find(struct student stu[], int n)
{
char sno[9];
printf("please input the sno you want to check:");
scanf("%s", sno);
int i = 0, j;
while (i < n)
{
if (strcmp(stu[i].sno, sno) == 0)
{
printf("\n===================================\n");
printf("sno: %s\n", stu[i].sno);
printf("name: %s\n", stu[i].name);
if (1 == stu[i].sex)
printf("sex: 男\n");
else
printf("sex: 女\n");
printf("bir: %d-%d-%d\n", stu[i].birth.year,
stu[i].birth.month, stu[i].birth.day);
printf("score;");
for (j = 0; j < 3; j++)
printf("%-4.0f", stu[i].sc[j].score);
printf("\n==================================\n");
break;
}
else
{
i++;
}
}
if (i >= n)
printf("it can't find this item.\n");
}
double computerAvg(struct student stu, int n)
{
int i;
double sum = 0.0;
for (i = 0; i < n; i++)
{
sum += stu.sc[i].score;
}
return sum / n;
}
double maxavg(struct student *stu) /* 找最大的平均分 */
{
struct student temp;
int index;
int i,j;
stu[i].cavg = computerAvg(stu[i], 3); /* !!!!!!!!! */
for (i = 0; i < 8; i++) //排序算法
{
index=i;
for (j = i+1; j < 9; j++)
{
if (stu[j].cavg>stu[index].cavg)
{
index=j;
}
}
temp=stu[index];
stu[index]=stu[i];
stu[i]=temp;
}
printf("The Avg max is ");
printinfos(stu[0]);
printf("cavg:%lf",stu[0].cavg);
}
void printinfos(struct student stu)
{
printf("sno:%s", stu.sno);
printf("name:%s", stu.name);
}
其中排序算法在

double computerAvg(struct student stu, int n)
{
int i;
double sum = 0.0;
for (i = 0; i < n; i++)
{
sum += stu.sc[i].score;
}
return sum / n;
}
double maxavg(struct student *stu) /* 找最大的平均分 */
{
struct student temp;
int index;
int i=0,j;
stu[i].cavg = computerAvg(stu[i], 3); /* !!!!!!!!! */
for (i = 0; i < 8; i++) //冒泡排序算法
{
index=i;
for (j = i+1; j < 9; j++)
{
if (stu[j].cavg>stu[index].cavg)
{
index=j;
}
}
temp=stu[index];
stu[index]=stu[i];
stu[i]=temp;
}
printf("The Avg max is ");
printinfos(stu[0]);
printf("cavg:%lf",stu[0].cavg);
}
void printinfos(struct student stu)
{
printf("sno:%s", stu.sno);
printf("name:%s", stu.name);
}
{
int i;
double sum = 0.0;
for (i = 0; i < n; i++)
{
sum += stu.sc[i].score;
}
return sum / n;
}
double maxavg(struct student *stu) /* 找最大的平均分 */
{
struct student temp;
int index;
int i=0,j;
stu[i].cavg = computerAvg(stu[i], 3); /* !!!!!!!!! */
for (i = 0; i < 8; i++) //冒泡排序算法
{
index=i;
for (j = i+1; j < 9; j++)
{
if (stu[j].cavg>stu[index].cavg)
{
index=j;
}
}
temp=stu[index];
stu[index]=stu[i];
stu[i]=temp;
}
printf("The Avg max is ");
printinfos(stu[0]);
printf("cavg:%lf",stu[0].cavg);
}
void printinfos(struct student stu)
{
printf("sno:%s", stu.sno);
printf("name:%s", stu.name);
}
找了好久还是找不到问题,也不知道怎么修改。求大佬帮忙修改使输入b能输出平均分最高的学生信息。