
本人大一新生,现跪求一份c++程序设计题,要符合本人大一新生的能力,谢谢 25
.编写程序处理若干个学生的信息,每个学生的信息包括:学号、姓名、三门成绩及平均分。要求从键盘输入的学生数据用一个函数实现,并存入文件,用一个函数打开此文件后,求出各位同学...
.编写程序处理若干个学生的信息,每个学生的信息包括:学号、姓名、三门成绩及平均分。要求从键盘输入的学生数据用一个函数实现,并存入文件,用一个函数打开此文件后,求出各位同学的平均分,输出函数可以输出所有同学的成绩表(包括每个学生的学号、姓名、三门成绩及平均分数)也可以输出平均分在前3名的学生姓名及平均分。主函数可以方便地调用以上函数。
没有学单链表,大一上学期啊 展开
没有学单链表,大一上学期啊 展开
2个回答
展开全部
#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;
}
我也大一的 你们学链表了么?这是我用单链表做的
#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;
}
我也大一的 你们学链表了么?这是我用单链表做的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询