目录

  • 1 第一章  C语言概述
    • 1.1 第一节  C语言的产生和发展
    • 1.2 第二节  C语言的特点
    • 1.3 第三节  两个简单的C程序
    • 1.4 第四节  C程序的上机步骤
    • 1.5 第五节  Dev-C++介绍
    • 1.6 第六节  VC2010学习版介绍
    • 1.7 第七节  宏定义和文件包含
    • 1.8 本章小结
    • 1.9 本章单元测试
  • 2 第二章  基本数据类型与简单程序设计
    • 2.1 第一节  C语言的基本数据类型
    • 2.2 第二节  常量
    • 2.3 第三节  变量
    • 2.4 第四节  赋值语句
    • 2.5 第五节  数据输出
    • 2.6 第六节 数据输入
    • 2.7 第七节  运算符
    • 2.8 第八节  常用的数学函数
    • 2.9 第九节  顺序结构程序设计
    • 2.10 本章小结
    • 2.11 本章单元测试
  • 3 第三章  分支结构程序设计
    • 3.1 第一节  关系表达式和逻辑表达式
    • 3.2 第二节  if单分支语句
    • 3.3 第四节  if双分支语句
    • 3.4 第五节  if多分支语句
    • 3.5 第六节  case多分支语句
    • 3.6 第七节  分支结构程序设计实例
    • 3.7 本章小结
    • 3.8 本章单元测试
    • 3.9 书中本章习题答案
  • 4 第四章  循环结构程序设计
    • 4.1 第一节  While循环
    • 4.2 第二节  do ... while循环
    • 4.3 第三节  for循环
    • 4.4 第四节  多重循环
    • 4.5 第五节  break语句和continue语句
    • 4.6 第六节  循环结构程序设计实例
    • 4.7 本章小结
    • 4.8 书中本章习题答案
  • 5 第五章 数组
    • 5.1 第一节  一维数组的定义和使用
    • 5.2 第二节  二维数组的定义和使用
    • 5.3 第三节  字符数组的定义和使用
    • 5.4 第四节  数组的应用举例
    • 5.5 本章小节
    • 5.6 书中本章习题
  • 6 第六章  函数
    • 6.1 第一节  函数的定义
    • 6.2 第二节  函数的调用
    • 6.3 第三节 数组作为函数参数
    • 6.4 第四节  变量的作用域
    • 6.5 第五节 变量的存储类别
    • 6.6 第六节 函数应用实例
  • 7 第七章 结构体和共用体
    • 7.1 第一节  概述
    • 7.2 第二节  定义结构体变量的方法
    • 7.3 第三节 结构体变量的引用
    • 7.4 第四节 结构体数组
    • 7.5 第五节 共用体
    • 7.6 第六节  结构体和共用体应用实例
  • 8 第八章 指针
    • 8.1 第一节  指针的概念
    • 8.2 第二节  指向简单变量的指针
    • 8.3 第三节 指向数组的指针变量
    • 8.4 第四节  指向字符串的指针变量
    • 8.5 第五节 指针作为函数参数
    • 8.6 第六节  指向结构体的指针变量
    • 8.7 第七节 指针应用实例
  • 9 第九章  文件
    • 9.1 第一节  文件概述
    • 9.2 第二节  文件的打开和关闭
    • 9.3 第三节 文件的读/写函数
    • 9.4 第四节  文件定位函数
    • 9.5 第五节  文件应用实例
    • 9.6 本章小节
    • 9.7 本章习题
  • 10 附录
    • 10.1 附录A  基本字符ASCII码表(0~127)
    • 10.2 附录B  运算符优先级表
    • 10.3 附录C 常用C库函数表
    • 10.4 附录D  编译常见错误提示
    • 10.5 附录E  常见C语言英语单词
    • 10.6 附录F  如何从十进制转换为二进制
    • 10.7 附录G  如何把二进制数转化为十进制数
    • 10.8 附录H  什么是编译器
    • 10.9 附录I  与编译器相关的几个知识点
  • 11 数组
    • 11.1 一维数组
    • 11.2 二维数组
    • 11.3 字符数组
    • 11.4 常见问题集锦
    • 11.5 配套课件
    • 11.6 配套实训
  • 12 第一章 C语言程序设计基础
    • 12.1 程序设计语言的发展及其特点
      • 12.1.1 为什么要学习C语言
      • 12.1.2 什么是程序设计语言
      • 12.1.3 程序设计语言发展的三个阶段
    • 12.2 C语言的发展及其特点和应用
      • 12.2.1 C语言的发展史
      • 12.2.2 C语言的特点
      • 12.2.3 C语言的应用以及其他语言的关系
    • 12.3 C语言程序的基本结构
      • 12.3.1 最简单的C语言程序
      • 12.3.2 计算输入的两个整数的和
      • 12.3.3 练习:计算输入的两个整数的和
    • 12.4 编制C语言程序的基本步骤
      • 12.4.1 编写C程序的步骤
      • 12.4.2 VC6.0集成开发环境介绍
      • 12.4.3 建立工程操作演示
      • 12.4.4 练习:我们编的第一个程序
      • 12.4.5 程序调试
    • 12.5 习题
  • 13 基本数据类型、运算符与表达式
    • 13.1 预备知识
      • 13.1.1 计算机系统组成
      • 13.1.2 计算机中数的表示及进制转换
    • 13.2 C语言的数据类型
    • 13.3 常量、变量和标识符
      • 13.3.1 标识符
      • 13.3.2 常量
      • 13.3.3 变量
    • 13.4 简单数据类型与表示范围
      • 13.4.1 整型数据
      • 13.4.2 整数在内存中的表示
      • 13.4.3 整型变量
      • 13.4.4 整数常量的分类
      • 13.4.5 实型数据
      • 13.4.6 字符型数据和字符串常量
      • 13.4.7 简单数据类型的表示范围
      • 13.4.8 简单的数据输出
    • 13.5 运算符与表达式
      • 13.5.1 赋值运算符、赋值表达式
      • 13.5.2 强制类型转换符
      • 13.5.3 算术运算符、算术表达式
      • 13.5.4 自增自减运算符、符号运算符
      • 13.5.5 算术运算符中数据类型转换规则
      • 13.5.6 位运算符、位运算表达式
      • 13.5.7 逗号运算符、逗号表达式
      • 13.5.8 其他运算符:sizeof运算符
      • 13.5.9 关系运算符与表达式
      • 13.5.10 逻辑运算符与表达式
      • 13.5.11 条件运算符与表达式
    • 13.6 运算符的优先级和结合性
  • 14 基本输入输出和顺序程序设计
    • 14.1 程序的控制结构
    • 14.2 格式化输出printf
    • 14.3 格式化输入scanf
    • 14.4 字符数据的非格式化输入输出
    • 14.5 顺序程序设计举例
  • 15 选择结构程序设计
    • 15.1 C程序中语句的分类
    • 15.2 关系运算符、逻辑运算符、条件运算符
      • 15.2.1 关系运算符和关系表达式
      • 15.2.2 逻辑运算符和逻辑表达式
      • 15.2.3 条件运算符和条件表达式
    • 15.3 选择结构的程序设计
      • 15.3.1 if语句
      • 15.3.2 switch语句
    • 15.4 选择结构程序设计举例
      • 15.4.1 例1 计算员工当月薪水
      • 15.4.2 例2 判定闰年
      • 15.4.3 例3  简单表达式计算
  • 16 循环结构程序设计
    • 16.1 循环结构的程序设计
      • 16.1.1 while语句
      • 16.1.2 do-while语句
      • 16.1.3 for语句
      • 16.1.4 循环嵌套
      • 16.1.5 break与continue语句
      • 16.1.6 exit()函数
    • 16.2 循环结构类型的选择及转换
    • 16.3 循环结构程序设计举例
  • 17 数组
    • 17.1 一维数组
      • 17.1.1 一维数组的定义
      • 17.1.2 一维数组的引用
      • 17.1.3 一维数组的赋值
      • 17.1.4 应用实例1:字符统计
      • 17.1.5 应用实例2:冒泡排序
      • 17.1.6 应用实例3:选择排序
      • 17.1.7 应用实例4:斐波那契数列
    • 17.2 二维数组及多维数组
      • 17.2.1 二维数组的定义、引用和赋值
      • 17.2.2 二维数组的应用举例
    • 17.3 字符串与数组
      • 17.3.1 字符串的本质
      • 17.3.2 字符及字符串操作的常用函数
      • 17.3.3 字符串的应用举例
      • 17.3.4 字符串数组
      • 17.3.5 字符串数组的应用举例
    • 17.4 数组综合应用举例
  • 18 函数
    • 18.1 函数的概述
    • 18.2 函数的定义和调用
    • 18.3 函数参数的传递方式
    • 18.4 变量的作用域和生存期
    • 18.5 变量的存储类型
    • 18.6 函数的嵌套与递归调用
    • 18.7 函数的作用域
    • 18.8 函数的封装
    • 18.9 函数应用综合举例
    • 18.10 本章习题
  • 19 指针
    • 19.1 指针与指针变量的概念
    • 19.2 指针变量的定义和引用
    • 19.3 指针和地址运算
    • 19.4 指针与数组
      • 19.4.1 数组的指针和指向数组的指针变量
      • 19.4.2 指向多维数组的指针——数组指针
      • 19.4.3 元素为指针的数组——指针数组
    • 19.5 指针与字符串
    • 19.6 指针与动态内存分配
    • 19.7 多级指针
    • 19.8 指针作为函数参数
    • 19.9 指针作为函数的返回值——指针函数
    • 19.10 本章习题
  • 20 VC6  Debug
    • 20.1 VC6  Debug
第五节  文件应用实例

§9.5.1    文件应用实例

一、建立二进制文件并显示

例9-4  把一个浮点数组以二进制方式写入文件 fc.dat 中,再从文件 fc.dat 中读取出并显示。

  1. #include  <stdio.h>

  2. main(  )

  3. {

  4.      float  a[ 6 ] = { 15.2, -24.3, 5.04, 0.71, 50.6, 50.5 };

  5.      int     i, k;  float   dat[100];

  6.      FILE   *fp;

  7.      fp = fopen ("fc.dat", "wb");    /* 创建一个二进制文件只写 */

  8.      if( fp == NULL )

  9.      {    printf("不能打开文件!n");   exit(  );  }

  10.      fwrite( a, sizeof( float ), 6, fp );  /* 将6个浮点数写入文件中 */

  11.      fclose( fp );     /*  关闭文件 */ 

  12.      fp=fopen ("fe.dat","rb");

  13.      if( fp == NULL )

  14.      {    printf("不能打开文件!\n");   exit();   }

  15.       k=fread( dat, sizeof(float), 100, p);  /* 返回读取的浮点个数y  */

  16.      for( i = 0; i < k ; i++ )

  17.            printf( "%7.2f" , dat[i] );

  18.      fclose( fp );

  19. }


运行结果如图96所示。


执行“fp=fopen("fc.dat,"wb");”后,如果返回值为“NULL”说明打开文件"fe.dat”失 ,可能因为磁盘空间不够,执行“exit();”结束程序运行:执行“p=fopen(”e.at,b”)”后,如果返回值为“NULL”,说明不能打开文件“fc.dat”,可能因为不存在该文件或没有相应限。

二、建立记录文件并显示

例9-5   将3个学生记录存入一个磁盘文件d中,再从文件fdat中读出并显示

  1. #include   <stdio.h>

  2. #define   N   3

  3. #define   LEN   sizeof( STU )

  4. typedef  struct  node {

  5.       char  name[ 10 ]; 

  6.       int  score;

  7. } STU;

  8. main( )

  9. {

  10.       FILE  *fp;

  11.       STU  s[ N ];

  12.        int  i = 0;

  13.        fp = fopen( "fd.dat", "wb");

  14.        printf("输入:\n 姓名\t 成绩 \n");

  15.        for( ; i<N; i++)

  16.        {

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

  18.               fwrite( &s[i], LEN, 1, fp);

  19.        }

  20.        fclose( fp );

  21.        fp = fopen("fd.dat","rb");

  22.        printf("\n 输出:\n\t 姓名  \t   成绩  \n");

  23.        printf("------------------------------------\n");

  24.        for(i = 0; i<N; i++)

  25.       {

  26.             // 从文件中读一个记录存于 s[i] 中

  27.             fread( &s[i], LEN, 1, fp );  

  28.              // 在屏幕上输出s内容

  29.             printf ("%10s \t %5d \n", s[i].name, s[i].score );  

  30.       }

  31.       fclose( fp );

  32. }

 运行结果如图9-7所示。


31 图9-7例9-5运行结果

例9-6  从键盘上输入若干行文本(每行不超过80个字符),写到文件f.xt中,用-1作为字符串输入结束的标志,然后将文件的内容读出并显示在屏幕上。文件的读写分别由自定文数ReadText()和WriteText()实现。

  1. #include   <stdio.h>

  2. // 写入文件fname

  3. int   WriteText( char fname[  ] )

  4. {

  5.      FILE   *fp;

  6.      char   line[ 80 ],  *r="-1";

  7.      fp = fopen( fname, "w");  //以写方式打开文件

  8.       int   n=0;

  9.       printf“输入若干行文本,输入一1结束。n");

  10.       do {

  11.                gets( line );    //读入一行

  12.                if( strcmp( line, r) == 0 ) break;  //若为串结束标志,则返回

  13.                fputs( line, fp );   // 写入一行

  14.                fputc( '\n', fp );   //行尾增加换行符

  15.                n ++ ;

  16.        }  while( 1 );

  17.        fclose( fp );

  18.         return  n;

  19. }

  20. //读出fname文件

  21. void ReadText( char  fname[ ], int  n )

  22. {

  23.       char line [80];

  24.       int i;

  25.       FILE *fp;

  26.       fp =fopen fname,"r");  // 以读方式打开文件

  27.       printf("n输出文件%s内容:n",fname);

  28.       for ( i=1; i<n; i++)

  29.       {

  30.            fgets( line, 80, fp );  //读一行字符并显示

  31.            printf("%s",line );

  32.       }

  33.       fclose(fp )

  34.  }

  35.  main(  )

  36. {    char fname[30];

  37.       int n;

  38.      printf("输入磁盘文件名:");

  39.      gets( fname );

  40.      n=WriteText( fname );    //写文件

  41.      ReadText (fname,n );   // 读文件

  42. }


 运行结果如图9-8所示。


说明:因为每行字符个数不同,也可用fgetc函数读取一个个字符并量示,改写函数 ReadText 如下:

  1.  void ReadText( char   fname[ ] )      // 读出fname文件

  2. {

  3.       char line[ 80 ];

  4.       int   i;

  5.       FILE    *fp;

  6.       fp = fopen( fname, "r");  // 产以读方式打开文件

  7.       printf("n输出文件%s内容:\n", fname );

  8.       while( ! feof( fp ) )    //产未到文件结尾

  9.       {

  10.            ch=fgetc( fp );   //产读一一个字符并显示

  11.            putchar( ch );

  12.       }

  13.       fclose( fp );

  14. }

调用形式改为:“ReadText(fname):”即可。