目录

  • 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 第一节  为什么需要循环控制
    • 4.2 第一节  while循环
    • 4.3 第二节  do ... while循环
    • 4.4 第三节  for循环
    • 4.5 第四节  多重循环
    • 4.6 第五节  break语句和continue语句
    • 4.7 第六节  循环结构程序设计实例
    • 4.8 本章小结
    • 4.9 书中本章习题答案
  • 5 第五章 数组
    • 5.1 第一节  一维数组的定义和使用
    • 5.2 第二节  二维数组的定义和使用
    • 5.3 第三节  字符数组的定义和使用
    • 5.4 第四节  数组的应用举例
  • 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 第五节  文件应用实例
  • 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  与编译器相关的几个知识点
第七节  宏定义和文件包含
  • 1 文字讲解
  • 2 实训视频

一、宏定义

宏定义和文件包含都属于编译预处理命令,以“#”开头,结尾部分不要加分号(除非有特别需要),编译预处理命令的作用不是实现程序的功能,而是给C语言编译系统提供信息,通知C编译器在对源程序进行编译之前应该做哪些预处理工作。

不带参数的宏定义

命令的一般形式如下:

        #define   标识符    字符串

定义中的“标识符”为用户定义标识符,称为宏名宏名一般用大写字母。在预编译时,将程序中出现的宏名均替换成“字符串”的内容,这一过程称为宏展开。例如:

 #define PI    3.1415926

 则程序中凡遇PI均用3.1415926代替,如"2*PI*r"宏展开为"2*3.1415926*r"

 带参数的宏定义。

 命令的一般形式如下:

 #define     宏名(形式参数表)     字符串

 定义中的“字符串”应包含括号中所指定的形式参数。注意:宏名与括号之间不要加空格,否则就成为不带参数的宏定义了。

 ③带参数的宏展开

 预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行转换。

原则是:

          凡遇形参则以实参代替,非形参字符则原样保留从而形成展开后的内容。

 例如:

 #define   AREA(r)   PI*(r)*(r)

 则“AREA(3+2)”宏展开后变成“3.1415926*(3+2)*(3+2)"

 例1-3   求梯形的面积

 说明:梯形的面积为上底加下底乘高除2。

设梯形的上底,下底和高分别用a、b和h表示,则梯形的面积等于(a+b)xh/2.0。

 程序如下:

 #include  <stdio.h>

#include   <conio.h>

#define  S(a,b,h)   (a+b)*h/2.0

 main(  )

{

         double y;

        y=S(2,3,5);

        printf("梯形面积=%f\n",y);

        getch(  );

}

运行结果如图1-25所示。


#define是宏定义命令,但它不是C语句,不必在行末加分号。如果加了分号,则连分号一起进行置换。例如:

#define   PI   3.1415926;

........

 area=PI*r*r ;

 经宏展开后,该语句为“area=3.1415926;*r*r;";  显然"area=3.1415926;*r*r;"存在语法错误。习惯上,符号常量名用大写字母表示,当然也可以用小写,但前后必须一致,否则将出现语法错误。例如,将程序中的

 len=2*PI*r;

 改为

 len=2* pi*r:

 后,编译时产生错误“Error:pi' undefined(first use in function)“,意思是:符号常量pi未定义 (在该函数中首次使用)。这是因为C语言对大小写敏感,PI和pi的意义是不同的,在编写程序时,要特别注意。

案例1:计算圆的面积,有两种方案,你认为那一种方案可行?为什么?

方案一:

#include   <stdio.h>

#include    <conio.h>

#define   PI   3.1415926

#define   AREA(r)   PI*(r)*(r)

main(  )

{

         float   area = AREA(1+1);

         printf("area=%f\n", area);

         getch(  );

}

方案二、

#include   <stdio.h>

#include   <conio.h>

#define   PI   3.1415926

#define   AREA(r)   PI*r*r

main(  )

{

         float   area = AREA(1+1);

         printf("area=%f\n", area);

         getch(  );

}

 二、文件包含

 文件包含的作用是将一个源程序文件包含到另一个源程序文件中,它以”#include”开头,例如,例1-3的开头两行就是两个文件包含命令。

格式1:#include    <文件名>

格式2:  #include  “文件名”

 当使用格式1时,C编译系统将在系统指定的路径下搜索尖括号中的文件,一般适用于含库函数的头文件

当使用格式2时,系统首先会在用户当前的目录中搜索双引号中的文件, 如果找不到,再按系统指定的路径下搜索,一般适用于包含用户文件的头文件

 例1-4    创建一个头文件prt.h,用来输出一个整数;main()函数所在文件ex1-4.c包含该文件

操作重点:头文件prt.h与文件ex1-4.c源程序文件必须处于同一目录下。

 操作步骤:

 ①建立头文件( prt.h )

操作如下:

dev-c++软件操作如下:

        文件->新建->源代码->输入相关代码->保存->保存类型为header file

vc++软件操作如下:

        在“解决方案资源管理器”中,右键单击“头文件”,选择“添加”→“新建项”,选择“头文件(.h)”,输入名称“prt”单击“添加”按钮返回主菜单。

prth.h头文件内容 如下:

 #define   INT(a)     printf("%d          ", a)

 prt.h文件如图1-26所示



在“源文件”处添加主函数文件ex1-4.c,内容如下:

#include <stdio.h>

#include <conio.h>

#include "prt.h"

main( ) 

    INT(2);     INT(3);       INT(5);

   getch(); 

}

ex1-4.c文件如图1-27所示。

按F5键运行程序,运行结果如图1-28所示。