预处理和语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东华大学计算机学院
21
输入
顺 序 控 制 语 句
• 当程序需要执行键盘输入时,可以使用抽 取操作符>>从输入流cin中抽取键盘输入的 字符和数字,并把它赋给指定的变量。 • 语法格式:
cin >> 变量1 >> 变量2 … >> 变量n ;
• 注意:这里的抽取操作符>>与位移运算符 >>是同样的符号,但这种符号在不同的地 方其含义是不一样的。
2013-8-4
东华大学计算机学院
23
使用cout进行输出
顺 序 控 制 语 句
注意: 赋值符和条件运算的优先级都低于插入操作符: cout << a=b ; cout << a>b ? a : b ; //错误 //错误
可以添加括号改变优先级: cout << ( a = b ) ; cout << ( a>b ? a : b ) ;
12
带参数的宏定义
预 处 理
• 格式:
#define <宏名> (<参数表> <宏体>) 其中: • <宏名>是一个标识符, • <参数表>中可以有一个参数,也可以有多个参数,多个 参数用逗号分隔。 • <宏体>是替换用的字符序列。
例如:#define Print(Var) cout<<(Var)<<endl 用宏名中的参数带入语句中的参数,宏后面没有;号。 Print(Var)中的Print和(之间不能有空格,否则(就会被解释为置换字 符串的一部分。 #define Print(Var, digits) cout << setw(digits) << (Var) << endl 调用 Print(ival, 15) 预处理器就会把它换成 cout << setw(15) << (ival) << endl;
• 赋值语句:由赋值表达式加一个语句结束 标志(分号;)构成的语句。 • 语法格式:
变量 赋值运算符 表达式;
例如: a=1; b+=2; c=sin(d); 可以多重赋值,将一个表达式的值同时赋给多个变量。 如: 变量1=变量2= … =变量n=表达式; 等价于: 变量1=表达式;变量2=表达式;…;变量n=表达式;
2013-8-4 东华大学计算机学院 7
条件编译命令
预 处 理
• 条件编译命令的格式3:
#if <常量表达式1> <程序段1> #elif <常量表达式2> <程序段2> #elif <常量表达式3> <程序段2> … #else <程序段n+1> #endif
• 其中,if,elif和endif是关键字,<常量表达式>是 一个常量表达式,<程序段2>由若干条预处理命令 和语句组成。
• C++程序没有输入/输出语句,它的输入/输 出功能由函数(scanf、printf)或流控制来实 现。 • 输入/输出流(I/O流)是输入或输出的一系列 字节。C++定义了运算符<<和>>的 iostream类。 • 这里介绍如何利用C++的标准输入/输出流 实现数据的输入/输出功能。
2013-8-4
例如:#define PI 3.14159265 定义符号PI为3.14159265 这里PI看起来像一个变量,但它与变量没有任何关系,它只 是一个符号或标志,在程序代码编译前,此符号会用一组指 定的字符来代替。 3.14159265不是一个数值,只是一个字符串,不会进行检查。 在编译前,预处理器会遍历代码,在它认为置换有意义的地 方,用字符串PI的定义值(3.14159265)来代替。 在注释或字符串中的PI不进行替换。
输入/输出示例1
顺 序 控 制 语 句
• 控制不同进制的输出(十进制、八进制、十 六进制)。
#include<iostream> using namespace std; void main() { int a=1001; cout<<”默认下:”<<a<<endl; cout<<”十进制:”<<dec<<a<<endl; cout<<”八进制:”<<oct<<a<<endl; cout<<”十六进制:”<<hex<<a<<endl; } 此程序的运行结果为: 默认下:1001 十进制:1001 八进制:1751 十六进制:3e9
2013-8-4
东华大学计算机学院
3
常用的预处理指令
预 处 理
• 常用的预处理指令有:
• 文件包含命令; • 条件编译命令; • 宏定义命令。
2013-8-4
东华大学计算机学院
4
文件包含命令
预 处 理
• 文件包含命令的格式: #include <文件名> 或 #include “文件名” 其中,include是关键字,文件名指被包含的文件全名。 • 前者<>用来引用标准库头文件,后者“”常用来引用 自定义的头文件。 • 前者<>编译器只搜索包含标准库头文件的默认目录, 后者首先搜索正在编译的源文件所在的目录,找不到 时再搜索包含标准库头文件的默认目录。 • 如果把头文件放在其它目录下,为了查找到它,必须 在双引号中指定从源文件到头文件的完整路径。
2013-8-4 东华大学计算机学院
//正确 //正确
24
应用形式
顺 序 控 制 语 句
• 在C++程序中,cin与cout允许将任何基本 数据类型的名字或值传给流。而且书写格 式较灵活,可以在同一行中串连书写,也 可以分写在几行,提高可读性。
例如: cout<<”hello”; 又例如:int a; double b; cout<<3; cin>>a>>b; //cin可分辨不同 cout<<endl; //的抽取变量类型 等价于: cout<<”hello”<<3<<endl; 也等价于: cout<<”hello” //注意:行末无分号 <<3 //行末无分号 <<endl;
2013-8-4
东华大学计算机学院
26
常用的I/O流控制符
顺 序 控 制 语 句
控制符 dec hex
含义 数值数据采用十进制表示 数值数据采用十六进制表示
oct
setw(n) setprecision(n) setioflags(ios::uppercase) setioflags(ios::lowercase) setiosflags(ios::left) setiosflags(ios::right)
2013-8-4 东华大学计算机学院 6
条件编译命令
预 处 理
• 条件编译命令的格式2:
#ifndef <标识符> <程序段1> #else <程序段2> #endif
或
#ifndef <标识符> <程序段1> #endif
• 其中,ifndef,else和endif是关键字,<程序段1> 和<程序段2>由若干条预处理命令和语句组成。
调用 Print(ival, 15);2013-8-4东华 Nhomakorabea学计算机学院
14
语句
语
• 高级语言源程序的基本组成单位是语句。在C++ 程序中,语句是最小的可执行单元,一条语句由 一个分号结束。 • C++程序的语句按其功能可以划分为两类:
• 操作运算语句; • 流程控制语句。
句
• 基本的控制结构有三种:
面向对象程序设计(C++)与实践 预处理和语句
2013-8-4
东华大学计算机学院
1
主要内容
• • • • • 预处理 语句 顺序控制语句 选择控制语句 跳转语句
2013-8-4
东华大学计算机学院
2
预处理
预 处 理
• 预处理:根据已放置在文件中的预处理指 令来修改源文件的内容。 • 预处理指令:是在程序被正常编译之前执 行的指令。 • 预处理器会分析/执行所有的预处理器指令, 然后删除它们,得到一个仅包含C++语句 的转换单元。 • 预处理指令以#号开头。
• 空语句:指只有一个分号而没有表达式的语句。 • 语法格式:
;
• 空语句不做任何操作运算,而只是作为一种形式 上的语句,填充在控制结构之中。这些填充处需 要一条语句,但又不做任何操作。 • 空语句是最简单的表达式语句。
2013-8-4
东华大学计算机学院
18
表达式语句—赋值语句
顺 序 控 制 语 句
2013-8-4
东华大学计算机学院
22
使用cout进行输出
顺 序 控 制 语 句
• 当程序需要在屏幕上显示输出时,可以使 用插入操作符<<向输出流cout中插入字符 和数字,并把它在屏幕上显示输出。 • 语法格式:
cout << 表达式1 << 表达式2 … << 表达式n ;
• 注意:与输入一样,这里的插入操作符<< 与位移运算符<<是同样的符号,但这种符 号在不同的地方其含义是不一样的。
• 顺序结构; • 选择结构; • 循环结构。
2013-8-4
东华大学计算机学院
15
顺序控制语句
顺 序 控 制 语 句
• 顺序结构:指按照语句在程序中的先后次 序一条一条的顺次执行。 • 顺序控制语句:一类简单的语句,上述的 操作运算语句即是顺序控制语句,包括:
• 表达式语句; • 输入/输出等。
2013-8-4 东华大学计算机学院 8
宏定义命令
预 处 理
• 宏定义命令:将一个标识符定义为一个字 符串。 • 该标识符被称为宏名,被定义的字符串称 为替换文本。 • 宏命令的格式:
• 简单的宏命令; • 带参数的宏命令。
2013-8-4
东华大学计算机学院
9
简单的宏定义命令
预 处 理
• 格式: #define <宏名> <字符串> 其中,define是关键字,<宏名>是一个标识符, <字符串>是任意的字符序列。
2013-8-4 东华大学计算机学院 10
简单的宏定义命令
预 处 理
• 在C中常以#define来定义符号常量,但在 C++中最好使用const 来定义常量。
#define PI 3.14159265 const long double PI=3.14159265;
• 两者比较下,前者没有类型的指定容易引 起不必要的麻烦,而后者定义清楚,所以 在C++中推荐使用const来定义常量。
2013-8-4 东华大学计算机学院 25
常用的I/O流控制符
顺 序 控 制 语 句
• 用控制符(manipulators)可以对I/O流的格 式进行控制。 • C++在库文件iomanip中定义了控制符对象, 可以直接将这些控制符嵌入到I/O语句中进 行格式控制。在使用这些控制符时,要在 程序的开头包含库文件iomanip。
2013-8-4 东华大学计算机学院 13
带参数的宏定义
预 处 理
• 在C++语言中,带参数的宏定义常用内联函 数替代,这样可以增强类型的检查。
template<class T> inline void Print (const T& var, const int& digits) { cout<<setw(digits)<<var<<endl; }
数值数据采用八进制表示
设置域宽为n个字符 设置浮点数的小数位数(包括小数点) 十六进制数大写输出 十六进制数小写输出 左对齐 右对齐
setiosflags(ios::showpos)
setfill(c) endl
2013-8-4
设置正、负符号的显示
设置填充字符为c 插入换行符,并刷新流
东华大学计算机学院 27
2013-8-4
东华大学计算机学院
5
条件编译命令
预 处 理
• 条件编译命令的格式1:
#ifdef <标识符> <程序段1> #else <程序段2> #endif
或
#ifdef <标识符> <程序段1> #endif
• 其中,ifdef,else和endif是关键字,<程序段1>和 <程序段2>由若干条预处理命令和语句组成。
2013-8-4
东华大学计算机学院
11
简单的宏定义命令
预 处 理
• #undef 删除#define定义的符号。例:
#define PI 3.14159265 //之间所有的PI都可以被替换为3.14159265 … #undef PI //之后不再有PI这个标识符
2013-8-4
东华大学计算机学院
2013-8-4
东华大学计算机学院
16
表达式语句
顺 序 控 制 语 句
• 任何一个表达式后面加上一个分号就构成 了表达式语句(没有分号的不是语句)。 • 常见的表达式语句:
• 空语句; • 赋值语句; • 函数调用语句。
2013-8-4
东华大学计算机学院
17
表达式语句—空语句
顺 序 控 制 语 句
2013-8-4 东华大学计算机学院 19
表达式语句—函数调用语句
顺 序 控 制 语 句
• 函数调用语句:由函数调用表达式加一个 语句结束标志(分号;)构成的语句。 • 例如:
scanf(“%d”,&e); max(a,b);
2013-8-4
东华大学计算机学院
20
输入/输出(I/O)
顺 序 控 制 语 句