每个学生的信息卡片包括学号、姓名和成绩三项。定义存储学生信息的单向链表的结点类型;编写函 数,由文件依次读入 n(n≥0)个学生的信息,创建一个用于管理学生信息的单向链表;编写函数,对 该链表进行整理,保证该单向链表的结点顺序满足学号从小到大的顺序。
2条回答 默认 最新
- threenewbee 2018-10-23 16:47关注
运行程序前,新建一个文本文件1.txt放在C盘下(或者修改下面的Read("c:\\1.txt", head);为你的文件名和路径)
文件内容:1,aaa,82 2,bbb,99 3,ccc,75 4,ddd,63 5,eee,78 6,fff,60 7,test,92.5
以下是程序,用VS2010编译
// Q703974.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct Student { char no[10]; char name[10]; double score; }; typedef struct Node { Node * next; Student * s; }; void Read(char * filename, Node * head) { FILE * fp; fp = fopen(filename, "r"); fseek(fp, 0, SEEK_END); long filesize = ftell(fp); rewind(fp); char * pBuff = (char *)malloc(sizeof(char) * filesize + 1); memset(pBuff, 0, filesize + 1); fread(pBuff, filesize, 1, fp); pBuff[filesize] = '\0'; int offset = 0; while (true) { Student * pstu = (Student *)malloc(sizeof(Student)); int n = sscanf(pBuff + offset, "%[^,],%[^,],%lf", pstu->no, pstu->name, &pstu->score); if (n != 3) break; Node * curr = head; while (true) { if (curr->next == NULL) { head->next = (Node *)malloc(sizeof(Node)); head->next->next = NULL; head->next->s = pstu; break; } else if (curr->next->s->score > pstu->score) { Node * t = (Node *)malloc(sizeof(Node)); t->next = curr->next; t->s = pstu; curr->next = t; break; } curr = curr->next; } while (pBuff[offset] != '\n' && pBuff[offset] != '\0') offset++; if (pBuff[offset - 1] == '\0') break; else offset++; } free(pBuff); fclose(fp); } int _tmain(int argc, _TCHAR* argv[]) { Node * head = (Node *)malloc(sizeof(Node)); head->next = NULL; Read("c:\\1.txt", head); while (head->next != NULL) { printf("%s\t%s\t%lf\n", head->next->s->no, head->next->s->name, head->next->s->score); head = head->next; } return 0; }
如果问题得到解决,麻烦点下采纳,采纳后额外赠送1000个C语言源代码(https://download.csdn.net/download/caozhy/9919273 )
之前看错了题目,一个小问题,是学号排序,不是成绩,只要改1行:
else if (curr->next->s->score > pstu->score)
修改为
lse if (strcmp(curr->next->s->no, pstu->no) > 0)本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1
悬赏问题
- ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
- ¥20 关于web前端如何播放二次加密m3u8视频的问题
- ¥15 使用百度地图api 位置函数报错?
- ¥15 metamask如何添加TRON自定义网络
- ¥66 关于川崎机器人调速问题
- ¥15 winFrom界面无法打开
- ¥30 crossover21 ARM64版本安装软件问题
- ¥15 mymetaobjecthandler没有进入
- ¥15 mmo能不能做客户端怪物
- ¥15 osm下载到arcgis出错