7-1 实验二 (100 分)
设计一种结构体,用来保存学生信息。假定学生的总人数不超过100人。学生的信息包括学号(<10000的整数)、姓名(长度不超过19的字符串)、三科成绩(整数)以及综合成绩(实数)。除综合成绩外,各项数据均由键盘输入。综合成绩在计算前,其值为0。现在要求实现如下几种功能,分别有对应的操作方式: 1)输入若干学生的信息。 对应的操作为: 在第一行中输入1和整数N,N代表要输入的学生人数。其后是N行数据,每行数据代表一个学生的信息。
2)计算所有学生的综合成绩,综合成绩 = 第1科成绩 * r1 + 第2科成绩 * r2 + 第3科成绩 * r3。 对应的操作为: 在一行中输入2和三个实数r1、r2、r3,其中r1、r2和r3代表计算综合成绩时的加权系数,输入保证时r1 + r2 + r3 = 1.0。 3)插入学生信息; 对应的操作为: 在第一行中输入3和整数N,N表示要将新输入的学生信息插入到原来的第N个学生前面。如果N大于当前学生人数,则插入到最后面。 第二行数据代表要插入的一个学生的信息。 4)删除学生; 对应的操作为: 在第一行中输入4和整数N,N表示将要删除的学生的序号(从1开始)。如果N大于当前的学生人数,则不会删去学生信息。 5)查询学生; 对应的操作为: 在第一行中输入5和学生的学号,如果能查询到对应的学生,则在一行中显示学生的信息,如果查询不到,则显示“Not Found.”。 还有一种查询方式为按姓名查询,操作如下: 在第一行中输入6和学生的姓名,如果能查询到对应的学生,则在一行中显示学生的信息,如果查询不到,则显示“Not Found.”。 6)显示学生信息。 对应的操作为: 在第一行中输入7,会显示所有学生的信息,每位学生的信息占一行。 7)退出系统 对应的操作为: 在第一行中输入0。
输入格式:
按上述要求输入信息。
输出格式:
按上述要求输出信息,同一行的各项信息间用一个空格分隔,综合成绩保留两位小数。并在最后输出一个空行。
输入样例:
1 4
2001 Wang 90 85 75
2003 Li 78 69 86
2008 Zhao 85 74 90
2010 Liu 85 72 85
7
2 0.2 0.35 0.45
7
6 Li
5 2002
3 3
2005 Bai 80 76 80
7
2 0.5 0.5 0.0
7
4 1
7
0
结尾无空行
输出样例:
学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:0.00
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:0.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:0.00
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:0.00
学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:81.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:78.45
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:83.40
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:80.45
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:78.45
Not Found.
学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:81.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:78.45
学号:2005 姓名:Bai 成绩1:80 成绩2:76 成绩3:80 综合成绩:0.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:83.40
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:80.45
学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:87.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:73.50
学号:2005 姓名:Bai 成绩1:80 成绩2:76 成绩3:80 综合成绩:78.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:79.50
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:78.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:73.50
学号:2005 姓名:Bai 成绩1:80 成绩2:76 成绩3:80 综合成绩:78.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:79.50
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:78.50
如下:
#include <stdio.h>
struct Student
{
int id;
char name[20];
int score[3];
double zh;
};
//输入
void input(struct Student stu[],int n)
{
int i;
for (i=0;i<n;i++)
{
scanf("%d %s %d %d %d",&stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
}
//综合
void zh(struct Student stu[],int n,double r1,double r2,double r3)
{
int i;
for (i=0;i<n;i++)
{
stu[i].zh = r1 * stu[i].score[0] + r2 * stu[i].score[1] + r3 * stu[i].score[2];
}
}
//插入
void insert(struct Student stu[],int pos,int *n,double r1,double r2,double r3)
{
int j;
if(pos > *n)
{
scanf("%d %s %d %d %d",&stu[*n].id,stu[*n].name,&stu[*n].score[0],&stu[*n].score[1],&stu[*n].score[2]);
stu[*n].zh = r1 * stu[*n].score[0] + r2 * stu[*n].score[1] + r3*stu[*n].score[2];
}else
{
for (j = *n;j>=pos;j--)
{
stu[j] = stu[j-1];
}
scanf("%d %s %d %d %d",&stu[pos-1].id,stu[pos-1].name,&stu[pos-1].score[0],&stu[pos-1].score[1],&stu[pos-1].score[2]);
stu[pos-1].zh = r1 * stu[pos-1].score[0] + r2 * stu[pos-1].score[1] + r3*stu[pos-1].score[2];
}
*n = *n + 1;
}
//查询
void find(struct Student stu[],int n,int id)
{
int i;
for(i=0;i<n;i++)
{
if(id == stu[i].id)
{
printf("%d %s %d %d %d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
break;
}
}
if(i==n)
printf("Not Found.\n");
}
//显示所有
void showall(struct Student stu[],int n)
{
int i=0;
for (i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
int main()
{
int op,n,pos,id;
struct Student stu[1000];
double r1,r2,r3;
//输入
scanf("%d %d",&op,&n);
input(stu,n);
//计算综合
scanf("%d %lf %lf %lf",&op,&r1,&r2,&r3);
zh(stu,n,r1,r2,r3);
//插入
scanf("%d %d",&op,&pos);
insert(stu,pos,&n,r1,r2,r3);
//查询
scanf("%d %d",&op,&id);
find(stu,n,id);
//显示所有学生信息
showall(stu,n);
//退出
scanf("%d %d",&op,&pos);
return 0;
}
作业就别发了
亲爱的提问者您好,我们很乐意您能在CSDN解决编程过程中遇到的问题,
但是问答频道谢绝一切直接提问作业、索要代码的行为,在此对您发出正式警告。
我们希望您在思考、实践后,提出具体的问题,而是直接提出作业问题。
CSDN也鼓励用户通过举报功能来对这些行为进行监督反馈,共建问答频道良好的风气。