您的位置:首页 > 编程语言

11-21日代码 文件的存取,链表的使用

2013-11-25 08:37 330 查看
作业1:

用户从控制台输入一篇文章,输入完成以后,

将文章保存到桌面,文件名由用户输入。

判读文章中一共有多少个单词?

char txt[2000];

hello lili,hello hameimei,nice to meet you.

hello nice to meet you too.

作业2:

实现学生信息的结构体定义

姓名

学号

年龄

成绩

定义10名学生的信息,通过控制台录入这10名学生信息,求这10名学生中的

最高分的姓名和分数,(提示:结构指针)

最低分的姓名和分数,

平均分。

作业3:

实现学生信息的文件保存和读取。

作业4:

思考:如何实现学生信息录入的动态长度控制?

提示:使用链表,动态分配空间

Student * p1;

p1=malloc(sizeof(Student));

p1->age=10;

struct Node{

Student stu;

Node * next;

}

代码:

1、用户从控制台输入一篇文章,输入完成以后,

将文章保存到桌面,文件名由用户输入。

判读文章中一共有多少个单词?

#include <stdio.h>

#include <string.h>

int main(int argc, const char * argv[])

{ char text[2000];

char name[20];

char path[100];

printf("请输入内容\n");

gets(text);

printf("请输入文件名\n");

scanf("%s",name);

strcpy(path,"C:\\Users\\Administrator\\Desktop\\");

strcat(name,".txt");

strcat(path,name);

//保存到文件

FILE * fp;

if((fp=fopen(path,"w"))==NULL)

{

printf("无法读取文件");

return 0;

}

fprintf(fp,"%s\n",text);

fclose(fp);

printf("文件已成功写入");

return 0;

}

2、实现学生信息的结构体定义

姓名

学号

年龄

成绩

定义10名学生的信息,通过控制台录入这10名学生信息,求这10名学生中的

最高分的姓名和分数,(提示:结构指针)

最低分的姓名和分数,

平均分。

#include <stdio.h>

#include <stdlib.h>

#define NUM 10

typedef struct _Student{

char name[10];

int age;

int number;

int score;

}Student;

int main(int argc, const char * argv[])

{ Student stus[NUM];

//输入学生信息

printf("请输入学生信息!\n");

for(int i=0;i<NUM;i++)

{ printf("请输入第%d个学生信息,格式:姓名 学号 年龄 成绩\n",i+1);

scanf("%s %d %d %d",stus[i].name,&stus[i].number,&stus[i].age,&stus[i].score);

}

//输出学生信息

printf("学生信息:\n姓名 学号 年龄 成绩\n");

for(i=0;i<NUM;i++)

printf("%s %d %d %d\n",stus[i].name,stus[i].number,stus[i].age,stus[i].score);

//最高分,最低分,平均分

typedef Student *StuPointer;

StuPointer smax,smin;

smax=(StuPointer)malloc(sizeof(Student));

smin=(StuPointer)malloc(sizeof(Student));

*smax=stus[0];

*smin=stus[0];

int sum=stus[0].score;

float ave;

for(i=1;i<NUM;i++)

{

if((*smax).score < stus[i].score)

*smax=stus[i];

if((*smin).score >stus[i].score)

*smin=stus[i];

sum=sum+stus[i].score;

}

ave=(float)sum/(float)NUM;

printf("\n最高分的姓名和分数为:%s %d\n",(*smax).name,(*smax).score);

printf("\n最低分的姓名和分数为:%s %d\n",(*smin).name,(*smin).score);

printf("\n平均分为:%f\n",ave);

return 0;

}

作业3:

实现学生信息的文件保存和读取。

保存:#include <stdio.h>

#include <stdlib.h>

#define NUM 3

typedef struct _Student{

char name[10];

int age;

int number;

int score;

}Student;

int main(int argc, const char * argv[])

{ Student stus[NUM];

//输入学生信息

printf("请输入学生信息!\n");

for(int i=0;i<NUM;i++)

{ printf("请输入第%d个学生信息,格式:姓名 学号 年龄 成绩\n",i+1);

scanf("%s %d %d %d",stus[i].name,&stus[i].number,&stus[i].age,&stus[i].score);

}

//输出学生信息

printf("学生信息:\n姓名 学号 年龄 成绩\n");

for(i=0;i<NUM;i++)

printf("%s %d %d %d\n",stus[i].name,stus[i].number,stus[i].age,stus[i].score);

//写入文件

FILE * fp;

if((fp=fopen("C:\\Users\\Administrator\\Desktop\\stu.txt", "w"))==NULL)

{

printf("打开文件失败!\n");

return 0;

}

for(i=0;i<NUM;i++)

{

fprintf(fp,"%s %d %d %d\n"

,stus[i].name,stus[i].number,stus[i].age,stus[i].score);

}

printf("写入文件成功!\n");

fclose(fp);

return 0;

}

读取:

#include <stdio.h>

#include <stdlib.h>

#define NUM 3

typedef struct _Student{

char name[10];

int age;

int number;

int score;

}Student;

int main(int argc, const char * argv[])

{ Student stus[NUM];

FILE * fp;

if((fp=fopen("C:\\Users\\Administrator\\Desktop\\stu.txt", "r"))

==NULL)

{

printf("打开文件失败!\n");

exit(0);

}

int i=0;

while(!feof(fp))

{ fscanf(fp, "%s %d %d %d\n",stus[i].name,&stus[i].number,&stus

[i].age,&stus[i].score);

i++;

}

//写出所读的学生信息

printf("学生信息:\n姓名 学号 年龄 成绩\n");

for(i=0;i<NUM;i++)

printf("%s %d %d %d\n",stus[i].name,stus[i].number,stus

[i].age,stus[i].score);

fclose(fp);

return 0;

}

作业4:

思考:如何实现学生信息录入的动态长度控制?

提示:使用链表,动态分配空间

Student * p1;

p1=malloc(sizeof(Student));

p1->age=10;

struct Node{

Student stu;

Node * next;

}
——————————————————————

typedef struct _Student{

char name[20];

int number;

int age;

int score;

}Student;

typedef struct _Node{

Student stu;

struct _Node *next;

}Node;

Node *head=NULL;//定义第一个学生

void readStudent()

{

Node *p;

Node *newnode;

head=NULL;

FILE *fp;

if((fp=fopen("C:\\Users\\Administrator\\Desktop\\Student.txt","r"))==NULL)

{

printf("打开文件失败");

exit(0);

}

while(!feof(fp))

{

if((newnode=(Node*)malloc(sizeof(Node)))==NULL)

{

printf("ERROR\n");

fclose(fp);

exit(0);

}

fscanf(fp,"%d %s %d %d\n",&newnode->stu.number,newnode->stu.name,&newnode->stu.age,&newnode->stu.score);

if(head==NULL)

{ head=newnode;

p=head;

}

else

{

p->next=newnode;

p=newnode;

}

}

p->next=NULL;

fclose(fp);

printStudent();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐