实验六:结构体与文件实验

实验题目1【见实验教材实验八的题目3】编写程序exp8_3.c,验证用户输入的日期格式是否正确,如果不正确,则提示重新输入,直到重新输入正确为止。(提示:需要定义一个表示日期的结构体类型struct Date,包括年、月、日信息,并用typedef重新定义新类型名Date;检查日期是否有效,定义为函数int checkDate(Date date))。

实验解答: 源程序代码如下:

# include <stdio.h>
struct Date
{int year;int month;int day;
};
typedef struct Date Date;
int main()
{int b[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};Date a[20];do{printf("Please input date(XXXX XX XX):\n");scanf("%4d%d%d",&(a->year),&(a->month),&(a->day));if(a->month==2){if((a->year%4==0&&a->year%100!=0)||a->year%400==0)b[2]=29;else b[2]=28;}}while((a->month<1||a->month>12)||(b[a->month]<(a->day)||a->day<1));printf("%d-%d-%d",a->year,a->month,a->day);return 0;}

实验题目2【见实验教材实验九的题目1】编写程序exp9_1.c ,从键盘读入一系列字符并以“#”结束,将读入的字符(不包括#号)存入文本文件D:\f1.txt中,再从该文件读取内容,并在显示器上原样显示。

实验解答:  写出完整的源程序代码并做适当注释:

# include <stdio.h>
# include<stdlib.h>
# include<string.h>
# define N 20
int main()
{FILE * fp;char str[N];int lines=0;fp=fopen("D:\\f1.txt","w");  //以写的方式打开文件if(fp==NULL)  //如果打开文件失败{printf("file error\n");exit(1);}gets(str);while(strcmp(str,"#")!=0)  //如果读入的不是“#”串则写入文件{fputs(str,fp);  //将读入的字符串写入文件fputc('\n',fp);  //换行gets(str);  继续读入一串字符}rewind(fp);while(fgets(str,N,fp)!=NULL){printf("%s",str);  //原样输出该字符lines++;}fclose(fp);  //关闭文件return 0;
}

实验题目(3)【见实验教材实验九的题目2】:某班有学生若干名(不超过40名),其信息的组织采用如下的结构体定义。编写程序exp9_2.c,完成要求的功能。

struct Student

{

char ID[20];

char name[30];

int age;

double score;

};

① 从键盘读入该班级学生的信息。

② 将所有的学生信息存入D:\Info.dat文件中、关闭该文件,建立文件定义函数CreateFile实现。

③ 另写一个函数ReadOut,将D:\Info.dat文件中的信息读入到内存,并依次输出到显示器上,该函数由main函数调用。

④编写函数Sort,实现按成绩由高到低将学生记录进行排序并输出排序后的结果。

⑤文件读写采用二进制读写(fread、fwrite)方式。实验解答:  ①请写出完整的源程序代码并做适当注释:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Student
{char ID[20];char name[30];int age;double score;
}Student;
void CreateFile();
void WriteFile(Student st[],int n);
void ReadOutFile(Student st[]);
void Sort(Student st[],int n);
void Printf(Student st[],int n);
int main()
{Student st[40];int n;printf("How many scores you want to input?\n");scanf("%d",&n);CreateFile();printf("Plaese input scores:\nID\tName\tAge\tScore\n");WriteFile(st,n);ReadOutFile(st);printf("\nYou input:\n");Printf(st,n);Sort(st,n);printf("\nAfter sorting:\n");Printf(st,n);return 0;
}//创建文件
void CreateFile()                                   //创建一个文件
{FILE *fp;fp=fopen("D:\\Info.dat","wb");if ( fp == 0 )                         /* 如果文件创建失败*/{    printf( "Creat file error\n" );exit(1);}fclose(fp);
}//写入数据
void WriteFile(Student st[],int n)
{int i;FILE *fp;fp=fopen("D:\\Info.dat","r+");if ( fp == 0 )                         /* 如果文件打开失败*/{ printf( "open binary file error\n" );exit(1);}for(i=0;i<n;i++)scanf("%s%s%d%lf",st[i].ID,st[i].name,&st[i].age,&st[i].score);fwrite(st,sizeof(Student),n,fp);fclose(fp);
}//读取文件中的数据
void ReadOutFile(Student st[])
{FILE *fp;int i=0;fp=fopen("D:\\Info.dat","rb");if ( fp == 0 )                         //如果文件打开失败{  printf( "open file error\n" );exit(1);}fread(&st[i],sizeof(Student),1,fp);           //从文件中读出下表记录while( !feof(fp) )                     //当文件未结束时循环{                                       i++;                                //下标加以备读入fread(&st[i],sizeof(Student),1,fp);   // 读一条记录 } fclose(fp);                          //关闭文件
}//给数组中记录排序
void Sort(Student stu[],int n)
{int i,a,j;Student temp;for(i=0;i<n-1;i++){a=i;for(j=i+1;j<n;j++)if(stu[a].score<stu[j].score)                 //比较两元素的大小a=j;if(a!=i){temp=stu[i];stu[i]=stu[a];stu[a]=temp;}}
}//输出数据
void Printf(Student st[],int n)
{int i;for(i=0;i<n;i++)printf("%s\t%s\t%d\t%lf\n",st[i].ID,st[i].name,st[i].age,st[i].score);
}

南京邮电大学C语言实验报告六相关推荐

  1. 南京邮电大学c语言实验报告5,南京邮电大学C语言大一上期末复习.pdf

    南京邮电大学C语言大一上期末复习.pdf 高级语言程序设计期末总复习高级语言程序设计期末总复习 课程的全部内容可分为五大模块课程的全部内容可分为五大模块 1 1基础知识基础知识 2 2三种基本结构及流 ...

  2. 南京邮电大学c语言实验报告3v2,南京邮电大学操作系统实验报告

    <南京邮电大学操作系统实验报告>由会员分享,可在线阅读,更多相关<南京邮电大学操作系统实验报告(20页珍藏版)>请在人人文库网上搜索. 1.通信与信息工程学院2015 / 20 ...

  3. 南京邮电大学c语言实验报告4,南京邮电大学算法设计实验报告——动态规划法...

    <南京邮电大学算法设计实验报告--动态规划法>由会员分享,可在线阅读,更多相关<南京邮电大学算法设计实验报告--动态规划法(12页珍藏版)>请在人人文库网上搜索. 1.实 验 ...

  4. 南京邮电大学C语言实验报告6v2(仅供参考)

    实验六 结构体与文件实验 一. 实验目的和要求 (1)掌握结构体类型以及结构体变量的定义与使用. (2)综合运用结构体.数组.指针等知识,解决相关问题. (3)会正确定义FILE*指针,掌握文件操作从 ...

  5. 南京邮电大学C语言实验报告五

    实验五:指针与字符串实验 实验题目(1)[见实验教材实验六的题目2]:编程exp6_2.c,现有整型变量x,y,调用交换函数以期实现两个值的交换.下表中4种不同的定义及调用分别进行测试并填写表格. 表 ...

  6. 南京邮电大学C语言实验报告5v2(仅供参考)

    实验五 指针与字符串实验 一. 实验目的和要求 (1)重点掌握一级指针的定义与使用,会利用一级指针进行间接访问等操作.通过调试器观察分析程序的运行情况,理解指针与指针所指向的内容之间的关系,理解指针间 ...

  7. 南京邮电大学C语言实验报告4v2(仅供参考)

    实验四 一维与二维数组实验 一. 实验目的和要求 (1)掌握一维数组的定义与初始化,会正确访问数组元素,并利用循环对元素成批访问. (2)掌握二维数组的定义与初始化,会利用双层循环对元素访问,实现一些 ...

  8. 南京邮电大学C语言实验报告一

    实验一:顺序结构编程练习 实验题目(1)[见实验教材实验一的题目1]:正确进入VS2010集成开发环境,建立一个单文件项目,项目名为:exp1_1,然后向该项目中以新建方式添加一个源文件,名为:exp ...

  9. 南京邮电大学C语言实验报告三

    实验三: 函数实验 实验题目(1)[见实验教材实验四的题目2]:编程序exp4_2.c,巧用函数调用,打印不同行数和字符构成的等腰三角形.具体要求:定义一个函数原型void DrawTriangle ...

最新文章

  1. 测试开发人员与开发人员_如何升级为开发人员
  2. pandas.Series.values 将Series内的数值以ndarray或ndarray-like的形式返回,取决于原Seires的数据类型
  3. 简单自学机器学习理论——正则化和偏置方差的权衡 (Part III )
  4. centos 搭建 svn服务器
  5. 无法将文件ftp服务器上,ftp服务器上传不了文件
  6. FFmpeg使用遇到问题记录
  7. 【.NET Core 3.0】框架之十二 || 跨域 与 Proxy
  8. servlet 源码分析
  9. (pytorch-深度学习系列)pytorch实现多层感知机(自动定义模型)对Fashion-MNIST数据集进行分类-学习笔记
  10. html2canvas图片位移_html2canvas html截图插件图片放大清晰度处理方案,支撑恣意放大倍数,处理原插件图片偏移题目...
  11. 一文彻底读懂优秀开源产品MyBatis一级缓存设计!
  12. Linux 基础 (1) - 在Win10上使用Hyper-v虚拟机安装CentOS7
  13. php返回json数据函数实例
  14. std::thread的常用参数传递总结
  15. c语言第三章知识点讲解,C语言考试最新知识点总结讲解.doc
  16. Jenkins集群搭建
  17. 单片机基础学-按键篇
  18. 笔记-SIM900A模块开发:GPRS建立TCP连接与服务器进行数据传输
  19. 菜鸡的Java笔记 数字操作类
  20. Android 新浪微博开发者平台应用申请及配置说明

热门文章

  1. Linux fcntl 函数全解
  2. asynchronous socket error 10053 socket和http的区别
  3. postsql和geoserver进行连接,并发布服务
  4. 1 (SSM) springMVC + spring + Mybatis(MySQL)学习笔记 ------ 阶段成果笔记
  5. 解决pdf转swf乱码(多语种,日文,中文)
  6. Qt开源作品23-颜色拾取器
  7. 字符编码(ASCII码、音码、形码、区位码,国标码、机内码,字形码)
  8. Photoshop CS4验证序列号无效之破解
  9. 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)-- 第五题 树与二分图 (已完结)
  10. python小海龟turtle库实现太阳花