1 / 25

C 语言程序设计

C 语言程序设计. 同学们好!下面开始讲授 C 语言课程的第 16 讲内容。   第 16 讲 文件( 2 )   四、二进制文件的访问操作   五、课程总复习 四、二进制文件的访问操作   ( 1 )读出和写入信息的函数   对二进制文件是按固定字节数进行信息读写访问操作的。调用在 stdio.h 头文件中声明的 fread() 函数能够从二进制文件中读出固定字节数的信息,调用 fwrite() 函数能够向二进制文件中写入固定字节数信息。这两个函数的原型为: unsigned int fread(void *buffer, unsigned int num,

newman
Download Presentation

C 语言程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C语言程序设计 同学们好!下面开始讲授C语言课程的第16讲内容。   第16讲 文件(2)   四、二进制文件的访问操作   五、课程总复习 四、二进制文件的访问操作   (1)读出和写入信息的函数   对二进制文件是按固定字节数进行信息读写访问操作的。调用在stdio.h头文件中声明的fread()函数能够从二进制文件中读出固定字节数的信息,调用fwrite()函数能够向二进制文件中写入固定字节数信息。这两个函数的原型为: unsigned int fread(void *buffer, unsigned int num, unsigned int count, FILE *stream); unsigned int fwrite(const void *buffer, unsigned int num, unsigned int count, FILE *stream); 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  2. C语言程序设计 参数说明:stream参数给出要进行操作的二进制文件流,num和count参数分别表示待读写的信息块中一种数据类型的长度和个数,它们之积为信息块的字节数,buffer参数所指向的存储空间是信息在内存中的保存地点。 函数功能:调用fread函数是从stream所表示的文件中当前字节位置读出num*count个字节的信息并保存到由buffer所指向的存储空间中。调用fwrite函数是把从buffer所指向的存储空间中的num*count个字节的信息写入到由stream所表示的文件中,从当前字节位置起向后存放。   (2)移动文件指针位置(当前待读写的字节位置)   在stdio.h头文件中还提供有移动文件指针位置的函数: int fseek(FILE *stream, long int num, int origin); 功能:利用该函数可以把文件指针位置移动到整个文件中的任何字节位置。随时从这个位置起读写信息。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  3. C语言程序设计 参数说明: stream参数给出要进行操作的文件流。 origin参数必须是三个符号常量SEEK_SET、SEEK_CUR或SEEK_END之一。它们在stdio.h头文件中定义。 SEEK_SET表示文件开始位置,即第1个字节位置; SEEK_END表示文件结尾位置,即保存文件结束标记的位置; SEEK_CUR表示当前的文件指针位置。 num参数给出移动文件位置指针的位移量,为正数时则表示从origin所给的参考点向后移动num个字节,为负数时表示向前移动num个字节,移动后的位置就是当前的文件指针位置。   调用该函数时,若文件位置指针移动成功,则返回0,否则返回非0值。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  4. C语言程序设计   (3)应用举例   例1 编一程序,首先利用48、62、25、73、66、80、78、54、36、47等10个整数初始化一个整型数组a[10],接着把a中每个元素的值依次写入到二进制文件“d:\cx\data.bin”中,然后再对数组a进行升序排序,把排序结果再一次写入到上述二进制文件中。   分析:首先以二进制写方式打开给定文件,接着把数组a[10]中的数据写入到文件中,再接着对数组a[10]进行升序排列,最后再把数组a[10]中的数据写入到文件中。对数组a[10]进行升序排列可以单独编写出函数定义。程序如下: #include<stdio.h> #include<stdlib.h> int a[10]={48,62,25,73,66,80,78,54,36,47};//定义并初始化数组 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  5. C语言程序设计 void SeleteSort(int a[], int n)//对数组a[10]进行升序排序 {//采用选择排序方法 int i,j,k,x; for (i=1; i<n; i++) {//顺序比较和交换n-1次 k=i-1; for (j=i; j<n; j++)//k为当前比较区间内的最小元素下标 if (a[j]<a[k]) k=j; x=a[i-1]; a[i-1]=a[k]; a[k]=x;//交换 } } void main(void) { int i; FILE *fp1; fp1=fopen("d:\\cx\\data.bin", "wb");//以二进制写打开文件 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  6. C语言程序设计 if (!fp1) {printf("文件没有打开!\n"); exit(1);} for (i=0; i<10; i++)//向文件写入a数组中每个元素值 fwrite(&a[i], sizeof(int), 1, fp1); SeleteSort(a,10);//调用排序算法 fwrite(a, sizeof(int), 10, fp1);//把数组a[10]一次写入文件 fclose(fp1);//关闭fp1所对应的文件 }   例2 从例1所建立的二进制文件中,首先读出文件后半部分保存的按升序排列的10个整数并显示,然后再读出前半部分保存的10个整数并显示出来。   分析:根据文件名和访问方式定义文件流,移动文件位置指针,读取后10个有序数据,再把文件指针位置移到文件开始,再读取前10个数据。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  7. C语言程序设计 #include<stdio.h>   #include<stdlib.h>   int a[10];    //用来保存从文件中读取的10个整数   void main(void)   {   int i; FILE*fp1;   fp1=fopen(“d:\\cx\\data.bin", "rb"); //以二进制读打开文件 if (!fp1) {printf("文件没有打开!\n"); exit(1);}   fseek(fp1,10*sizeof(int),SEEK_SET); //把文件指针位置移到10个整数之后,即第11个整数位置   fread(a, sizeof(int), 10, fp1); //一次读出后10个整数到a[10]数组中保存 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  8. C语言程序设计 for(i=0; i<10; i++) printf("%d ",a[i]);   //依次显示出按升序排列的10个整数 printf("\n");   fseek(fp1,0,SEEK_SET); //把文件位置指针移到文件开始位置 for(i=0; i<10; i++) { //依次读出并显示前10个整数   fread(&a[i], sizeof(int), 1, fp1);   printf("%d ",a[i]);  }   printf("\n"); fclose(fp1);     //关闭fp1所对应的文件   }   程序运行结果:   25 36 47 48 54 62 66 73 78 80   48 62 25 73 66 80 78 54 36 47 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  9. C语言程序设计 例3 编一程序,从键盘上输入若干条Pupil类型的学生记录到“Student.bin”二进制文件中,当输入姓名为“AAA”后结束。假定Pupil类型包含两个域,即学生姓名和成绩。   分析:定义文件流、从键盘输入和向文件流写入每个学生记录、关闭文件。   #include<stdio.h>   #include<stdlib.h>   #include<string.h>   struct Pupil {char name[10]; int grade;}; //定义学生记录结构   struct Pupil x; //定义学生结构变量 void main(void) { char *p="Student.bin";   //定义文件名字符串 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  10. C语言程序设计 FILE *fp1=fopen(p, "wb");//以二进制写方式打开文件 if (!fp1) {printf("文件没有打开,退出运行!\n"); exit(1);} printf("请输入若干条学生记录,输入姓名AAA后结束:\n"); while(1) { scanf("%s",x.name);//输入姓名 if (strcmp(x.name,"AAA")==0) break;//输入结束退出循环 scanf("%d",&x.grade);//输入成绩 fwrite(&x, sizeof(x),1,fp1);//向文件写入一条记录 } fclose(fp1); printf("数据输入完成,程序正常结束.\n"); } 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  11. C语言程序设计   假定从键盘上输入和显示结果如下:   请输入若干条学生记录,输入姓名AAA后结束: zhshj 76 hgyin 84 shian 68 zhb 92 zjmin 70 xjip 63 AAA   数据输入完成,程序正常结束.   此6条学生记录被依次保存到“Student.bin”二进制文件中,每个记录所占有的字节数为sizeof(struct Pupil),这个文件占有6*sizeof(struct Pupil)+1字节。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  12. C语言程序设计   例4 编一程序,从例3建立的“Student.bin”二进制文件中,依次读出每个Pupil类型的学生成绩记录,并输出,同时统计出学生记录数。 #include<stdio.h> #include<stdlib.h> struct Pupil {char name[10]; int grade;};//学生类型的定义 void Print(FILE *fio);//打印输出文件中的全部记录 int Count(FILE *fio);//统计出文件中的全部记录数 void main(void) { FILE *fio=fopen("Student.bin", "rb+"); //以二进制的读写方式打开文件 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  13. C语言程序设计 if (!fio) {printf("文件没有打开,退出运行!\n"); exit(1);} printf("输出文件中的全部记录:\n"); Print(fio); printf("统计出文件中的全部记录数为: %d\n",Count(fio)); fclose(fio); } void Print(FILE *fio) {//打印输出文件中的全部记录 struct Pupil x; fseek(fio,0,SEEK_SET);//移动文件位置指针到文件开始 while(!feof(fio)) {//依次读出并打印每个学生记录 fread(&x, sizeof(x), 1, fio); if (feof(fio)) break; 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  14. C语言程序设计 printf("%s %d\n",x.name,x.grade); } } int Count(FILE *fio) {//统计出文件中的全部记录数 int c=0;//统计变量,初值为0 struct Pupil x; fseek(fio,0,SEEK_SET);//移动文件位置指针到文件开始 while(1) {//依次读出并统计每个学生记录 if (fread(&x, sizeof(x), 1, fio)==0) break; c++; } return c;//返回学生记录数 } 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  15. C语言程序设计 输出文件中的全部记录:   zhshj 76   hgyin 84   shian 68   zhb 92   zjmin 70   xjip 63   统计出文件中的全部记录数为: 6 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  16. C语言程序设计 五、课程总复习 第一、二讲 C语言概述的知识要点 1.了解C语言程序、程序文件、函数定义模块的概念及其相互之间的关系。 2.了解函数的具体定义格式和作用,主函数main()的特殊地位和作用。 3.掌握C语言中简单语句和复合语句的构成。如分号、花括号。 4.掌握#include预处理包含命令的格式与作用。 5.掌握头文件的文件名格式,在程序中的使用方法和作用。 6.掌握C语言中两种注释形式的不同标记。//、/*… … */ 7.掌握标准输出函数printf()和标准输入函数scanf()的定义格式和用法。 8.掌握C语言程序文件名、编译后生成的目标文件名和连接后生成的可执行文件名的命名规则,以及上机输入、编辑、编译、连接和运行程序的过程。.c .obj .exe 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  17. C语言程序设计 第三、四讲 数据类型和表达式的知识要点 1.掌握C语言中各种简单数据类型的表示和长度。int, char, float, double,void 2.掌握十进制、八进制、十六进制整型的常量表示方法。25、031、0x19 3.掌握十进制定点数、带指数部分的浮点数的表示方法。25.03、2.503e1 4.掌握数值、字符、字符串在程序中书写格式的区别,转义字符。25,’3’,”25”,’\n’ 5.掌握各种类型变量的定义和初始化格式,符号常量的定义格式。#define M 10 6.掌握枚举类型的定义格式。enum <枚举类型名> {<枚举值列表>}。 7.掌握各种常用运算符的表示和含义。算术、比较、赋值、逻辑、增1、减1等。 8.掌握一些常用系统函数的调用格式和作用。 abs(),exp(),pow(),rand(),exit() 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  18. C语言程序设计 第五、六讲 流程控制语句的知识要点 1.掌握条件语句的格式和作用。(if<条件表达式> <语句1> else <语句2> 2.掌握分情况处理语句的格式和作用。switch<表达式> {每个case子句;default:} 3.掌握for循环语句的格式和作用。for(<表达式1>;<表达式2>;<表达式3>)<语句> 4.掌握while循环语句的格式和作用。while(<表达式>)<语句> 5.掌握do循环语句的格式和作用。do<语句>while(<表达式>); 6.掌握各种跳转语句的格式和作用。goto, return, break, continue 7.会根据现有的程序,分析出程序功能或写出运行结果。 8.会根据处理问题的需要,选择合适的语句编写出程序。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  19. C语言程序设计 第七、八讲 数组和字符串的知识要点 1.掌握一维数组的定义及初始化格式。int a[10]={20,35,16} 2.掌握二维数组的定义及初始化格式。 int b[3][4]={{1,3,5,7},{2,5,8,10}} 3.掌握数组长度的计算方法,每一维下标的变化范围,数组存储空间大小的计算。 4.掌握数组元素的表示,即一维下标变量、二维下标变量的表示。a[4],b[i][j] 5.掌握利用循环和循环变量控制下标变化依次访问(遍历)数组中所有元素的方法。 int i, a[10]; for (i=0; i<10; i++) printf(“%d ”,a[i]); 6.能够编写程序,利用一维数组存储一批数据,并做相应的数据处理。查找、求和 7.能够编写程序,利用二维数组存储矩阵数据,并做相应的数据处理。查找、矩阵运算 8.掌握利用字符数组存储字符串的存储格式和初始化格式。chars1[10]=”abcdf”; 9.掌握常用字符串处理函数的调用格式和功能。strlen,strcpy,strcmp,strcat 10.掌握typedef语句定义数据类型的格式。typedef int IntData; 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  20. C语言程序设计 第九、十讲 指针的知识要点 1.掌握指针的概念,指针变量的定义格式和初始化。int x=10, *xp=&x; 2.掌握常用指针运算符的表示和含义。赋值=、取地址&、取内容*、比较==、!=、> 3.掌握数组名的指针含义。int a[10], *p=a; 4.掌握一维数组元素的下标访问方式与指针访问方式之间的关系。a[i],*(a+i) 5.掌握二维数组元素的下标访问方式与指针访问方式之间的关系。b[i][j],*(b[i]+j) 6.掌握动态存储分配函数malloc()和calloc()的调用格式及作用。malloc(20) 7.会分析和编写带有指针运算和动态存储分配的程序。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  21. C语言程序设计 第十一、十二讲 函数的知识要点 1.掌握函数的定义、调用和声明的格式。 int f(int n){return n*n;} int f(int n);x=f(10); x=100 2.掌握函数定义中值参数和指针参数的不同作用。void h(int x, int* a) 3.掌握函数参数为一维数组或二维数组时的说明格式及作用。int ff(int a[], int n) 4.掌握变量的作用域范围和分类。全局变量、局部变量、静态(static)变量 5.掌握函数的递归定义和调用的概念。调用自身函数 6.掌握函数调用时参数的传递过程和函数体的执行与返回过程。 7.能够根据现有的函数定义分析函数功能,或根据某种功能写出函数定义。 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  22. C语言程序设计 第十三、十四讲 结构与联合的知识要点 1.了解结构和联合类型的概念和作用。组合数据类型 2.掌握结构类型的定义格式,结构对象(变量)的定义格式和初始化。 3.能够计算出结构类型的长度。各成员类型的长度之和。 4.掌握对结构的成员进行访问的方法。点和箭头运算符 5.掌握链表中结点的结构,链表的建立和遍历的方法和算法。 struct IntNode {int data; struct IntNode *next;}; 6.掌握联合类型的定义格式和长度计算方法,结构与联合的异同。 7.会利用结构类型存储和处理数据,会利用链表存储和处理数据。偏重分析 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  23. C语言程序设计 第十五、十六讲 文件的知识要点 1. 了解数据文件的有关概念。文件名、存储位置、文件类型(字符、字节)、文件流 2. 掌握数据文件的打开和关闭方法。fopen(), fclose() 3. 掌握数据文件的各种访问方式的表示方法。"r", "w", "a", "wb", "r+" 4. 掌握对字符类型的数据文件进行输入和输出数据的方法。fputc(), fgetc() 5. 掌握对字节类型的数据文件进行输入和输出数据的方法。fread(), fwrite() 6.会利用字符或字节类型的数据文件保存和处理数据。偏重分析 这一讲是IP课程的最后一讲,希望同学们能够认真学习好这门课程,取得比较满意的学习效果! 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  24. C语言程序设计 五、课程总复习 运算对象:常量(字面、符号)、变量(简单、数组、指针)、函数(标准、用户)、表达式(算术、逻辑) 数据类型:整数型、实数型、字符型、枚举、结构、联合、指针 运算符:算术、比较、逻辑、圆括号等 用于键盘和显示器的标准输入和输出函数:scanf(); printf() 流程控制语句:if、switch、for、while、do-while、break、continue、return、go等。 动态存储分配函数:calloc(); malloc(); realloc(); free() 数据文件:文件名、文件访问方式、文件流、字符和二进制文件、字符文件的读写函数、二进制文件的读写函数 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

  25. C语言程序设计 程序结构:头文件、程序文件(一般、主函数)、函数定义声明及调用 对象作用域:常量、变量、类型,函数定义内外,函数参数 复习考试:概念(选择和填空)、理解(程序运行结果、函数功能)、应用(编程)   这一讲是IP课程的最后一讲,希望同学们能够认真学习好这门课程,取得比较满意的学习效果! 第16讲 文件(2) 四、二进制文件的访问操作 五、课程总复习

More Related