本人大一新生,现跪求一份c++程序设计题,要符合本人大一新生的能力,谢谢 25

.编写程序处理若干个学生的信息,每个学生的信息包括:学号、姓名、三门成绩及平均分。要求从键盘输入的学生数据用一个函数实现,并存入文件,用一个函数打开此文件后,求出各位同学... .编写程序处理若干个学生的信息,每个学生的信息包括:学号、姓名、三门成绩及平均分。要求从键盘输入的学生数据用一个函数实现,并存入文件,用一个函数打开此文件后,求出各位同学的平均分,输出函数可以输出所有同学的成绩表(包括每个学生的学号、姓名、三门成绩及平均分数)也可以输出平均分在前3名的学生姓名及平均分。主函数可以方便地调用以上函数。
没有学单链表,大一上学期啊
展开
 我来答
百度网友73be8e525
2010-12-31 · 超过26用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:56.9万
展开全部
#define len sizeof(struct student)
#define NL putchar('\n');
#define RCNUM strcmp(p->cnum,q->cnum)<0
#define RSCO p->fscore[5]<q->fscore[5]
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
extern int ncount=0;
struct student *phead;
struct student {
char cnum[9];
float fscore[6];
struct student* next,*former;
};
struct student *create() {
struct student *phead=NULL,*pnew,*ptail;
int i;
while(1) {
pnew=(struct student *)malloc(len);
if(pnew==NULL) {printf("no mem");return NULL;}
printf("input number\n");
scanf("%8s",pnew->cnum);
if(strcmp(pnew->cnum,"0")==0) {free(pnew);break;}
printf("input scores\n");
for(pnew->fscore[5]=0.0,i=0;i<5;i++) {
scanf("%f",&pnew->fscore[i]);
pnew->fscore[5]+=pnew->fscore[i];
}
ncount++;
pnew->next=NULL;
if(ncount==1) {phead=pnew;pnew->former=NULL;}
else {ptail->next=pnew;pnew->former=ptail;}
ptail=pnew;
}
return phead;
}
void display(struct student *phead) {
struct student *p;
p=phead;
if(p==NULL) {printf("没数据\n");return;}
printf("number\t\tscore\n");
while(p!=NULL) {
printf("%s\t",p->cnum);
for(int i=0;i<6;i++)
printf("%.1f ",p->fscore[i]);
putchar('\n');
p=p->next;
}
}
void menu() {
printf("----------------\n");
printf("0 退出\n");
printf("1 查询全部及格的\n");
printf("2 按学号查询\n");
printf("3 按总分排序\n");
printf("4 按学号排序\n");
printf("5 统计\n");
printf("6 删除\n");
printf("7 显示\n");
printf("----------------\n");
}
struct student *numsearch(char *cnumber,struct student *phead) {
struct student *p;
p=phead;
while(p!=NULL) {
if(strcmp(p->cnum,cnumber)==0) break;
p=p->next;
}
return p;
}
struct student* del(char *cnumber,struct student *phead) {
struct student *p,*delnode;
p=phead;
delnode=p;
if(p==NULL) printf("empty data\n");
else {
if(strcmp(phead->cnum,cnumber)==0) {
phead=p->next;
printf("%s",phead->cnum);
free(p);
}
else {
while(delnode!=NULL&&strcmp(delnode->cnum,cnumber)!=0) {p=delnode;delnode=delnode->next;}
if(delnode==NULL) printf("no such cnum\n");
else {p->next=delnode->next;free(delnode);}
}
}
return phead;
}
char *ask(char s[9]) {
printf("input cnum:\n");
scanf("%8s",s);
return s;
}
void passsearch(struct student *phead) {
struct student *p=phead;
while(p!=NULL) {
for(int i=0;i<5;i++) {if(p->fscore[i]<60) goto nextstu;}
printf("%s\t",p->cnum);
goto nextstu;
nextstu: p=p->next;
}
}
void tongji(struct student *phead) {
int ngrade[5][4]={0};
float fsum[5]={0};
for(struct student *p=phead;p!=NULL;p=p->next) {
for(int i=0;i<5;i++) {
fsum[i]+=p->fscore[i];
++ngrade[i][p->fscore[i]>=85?0:p->fscore[i]>=75?1:p->fscore[i]>=60?2:3];
}
}
for(int i=0;i<5;i++) {
printf("subject %d average %.1f\n",i+1,fsum[i]/ncount);
for(int j=0;j<4;j++)
printf("%c %d\t",j==0?65:j==1?66:j==2?67:68,ngrade[i][j]);
putchar('\n');
}
}
struct student *ranksco(struct student *phead) {
struct student *p,*q,*former;
int j;
for(int i=1;i<ncount;i++) {
for(p=phead,q=p->next,j=1;j<=ncount-i;j++) {
if(j==1) {
if(p->fscore[5]<q->fscore[5]) {phead=q;p->next=q->next;q->next=p;q=p->next;}
else {p=q;q=q->next;}
former=phead;
}
else {
if(p->fscore[5]<q->fscore[5]) {former->next=q;struct student *t=q->next;q->next=p;p->next=t;former=q;q=p->next;}
else {p=q;q=q->next;former=former->next;}
}
}
}
return phead;
}
struct student *rankcnum(struct student *phead) {
struct student *p,*q,*former;
int j;
for(int i=1;i<ncount;i++) {
for(p=phead,q=p->next,j=1;j<=ncount-i;j++) {
if(j==1) {
if(strcmp(p->cnum,q->cnum)<0) {phead=q;p->next=q->next;q->next=p;q=p->next;}
else {p=q;q=q->next;}
former=phead;
}
else {
if(strcmp(p->cnum,q->cnum)<0) {former->next=q;struct student *t=q->next;q->next=p;p->next=t;former=q;q=p->next;}
else {p=q;q=q->next;former=former->next;}
}
}
}
return phead;
}
int main() {
char cnumin[9]={'\0'};
int nchoice;
phead=create();
do {
menu();
printf("你的选择是:");
scanf("%d",&nchoice);
NL
switch(nchoice) {
case 0:break;
case 1:{passsearch(phead);NL break;}
case 2:{printf("输出某人总分 %.1f\n",numsearch(ask(cnumin),phead)->fscore[5]); NL break;}
case 3:{phead=ranksco(phead);break;}
case 4:{phead=rankcnum(phead);break;}
case 5:{tongji(phead);NL break;}
case 6:{phead=del(ask(cnumin),phead);break;}
case 7:{display(phead);NL break;}
}
}while(nchoice);
printf("\nmerry christmas\n");
return 0;
}
我也大一的 你们学链表了么?这是我用单链表做的
wangbinwh
2010-12-31 · TA获得超过640个赞
知道大有可为答主
回答量:1367
采纳率:100%
帮助的人:588万
展开全部
我资料里有联系方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式