一到c语言练习题,求高手来指教。 20

问题描述:用C语言编写一个程序实现学员成绩管理,每个学员包括3门课的成绩,从键盘输入学员信息,包括学号、姓名、三门课成绩,计算出学员的平均成绩,按照学员平均成绩由大到小排... 问题描述:
用C语言编写一个程序实现学员成绩管理,每个学员包括3门课的成绩,从键盘输入学员信息,包括学号、姓名、三门课成绩,计算出学员的平均成绩,按照学员平均成绩由大到小排序(共十个学员)
插入功能:在排序后的学员成绩表中插入一个学员的信息,要求插入后仍然保持成绩表有序
删除功能:要求输入指定的学号,从学员信息表中删除该学员,删除后的成绩表保持有序
1、问题分析:
使用数组保存每个学员的信息,包括学号、姓名、三门课的成绩、平均成绩
需要实现以下函数:
单个学员信息的录入;
显示学员信息;
排序:按照平均成绩由大到小
插入:插入后保持有序
删除:删除后保持有序
在主函数中调用以上函数,分别完成录入、排序、插入和删除功能,并显示排序前后的学员信息,以及插入删除后的学员信息

2、难点分析
(1)单个学员信息的录入函数
(2)在主函数中调用“单个学员信息录入”函数
(3)编写显示学员信息的函数
由于需要多次显示学员信息,所以将显示学员信息的功能编写为函数;
考虑函数的参数及返回值;
通过循环依次输出学员信息;
注意控制输出的格式,使得输出的信息整齐;
(4)实现插入和删除功能
编写插入函数
考虑函数参数及返回值;
调用“单个学员信息录入”函数录入要插入的学员信息;
按照平均成绩的大小插入到学员信息数组中(找到合适的位置、移动数组元素、插入);
编写删除函数
考虑函数参数及返回值
要求用户输入要删除的学员的学号
在学员信息数组中找到该学员,然后通过将后面的元素前移达到删除该学员信息的目的
在主函数中调用插入和删除函数

求解求解,谢谢大家了。
展开
 我来答
雁陆
2010-10-29 · 超过10用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
#include"stdio.h"
int main(){
struct student{
char* id;
char* name;
int s1,s2,s3;
};
struct student a[10],t;
int i,s[10],k;
printf("请输入10个学生数据:");
for(i=0;i<10;i++)
scanf("%s%s%d%d%d",a[i].id,a[i].name,a[i].s1,a[i].s2,a[i].s3);
for(i=0;i<10;i++)
s[i]=(a[i].s1+a[i].s1+a[i].s1)/3;
for(i=0;i<10;i++){
if(s[i]<s[i+1])
t=a[i];a[i]=a[i+1];a[i+1]=t;
k=s[i];s[i]=s[i+1];s[i+1]=k;
}
for(i=0;i<10;i++)
printf("%s\t%s\t%d\t%d\t%d\t%.2f\n",a[i].id,a[i].name,a[i].s1,a[i].s2,a[i].s3,s[i]);
}
匿名用户
2010-11-04
展开全部
#include <iostream>
#include <string>
using namespace std;

class STUDENT
{
public:
friend int input(string &,string &,double *);
friend int sort();
friend int insert(string &,string &,double *);
friend int cancel(string &);
friend int display();
STUDENT();
private:
string ID;
string name;
double score[3];
double aver_score;
};

STUDENT student[20];

int input(string &id,string &na,double *s)
{
int i;
for(i=0;i<=19;i++)
if(student[i].ID=="0")
{
student[i].ID=id;
student[i].name=na;
student[i].score[0]=s[0];
student[i].score[1]=s[1];
student[i].score[2]=s[2];
student[i].aver_score=(s[0]+s[1]+s[2])/3.0;
return 0;
}

return -1;
}

int sort()
{
int i,j;
double t;
for(i=0;i<=18;i++)
for(j=i+1;j<=19;j++)
if(student[i].aver_score<student[j].aver_score)
{
t=student[i].aver_score;
student[i].aver_score=student[j].aver_score;
student[j].aver_score=t;
}
return 0;
}

int insert(string &id,string &na,double *s)
{
int i,j;
STUDENT t,u;
double aver;
aver=(s[0]+s[1]+s[2])/3.0;
for(i=0;i<=18;i++)
if(student[i].aver_score<aver)
break;
t=student[i];

student[i].ID=id;
student[i].name=na;
student[i].score[0]=s[0];
student[i].score[1]=s[1];
student[i].score[2]=s[2];
student[i].aver_score=aver;
for(j=i+1;j<=18;j++)
{
u=student[j];
student[j]=t;
t=u;
}
return 0;
}

int cancel(string &id)
{int i,j;
for(i=0;i<=19;i++)
if(student[i].ID==id)
break;
if(i>=20)
return -1;
else
{
for(j=i+1;j<=19;j++)
{if(student[j].ID!="0")
student[j-1]=student[j];
else
break;
}
student[j-1].ID="0";
return 0;
}

}

int display()
{
int i;
cout<<" "<<"学号 "<<"姓名 "<<"成绩1 "<<"成绩2 "<<"成绩3 "<<"平均成绩 "<<endl;
for(i=0;i<=19;i++)
{
if(student[i].ID!="0")
cout<<i<<" "<<student[i].ID<<" "<<student[i].name<<" "<<student[i].score[0]<<" "<<student[i].score[1]<<" "<<student[i].score[2]<<" "<<student[i].aver_score<<endl;
}
return 0;
}

STUDENT::STUDENT()
{
ID="0";
aver_score=0;
}

int main()
{
int i,flag;
string id,na;
double s[3];
cout<<"欢迎你来到本系统,输入学生数据请按1,成绩排序请按2,插入学生数据请按3,删除学生数据请按4,显示学生数据请按5,退出请按6"<<endl;
for(i=0;;i++)
{cout<<"请输入操作码"<<endl;
cin>>flag;
switch (flag)
{
case 1:{cout<<"请输入学生的学号,姓名,3门成绩"<<endl;
cin>>id>>na>>s[0]>>s[1]>>s[2];
input(id,na,s);
break;}
case 2:{sort();break;}
case 3:{cout<<"请要插入学生的学号,姓名以及3门成绩"<<endl;
cin>>id>>na>>s[0]>>s[1]>>s[2];
insert(id,na,s);
break;}
case 4:{cout<<"请输入要删除的学号"<<endl;
cin>>id;
cancel(id);
break;}
case 5:{display();break;}
case 6:return 0;
default:{cout<<"你的输入有误,请重新输入"<<endl;
break;}
}
}

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-10-24
展开全部
太简单了!都不想写!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式