VC++程序设计1题,会的帮我,急啊

编程题:[题目]定义全班学生学习成绩的结构体数组,一个元素包括:姓名、学号、C++成绩、英语成绩、数学成绩和这三门功课的平均成绩(通过计算得到)。设计四个函数:全班成绩的... 编程题:
[题目] 定义全班学生学习成绩的结构体数组,一个元素包括:姓名、学号、C++成绩、英语成绩、数学成绩和这三门功课的平均成绩(通过计算得到)。设计四个函数:全班成绩的输入,求出每一个同学的平均成绩,按平均成绩的升序排序,输出全班成绩表。
struct score
{ char name[20];
long num;
double c:
double english;
double math;
double average;
}
展开
 我来答
英语一级
推荐于2016-01-29 · TA获得超过548个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:0
展开全部
#include "stdio.h"
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
int number;
char name[10];
float yuwen;
float yingyu;
float shuxue;
float aver;
struct student *next;
};
typedef struct student node;
typedef node *link;
int n;
/*建立菜单*/
void menu(void)
{printf("---------------主菜单---------------\n");
printf("-------输入'1',输入学生成绩---------\n");
printf("-------输入'2',查询学生成绩---------\n");
printf("-------输入'3',修改学生成绩---------\n");
printf("-------输入'4',添加学生成绩---------\n");
printf("-------输入'5',删除学生成绩---------\n");
printf("-------输入'6',按照平均分排序-------\n");
printf("-------输入'7',显示学生成绩---------\n");
printf("-------输入'8',显示全班总平均分-----\n");
printf("-------输入'9',退出-----------------\n");
}

/*建立数据信息即链表*/
link creat(void)
{
link head,p1,p2;
head=NULL;
n=0;
p1=p2=(link)malloc(sizeof(node));
printf("请输入学号,输入'0'结束:\n");
scanf("%d",&p1->number);
while(p1->number)
{
printf("姓名:");
scanf("%s",p1->name);
printf("语文成绩:");
scanf("%f",&p1->yuwen);
printf("英语成绩:");
scanf("%f",&p1->yingyu);
printf("数学成绩:");
scanf("%f",&p1->shuxue);
p1->aver=(p1->yuwen+p1->yingyu+p1->shuxue)/3;
n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(link)malloc(sizeof(node));
printf("请输入学号,输入'0'结束:\n");
scanf("%d",&p1->number);
}
p2->next=NULL;
return(head);
}

/*查找并显示信息按照学号*/
void find(link head)
{
link p;
int number;
int flag=1;
char c;
if(head==NULL)printf("信息系统为空!无法查询!!!按任意键回到主菜单!\n");
else
{
while(flag)
{
printf("请输入要查询学生的学号: ");
scanf("%d",&number);
getchar();
p=head;
while(p!=NULL)
{
if(p->number==number)
{
printf("要查找的学号为%d的学生信息如下:\n",number);
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
break;
}
else p=p->next;
}
if(p==NULL)printf("学号为%d的学生不存在!\n",number);
printf("是否继续查询?(y/n) ");
scanf("%c",&c);
getchar();
if(c=='n'||c=='N')
{
flag=0;
printf("按任意键回到主菜单!\n");
}
}
}
}

/*修改学生成绩信息*/
void modi(link head)
{
link p;
int number;
int tnumber;
char tname[10];
float tyuwen,tyingyu,tshuxue,taver;
int flag=1;
char c;
if(head==NULL)printf("学生成绩系统为空!无法修改!!!按任意键回到主菜单!\n");
else
{
while(flag)
{
printf("请输入要修改的学生学号: ");
scanf("%d",&number);
getchar();
p=head;
while(p!=NULL)
{
if(p->number==number)
{
printf("学号: ");
scanf("%d",&tnumber);
printf("姓名:");
scanf("%s",tname);
printf("语文成绩:");
scanf("%f",&tyuwen);
printf("英语成绩:");
scanf("%f",&tyingyu);
printf("数学成绩:");
scanf("%f",&tshuxue);
getchar();
taver=(tyuwen+tyingyu+tshuxue)/3;
printf("是否保存?(y/n) ");
scanf("%c",&c);
getchar();
if(c=='y'||c=='Y')
{
p->number=tnumber;
strcpy(p->name,tname);
p->yuwen=tyuwen;
p->yingyu=tyingyu;
p->shuxue=tshuxue;
p->aver=taver;
printf("保存成功!\n");
}
break;
}
else p=p->next;
}
if(p==NULL)printf("学号为%d的学生成绩信息不存在!!!\n",number);
printf("是否继续修改?(y/n) ");
scanf("%c",&c);
getchar();
if(c=='n'||c=='N')
{
flag=0;
printf("按任意键回到主菜单!\n");
}
}
}
}

/*插入学生信息*/
link insert(link head)
{
link p,p1;
int flag=1;
char c;
while(flag)
{
p=(link)malloc(sizeof(node));
printf("输入学号: ");
scanf("%d",&p->number);
printf("姓名:");
scanf("%s",p->name);
printf("语文成绩:");
scanf("%f",&p->yuwen);
printf("英语成绩:");
scanf("%f",&p->yingyu);
printf("数学成绩:");
scanf("%f",&p->shuxue);
getchar();
p->aver=(p->yuwen+p->yingyu+p->shuxue)/3;
if(head==NULL)head=p;
else
{
p1=head;
while(p1->next!=NULL)p1=p1->next;
p1->next=p;
}
p->next=NULL;
n++;
printf("插入学生信息如下:\n");
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
printf("是否继续插入?(y/n) ");
scanf("%c",&c);
getchar();
if(c=='n'||c=='N')
{
flag=0;
printf("按任意键回到主菜单!\n");
}
}
return(head);
}

/*删除学生信息*/
link del(link head)
{
link p,p2;
int flag=1;
int number;
char c;
if(head==NULL)printf("信息系统为空!无法删除!!!按任意键回到主菜单!\n");
else
{
while(flag)
{
printf("输入要删除的学生学号: ");
scanf("%d",&number);
getchar();
p2=p=head;
while(p!=NULL)
{
if(p->number==number)
{
printf("要删除的学号为%d的学生信息如下:\n",number);
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
printf("是否确定删除?(y/n) ");
scanf("%c",&c);
getchar();
if(c=='y'||c=='Y')
{
if(p==head)head=p->next;
else p2->next=p->next;
n--;
printf("删除成功!!\n");
}
break;
}
else
{
p2=p;
p=p->next;
}
}
if(p==NULL)printf("学号为%d的学生信息不存在!!!\n",number);
if(head==NULL)
{
printf("信息系统为空,无法继续删除!\n");
getchar();
break;
}
printf("是否继续删除?(y/n )");
scanf("%c",&c);
getchar();
if(c=='n'||c=='N')flag=0;
printf("按任意键回到主菜单!\n");
}
}
return(head);
}

/*输出学生成绩信息*/
void print(link head)
{
link p;
if(head==NULL)printf("信息系统为空!!!按任意键回到主菜单!\n");
else
{
printf("一共有%d个学生的信息:\n",n);
p=head;
while(p)
{
printf("%-5d%-10s%-7.2f%-7.2f%-7.2f%-7.2f\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,p->aver);
p=p->next;
}
printf("按任意键回到主菜单!\n");
}
}

/*用选择法排序*/
link sort(link head)
{
link beforep,p,p1,k,beforek,temp;
if(head==NULL)printf("信息系统为空!!!按任意键回到主菜单!\n");
else
{p=head;
while(p->next!=NULL)
{
k=p;
p1=p->next;
while(p1!=NULL)
{
if(k->aver<p1->aver)k=p1;
p1=p1->next;
}
if(k!=p)
{
beforek=head;
while(beforek->next!=k)beforek=beforek->next;
if(p==head)head=k;
else beforep->next=k;
beforek->next=p;
temp=k->next;
k->next=p->next;
p->next=temp;
p=k;
}
beforep=p;
p=p->next;
}
printf("排序成功,按任意键回到主菜单!\n");
}
return(head);
}

/*求全班总平均分并显示*/
void average(link head)
{
float toaver,sum=0;
int num=0;
link p;
if(head==NULL)printf("信息系统为空!!!按任意键回到主菜单!\n");
else
{
p=head;
while(p!=NULL)
{
sum+=p->aver;
num++;
p=p->next;
}
toaver=sum/num;
printf("全班总平均分是:%7.2f\n",toaver);
printf("按任意键回到主菜单!\n");
}
}

void main()
{
int k;
int flag=1;
link head=NULL;
while(1)
{
menu();
flag=1;
while(flag)
{
printf("请输入:(1~9) ");;
scanf("%d",&k);
getchar();
if(k>=1&&k<=9)flag=0;
else printf("输入错误!\n");
}
switch(k)
{
case 1:head=creat();break;
case 2:find(head);break;
case 3:modi(head);break;
case 4:head=insert(head);break;
case 5:head=del(head);break;
case 6:head=sort(head);break;
case 7:print(head);break;
case 8:average(head);break;
case 9:return;
}
getch();
}
}

自己再改改 这是之前做的作业
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式