2.建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。
⑴提示
采用动态分配内存,。由于结点结构中包含三个域,可以采用C语言中的结构体类型实现。
struct Node //定义一个节点结构体类型
{ long num;
char name[10];
float score;
struct Node *next;
};
⑵要求
在程序中定义了三个函数:
void init(); //初始化链表
void create(); //创建学生成绩信息链表
void disp(); //输出链表信息
定义一个查询函数void search(int number),其中,参数是学生的学号。如果链表中存在该学号的的结点,则显示此结点的数据,否则输出没有该学号的结点。
定义一个删除函数void del(int number),用于删除指定学号的结点。如果链表中存在该学号的的结点,则删除该结点,否则显示链表中没有该学号的结点。
3.有10名学生的数据(包括学号、姓名、和三门课程的成绩即,数学、语言、英语)编写程序,把这些学生的数据存放在文件“score.txt”中,然后在读取文件,把有不及格的学生数据存放到文件“bjg.txt”中,成绩都合格的学生数据存放到文件“jg.txt”中。然后再把文件中的信息分别显示在屏幕上。
⑴提示:先定义一个结构体类型
struct Node //定义一个节点结构体类型
{ long num;
char name[10];
float math;
float chinese;
float english;
};
⑵要求:在屏幕上显示及格“jg.txt”和不及格“bjg.txt”学生信息时要求有表头,格式如下:
成绩都合格的学生信息:
学号 姓名 数学 语文 英语
20083159 张三 67 89 90
20083170 李四 71 88 91
…………………………………………………………
成绩有不及格的学生信息:
学号 姓名 数学 语文 英语
20083134 王三 61 55 90
20083123 二马 50 84 71
…………………………………………………………
要求①用流程图表示出算法②代码编写(程序代码必须要有一定的注释)③运行结果的截图。
我回答第三题
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>//如果用链表的话申请空间要用这个头文件,本方法可以不用
#include <string.h>
#pragma warning(disable:4996)//该语句是屏蔽第4996号警告,可不要,
typedef struct Node
{
long num;
char name[10];
float math;
float chinese;
float english;
int flag;//判定是否及格,最好用bool型
}SCORE,*PSCORE;//对于本题可以不用定义结构体的
void main()
{
FILE* fp;
FILE* fp_write_jg;
FILE* fp_write_bjg;
char buf[1000];
int i=0;
int j=0;
int k=0;
SCORE score[10];//因为只有十个学生的成绩所以就直接定义了一个数组,否则的话可以定义链表
memset(buf,0x00,sizeof(buf));//buf初始化
for (;i<10;i++)//name初始化
{
memset(score[i].name,0x00,sizeof(score[i].name));
}
if ((fp=fopen("e:\\score.txt","r"))==NULL)//打开文件score.txt
{
printf("不能找到score.txt\n");
return;
}
if ((fp_write_jg=fopen("e:\\jg.txt","w+"))==NULL)
{
printf("不能打开jg.txt");
return;
}
if ((fp_write_bjg=fopen("e:\\bjg.txt","w+"))==NULL)
{
printf("不能打开bjg.txt");
return;
}
if (fgets(buf,1000,fp)==NULL)//读取文件score.txt中的内容
{
printf("打开文件score.txt出错\n");
return;
}
do //前几个while循环为读取文件中的数据,然后将它存储在结构体中
{
i=0;
while (buf[i]!=' ')
{
i++;
}
score[j].num=atol(buf);
while (buf[++i]!=' ')
{
score[j].name[k++]=buf[i];
}
score[j].math=(float)atof(&(buf[i]));
while (buf[++i]!=' ')
{
;
}
score[j].chinese=(float)atof(&(buf[i]));
while (buf[++i]!=' ')
{
;
}
score[j].english=(float)atof(&(buf[i]));
if (score[j].math<60||score[j].chinese<60||score[j].english<60)
{
score[j].flag=-1;//不及格
fputs(buf,fp_write_bjg);//将不及格的信息存储起来
}
else
{
score[j].flag=1;//及格
fputs(buf,fp_write_jg);//将及格的信息存储起来
}
k=0;
j++;
} while (fgets(buf,1000,fp));
//将信息输出
printf("成绩都合格的学生的信息:\n");
printf("学号\t\t姓名\t\t数学\t\t语文\t\t英语\n");
for (i=0;i<10;i++)
{
if (score[i].flag==1)
{
printf("%ld\t\t%s\t\t%f\t%f\t%f\n",score[i].num,score[i].name,
score[i].math,score[i].chinese,score[i].english);
}
}
printf("成绩都不合格的学生的信息:\n");
printf("学号\t\t姓名\t\t数学\t\t语文\t\t英语\n");
for (i=0;i<10;i++)
{
if (score[i].flag==-1)
{
printf("%ld\t\t%s\t\t%f\t%f\t%f\n",score[i].num,score[i].name,
score[i].math,score[i].chinese,score[i].english);
}
}
}