




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章第一章 C+C+基础知识基础知识 C+基础知识基础知识 v本章将简要介绍本章将简要介绍C+中的数据类型及相关中的数据类型及相关 运算,以及常量、变量、表达式、语句等,运算,以及常量、变量、表达式、语句等, 最后介绍简单的输入输出方法。最后介绍简单的输入输出方法。 本章内容本章内容 1.1 C+语言概述语言概述 1.2 一个一个C+程序实例程序实例 1.3 C+的词法单位的词法单位 1.4 C+中的数据类型中的数据类型 1.5 常量和变量常量和变量 1.6 运算符和表达式运算符和表达式 1.7 数组与字符数组数组与字符数组 1.8 简单的输入输出简单的输入输出 1.1 C+语言概述语言概述
2、 历史:历史: C+C+是由是由C C语言为基础发展起来的。语言为基础发展起来的。 C C语言是作为语言是作为UNIXUNIX操作系统的开发语言为人操作系统的开发语言为人 们所认识。七十年代末,们所认识。七十年代末,C C语言开始移植到非语言开始移植到非 UNIXUNIX环境中,并逐步脱离环境中,并逐步脱离UNIXUNIX系统成为一种独系统成为一种独 立的程序设计语言。立的程序设计语言。 19881988年美国国家标准协会年美国国家标准协会ANSIANSI对对C C语言进行语言进行 了标准化,产生了了标准化,产生了ANSI CANSI C。 1.1 C+语言概述语言概述 (1 1)C C语言既
3、具备高级语言的结构和编程环境,又提语言既具备高级语言的结构和编程环境,又提 供类似于汇编语言那样的系统资源操纵能力及程序执行效供类似于汇编语言那样的系统资源操纵能力及程序执行效 率。率。适合解决有实时要求的问题。适合解决有实时要求的问题。 C C语言的主要特点:语言的主要特点: (2 2)有丰富的运算符和数据类型,表达式类型多样)有丰富的运算符和数据类型,表达式类型多样 化,可以方便地实现在其他语言中较难实现的运算,对各化,可以方便地实现在其他语言中较难实现的运算,对各 种不同类型的程序设计都有良好的适应性。种不同类型的程序设计都有良好的适应性。 (3 3)以函数为基础实现程序的结构化设计,支
4、持大)以函数为基础实现程序的结构化设计,支持大 型程序的多文件构成及单个文件独立编译,适合大型复型程序的多文件构成及单个文件独立编译,适合大型复 杂程序的设计。杂程序的设计。 (4 4)语言简洁、紧凑,使用方便、灵活。)语言简洁、紧凑,使用方便、灵活。 1.1 C+语言概述语言概述 例例 有一个若干字符的字符串有一个若干字符的字符串, ,今输入一个字符今输入一个字符, ,要求程要求程 序将字符串中该字符删去。用外部函数实现。序将字符串中该字符删去。用外部函数实现。 1.1 C+语言概述语言概述 #include void enterString(char); void deleteString
5、(char,char); void printString(char); void main() char c; char str80; enterString(str); scanf(%c, deleteString(str,c); printString(str); 1.1 C+语言概述语言概述 #include void enterString(char str80) gets(str); #include void deleteString(char str, char ch) int i,j; for(i=j=0;stri!=0;i+) if(stri!=ch) strj+=stri
6、; strj=0; 1.1 C+语言概述语言概述 #include void printString(char str) puts(str); 1.1 C+语言概述语言概述 C+C+是由是由C C发展而来的以面向对象为主要特发展而来的以面向对象为主要特 征的语言。作为征的语言。作为C C语言的超集,语言的超集,C+C+继承了继承了C C的的 所有优点,又对数据类型做了扩充,使得编所有优点,又对数据类型做了扩充,使得编 译系统可以检查出更多类型错误。译系统可以检查出更多类型错误。 C+C+支持面向对象程序设计,通过类和对象支持面向对象程序设计,通过类和对象 的概念的概念把数据和对数据的操作封装在
7、一起把数据和对数据的操作封装在一起, 通过派生、继承、重载和多态性等特征实现通过派生、继承、重载和多态性等特征实现 了软件重用和程序自动生成,使得大型复杂了软件重用和程序自动生成,使得大型复杂 软件的构造和维护变得更加有效和容易。软件的构造和维护变得更加有效和容易。 C+C+语言的主要特点:语言的主要特点: 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 #include int sum(int a, int b) return a+b; double sum(double a, double b) return a+b; void main() in
8、t a, b; double c, d; printf(请输入两个整数:请输入两个整数:); scanf(%d%d, printf(%d+%d=%dn, a, b, sum(a, b); printf(请输入两个实数:请输入两个实数:); scanf(%lf%lf, printf(%.3f+%.3f=%.3fn, c, d, sum(c, d); 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C+语言概述语言概述 1.1 C
9、+语言概述语言概述 C+C+与与C C完全兼容,很多用完全兼容,很多用C C编写的库函数和编写的库函数和 应用程序都可以为应用程序都可以为C+C+所用。所用。 但正是由于与但正是由于与C C兼容,使得兼容,使得C+C+不是纯正的面不是纯正的面 向对象的语言,它既支持面向对象程序设计,向对象的语言,它既支持面向对象程序设计, 也支持面向过程设计。但我们应当注意用面向也支持面向过程设计。但我们应当注意用面向 对象的思想进行设计,以发挥出对象的思想进行设计,以发挥出C+C+的优势。的优势。 C+C+语言的兼容性:语言的兼容性: 1.2 一个一个C+程序实例程序实例 # include int max
10、(int i, int j) /A if (i=j) return i; else return j; int main(void) /B coutij; /从键盘上输入变量值从键盘上输入变量值 coutmax number is:max(i, j) n ; /输出提示和结果输出提示和结果 return 0; 【例例1.1】 一个简单的一个简单的C+程序。程序。 程序组成:程序组成: 注释注释 编译预处理指令编译预处理指令 程序体程序体 由若干函数组成,由若干函数组成, 其中有且仅有一个主其中有且仅有一个主 函数函数main(),这(),这 是程序的执行入口。是程序的执行入口。 在在Windo
11、ws编程中编程中 定义为定义为winmain ()。()。 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.2 一个一个C+程序实例程序实例 1.3 C+的词法单位的词法单位 1.3.1 C+的字符集的字符集 ASCII码码字符集是计算机中的常用字符集。字符集是计
12、算机中的常用字符集。 它包括英文字母及阿拉伯数字等它包括英文字母及阿拉伯数字等128个字符,个字符, 存储一个存储一个ASCII码码占用一个字节占用一个字节单元。单元。 汉字国标码汉字国标码用于汉字处理。国标码的存用于汉字处理。国标码的存 储占用两个字节单元。储占用两个字节单元。 Unicode字符集对各类字符进行字符集对各类字符进行统一的双统一的双 字节编码字节编码。它包括了世界上多种语言的基本。它包括了世界上多种语言的基本 字符,字符,最多可容纳最多可容纳65536个个字符。字符。 ASCII码码 字符集,国标码字符集都是它的子集。字符集,国标码字符集都是它的子集。 常用字符集: 1.3.
13、1 C+的字符集的字符集 26个个 小写字母小写字母 abcdefghijklmnopqrstuvwx yz 26个个 大写字母大写字母 ABCDEFGHIJKLMNOPQRSTU VWXYZ 10个个 阿拉伯数字阿拉伯数字 0 1 2 3 4 5 6 7 8 9 其他符号其他符号 + - * / = , . _ : ; ? | ! # % /说明三个整型变量说明三个整型变量i, j, k float x, y, z; /说明三个实型变量说明三个实型变量x, y, z char c1, c2; /说明两个字符型变量说明两个字符型变量c1, c2 double dx; /说明一个双精度型变量说明
14、一个双精度型变量dx 1、变量说明、变量说明 1.5.1 变量变量 2、变量初始化、变量初始化 赋初值:赋初值: 定义变量时即给变量一个值称为变量初定义变量时即给变量一个值称为变量初 始化或给变量赋初值始化或给变量赋初值 例如:例如:int a=3, b=4, c=5;int a=3, b=4, c=5; float x=3.0float x=3.0; 变量初始化可以避免引用到随机变量。变量初始化可以避免引用到随机变量。 1.5.1 变量变量 #include using namespace std; void main() int a; couta=aendl; 1.5.2 文字常量文字常量
15、 文字常量:文字常量:指程序中直接给出的量;指程序中直接给出的量; 常量的值在程序执行过程中保持不变;并且常量的值在程序执行过程中保持不变;并且存储存储 在程序区在程序区,而非数据区;,而非数据区; 根据取值和表示方法的不同,可分为以下几种:根据取值和表示方法的不同,可分为以下几种: 1. 1. 整型常量整型常量 4. 4. 字符串常量字符串常量 3. 3. 字符型常量字符型常量 2. 2. 实型常量实型常量 1.5.2 文字常量文字常量 1、整型常量、整型常量 十进制表示法十进制表示法 八进制表示法八进制表示法 十六进制表示法十六进制表示法 其他表示法其他表示法 整型常量表示方法: 1.5.
16、2 文字常量文字常量 1、整型常量、整型常量 整数的十进制表示方法整数的十进制表示方法 十进制表示与我们熟悉的书写方式相同。十进制表示与我们熟悉的书写方式相同。 例:例: 15 -2415 -24 1.5.2 文字常量文字常量 整数的八进制表示整数的八进制表示 八进制表示八进制表示以以0 0开始,由数字开始,由数字0 0 7 7组成组成,用来,用来 表示一个八进制数。表示一个八进制数。 例:例: 012012 /八进制数八进制数1212,即十进制数,即十进制数1010 -0655-0655/八进制数八进制数-655-655,即十进制数,即十进制数-429-429 1、整型常量、整型常量 1.5
17、.2 文字常量文字常量 整数的十六进制表示整数的十六进制表示 十六进制十六进制以以0X0X(大小写均可)开始,由数(大小写均可)开始,由数 字字0 0 9 9和字母和字母A A F F(大小写均可)组成(大小写均可)组成,用来,用来 表示一个十六进制数。表示一个十六进制数。 例:例: 0 x32A 0 x32A /十六进制数十六进制数32A32A,即十进制数,即十进制数810810 -0 x2fe0 -0 x2fe0 /十六进制数十六进制数-2fe0-2fe0, /即十进制数即十进制数-12256-12256 1、整型常量、整型常量 1.5.2 文字常量文字常量 整数的其他表示方法整数的其他表
18、示方法 长整型常量和无符号整型常量:长整型常量和无符号整型常量: 长整型常数以长整型常数以 L L 或或 l l 结尾,无符号常整数以结尾,无符号常整数以 U U 或或 u u 结尾,以结尾,以 U LU L 或或 L UL U(大小写均可)(大小写均可) 结尾则可表示无符号长整型常数。例如:结尾则可表示无符号长整型常数。例如: -84L-84L/十进制长整数十进制长整数-84-84 026U026U/八进制表示的无符号整数八进制表示的无符号整数2626 0X32LU 0X32LU /十六进制表示的无符号长整型数十六进制表示的无符号长整型数3232。 1、整型常量、整型常量 1.5.2 文字常
19、量文字常量 2 、实型常量、实型常量 ( (1)1)一般形式一般形式与平时书写形式相同,与平时书写形式相同,由数字由数字 0 0 9 9和小数点组成和小数点组成。例如:。例如: 0.23 -125.76 0.0 .46 -35.0.23 -125.76 0.0 .46 -35. (2) (2) 指数形式(也称为科学表示法)指数形式(也称为科学表示法)表示为表示为尾尾 数乘以数乘以1010的次方形式,由的次方形式,由尾数尾数、E E或或e e和和阶数阶数组组 成成。指数形式要求在。指数形式要求在E E或或e e前面的前面的尾数部分必须尾数部分必须 有数字有数字,后面的,后面的指数部分必须为整数指
20、数部分必须为整数。 例例 : : 判断下列表示是否合法判断下列表示是否合法 123E12 -.34e-2 E4 1.43E3.5 包含小数点和包含小数点和1010的幂的数为实型常量的幂的数为实型常量 表示方法:表示方法: 1.5.2 文字常量文字常量 字符常量:字符常量: 用单引号引起来的单个字符用单引号引起来的单个字符。在内存中保存的是字符的。在内存中保存的是字符的 ASCIIASCII码值。在所有字符中,可显示字符通常就用单引号引码值。在所有字符中,可显示字符通常就用单引号引 起来表示:起来表示: a a /字符字符a a /字符字符 44/字符字符4 4 /空格字符空格字符 特殊情况字符
21、,如不可显示的字符等,特殊情况字符,如不可显示的字符等,c+c+使用使用转义序列转义序列表表 示方法示方法(详(详见表见表2-32-3,此处略):,此处略): n n /换行换行 / /字符字符 3、字符型常量、字符型常量 1.5.2 文字常量文字常量 字符串常量与字符型常量的区别:字符串常量与字符型常量的区别: 字符串常量字符串常量aa 占两个字节,存放占两个字节,存放aa和和 0 0,值为,值为0 x61000 x6100 字符型常量字符型常量aa 占一个字节,存放占一个字节,存放aa,值为,值为0 x610 x61 字符串常量:字符串常量: 用双引号引起来的若干个字符用双引号引起来的若干
22、个字符。 例如例如: : I am a Chinese.,123, a , I am a Chinese.,123, a , 4、字符串常量、字符串常量 1.5.3 常变量常变量 标识符常量:标识符常量: 用常量说明符用常量说明符constconst给文字常量起的名字(标识符),给文字常量起的名字(标识符),因因 为其说明和引用形式很像变量,所以也称为其说明和引用形式很像变量,所以也称常变量常变量; 例如:例如: constconst float PI=3.14159; float PI=3.14159; const const int Number_of_Student=100; int N
23、umber_of_Student=100; 常变量必须也只能在说明时进行初始化;常变量必须也只能在说明时进行初始化; 常变量初始化之后,不允许再被赋值;常变量初始化之后,不允许再被赋值; 常变量必须先说明后使用;常变量必须先说明后使用; 常变量存储在数据区,并且可以按地址访问,编译时系常变量存储在数据区,并且可以按地址访问,编译时系 统对常变量进行类型检查。统对常变量进行类型检查。 C+C+建议使用常变量,而不要使用文字常量。建议使用常变量,而不要使用文字常量。 1.6 运算符和表达式运算符和表达式 1.6.1 运算符、优先级和结合性运算符、优先级和结合性 1.6.2 基本运算符及其表达式基本
24、运算符及其表达式 1.6.4 算术类型转换和赋值类型转换算术类型转换和赋值类型转换 (选读选读) 1.6.5 求值次序与副作用求值次序与副作用 1.6.3 语句语句 本节的重点:本节的重点: 介绍与基本数据类型封装在一起的运算(操作)。介绍与基本数据类型封装在一起的运算(操作)。 1.6.1 运算符、优先级和结合性运算符、优先级和结合性 在在C+C+中对常量或变量进行运算或处理的中对常量或变量进行运算或处理的 符号称为符号称为运算符运算符,参与运算的对象称为,参与运算的对象称为操作数操作数。 运算符按操作数的数量分类:运算符按操作数的数量分类: 单目运算符单目运算符只对一个操作数运算,如负只对
25、一个操作数运算,如负 号运算符号运算符“ ”等;等; 双目运算符双目运算符要求有两个操作数,如乘号要求有两个操作数,如乘号 运算符运算符“*”等;等; 三目运算符三目运算符要求有三个操作数,三元运要求有三个操作数,三元运 算符只有一个算符只有一个“?:”。 1.6.1 运算符、优先级和结合性运算符、优先级和结合性 优先级和结合性决定了运算中的优先关系优先级和结合性决定了运算中的优先关系。 优先级:优先级:指不同运算符在运算中的优先关系,指不同运算符在运算中的优先关系, 可以用序号表示,序号越小,优先级越高。可以用序号表示,序号越小,优先级越高。 例如:例如: 加号()和减号()的优先级是加号(
26、)和减号()的优先级是6 6;乘;乘 号(号( * * )和除号()和除号( / / )的优先级是)的优先级是5 5;* * 和和 / / 的优先级高于和。的优先级高于和。 1.6.1 运算符、优先级和结合性运算符、优先级和结合性 结合性:结合性: 决定优先级相等的运算符组合在一起时的运算次序决定优先级相等的运算符组合在一起时的运算次序, 同一优先级的运算符有相同的结合性。同一优先级的运算符有相同的结合性。 如如+、-的结合性是从左到右(左结合),则的结合性是从左到右(左结合),则 a+b+c-d的运算次序为:的运算次序为: (a+b)+c)-d /先算先算a+b,再加再加c,最后减,最后减d
27、 又如前又如前+和单目负和单目负-的结合性是从右到左(右结的结合性是从右到左(右结 合),则合),则-+a的运算次序为:的运算次序为: -(+a) /先做先做+a,再取相反数(加负号),再取相反数(加负号) 这对算法描述是必须的,每一步做什么必须确定。这对算法描述是必须的,每一步做什么必须确定。 1.6.1 运算符、优先级和结合性运算符、优先级和结合性 例:例: (1) a*b+c; /先做乘法运算,再做加法先做乘法运算,再做加法 (2) a+b-c ;/根据左结合性,先取根据左结合性,先取a、b相加;相加; /再取再取c,最后相减,最后相减 演示如下:设演示如下:设a=10,b=20,c=1
28、5; 10 20 15 10 20 30 15 -15 1.6.2 基本运算符及其表达式基本运算符及其表达式 1 算术运算符及其表达式算术运算符及其表达式 4 逻辑运算、逻辑表达式及其求值优化逻辑运算、逻辑表达式及其求值优化 5 位运算(选读)位运算(选读) 2 赋值运算符赋值表达式赋值运算符赋值表达式 3 自增、自减运算自增、自减运算 6 逗号运算符与逗号表达式逗号运算符与逗号表达式 7 sizeof( )运算符运算符 表达式:表达式:由运算符、操作数及标点符号组成的,由运算符、操作数及标点符号组成的, 能取得一个值的式子。能取得一个值的式子。 1.6.2 基本运算符及其表达式基本运算符及其
29、表达式 优先级优先级运算符运算符名名 称称 3+正,单目正,单目 -负,单目负,单目 5 *乘,双目乘,双目 / 除,双目除,双目 %求余,双目求余,双目 6+加,双目加,双目 -减,双目减,双目 1.1.算术运算符及其表达式算术运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 整数的算术运算:整数的算术运算: 当两个操作数均为整数时,当两个操作数均为整数时,* *和和/ /重载为重载为整乘整乘和和整除整除,结,结 果为整数,除法运算后舍去小数取整。如:果为整数,除法运算后舍去小数取整。如: 5/45/4/结果为结果为1 1,整数,整数 当两个操作数均为整数,当两个操作数
30、均为整数,%定义为定义为求余求余运算,也称求模运算,也称求模 运算,结果为两个整数相除后的余数。如果两个整数中运算,结果为两个整数相除后的余数。如果两个整数中 有负数,则先用两数绝对值求余,最后结果的有负数,则先用两数绝对值求余,最后结果的符号与被符号与被 除数相同除数相同。 例如例如 6%3/结果为结果为0 6%7/结果为结果为6 7%6/结果为结果为1 -7%6/结果为结果为-1 7%-6/结果为结果为1 -7%-6/结果为结果为-1 1.1.算术运算符及其表达式 算术运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 #include using namespace
31、std; void main() cout(5/4)endl; cout(float)5/4endl; cout(float)(5/4)endl; 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 实数的算术运算:实数的算术运算: 只要有一个操作数是实数,两个操作数均转只要有一个操作数是实数,两个操作数均转 换为换为doubledouble型,型,*和和/重载为普通的重载为普通的乘乘和和除除,结,结果果 是实数是实数: 5/4.05/4.0/结果为结果为1.251.25,实数,实数 运算符的重载:运算符的重载: 运算符总是与操作数封装在
32、一起。相同的运算符运算符总是与操作数封装在一起。相同的运算符 对不同类型的操作数执行的运算是有差异的。对不同类型的操作数执行的运算是有差异的。 1.1.算术运算符及其表达式算术运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 算术表达式:算术表达式: 使用时注意:使用时注意: 1 1、表达式中每个变量都有确定的值时才能进行表、表达式中每个变量都有确定的值时才能进行表 达式求值;达式求值; 2 2、C+中算术运算应注意数据溢出问题,即运算结中算术运算应注意数据溢出问题,即运算结 果超出对应数据类型的表示范围。果超出对应数据类型的表示范围。编译程序只会对编译程序只会对 除法运
33、算时除数为除法运算时除数为0这种情况提示出错,这种情况提示出错,因此,程因此,程 序设计者必须在程序中解决检查并处理整数溢出问序设计者必须在程序中解决检查并处理整数溢出问 题。题。 由算术运算符连接的表达式,如:由算术运算符连接的表达式,如:a+b*3 ; 1.1.算术运算符及其表达式算术运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 #include using namespace std; void main() cout5/0endl; 1.6.2 基本运算符及其表达式基本运算符及其表达式 赋值与引用:赋值与引用: 将数据存放到相应存储单元中称为将数据存放到相应存
34、储单元中称为赋值赋值,如果,如果 该单元中已有值,赋值操作以新值取代旧值;从该单元中已有值,赋值操作以新值取代旧值;从 某个存储单元中取出数据使用,称为某个存储单元中取出数据使用,称为引用引用,引用,引用 不影响单元中的值,即一个量可以多次引用。不影响单元中的值,即一个量可以多次引用。常常 量量只能引用,不能赋值。只能引用,不能赋值。 赋值通过赋值运算符赋值通过赋值运算符“=”来完成,其意义是将来完成,其意义是将 赋值号右边的值送到左边变量所对应的单元中。赋值号右边的值送到左边变量所对应的单元中。 赋值号不是等号,它具有方向性赋值号不是等号,它具有方向性。 2.2.赋值运算符与赋值表达式赋值运
35、算符与赋值表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 左值与右值:左值与右值: C+C+将变量名代表的单元称为将变量名代表的单元称为 “左值左值”,而将变,而将变 量的值称为量的值称为“右值右值”。 左值左值必须是内存中一个必须是内存中一个 可以访问且可以合法修改的对象可以访问且可以合法修改的对象,因此只能是变,因此只能是变 量名,量名,而不能是常量或表达式而不能是常量或表达式。 例如下面的赋值运算是错误的:例如下面的赋值运算是错误的: 3.1415926=pi;/左值不能是常数左值不能是常数 x+y=z;/左值不能是表达式左值不能是表达式 const int N=30; N
36、=40;/左值不能是常变量左值不能是常变量 2.2.赋值运算符与赋值表达式赋值运算符与赋值表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 赋值表达式:赋值表达式: 由赋值运算符连接的表达式。格式为:由赋值运算符连接的表达式。格式为: 变量变量 = = 表达式表达式 例如:例如:x=5+6;x=5+6;a=b=c=d+1a=b=c=d+1; ; 复合赋值运算符:复合赋值运算符:由由双目算术运算符和位运算符双目算术运算符和位运算符 与赋值运算符组合成的单一运算符,共与赋值运算符组合成的单一运算符,共1010个:个: + = = * = / = % = = int i=5, j=5,
37、m, n; m=i+;m=i+; /后置;相当于后置;相当于m=i; i=i+1;m=i; i=i+1; /结果:结果:i i的值为的值为6 6,m m的值为的值为5;5; n=+j;n=+j; /前置;相当于前置;相当于j=j+1;n=j;j=j+1;n=j; /结果:结果:j j的值为的值为6 6,n n的值为的值为6;6; 自增自减运算符:自增自减运算符: 意义:使变量当前值加意义:使变量当前值加1 1或减或减1 1,再赋给该变量。再赋给该变量。 要求:操作数只能是要求:操作数只能是变量变量,不能是常量或表达式;,不能是常量或表达式; 3.3.自增自减运算自增自减运算 1.6.2 基本运
38、算符及其表达式基本运算符及其表达式 逻辑运算:逻辑运算: 用于判断分析,运算符包括用于判断分析,运算符包括关系关系和和逻辑逻辑运算符。运算符。 关系运算符:关系运算符: 包括:包括: (大于)、(大于)、(大于等于)、(大于等于)、 (小于)、(小于)、(小(小 于等于)、于等于)、= = =(等于)和!(等于)和!= =(不等于)。关系运算符完(不等于)。关系运算符完 成两个操作数大小的比较,结果为逻辑值成两个操作数大小的比较,结果为逻辑值true(true(真真) )或或falsefalse (假)(假)。每种。每种可比较大小可比较大小的数据类型,都的数据类型,都重载重载了关系运算了关系运
39、算 符。不同类型,自动转换为同一类型后进行比较。符。不同类型,自动转换为同一类型后进行比较。 在在C+中这两个逻辑值与整数之间有一个对应关系,真对中这两个逻辑值与整数之间有一个对应关系,真对 应应1,假对应,假对应0;反过来,;反过来,0对应假,非对应假,非0整数对应真。整数对应真。所所 以逻辑运算结果可以作为整数参与算术运算、关系运算、以逻辑运算结果可以作为整数参与算术运算、关系运算、 逻辑运算及其他运算。逻辑运算及其他运算。 4.4.逻辑运算、逻辑表达式及其求值优化 逻辑运算、逻辑表达式及其求值优化 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本
40、运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.2 基本运算符及其表达式基本运算符
41、及其表达式 1.6.2 基本运算符及其表达式基本运算符及其表达式 关系表达式:关系表达式: 例如:例如: a+bc+da+bc+d / /* *等同于等同于(a+b)(c+d)(a+b)(c+d), 结果为结果为0 0或或1 1* */ / y=aby=ab / /* *计算计算abab的值的值0 0或或1 1 赋给赋给y y,y y的值为的值为0 0或或1 1* */ / abcabc / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再将结果再将结果0 0或或1 1与与c c比较大小比较大小* */ / 由关系运算符连接的表达式。值为由关系运算符连接的表达式
42、。值为truetrue或或falsefalse。 4.4.逻辑运算、逻辑表达式及其求值优化逻辑运算、逻辑表达式及其求值优化 1.6.2 基本运算符及其表达式基本运算符及其表达式 设有定义设有定义 float a=3.2;int b=5; ;则则: : 3ab/结果是结果是? 根据左结合根据左结合 原则其运算原则其运算 过程如下:过程如下: a 5b 3.2 3 F, 即即0 F即即0 4.4.逻辑运算、逻辑表达式及其求值优化逻辑运算、逻辑表达式及其求值优化 1.6.2 基本运算符及其表达式基本运算符及其表达式 优先优先 级级 运算运算 符符 名名 称称语语 义义 3! 逻辑非逻辑非, 单目单目
43、 操作数的值为真,则结操作数的值为真,则结 果为假果为假; 12 13| 逻辑或逻辑或, 双目双目 两个操作数中有一个为两个操作数中有一个为 真,则结果为真真,则结果为真; 逻辑运算符:逻辑运算符: 包括:包括:! !、float x=1.8, y=2.4; ay|ab-!c 按按优先级优先级与与结合性结合性,其,其求值顺序求值顺序等同于:等同于: (ay)|(a(b-(!c) t1=1 t2=0t4=0 - 求:求: ab | c+ /结果以及结果以及a,b,c的值的值 t1=1 整个表达式的值为整个表达式的值为 1 1 可见可见: : 表达式表达式 c+ c+ 已不需要计算已不需要计算 所
44、以所以: : c不变仍为不变仍为 30 编程人员在使用逻辑运算时应当加以小心,优化计算固然编程人员在使用逻辑运算时应当加以小心,优化计算固然 提高了运算效率,但可能产生副作用。提高了运算效率,但可能产生副作用。所谓副作用,就是所谓副作用,就是 出乎设计人员的意料,得到预想不到的结果。出乎设计人员的意料,得到预想不到的结果。 4.4.逻辑运算、逻辑表达式及其求值优化逻辑运算、逻辑表达式及其求值优化 1.6.2 基本运算符及其表达式基本运算符及其表达式 5. 5. 位运算位运算( (选读选读) ) (1)按位取反运算符)按位取反运算符“” (2)左移运算符)左移运算符“” (4)按位与运算符)按位
45、与运算符“ sizeof( x) 值为值为8 7. sizeof()7. sizeof()运算符运算符 1.6.2 基本运算符及其表达式基本运算符及其表达式 #include #include using namespace std; class Person private: int age; string name; ; void main() Person p; coutsizeof(p)endl; 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.3 语句语句 1 1 表达式语句:表达式语句:表达式;表达式; 2 2 空语句:空语句: ; 3 3 复合语句:复合语句: /若
46、干语句若干语句 4 4 流程控制语句:流程控制语句:流程控制语句用来控制或流程控制语句用来控制或 改变程序的执行方向改变程序的执行方向 ; 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 1 1 混合运算的类型转换规则混合运算的类型转换规则 2 2 赋赋 值值 类类 型型 转转 换换 运算过程中,当某个二元运算符两边的操作数类型不同但运算过程中,当某个二元运算符两边的操作数类型不同但 属于类型相容时,系统先将精度低的操作数变换到与另一属于类型相容时,系统先将精度低的操作数变换到与另一 操作数精度相同,而后再进行运算。操作数精度相同,而后再进行运算。 类型相容:类型相容: 类型
47、不同但系统可以自动进行转换。类型不同但系统可以自动进行转换。 当赋值号的左值和右值类型不一致但属于类型相容时,当赋值号的左值和右值类型不一致但属于类型相容时, 由系统自动进行类型转换。由系统自动进行类型转换。 3 3 强强 制制 类类 型型 转转 换换 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 1. 1. 混合运算的类型转换规则混合运算的类型转换规则 char short int long unsigned char unsigned short unsigned int unsigned long float double long double 数据类型转换方向数据
48、类型转换方向 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 具体规则:具体规则: (1 1)字符字符可以作为可以作为整数整数参与数值运算,参与数值运算,整数值为整数值为 其其ASCIIASCII码码。 (2 2)操作数为字符或短整型时,系统自动变换成)操作数为字符或短整型时,系统自动变换成 整型整型。 (3 3)操作数为实型时,系统自动变换成)操作数为实型时,系统自动变换成双精度型双精度型。 (4 4)其余情况,当两操作数类型不同时,将精度)其余情况,当两操作数类型不同时,将精度 低(或表示范围小)的操作数的数据类型变换到与低(或表示范围小)的操作数的数据类型变换到与 另一
49、操作数类型相同再进行运算另一操作数类型相同再进行运算 1. 1. 混合运算的类型转换规则混合运算的类型转换规则 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 例例: : char c1, c2; int i1, i2; float x1, x2;char c1, c2; int i1, i2; float x1, x2; 则表达式则表达式 x2=c1x2=c1* *i1+c1i1+c1* *x1+c1x1+c1* *c2c2 的求值过程为:将的求值过程为:将c1c1转换成整型,完成转换成整型,完成c1c1* *i1i1,结,结 果表示为果表示为t1t1;将;将c1c1和和x
50、1x1均转换成双精度型,完成均转换成双精度型,完成 c1c1* *x1x1,结果表示为,结果表示为t2t2;将;将c1c1和和c2c2均转换成整型,均转换成整型, 完成完成c1c1* *c2c2,结果表示为,结果表示为t3t3;然后;然后t1t1转换成双精度转换成双精度 型,完成型,完成t1+t2t1+t2,结果表示为,结果表示为t4t4;将;将t3t3转换成双精转换成双精 度型,完成度型,完成t4+t3t4+t3,最后结果转为单精度型赋给,最后结果转为单精度型赋给x2x2。 1. 1. 混合运算的类型转换规则混合运算的类型转换规则 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型
51、转换 系统自动进行类型转换规则:系统自动进行类型转换规则: 1 1、实型数赋给整型变量:取整;注意溢出;、实型数赋给整型变量:取整;注意溢出; 2 2、整型数赋给实型变量:先转换为实型数;、整型数赋给实型变量:先转换为实型数; 3 3、字符型数赋给整型变量:、字符型数赋给整型变量:ASCIIASCII码为依据;码为依据; 分为两种情况:符号位是分为两种情况:符号位是0 0或或1 1时不同;时不同; 若符号位为若符号位为1,则低位字节不变,高位字节全部置,则低位字节不变,高位字节全部置1 再赋值。再赋值。 4 4、绝对值较大的数赋给表达范围较小的数据、绝对值较大的数赋给表达范围较小的数据 类型时
52、,注意溢出;类型时,注意溢出; 2. 2. 赋值类型转换赋值类型转换 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 赋值运算中,当左值与右值类型不一致时,赋值运算中,当左值与右值类型不一致时, 系统将按照系统将按照左值左值的类型,的类型,自动自动进行强制转换进行强制转换。 例如例如: : 设有以下定义设有以下定义 double x=2.3,y; int i=2,j; (1) j2.3 x 2.3 2 2 (1) j=x;(2) y=i; 由由系统系统按按 左值左值j 、y 类型类型自动自动 完成强制完成强制 转换功能转换功能 (2) y2i 2 2.0 2.0 2. 2.
53、赋值类型转换赋值类型转换 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 强制类型转换运算符格式为:强制类型转换运算符格式为: (type) (type) 表达式表达式 /形式一形式一 或或 type type ( (表达式表达式) )/形式二形式二 作用:将表达式强制转换为作用:将表达式强制转换为typetype类型,类型, 但表达式的值及其类型不变。但表达式的值及其类型不变。 设有变量说明:设有变量说明:int a=7, b=5;float x; 表达式表达式 x=a/b的值将为的值将为1。 如果希望表达式求出这两个整数相除的实数商如果希望表达式求出这两个整数相除的实数商
54、1.4赋给赋给x, 就需要将两个操作数或其中一个操作数进行强制类型转就需要将两个操作数或其中一个操作数进行强制类型转 换。可表示为:换。可表示为: x=(float)a/(float)b或或x=(float)a/b 2. 2. 赋值类型转换赋值类型转换 1.6.4 算数类型转换和赋值类型转换算数类型转换和赋值类型转换 v说明:说明: (1)强制类型转换不改变表达式本身的值类型,)强制类型转换不改变表达式本身的值类型, 而是产生一个临时变量,用来暂存转换后的值,而是产生一个临时变量,用来暂存转换后的值, 该临时变量引用后即自动释放。如上例,执行该临时变量引用后即自动释放。如上例,执行 强制类型转
55、换后变量强制类型转换后变量a和和b的值及类型都不变,的值及类型都不变, 而是各自产生一个临时变量,用这两个临时变而是各自产生一个临时变量,用这两个临时变 量的值进行运算。量的值进行运算。 (2)强制类型转换符优先级较高,只对紧随其后)强制类型转换符优先级较高,只对紧随其后 的表达式起作用,而对其他部分不起作用。如的表达式起作用,而对其他部分不起作用。如 表达式表达式(float)a/b的含义是先将变量的含义是先将变量a强制转强制转 换为浮点数,然后与整数换为浮点数,然后与整数b运算。运算。 2. 2. 赋值类型转换赋值类型转换 1.6.5 求值次序与副作用(选读)求值次序与副作用(选读) 在符
56、合优先级和结合性的前提下,在符合优先级和结合性的前提下,C C语言的标准对语言的标准对 表达式中各操作数的求值次序没有做统一规定。表达式中各操作数的求值次序没有做统一规定。 编译器为提高代码质量,在不影响优先级和结合性编译器为提高代码质量,在不影响优先级和结合性 的前提下也要对操作数的访问次序作调整。在安排的前提下也要对操作数的访问次序作调整。在安排 顺序时,如果某个操作数经历了求值运算,那么这顺序时,如果某个操作数经历了求值运算,那么这 个求值可能影响到其他操作数的值,这时就会产生个求值可能影响到其他操作数的值,这时就会产生 副作用副作用。 例如,设有例如,设有int a=2, b=5, c
57、;int a=2, b=5, c; 对表达式对表达式 c=ac=a* *b+(+a)+(b=10)b+(+a)+(b=10) 三个同级运算中,是先算三个同级运算中,是先算a a* *b b,还是,还是+a+a,还是,还是b=10b=10, 其次再算哪个?显然求值次序不同将导致结果不同。其次再算哪个?显然求值次序不同将导致结果不同。 1.6.5 求值次序与副作用(选读)求值次序与副作用(选读) #include using namespace std; void main() int a=2, b=5, c; c=(a*b)+(+a)+(b=10); coutc=cendl; 1.7 数组与字符
58、数组数组与字符数组 1.7.1 1.7.1 数数 组组 1.7.2 1.7.2 字字 符符 数数 组组 本节介绍一种用户自定义的导出数据类型本节介绍一种用户自定义的导出数据类型 数组类型数组类型 1.7.1 数组数组 数组定义:数组定义: 数组是有限个数组是有限个同类型同类型元素的有序集合元素的有序集合,这些元,这些元 素有一个共同的名字,每个元素以其在数组中的素有一个共同的名字,每个元素以其在数组中的 位置区分位置区分,位置用,位置用下标下标表示。表示。 例如数列或向量就可以看作一个数组,其中的例如数列或向量就可以看作一个数组,其中的 元素用一个下标即可确定。元素用一个下标即可确定。 矩阵也
59、可看作一个数组,其中的元素需要用矩阵也可看作一个数组,其中的元素需要用 “行行”、“列列”两个下标确定。两个下标确定。 数组下标的个数称作数组下标的个数称作维数维数,上述代表数列的数,上述代表数列的数 组和代表矩阵的数组分别称为一维数组和二维数组和代表矩阵的数组分别称为一维数组和二维数 组。本节只介绍一维数组。组。本节只介绍一维数组。 1.7.1 数组数组 一维数组的定义格式:一维数组的定义格式: 存储类型存储类型 数据类型数据类型 数组名数组名 常量常量 ; 数据类型指的是数组中元素的数据类型,数据类型指的是数组中元素的数据类型, 可以是可以是C+中定义的任何一种数据类型。中定义的任何一种数
60、据类型。 写在中括号中的常量用来定义数组大小,写在中括号中的常量用来定义数组大小, 即数组中元素的个数。即数组中元素的个数。 例如:例如:int m5; /定义数组定义数组m, 其中有其中有5个整数个整数 const int N=3; float xN;/数组数组x中有中有3个实数个实数 1.7.1 数组数组 数组的存储:数组的存储: 数组在存储单元中是按下标的顺序连续存放的,数组在存储单元中是按下标的顺序连续存放的,数组名数组名 代表数组存储区域的首地址。代表数组存储区域的首地址。 数组的元素:数组的元素: 表示方法是用数组名和下标:表示方法是用数组名和下标: 数组名数组名 表达式表达式 表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑材料制品购销合同范本
- 特发性脉络膜息肉样病变护理
- 2024年高考英语写作常考文体提分秘籍14 倡议信(原卷版)
- 2024届新高考名校试题分类汇编专题01 阅读理解 (9月联考专辑)原卷版
- 输尿管切开取石护理查房
- 五年级数学(小数除法)计算题专项练习及答案汇编
- 胎膜早破的观察要点及护理
- 多肉植物赏析课件
- 西安交通大学城市学院《机器学习与人工智能导论》2023-2024学年第二学期期末试卷
- 西南财经大学天府学院《管理学原理B》2023-2024学年第二学期期末试卷
- 2023污水处理用复合碳源技术规范
- 4-6岁一盘粽子-超轻粘土课件
- 解读《2023年中国血脂管理指南》
- 承插型盘扣式钢管脚手架典型产品构配件种类及规格
- 马铃薯(土豆)深加工项目可行性研究报告
- 《眼底病图谱》教学课件
- 公司声誉风险管理办法(2022年修订)
- 新能源汽车故障诊断与排除课件:项目三 高压互锁故障诊断
- 负荷计算及负荷
- 《中国文化的根本精神 精装 》读书笔记思维导图
- 2023年湖南高考英语听力练习试题「含原文答案」
评论
0/150
提交评论