问答1 问答5 问答50 问答500 问答1000

几个数据结构的题目,成绩分析问题。谢谢1

提问网友 发布时间:2024-03-06 08:35
声明声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2024-04-29 18:41
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct student {
unsigned num; // 学号
char name[20];
double score[5]; // [0]:数学,[1]:英语,[2]:计算机,[3]:平均成绩,[4]:总成绩
struct student *next;
}*LinkList,*pNode,Node;

LinkList getEmptyList() {
LinkList head = (pNode)malloc(sizeof(Node));
head->num = 0;
head->name[0] = 0;
head->next = 0;
return head;
}

int insertNode(LinkList head,Node node) {
pNode p = head;
pNode newnode = (pNode)malloc(sizeof(Node));
*newnode = node;
while(p->next) {
if(p->next->num == node.num) {
printf("重复的学号:%u,操作失败!\n",node.num);
free(newnode);
return 0;
}
if(p->next->num > node.num) {
newnode->next = p->next;
p->next = newnode;
return 1;
}
else p = p->next;
}
p->next = newnode;
newnode->next = 0;
return 1;
}

int mysort(LinkList head,int index) {
pNode p,pt,q,qt;
if(index < 0 || index > 4) {
printf("0:按数学成绩排序。\n");
printf("1:按英语成绩排序。\n");
printf("2:按计算机成绩排序。\n");
printf("3:按平均成绩排序。\n");
printf("4:按总成绩排序。\n");
return 0;
}
for(p = head; p->next; p = p->next) {
qt = p;
q = p->next;
while(q->next) {
if(qt->next->score[index] < q->next->score[index])
qt = q;
q = q->next;
}
if(p != qt) {
pt = p->next;
p->next = qt->next;
qt->next = p->next->next;
p->next->next = pt;
}
}
return 1;
}

void show(LinkList head) {
int i;
pNode p = head->next;
while(p) {
printf("%u\t",p->num);
printf("%s\t",p->name);
for(i = 0; i < 5; ++i)
printf("%.2lf\t",p->score[i]);
printf("\n");
p = p->next;
}
}

int statist(LinkList head,int index) {
int score0_59 = 0,score60_69 = 0;
int score70_79 = 0,score80_89 = 0;
int score90_100 = 0,n = 0;
double t,max = 0,min = 100,total = 0;
pNode p = head->next;
if(index < 0 || index > 3) {
printf("0:统计数学成绩。\n");
printf("1:统计英语成绩。\n");
printf("2:统计计算机成绩。\n");
printf("3:统计平均成绩。\n");
return 0;
}
while(p) {
t = p->score[index];
if(t >= 90) ++score90_100;
else if(t >= 80) ++score80_89;
else if(t >= 70) ++score70_79;
else if(t >= 60) ++score60_69;
else ++score0_59;
if(t > max) max = t;
if(t < min) min = t;
total += t;
++n;
p = p->next;
}
if(score0_59)  printf(" 0 --  59: %d\n",score0_59); 
if(score60_69) printf("60 --  69: %d\n",score60_69);
if(score70_79) printf("70 --  79: %d\n",score70_79);
if(score80_89) printf("80 --  89: %d\n",score80_89);
if(score90_100) printf("90 -- 100: %d\n",score90_100);
if(n) printf("平均成绩:%.2lf\n",total/n);
return 1;
}

void readFile(LinkList head,char filename[]) {
int i;
Node node;
FILE *infp = fopen(filename,"rt");
if(infp == NULL) {
printf("打开文件 %s 时失败!\n",filename);
return;
}
while(fscanf(infp,"%u%s%",&node.num,node.name) == 2) {
node.score[4] = 0;
for(i = 0; i < 3; ++i) {
fscanf(infp,"%lf",&node.score[i]);
node.score[4] += node.score[i];
}
node.score[3] = node.score[4]/3;
insertNode(head,node);
}
fflush(infp);
fclose(infp);
}

void writeFile(LinkList head,char filename[]) {
int i;
pNode p = head->next;
FILE *outfp = fopen(filename,"wt");
if(outfp == NULL) {
printf("打开文件 %s 时失败!\n",filename);
return;
}
while(p) {
fprintf(outfp,"%u %s ",p->num,p->name);
for(i = 0; i < 5; ++i)
fprintf(outfp,".2lf ",p->score[i]);
fprintf(outfp,"\n");
p = p->next;
}
fclose(outfp);
}

void inputData(LinkList head) {
int i;
Node node;
printf("学号 姓名 英语 数学 计算机:\n");
scanf("%u%s",&node.num,node.name);
node.score[4] = 0;
for(i = 0; i < 3; ++i) {
scanf("%lf",&node.score[i]);
node.score[4] += node.score[i];
}
node.score[3] = node.score[4]/3;
insertNode(head,node);
}

int main() {
char inFilename[] = "input.dat";
char outFile[][60] = {"outFileMath.dat","outFileEnglish.dat",
"outFileComputer.dat","outFileAverage.dat","outFileTotal.dat"};
char command[20];
int op,index,save;
LinkList head = getEmptyList();
do {
printf("*********************************\n");
printf("*       考试成绩分析系统        *\n");
printf("*********************************\n");
printf("*        1、输入信息            *\n");
printf("*        2、显示信息            *\n");
printf("*        3、按课程成绩排序      *\n");
printf("*        4、信息分析            *\n");
printf("*        5、读数据文件          *\n");
printf("*                               *\n");
printf("*        0、推出分析系统        *\n");
printf("*********************************\n");
printf("\n请选择:");
fgets(command,20,stdin);
fflush(stdin);
op = command[0] - '0';
switch(op) {
case 1 : inputData(head); break;
case 2 : show(head); break;
case 3 : 
printf("0:按数学成绩排序\n");
printf("1:按英语成绩排序\n");
printf("2:按计算机成绩排序\n");
printf("3:按平均成绩排序\n");
printf("4:按总成绩排序\n");
printf("\n请输入相应编号:");
scanf("%d",&index);
fflush(stdin);
mysort(head,index);
printf("排序完毕,存盘否(1存,0不存):");
scanf("%d",&save);
fflush(stdin);
if(save == 1) writeFile(head,outFile[index]);
break;
case 4 : 
printf("0:数学成绩分析\n");
printf("1:英语成绩分析\n");
printf("2:计算机成绩分析\n");
printf("3:平均成绩分析\n");
printf("请输入相应编号:");
scanf("%d",&index);
fflush(stdin);
mysort(head,index);
statist(head,index);
break;
case 5 : readFile(head,inFilename); break;
case 0 : break;
default : printf("错误的选择。\n"); break;
}
}while(op);
printf("END!!!!\n");
return 0;
}

追问我要从文件中读数据怎么办呢

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

计算机科学的研究课题1 数据结构那些地方是难点。。3 数据结构主要学什么内容62 数据结构研究的三方面内容?它们有什么联系和区别6 粉笔刷题怎样选教师类 男生初中军训完可以留长头发吗 高中军训男生能留长发吗 如何自制水培蒜苗 广东省第一人民医院好不好?中山大学附属医院与广东省第一人民医院哪个医... 我四月买的牡丹花根能种活吗 泰安惠普家园属于哪个社区,结婚娃娃证怎么办 奔驰c200车窗户一键上升后自动降落 虹膜炎,眼压高可以洗澡吗 98千伏安需要多大电缆 18KVA用多大的线? 什么叫ABO设定中的成结? 远近闻名 词语 盘锦燕瑜伽乐园店怎么样?环境好吗? 打包APK到手机,打不开网络 鼠女虎男适合做夫妻吗 最近要学数据结构,目标的东北大学的研究生题目,这门课学习的时... 应用型本科数据结构教学改革科研课题怎么写 喝完酒可以吃甘草片不 想知道从牙克石到锡林浩特市坐什么车,怎么走最方便? 痘痘多可以用芦荟吗? ...只有短时间内有效,主机断电一夜之后,为什么bios密码就失效了?_百 ... 今天是阴天用五个W说英语 ...单位支付劳动者的工资不得低于当地最低工资标准。 洗涤棉衣棉裤可以用羽绒服模式吗? 洗黑棉布裤子能用羽绒衣洗剂吗 1万块你们觉得多不多 什么样的科普书籍适合7 岁孩子阅读? 平邑有哪些高中? 广东汕头大学校长工资多少?退休后工资? 为什么要鼓励多生育? ...是否日主无根不受印生?又,该取食制杀抑或印化杀? 不胜感激!_百度... 光圈值和曝光速度的关系 你女儿是我女儿的妈妈,问我是你的谁 数控车床m代码 通俗的解释一下,下面的意思。(10.3.2)?