第9章c语言谭浩强版顶级讲义PPT优秀课件

合集下载

最的c语言教程谭浩强c语言PPT课件

最的c语言教程谭浩强c语言PPT课件
整数轮流作为除数,如果都不能被整除,则n为素数。 算法可以表示如下: S1:输入n的值
S2:2=>i (i作为除数) S3:n被i除,得余数r
第19页/共92页
S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5:i+1=>i
S6:如果i≤n-1,返回S3;否则打印 n “是素数”,然后结束。 实际上n不必被2到(n-1)的整数除,只需被2到n的开方间整数除即可,甚至只需被 2到n之间的整数除即可。例如,判断13是否素数,只需将13被2、3除即可,如都
算机科学家沃思(Nikiklaus Wirth)提出一个公式 数据结构 + 算法 = 程序
第1页/共92页
实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进 行程序设计,并且用某一种计算机语言表示。因此,可以这样表示: 程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境
程序形式),或者将这些程序存放在磁盘或磁带上,供用户调用。
第5页/共92页
而非数值运算的种类繁多,要求各异,难以规范化,因此只对一些典型的非数值运 算算法(例如排序算法)作比较深入的研究。其他的非数值运算问题,往往需要使用
者参考已有的类似算法重新设计解决特定问题的专门算法。 本书不可能罗列所有算法,只是想通过一些典型算法的介绍,帮助读者了解如何设 计一个算法,推动读者举一反三。希望读者通过本章介绍的例子了解怎样提出问题,
5. 有效性 算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
第22页/共92页
对于不熟悉计算机程序设计的人来说,他们可以只使用别人已设计好的现成算法, 只需根据算法的要求给以必要的输入,就能得到输出的结果。对他们来说,算法如 同一个“黑箱子”一样 ,他们可以不了解“黑箱子”中的结构,只是从外部特性上 了解算法的作用,即可方便地使用算法。例如,对一个“输入3个数,求其中最大 值”的算法,可以用图2.2表示,只要输入a,b,c3个数,执行算法后就能得到其 中最大的数。但对于程序设计人员来说,必须会设计算法,并且根据算法编写程序。

谭浩强C程序设计第三版清华第9章预处理 1 ppt课件

谭浩强C程序设计第三版清华第9章预处理 1 ppt课件
17
例9.3 使用带参的宏 运行情况如下:
#include <stdio.h> #define PI 3.1415926
#define S(r) PI*r*r
r=3.600000 area=40.715038
void main()
{float a,area;
a=3.6;
area=S(a);
printf("r=%f\narea=%f\n",a,area);
7
9.1 宏定义
9.1.1 不带参数的宏定义 宏定义一般 #define 标识符 字符串 形式为: 例如:# define PI 3.1415926
• 宏定义的作用是在本程序文件中用指定的标识符PI 来代替“3.1415926”这个字符串,在编译预处理时 ,将程序中在该命令以后出现的所有的PI都用 “3.1415926”代替。这种方法使用户能以一个简单 的名字代替一个长的字符串。
14
说明:
(8) 对程序中用双撇号括起来的字符串内的字符,即 使与宏名相同,也不进行置换。
(9) 宏定义是专门用于预处理命令的一个专用名词, 它与定义变量的含义不同,只作字符替换,不分 配内存空间。
15
9.1.2 带参数的宏定义
作用:不是进行简单的字符串替换,还要 进行参数替换。 带参数的宏定义一般形式为:
运行情况如下:
L=18.849556 S=28.274333
13
经过宏展开后,printf函数中的输出项L被展开为: 2*3.1415926*3.0
S展开为 3.1415926*3.0*3.0
printf函数调用语句展开为:
printf(“L=%F\NS=%f\n”, 2*3.1415926*3.0,3.1415926*3.0*3.0);

c程序设计 谭浩强 第9章

c程序设计 谭浩强 第9章
9
几点使用说明
第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使 用方式
① 使用宏定义时所带的实参可以是常量、已被赋值 的变量名或者表达式。 例:将前面的示例程序改写为交互式输入半径值的方 式。 #define PI 3.1415926536 #define area(r) (PI*r*r) void main( ) { float r; printf("Input:r=?\n"); scanf("%f",&r); printf("Area=%f\n",area(r)); }
6
有关宏的定义和使用要注意以下几点:
第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使 用方式
⑥ 如果宏定义中的字符序列过长,在一行中放不 下,可在该行末尾加续行符“\”,后随一个换 行符。 #define LONG_STRING this is a very long \ ↙ string that is used as an example ⑦ 可以用宏定义来表示数据类型。 #define MAX 100 #define ENTRY struct entrytype 在程序中可用ENTRY定义变量: ENTRY table[MAX],* p;
4
有关宏的定义和使用要注意以下几点:
第九章 9. 1预处理功能 9. 2文 件 包 含 9. 3条 件 编 译 9. 4库函数使 用方式
④ 宏定义可以嵌套。例如: #define PI 3.1415926 #define TWOPI ( 2*PI ) 在预处理后,语句 c1=TWOPI * r; 便替换成 c1=( 2 * 3.1415926 ) * r; ⑤ 宏替换只是按原来的定义“机械地”进行替 换,不管替换后的结果是对还是错。例如: #define A 3+2 那么 5/A 被替换成 5/3+2

谭浩强 c语言程序设计(第九章)

谭浩强 c语言程序设计(第九章)
形式1: #ifdef 标识符 程序段1 #else 程序段2 #endif 意义:若该标识 符已被#define 命令定义,则编 译程序段1,否 则编译程序段2 形式2: #ifndef 标识符 程序段1 #else 程序段2 #endif 意义:若该标识
符没有被#define 命令定义,则编 译程序段1,否则 编译程序段2
4
第九章 预处理命令
例:下列程序宏替换。
例 #include <stdio.h> #define N 2 #define M N+1 # define NUM (M+3)*M/2 void main() { int i; for (i=0; i<=NUM; i++); printf(“%d\n”,i); }
第九章 预处理命令
第九章 预处理命令
内容提要: ★宏定义
★文件包含
★条件编译
1
第九章 预处理命令 – 作用:对源程序编译之前做一些处理,生成扩展C 源程序 种类
• 宏定义 • 文件包含 • 条件编译 #define #include #if--#else--#endif等
– 格式:
• “#”开头 • 占单独书写行 • 语句尾不加分号
#ifdef DEBUG printf(“x=%d,y=%d,z=%d\n”,x,y,z); #endif
#define DEBUG
字符串(可为空)
调试时:加上此命令 调试完成后:删去此命令
15
第九章 预处理命令 例5: (选择性地编译不同功能) 。根据需要,有时要把 字母全改为大写输出,另一些时候则要把字母全改为 小写输出。如何适应这两种不同要求。
11
第九章 预处理命令

C语言程序设计第五版谭浩强 ppt课件

C语言程序设计第五版谭浩强 ppt课件

运行结果: sum=34
C语言程序设计
第一章 C语言概述
例1.3 从键盘输入两个整数,输出其中较大的数
#include <stdio.h> void main() 声明部分,定义变量 { int max(int x,int y)
输入:10,20 输出:max = 20
int a,b,c;
scanf(“%d,%d”,&a,&b);
第6章 循环控制
第8章 函数
第7章 数组
第9章 预处理命令
第10章 指针
第11章 结构体与共用体
第12章 位运算
第13章 文件
C语言程序设计
第1章 C语言概述
C语言发展历史 C语言的特点 简单的C程序介绍 C程序的上机步骤
第一章 C语言概述
C语言程序设计
§1.1 C语言发展历史
程序设计语言的发展
<
第一章 C语言概述
9种控制语句: if( )~else~ for( )~ while( )~ do~while( ) continue break switch goto return
C语言程序设计
第一章 C语言概述
表1.1 C语言与Pascal语言比较
C语言 {} if(e) S; int i; int a[10];
不产生编译代码
❖编译预处理命令
非法
<>
例: /*This is the main /* of example1.1*/ */
C语言程序设计
§1.4 C程序的上机步骤
C程序开发步骤
编辑
开始
第一章 C语言概述
程序代码的录入, 生成源程序*.c

C程序设计 谭浩强著 精品课件 第9章 编译预处理

C程序设计 谭浩强著 精品课件  第9章  编译预处理
C 程序设计 第九章 编译预处理
19
例:求3×4矩阵最大元素及位置,程序的两个函数分别 编制在MYPRG.C和EXA96.C两个源文件中。 MYPRG.C—— int fun1(int x[][4]) { int i, j, max; max=x[0][0]; line=col=0; /*不必对外部变量声明*/ for(i=0; i<3; i++) for(j=0; j<4; j++) if(x[i][j]>max) { max=x[i][j]; line=i; col=j; } return(max); }
宏名G有效; main、fun1可引用。 /*宏终止*/
C 程序设计
第九章 编译预处理
9
4) 宏定义时不进行错误性检查; #define PI 3.14l592 5) 宏串中可出现已定义的宏名,这种现象称为宏的 嵌套定义; 如:#define R 3.0 /*宏按书写顺序逐一展开*/ #define PI 3.141592 #define C 2.0*PI*R #define S PI*R*R void main() { printf("C=%f\nS=%f\n", C, S); } 最终输出项C替换为:2.0*3.141592*3.0 S替换为:3.141592*3.0*3.0
C 程序设计 第九章 编译预处理
14
3) 宏定义中宏名与参数的括号间不能有空格;
如:#define S(r)3.141592*(r)*(r) 宏串 由于出现了空格,则认为S是宏名而且无参。 4) VC对宏串中双引号范围内的内容不予替换; 如:#define PR(V) printf("V=%d\t", V); void main() { int a=1, b=2; PR(a); /*printf("V=%d\t", a);*/ PR(b); /*printf("V=%d\t", b);*/ }

C语言谭浩强完整课件

C语言谭浩强完整课件

着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理

C语言程序设计_课件_第九章(适于清华谭浩强版)

C语言程序设计_课件_第九章(适于清华谭浩强版)

注意, 注意,对嵌套结构体的引用必须引用
到最末一级。 到最末一级。
struct OBJECT { struct TASK { long plan; long start; long finish; } ti,tj; int count; } ob;
可以使用scanf(“%d”,&ob.ti.plan) 输 可以使用 入数据。但是不能引用ob.ti 。 入数据。但是不能引用
9.2 结构体与数组 9.2.1结构体包含数组 结构体包含数组 由于结构体的成员可以是任何基 本数据类型和另外一个构造类型, 本数据类型和另外一个构造类型,所 以结构体的成员当然可以是数组。 以结构体的成员当然可以是数组。 下面我们说明一个可以描述一个股票 信息的结构体: 信息的结构体:
struct STOCK { char stockname[8]; /*股票名称 */ 股票名称 char stockcode[6]; /*股票代码 */ 股票代码 float price[3]; /*买 入价、卖出价、成交价 */ 买 入价、卖出价、 }; ;
不能混淆结构体名和结构体变量这两 个概念。 个概念。结构体名实际上标识了程序员定 义的一种新的数据类型, 义的一种新的数据类型,编译系统不可能 为结构体名分配内存空间。 为结构体名分配内存空间。只有当变量被 说明为这种由程序员自己定义的数据类型 的结构体时, 的结构体时,编译系统才会为结构体变量 分配存储空间。在不引起混淆的情况下, 分配存储空间。在不引起混淆的情况下, 结构体变量可以简称为结构体。 结构体变量可以简称为结构体。
*/
Struct STOCK sfz={"ShenFaZhan","000001",8.77,8.78,8.78 }; /*用深发展的数据初始化结构体变量 用深发展的数据初始化结构体变量sfz*/ 用深发展的数据初始化结构体变量 printf("\n %s %s ", sfz.stockname, sfz .stockcode); /*输出股票名称和股票代码 */ 输出股票名称和股票代码 for (i=0;i<3;i++) /*输出股票的买入价、卖出价和成交价 输出股票的买入价、 输出股票的买入价 卖出价和成交价*/ printf("%6.2f ", sfz.price[i]); }

谭浩强C语言PPT

谭浩强C语言PPT

此外,还要告诉TC:Turbo C的“包含文件”和库函数在哪 个子目录中。在安装Turbo c时,如果用户不作另外的指定,系 统会按照默认的方案建立一个目录用来存放Turbo C的系统文件 ,同时在主目录下建立一个INCLUDE子目录用来存放“包含
文件”,另外建立一个LIB子目录用来存放库函数。如果在安 装Turbo C时,用户不采用系统提供的子目录名和安排,而自己 另外指定了子目录名,则应当通知Turbo C系统,以免它找不到 。
允许访问物理地址,能进行位操作,实 现汇编语言的大部分功能,可以直接对 硬件进行操作。所以说C语言既有高级语 言的特征又有低级语言的特征,有人把C 称为“高级语言中的低级语言”或“中 级语言”
生成目标代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率 低10%~20%。
可移植性好(与汇编语言比)。基本上 不做修改就能用于各种型号的计算机和 各种操作系统。
编译
有 有错? 无 连接 执行 不正确 结果 正确? 正确 结束
目标程序 .exe
用Turbo C运行C程序的步骤
Turbo C向用户提供一个集成环境,把程序的编 辑、编译、连接和运行等操作全部集中在一个界面 上进行。 Turbo C运行在DOS环境下。 安装Turbo C 在使用Turbo C之前,一般将Turbo C安装在硬盘 上的某一个子目录下。如c:\TC 安装完成后,在安装的子目录下将会增加两个子 目录: ..include子目录:其中包括stdio.h,math.h等头文件 ..lib子目录:其中包括maths.lib, mathl.lib, graphics.lib等库函数文件。
Make EXE file(F9):编译连接同时进行得到.EXE, 如果有project 文件,则对project文件中的所有列 出的源程序进行编译连接,产生.EXE。

C语言(谭浩强)PPT课件

C语言(谭浩强)PPT课件
C标准 学习方法---学习C语言有捷径吗 VC6.0是什么---工欲善其事,必先利其器 参考资料
10
C语言的优点
简洁高效 较高的可移植性
可移植性指在一个系统上编写的C程序经过很少改动或 不经修改就可以在其他系统上运行。
允许访问硬件 是一种系统编程语言,可以很容易地与汇编语言结合, 适合编写系统级的程序,比如操作系统和编译器 Unix、Linux、Windows其内核清一色是C语言开发, (某些地方是和汇编语言混合开发的)。而且Unix/Linux 上的绝大多数应用也都是C语言开发的 各种语言的编译器,包括Java虚拟机,都是用C语言开 发的。
11
我们可以用C语言做什么
-------C的应用领域
12
C的缺点
Dennis Ritchie对C语言的评语: “C诡异离奇,缺陷重重,却获得极大的成功”。 "C is quirky, flawed, and an enormous success."
C lacks: exceptions range-checking garbage collection object-oriented programm// 表示单行注释,编译器 忽略注释
预处理指令都没有;
2. #include:文件包含编译 预处理指令,表示把括号内 文件的内容替代这条指令。 使用标准函数库的printf等函 数时应在程序开头一行输入: #include <stdio.h>
3. 空行,提高程序的可读性。
4. C程序由一个或多个函数组 成,且每个C程序必须有且只 有一个主函数main。
13
第1章 C语言概述
1.1 C语言出现的历史背景 1.2 C语言的特点 1.3 简单的C语言程序介绍 1.4 运行C程序的步骤和方法 1.5 常见问题

C++谭浩强课件_9章

C++谭浩强课件_9章

使用模板时需要提供具体的类 型参数来实例化模板,生成具 体的类或函数。
STL库简介
STL概述
STL(Standard Template Library)是C标准 库中的一部分,提供了一系列通用的数据结构
和算法。
01
容器
容器是用来存储数据的类,如vector 、list、map等。
03
算法
算法是用来操作容器中的数据的函数,如 sort、find等。
自定义异常类可以更加精确地描述异常的类型和信息,提高程序的可读性和可维护性。
06
多线程编程技术探讨
线程概念及创建方法
线程定义
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中 的实际运作单位。
线程创建方法
在C中,创建线程的方法主要有两种,一种是使用C11标准库中的thread类,另 一种是使用Windows API或POSIX线程库(pthread)。
余部分,进入下一次循环。
02
函数与面向对象编程基础
函数定义与调用
函数定义
C中,函数是一段可以重复使用的代码块,用于执行 特定任务。函数定义包括函数名、参数列表和函用函数。调用 函数时,程序将跳转到函数定义处执行代码,并在 执行完毕后返回调用处。
函数参数传递
引用使用场景
引用通常用于函数参数传递和返回值 ,可以避免数据的拷贝,提高程序效 率。同时,引用也可以用于实现一些 复杂的数据结构和操作。
常量引用与非常量引用
常量引用不能改变所指向的值,非常 量引用则可以。在函数参数传递时, 使用常量引用可以避免因误修改而引 发的错误。
动态内存分配与释放
动态内存分配
C++谭浩强课件_9章

C语言谭浩强完整课件

C语言谭浩强完整课件
这种双重性,使它既是成功的系统描述 语言,又是通用的程序设计语言
1.3 C语言的发展及其特点
C语言主要特点:
用C语言编写的程序可移植性好。
C的编译系统简洁,很容易移植到新系统
在新系统上运行时,可直接编译“标准链接 库”中的大部分功能,不需要修改源代码
几乎所有计算机系统都可以使用C语言
1.4.1 最简单的C语言程序举例
#include <stdio.h>
int main( )
{ printf (”This is a C program.\n”); return 0; }
当main函数执行结束前 将整数0作为函数值
1.4.1 最简单的C语言程序举例
#include <stdio.h>
#include <stdio.h> int main( ) { int a,b,sum; a = 123; b = 456; 用sum的值替代 sum = a + b; printf(”sum is %d\n”,sum); return 0; 希望输出的字符 }
例1.3求两个整数中的较大者。 解题思路: 用一个函数实现求两个整数中的较大者 在主函数中调用此函数并输出结果
#include <stdio.h> int main( ) { 因max函数的定义在main函数之后,需声明 int max(int x,int y); int max(int x,int y) int a,b,c; scanf(”%d,%d”,&a,&b); { int z; c = max(a,b); printf("max=%d\n",c); if (x > y) z = x; else z = y; return 0; return(z); } }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第9章 预处理命令
9.1 宏定义 9.2 “文件包含”处理 9.3 条件编译 习题
ANSI C标准规定可以在C源程序中加入一些“预处 理命令”(preprocessor DireCtiveS) ,以改进程序
设计环境,提高编程效率。这些预处理命令是由 ANSI C统一规定的,但是它不是C语言本身的组 成部分,不能直接对它们进行编译(因为编译程序 不能识别它们)。必须在对程序进行通常的编译(包 括词法和语法分析、代码生成、优化等)之前,先 对程序中这些特殊的命令进行“预处理”, 即根
为1000,如果需要改变数组大小,只需改 #define 行:
#define array-size 500 使用宏定义,可以提高程序的通用性。
(3) 宏定义是用宏名代替一个字符串,也就是作简单 的置换,不作正确性检查。如果写成
#define PI 3.l4l59 即把数字1写成小写字母l,预处理时也照样代入,
(8) 对程序中用双括号括起来的字符串内的字符,即 使与宏名相同,也不进行置换。如例9.2中的 printf函数内有两个l字符,一个在双引号内,它 不被宏置换,另一个在双引号外,被宏置换展开。
不管含义是否正确。也就是说预编译时不作任何 语法检查。只有在编译已被宏展开后的源程序时 才会发现错误并报错。
(4) 宏定义不是C语句,不必在行末加分号。如果加 了分号则会连分号一起进行置换。如:
#define PI 3.1415926;
area=PI*r*r;
经过宏展开后,该语句为
area=3.1415926;*r*r; 显然出现语法错误。
据预处理命令对程序作相应的处理(例如,若程序 中用#define命令定义了一个符号常量A,则在预 处理时将程序中所有的A都置换为指定的字符串。 若程序中用#inClude命令包含一个文件“StDio.h”,
则在预处理时将StDio.h文件中的实际内容代替该命 令)。经过预处理后程序不再包括预处理命令了,最 后再由编译程序对预处理后的源程序进行通常的编
C提供的预处理功能主要有以下三种: 1. 宏定义 2. 文件包含 3. 条件编译
分别用宏定义命令、文件包含命令、条件编译命令 来实现。为了与一般C语句相区别,这些命令以符 号“#”开头。
9.1 宏定义
9.1.1 不带参数的宏定义
用一个指定的标识符(即名字)来代表一个字符串, 它的一般形式为#define 标识符字符串。这就是已 经介绍过的定义符号常量。 如:#definePI3.1415926它的作用是指定用标识符 PI来代替“3.1415926”这个字符串,在编译预处 理时,将程序中在该命令以后出现的所有的PI都 用“3.1415926”代替。这种方法使用户能以一个 简单的名字代替一个长的字符串,因此把这个标 识符(名字)称为“宏名”,在预编译时将宏名替 换成字符串的过程称为“宏展开”。#define是宏 定义命令。

运行情况如下:
input radius:4
l=25.1328
s=50.2655
v=150.7966 说明:
(1) 宏名一般习惯用大写字母表示,以便与变量使用宏名代替一个字符串,可以减少程序中重复 书写某些字符串的工作量。例如,如果不定义PI代 表3.1415926,则在程序中要多处出现3.1415926,不 仅麻烦,而且容易写错(或敲错),用宏名代替,
简单不易出错,因为记住一个宏名(它的名字往往 用容易理解的单词表示)要比记住一个无规律的字 符串容易,而且在读程序时能立即知道它的含义, 当需要改变某一个常量时,可以只改变#define命令 行,一改全改。例如,定义数组大小,可以用
#define array- size 1000
int array[array-size]; 先指定array-size代表常量1000,因此数组array大小
译处理,得到可供执行的目标代码。现在使用的许 多C编译系统都包括了预处理、编译和连接等部分, 在进行编译时一气呵成。因此不少用户误认为预处 理命令是C语言的一部分,甚至以为它们是C语句, 这是不对的。必须正确区别预处理命令和C语句、 区别预处理和编译,才能正确使用预处理命令。C 语言与其他高级语言的一个重要区别是可以使用预 处理命令和具有预处理的功能。
#undef g
f1()
{

}
由于#undef的作用,使G的作用范围在#undef行处终止,因 此在f1函数中,g不再代表8.8。这样可以灵活控制宏定义 的作用范围。
(7) 在进行宏定义时,可以引用已定义的宏名,可以 层层置换。 例9.2
#define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R main() { printf("L=%f\ns=%f\n",L,S); }
例9.1
#define PI 3.1415926
main() {float l,s,r,v; printf("input raDiuS∶"); scanf("%f",&r);
l=2.0*PI*r;
s=PI*r*r;
v=3.0/4*PI*r*r*r; printf("l=%10.4f\nS=%10.4f\nv=%10.4f\n",l,s, v);
(5) #define命令出现在程序中函数的外面,宏名的有 效范围为定义命令之后到本源文件结束。通常, #define命令写在文件开头,函数之前,作为文件 一部分,在此文件范围内有效。
(6) 可以用#undef命令终止宏定义的作用域。例如:
#define g 8.8
main()
{
|
G的有效范围

}
运行情况如下:
L=18.849556
s=28.274333
经过宏展开后,printf函数中的输出项L被展开为 2*3.1415926*3.0,S展开为 3.1415926*3.0*3.0, printf函数调用语句展开为 printf("L=%f\ns=%f\n",2*3.1415926*3.0, 3.1415926*3.0*3.0);
相关文档
最新文档