C语言课件(谭浩强):第七章 编译预处理

合集下载

C语言程序设计(第四版) 谭浩强 课件 PPT 完整版

C语言程序设计(第四版) 谭浩强 课件 PPT 完整版

语句
printf语句中的“\n‖是换行

<
>
C语言程序设计
第/* example1.1 calculate the sum of a and b*/ #include <stdio.h> 预处理命令 /* This is the main program */ void main() 注释 { int a,b,sum; /*定义变量*/ 函数 a=10; b=24; 语句 sum=add(a,b); printf(”sum= %d\n",sum); } printf语句中的“ %d ‖是表
C语言程序设计
第一章 C语言概述
C语言结构特点
函数与主函数
程序由一个或多个函数组成 必须有且只能有一个主函数main(),可以放在程序中任一 位臵 程序执行从main开始,在main中结束,其它函数通过嵌 套调用得以执行。
程序语句
C程序由语句组成 用‚;‛作为语句终止符
注释
C语言程序设计
第一章 C语言概述
Turbo C集成开发环境
配臵要求
UNIX,PC-DOS,MS-DOS,UCDOS操作系统 硬盘容量约2M,448K RAM运行空间
安装Turbo C
创建子目录 Install 若不是可安装盘,将文件拷贝到对应的目录下
TC
*.* *.*
INCLUDE SYS
Alt +x Alt+F ,Q
帮助Help
F1 Ctrl+F1
<
>
C语言程序设计
第一章 C语言概述
常用热键 基本操作:
F10-----调用主菜单 F2------存盘 F3------打开 F1------帮助信息 Alt+F9------Compile Ctrl+F9------Run Alt+F5------User Screen Alt+X ------退出Tc

C语言谭浩强完整课件

C语言谭浩强完整课件
2020/12/15
1.3 C语言的发展及其特点
➢C语言是国际上广泛流行的计算机高级
语言。 ➢C语言的发展:
具有多种数据类型
BCPL语言
B语言
C语言
2020/12/15
精练、接近硬件,但 过于简单, 无数据类型
1.3 C语言的发展及其特点
• 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。
2020/12/15
函数体
1.4.1 最简单的C语言程序举 例
#include <stdio.h>
int main( )
{
printf (”This is a C program.\n”);
return 0;
输出函数
}
2020/12/15
输出语句
1.4.1 最简单的C语言程序举 例
#include <stdio.h> int main( ) {
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 运算符丰富。 • 有34种运算符 • 把括号、赋值、强制类型转换等都作为运算符处理 • 表达式类型多样化
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 数据类型丰富。 • 包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型 • C99又扩充了复数浮点类型、超长整型(long long)、布尔类型(bool) • 指针类型数据,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
会自动地、有条不紊地进行工作 ➢计算机的一切操作都是由程序控制的,
离开程序,计算机将一事无成
2020/12/15

c语言程序设计ppt谭浩强

c语言程序设计ppt谭浩强

c语言程序设计ppt谭浩强C语言程序设计是一门基础的计算机编程课程,它以C语言为基础,教授程序设计的基本概念、原理和方法。

谭浩强教授是中国著名的计算机教育专家,他编写的《C程序设计》教材广受好评。

以下是关于C语言程序设计的一个PPT内容概要,供参考。

C语言程序设计PPT内容1. 课程介绍- C语言的历史与发展- C语言的特点- C语言在现代编程中的地位2. C语言环境搭建- 编译器的安装与配置- 编写第一个C程序- 编译与运行3. 基本数据类型- 整型(int)- 浮点型(float, double)- 字符型(char)- 枚举类型(enum)4. 变量与常量- 变量的定义与作用域- 常量的概念与使用5. 运算符与表达式- 算术运算符- 赋值运算符- 比较运算符- 逻辑运算符- 位运算符- 条件运算符6. 控制结构- 顺序结构- 选择结构(if, switch)- 循环结构(while, do-while, for)7. 数组与字符串- 一维数组- 二维数组- 字符串的处理8. 函数- 函数的定义与声明- 函数的参数与返回值- 函数的调用与作用域9. 指针- 指针的概念- 指针的基本操作- 指针与数组- 指针与函数10. 结构体与联合体- 结构体的定义与使用- 联合体的特点与应用11. 预处理指令- 宏定义(#define)- 文件包含(#include)- 条件编译(#ifdef, #ifndef)12. 文件操作- 文件的打开与关闭- 文件的读写操作- 文件的定位13. 动态内存分配- malloc与free- 动态数组的创建与销毁14. 错误处理与调试- 常见的编程错误- 调试工具的使用15. C语言高级特性- 位域- 静态成员- 内联函数- 引用传递16. C语言在实际应用中的例子- 数据处理- 图形界面编程- 嵌入式系统开发17. 课程总结与展望- 课程学习要点- C语言的未来发展趋势18. 附录- 常见问题解答- 推荐阅读材料- 学习资源链接请注意,以上内容只是一个概要,实际的PPT可能会包含更多的细节和示例代码,以及对每个主题的深入讲解。

修——C语言程序设计(第三版)第七章-谭浩强

修——C语言程序设计(第三版)第七章-谭浩强

关于形参与实参的说明:
4.在被定义的函数中,必须指定形参的类型。
5.实参和形参在数量、类型、顺序上应严格一致 。如果实参为实型,形参为整型,或者相反, 则按不同类型数值的赋值规则进行转换。
例如:实参值a为3.5,而形参x为整型, 则将实数3.5转换成整数3,然后送到形参b。 字符型与整型可以互相通用。

关于形参与实参的说明:
6. 函数调用时只能把实参的值传给形参,而不能 由形参的值反向传给实参,单向传递 。 在内存中,实参单元与形参单元是不同的单元。 在函数调用过程中,形参的值发生改变,并不 会改变主调函数的实参的值,因此实参的值维 持原值。
• 在很多情况下,不要求无参函数有返回值, 此时函数类型符可以写为void。 • 例:void Hello( ) { printf (“Hello\n”); } Hello函数是一个无参函数,当被其他函数调 用时,输出Hello字符串。
2. 有参函数定义的一般形式
类型标识符 函数名(形式参数表列)
注意: 3.若在定义函数时不指定函数类型,系统会隐 含指定函数类型为int型。 因此上例中max函数左端的int可以省略。 4.在有返回值函数中,至少应有一个return语句 5.C程序中,一个函数的定义可以放在任意位置 ,既可放在主函数main之前,也可放在main 之后。
§7.3向函数传递值和从函数返回值
由主函数调用其他函数,其他函数也可以互相调用。 同一个函数可以被一个或多个函数调用任意多次。
§7.2
函数的定义
• C语言的函数,可以从不同角度进行分类
1.从使用者的角度,分为: 标准库函数、自定义函数 a.标准库函数 由系统提供,用户无须定义和说明,在程序中可直 接调用,只需在程序前把该函数所在的头文件包 含进来即可。 b.用户自定义函数 由用户按需要编写的函数,但必须对函数进行定义 和说明后,才能使用。

C++程序设计(第3版)谭浩强 第7章PPT课件

C++程序设计(第3版)谭浩强 第7章PPT课件
• 7.1.4 结构体数组
结构体数组每个元素都是一个结构全类型的数据,它们分别包括各个成员项。 例7.2 对候选人得票的统计程序。设有3个候选人,最终只能有1个人当选为领导。今有10 个人参加投票,从键盘先后输入这10个人所投候选人的名字,要求最后输出各候选人得票结 果。 方法二:string法
第7章 用户自定义数据类型
第7章 用户自定义数据类型
• 7.2 枚举类型
例7.7 口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋中任意取出3个球,问得 到不同颜色的球的取法,输出每种排列的情况。
写在最后
成功的基础在于好的学习习惯
The foundation of success lies in good habits
结构体变量的指针引用成 员变量方法: (1)(*p).成员名 (2)p->成员名
第7章 用户自定义数据类型
• 7.1.5 指向结构体变量的指针
• 2.用结构体变量和指向结构体变量的指针构成链表 链表是一种常见的重要的数据结构。
例7.4 建立一个如图7.6所示的简单链表, 它由3个学生数据的结点组成。输出各 结点中的数据。
20
谢谢聆听
·学习就是为了达到一定目的而努力去干, 是为一个目标去 战胜各种困难的过程,这个过程会充满压力、痛苦和挫折
Learning Is To Achieve A Certain Goal And Work Hard, Is A Process To Overcome Various Difficulties For A Goal
声明枚举类型的一般形式为: enum 枚举类型名 {枚举常量表}; 例如: enum weekday {sun,mon,tue,wed,thu,fri,sat} workday,week_end; 说明: (1)枚举元素按常量处理,故称枚举常量。 (2)枚举元素作为常量,它们是有值的,其值是一个整数,编译系统定义时的顺序对它们 赋值为0,1,2,…… (3)枚举值可以用来做判断比较,按整数比较规则进行比较。 (4)不能把一个整数直接赋给一个枚举变量,枚举变量只能接受枚举类型数据。

C++程序设计(谭浩强完整版)第七章

C++程序设计(谭浩强完整版)第七章

结构体类型变量的引用 1、不能对结构体变量整体赋值或输出,只能分别对各个成 员引用。 错误 cin>>student1; 必须用成员名引用
cin>>student1.num;
student1.num=100;
可以将一个结构体变量整体赋给另外一个相同类型的结构 体变量。 student2=student1; 2、嵌套的结构体变量必须逐层引用。 student1.birthday.day=25; 3、结构体变量中的成员可以同一般变量一样进行运算。 student1.birthday.day++; student1.score+=60;
int age;
}; struct person class[10]={ “Jone”,17, “Paul”,19, “Mary”,18,
“Adam”,16
};
输出:Adam 输出:d
A) cout<<class[3].name<<endl;
输出:a B) cout<<class[3].name[1]<<endl; 输出:M C) cout<<class[2].name[1]<<endl;
char addr[30];
};
分号不能少
定义结构体类型变量的方法 一、先定义结构体类型再定义变量名
struct student { int num; 结构体类型只是一种数据 char name[20]; 类型,不占内存空间,只 char sex; 有定义结构体类型变量时 int age; 才开辟内存空间。 float score; char addr[30]; }; struct student student1, student2;

c语言程序设计第7章(谭浩强)PPT版本

c语言程序设计第7章(谭浩强)PPT版本

如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()

38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }

C语言谭浩强完整课件

C语言谭浩强完整课件

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

《C语言程序设计》教案(清华谭浩强)

《C语言程序设计》教案(清华谭浩强)

《C语言程序设计》教案(清华谭浩强)第一章:C语言概述1.1 课程介绍介绍C语言的历史和发展解释C语言的特点和应用范围强调学习C语言的重要性和目的1.2 C语言的基本概念解释编程语言和编译器的概念介绍C语言的基本数据类型和变量讲解C语言的语法结构和程序结构1.3 C语言的编译过程解释编译器的角色和功能介绍编译过程中的预处理、编译、汇编和步骤强调编译过程中产生的文件和它们的作用第二章:基本数据类型和运算符2.1 基本数据类型介绍整型、浮点型、字符型和布尔型的概念和用法解释不同数据类型的存储方式和大小强调数据类型的选择和使用场景2.2 变量和常量解释变量的概念和作用介绍变量的声明和初始化方法讲解常量的概念和用法2.3 运算符介绍算术运算符、关系运算符和逻辑运算符的概念和用法解释赋值运算符和条件运算符的作用强调不同运算符的优先级和使用规则第三章:控制语句3.1 条件语句介绍if语句的语法和用法讲解switch语句的概念和用法强调条件语句的选择和嵌套使用3.2 循环语句介绍for循环、while循环和do-while循环的概念和用法解释循环控制语句如break和continue的作用强调循环条件的设置和循环次数的控制3.3 跳转语句介绍goto语句的概念和用法讲解label标签的作用和跳转规则强调跳转语句的使用场景和可能导致的问题第四章:函数和指针4.1 函数的基本概念介绍函数的定义和声明讲解函数的参数传递和返回值强调函数的命名规则和命名规范4.2 指针的概念和用法解释指针的概念和作用介绍指针的声明和初始化方法讲解指针的赋值和指针运算4.3 指针和数组介绍数组的概念和用法解释指针和数组的关系强调指针在数组操作中的应用第五章:结构体和文件操作5.1 结构体的概念和用法介绍结构体的定义和声明讲解结构体的成员访问和内存布局强调结构体在数据组织中的应用5.2 文件操作的基本概念解释文件的概念和文件操作的重要性介绍文件打开、读写、关闭等操作的方法强调文件操作中的错误处理和文件指针的管理第六章:动态内存分配6.1 动态内存分配的概念介绍动态内存分配的原因和必要性解释malloc、calloc和realloc函数的作用和用法强调动态内存分配的注意事项和错误处理6.2 链表的概念和用法介绍链表的定义和结构讲解链表的创建、插入、删除和遍历操作强调链表的优势和应用场景6.3 动态内存分配的应用实例通过实例演示动态内存分配在实际编程中的应用讲解内存泄漏和内存溢出的概念强调编写高效和安全的程序的重要性第七章:字符串处理7.1 字符串的基本概念介绍字符串的定义和表示方法解释字符串的长度和字符串的结束标志强调字符串与数组的区别和联系7.2 字符串的常用函数介绍字符串的输入输出函数如printf和scanf 讲解字符串的拷贝、连接、比较等操作函数强调字符串处理函数的使用和注意事项7.3 字符串处理的应用实例通过实例演示字符串处理在实际编程中的应用讲解字符串排序、查找和替换等操作强调字符串处理在文本分析和数据处理中的应用第八章:标准库函数8.1 标准输入输出库函数介绍标准输入输出库stdio.h中的常用函数讲解文件读写、数据转换等函数的用法和功能强调标准库函数的使用场景和注意事项8.2 字符串处理库函数介绍字符串处理库string.h中的常用函数讲解字符串比较、查找和替换等函数的用法和功能强调字符串处理库函数的使用和与其他库函数的配合8.3 数学计算库函数介绍数学计算库math.h中的常用函数讲解数学运算、三角函数和指数函数等函数的用法和功能强调数学计算库函数在数学计算和科学计算中的应用第九章:并发编程和同步机制9.1 并发编程的基本概念介绍并发编程的定义和目的解释进程和线程的概念和关系强调并发编程的优势和挑战9.2 并发编程的同步机制介绍互斥锁、条件变量和信号量等同步机制的原理和用法讲解同步机制在多线程编程中的应用和注意事项强调同步机制在避免竞态条件和数据一致性中的重要性9.3 并发编程的应用实例通过实例演示并发编程在实际应用中的优势和挑战讲解多线程的创建、同步和通信等操作强调并发编程在多任务处理和性能优化中的应用第十章:C语言编程实践10.1 编程实践的重要性强调编程实践在学习和掌握C语言中的重要性解释编程实践对于提高编程能力和解决问题的作用强调编程实践中的代码质量和编程规范10.2 编程实践的项目和案例介绍常见的编程实践项目和案例讲解实际编程中的问题解决方法和技巧强调编程实践中的调试和测试的重要性10.3 编程实践的资源和工具介绍编程实践中的常用工具和环境讲解集成开发环境(IDE)的使用和代码管理强调编程实践中的团队合作和代码分享的重要性重点和难点解析重点环节1:C语言的基本概念和特点需要重点关注C语言的历史和发展,以及其特点和应用范围。

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

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

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

c语言程序设计谭浩强第07章

c语言程序设计谭浩强第07章

7.3.3 #ifndef 与 #endif命令
格式一
#ifndef 标识符
程序段 #endif
功能
如果“标识符”没有用“#define 标识符”定义过,则编译“程序 段” ,否则不编译。
例 输入一行字母字符,根据需要设置条件编译,使之能将字
母全改为大写输出或全改为小写输出。
#define LETTER 1 main( ) { int i=0; char c , str[20] =“CLanguage” ; while( (c=str[i]) !=‘\0’)
}
源程序file1.c
int max(x,y)
int x,y;
{ int z;
if (x>y) z = x;
else
z = y;
return (z) ;
}
§ 7.3条件编译
根据给定的条件,来决定源程序的编译范围 。即只对源程序中必要的部分进行编译,而对 其余部分不进行编译,不产生目标代码。
7.3.1 #if #else #endif命令
}
运行结果:MAX=9
§7.2 文件包含
格式
#include <filename> 或 #include "filename"
功能
将一个指定的文件嵌入包含到当前的源文件中。系统对嵌入后的
源文件进行整体编译处理。
在指定的标准目录下查找
如 #include <stdio.h> #include "math.h "
首先在当前目录下查找
使用文件包含语句,需注意的问题
1.一条文件包含命令只能包含一个指定的文件。 2.文件包含可以嵌套。如:

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程序设计 谭浩强 第07章课件

c程序设计   谭浩强 第07章课件

7.2.3 二维数组的初始化
可以用下面的方法对二维数组初始化:
(1) 按行分段赋值。如 int a[3][4]={{1,2,3,4},{5,6,7,8},{9, 10,11,12}}; 这种赋初值方法比较直观,把第1个花括弧内的数据给 第1行的元素,第2个花括弧内的数据赋给第2行的元 素……即按行赋初值。
//输出源数组,并转换成目标数组 printf("source array:\n"); for (i=0;i<2;i++) {
for (j=0;j<3;j++) {
printf("%5d",arrSource[i][j]); arrDest[j][i]=arrSource[i][j]; } printf("\n"); }
在实际问题中有很多量是二维的或多维的, 因此C语言 允许构造多维数组。多维数组元素有多个下标, 以标识 它在数组中的位置。 本小节只介绍二维数组,多维数组 可由二维数组类推而得到。
7.2.1 二维数组的定义 一般形式:
类型说明符 数组名[常量表达式][常量表达式]; 例如:int a[3][4],b[5][10]; 定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数
int i; int f[20]={1,1}; for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) {
if(i%5==0) printf("\n"); printf(“%10d",f[i]); } }
运行结果如下:
1

谭浩强C程序设计清华预处理

谭浩强C程序设计清华预处理
• 所谓文件包含处理是指一个源文件可以将另外一 个源文件的全部内容包含进来C语言提供了 include命令用来实现文件包含的操作
其一般形式为: include "文件名"
或 include <文件名>
例九.六 将例九.五时格式宏做成头文件把
它包含在用户程序中
二主文件
一将格式宏做成头文件 include <stdio.h>
三.五↙
r=三.五0l=二一.九九s=三八.四八v=一七九 .五九
带参数的宏和函数的区别:
五 使用宏次数多时宏展开后源程序长因为每展开一 次都使程序增长而函数调用不会使源程序变长
六 宏替换不占运行时间只占编译时间而函数调用则 占运行时ቤተ መጻሕፍቲ ባይዱ分配单元、保留现场、值传递、返 回
如果善于利用宏定义可以实现程序的简化 如事先将程序中的输出格式定义好以减少 在输出语句中每次都要写出具体的输出格 式的麻烦
printf"l=%一0.四f\ns=%一0.四f\nv=%一0.四f\n"lsv;
运行情况如下:
input radius: 四↙
说明:
一=二五.一三二八
s=五0.二六五五
v=一五0.七九六 六
一 宏名一般习惯用大写字母表示以便与变量名相区 别但这并非规定也可用小写字母
二 使用宏名代替一个字符串可以减少程序中重复书 写某些字符串的工作量
• 这个标识符名字称为宏名
• 在预编译时将宏名替换成字符串的过程称为宏展开 define是宏定义命令
例九.一 使用不带参数的宏定义
include <stdio.h> define PI 三.一四一五九二六
void main float lsrv; printf"input radius:"; scanf"%f"&r; l=二.0*PI*r; s=PI*r*r; v=四.0/三*PI*r*r*r;
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
……. t=MAX(a+b,c+d); …… } 宏展开:t=(a+b)>(c+d)?(a+b):(c+d);
int max(int x,int y) { return(x>y?x:y); } main() { int a,b,c,d,t;
……. t=max(a+b,c+d); ……… }
<>
❖带参的宏与函数区别
x=4; y=6;
z=POWER(x+y); 宏展开:z=x+y*x+y; 一般写成: #define POWER(x) ((x)*(x)) 宏展开: z=((x+y)*(x+y));
例 用宏定义和函数实现同样的功能
#define MAX(x,y) (x)>(y)?(x):(y) ……. main() { int a,b,c,d,t;
/*ch8_10.c*/ #include <stdio.h> #include "d:\fengyi\bkc\powers.h" #define MAX_POWER 10 void main() { int n;
printf("number\t exp2\t exp3\t exp4\n"); printf("----\t----\t-----\t------\n"); for(n=1;n<=MAX_POWER;n++) printf("%2d\t %3d\t %4d\t %5d\n",n,sqr(n),cube(n),quad(n)); }
❖一般形式: #define 宏名 [宏体]
❖ቤተ መጻሕፍቲ ባይዱ能:用指定标识符(宏名)代替字符序列(宏体)
❖定如义位#置def:i任ne意Y(一ES般1在函数外面)
❖作用域##dd:从eeffiinn定ee 义命NPIO令到30.1文41件59结26束
❖#unde#fd可ef终ine止宏OU名T例作用mp#rdai域neintffi((n)“He ellYo,EWSorld”)1;
❖宏格展式开例::例##预dd###eedud编ffieiennnffed译eiinneee时WfLEWIL,DN用EIT宏GDNH{}宏TTG…名HHT体8…H0W8替..0(WID换ITD宏HT+H名4+04--0-)不作Y语ES法原检作查用域
❖❖❖例如展宏引宏开定号定例宏#后d展义中义e宏:pf#i开nr可 的 中d宏展iene:veetii展嵌内使f开ffalli(((ssnpvMxx“r开ee:=2aer=套容用=iA*rnL==ii:=PffvXtE1Y,与必PfaL((I(N)xxv=E“rEI==2=a%不宏要GSN*=r=M8=P)Tf3GN0\能名的0nHAI.)(T=O1+8”X*,%4H4递相括0)2Pp##m{}+10+…*;fIrudp152\*a4i归同号n*nner209;…x0p2ip”tdfn))(fi,r;r;也(n()3et*.iif“n.n2e.f(c1“tt;不)offe4((Yr“r“1rcYre置Eeo5orEcSr9rr!otS换r*\!enr\2n!c”)\)(”n;t;)!0”\;))n;”);
YES新作用域
带参数宏定义
❖一般形式: #define 宏名(参数表) 宏体
例 #define S(a,b) a*b
不能加空格
………..
area=S(3,2); 宏展开: area=3*2;
❖宏展开:形参用实参换,其它字符保留
❖宏体及各形参外一般应加括号()
例 #define S (r) PI*r*r 相当例于定#d义efi了ne不带PO参W宏ESR,(代x)表字x符*x串“(r) PI*r*r”
一般形式: #include “文件名”
或 #include <文件名> 处理过程:预编译时,用被包含文件的内容取代
该预处理命令,再对“包含”后的文件作一个源 文件编译
#include “file2.c” A
file1.c
B file2.c
file2.c A file1.c
被包含文件内容
❖源文件(*.c) ❖头文件(*.h)
文件包含可嵌套
宏定义 数据结构定义 函数说明等
file3.c file2.c
A
file1.c
#include “file2.c” #include “file3.c”
A
B
file1.c
file2.c
C file3.c
例 文件包含举例
/* powers.h */ #define sqr(x) ((x)*(x)) #define cube(x) ((x)*(x)*(x)) #define quad(x) ((x)*(x)*(x)*(x))
第七章 编译预处理
作用:对源程序编译之前做一些处理,生成扩展C 源程序
种类
❖宏定义 #define ❖文件包含 #include ❖条件编译 #if--#else--#endif等
格式:
❖“#”开头 ❖占单独书写行 ❖语句尾不加分号
§7.1 宏定义
不带参数宏定义
宏体可缺省,表示宏名 定义过或取消宏体
带参宏
函数
处理时间 编译时
程序运行时
参数类型 处理过程
程序长度
无类型问题
定义实参,形参类型
不分配内存
分配内存
简单的字符置换 先求实参值,再代入形参
变长
不变
运行速度 不占运行时间 调用和返回占时间
<>
§7.2 文件包含
功能:一个源文件<> 可直将接另按标一准个目录源搜文索件的内容全部
包含进来
“” 先在当前目录搜索,再搜索标准目录 可指定路径
相关文档
最新文档