《CC++程序设计》课件_第1页
《CC++程序设计》课件_第2页
《CC++程序设计》课件_第3页
《CC++程序设计》课件_第4页
《CC++程序设计》课件_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2教材: 吴乃陵,况迎辉. C+程序设计(第二版). 高等教育出版社,2006年1月.参考教材(建议人手一册):Stanley B Lippman , J o s e L a j o i e 著,王刚 / 杨巨峰 等译. 深入C+系列:C+ Primer中文版(第5版),电子工业出版社, 2013年9月. C/C+程序设计主讲教师:李长河Email:lichanghe课程主页: http:/changhe160.github.io/teachingRes/Cplusplus.html教学目标:1)基本:程序员,能够独立编写代码,为后续课程打好基础。2)高级:软件设计/架构师,针对一个问题/需求

2、,能够独立设计和分析,并将其实现。听课要求: 在预习的基础上,听课为主,课后弄懂课件和 教材中的程序(会分析,能流利写出)课下:1.每个星期保证独立完成2-3个程序的上机时间。2. 学会课外找资料(上网或翻阅书籍)解决问题3. 交流和探讨,C+以动手为基础4. 养成查看英文资料的习惯实验安排,4次,时间地点待定:考核方式: 总成绩=作业*5%+上机考核*40%+考勤*5%+考试*50%按照以下格式统计所有学生信息,把电子文档发给我姓名 电子邮件李长河 lichanghe7本章将简要介绍C+中的数据类型及相关运算,以及常量、变量、表达式、语句等,最后介绍简单的输入输出方法。目标:1)理解C+程序

3、基本概念2)独立完成简单程序的编写、调试和运行。第一章 C+基础知识8第一章 C+基础知识1.3 C+的词法单位1.6 运算符和表达式1.8 简单的输入输出1.7 数组与字符数组1.5 常量和变量1.4 C+ 中的数据类型ok1.1 C+语言概述 1.2 一个C+程序实例1.2 一个C+程序实例 已知圆柱体的底面半径和高分别是6cm和12 cm,求圆柱体体积。数学解法:解:设半径为r,高为h,体积为v。 则r=6cm,h=12cm, 答:圆柱体体积为1356.48cm3。【例1.1】 一个简单的C+程序。int main() double r,h,v; / 定义三个变量,存储半径、高和体积的值

4、 std:coutrh; /从键盘输入6 12 并按回车结束输入 v=3.14*r*r*h; std:coutthe volume is v cbccmstd:endl; return 0;/ 单行注释:计算圆柱体体积程序 volume.cpp#include /*多行注释:C+标准输入输出流类库, 用于std:cin&std:cout两个IO(输入和输出)对象*/ C+程序解法:int main().return 0;函数定义函数名函数头部函数体函数结束语句121.2 C+程序实例:函数# include using namespace std; / 使用标准库名字int max(int i

5、, int j) /A if (i=j) return i; else return j; int main() /B coutij; /从键盘上输入变量值 coutmax number is:max(i, j) endl; /输出提示和结果 return 0;【例1.2】 一个简单的C+程序。程序组成:注释编译预处理指令程序体由若干函数组成,其中有且仅有一个主函数main(),这是程序的执行入口。1.3 C+程序实例:类类 = 数据+操作C+程序小结1.注释 / 和/* */:方便阅读,帮助理解代码的含义2. include指令:使用标准库或自定义的类或函数 3. main() 函数: 程序

6、的入口4. 花括号: 基本编译单元(体)5. C+语句: 由分号隔开的程序语句C+程序的编译、调试和执行步骤1.C+程序工程的创建(windows系统 Visual Studio )2. 添加空的源文件(*.cpp) 如main.cpp3. 编写源代码, 每行只写具有一个;号的语句4. 编译,编译器会指出具体的语法错误5. 改正语法错误6. 调试程序(排除逻辑错误)7. 运行程序编译和执行过程中的几个常用按键F7:编译源程序 F10:单步执行一行代码F11(后面函数用):进入待执行的函数 F9:添加断点 F5: 执行程序监视变量: 在watch窗口(最多有4个watch窗口),添加想要监视的变

7、量,观察每一步执行时,其值的改变情况补充知识作业11. 课程主页,下载Visual Studio Community /en-us/downloads/download-visual-studio-vs.aspx实验一 Visual Studio (C+)集成开发环境入门2. 仿照实验一,完成ppt中例1.1-1.3程序的调试(监视窗口中添加变量,观察和分析值的变化)和运行,其中1.2要用两组不同的值进行测试 (快捷键F5,F7,F9,F10,F11必须熟练掌握)3. 完成之后,把例1.2的解决过程写到作业中, 包括工程的创建过程、源代码的书写、调试过程和最终的运行结果Deadline:本周六

8、171.3 C+的词法单位1.3.1 C+的字符集 1.3.2 关键字 1.3.3 标识符(ID,identifier) 1.3.4 标点符号 ok181.3.1 C+的字符集ASCII码字符集(见课本附录一)是计算机中的常用字符集。它包括英文字母及阿拉伯数字等128个字符,存储一个ASCII码占用一个字节单元。了解:Unicode字符集对各类字符进行统一的双字节编码。它包括了世界上多种语言的基本字符,最多可容纳65536个字符。 ASCII码字符集,汉子国标码字符集都是它的子集。ok常用字符集:信息存储和度量的基本单位位(bit,b):度量数据的最小单位,表示一位二进制信息。字节(byte,

9、B):由八位二进制数字组成(1 byte = 8 bit)。 1001 0101同十进制高位 低位补充知识20C+的字符集26个小写字母 abcdefghijklmnopqrstuvwxyz 26个大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10个阿拉伯数字 0 1 2 3 4 5 6 7 8 9 其他符号 + - * / = , . _ : ; ? | ! # % & () 空格 C+语言基本字符:211.3.2 关 键 字关键字(keyword):是由C+语言定义的具有特定含义的英文单词。关键字不能另作它用。C+区分大小写,关键字全部由小写字母组成。标准C+(ISO14

10、882)定义了74个关键字,具体的C+编译器会做一些增删。常用关键字及分类见表2.1。ok22 关 键 字数据类型说明符与修饰符bool char wchar_t class const double enum float int long short signed struct union unsigned void 存储类型说明符auto extern inline register static访问说明符friend private protected public其它说明符asm explicit namespace operator template this typedef typ

11、ename using virtual 语句与标号break case catch continue default do else for goto if return switch throw try while 运算符及逻辑值delete false new sizeof true表2-1 C+常用关键字及分类 okint main()/蓝色为C+关键字 double r,h,v; std:coutrh; v=3.14*r*r*h; std:coutthe volume is v cbccmstd:endl; return 0;红色本章重点231.3.3 标识符标识符(Identifie

12、r,ID ):是程序员定义的“单词”,用来给变量、常量、数据类型、函数(?)等命名。合法标识符由字母或下划线开始,由字母、数字、下划线组成,其有效长度为131个字符,长度超过31个字符者只识别前31个字符。建议使用有一定含义的英文单词作标识符,以提高可读性;另外尽量不用下划线或双下划线打头,以免与系统定义的关键字冲突。okint main()/ 蓝色C+关键字 double radius,height,volume; double pi=3.14; std:coutradiusheight; v=pi*radius*radius*height; std:coutthe volume is vo

13、lumestd:endl; return 0;用户自定义标示符:不能使用关键字和C+提供的资源标示符,包括函数名、类名和对象名小提示:1)变量名一般用小写字母,如index,而不是Index或INDEX2)应使用能帮助记忆的名字,如salary,name3)有多个单词组成时,单词之间可用下划线或每个内嵌单词的第一个字母大写,如student_name或studentName,而不是studentname24标识符例: 判断下面哪些是合法的用户标识符: MyFileSalary 94amountvoid94SalarySalary94$amountf3.5Num_of_Student251.3.

14、4 标点符号标点符号:#、( )、 ,、 :、 ;、 、 等。 标点符号的作用:有一定的语法意义。如字符和字符串常量分别用 和 引起来。对语法符号起分隔作用。如 ;等a,hello int main() double r,h,v; double pi=3.14; std:coutrh; v=pi*r*r*h; std:coutthe volume is v cbccmstd:endl; return 0;261.4 C+中的数据类型图2-1 C+的数据结构实 型 float双精度型 doubleC+的数据类型内置数据类型Build-in自定义数据类型数组 type 指针 type *类 cla

15、ss.整 型 int字符型 char逻辑型 bool无值型 void实 型ok红色本章重点(string, vector)三要素(理解)存储一个浮点数(小数),需要定义一个浮点型对象:float x=0.131;1.对象名字: 所存储数据的内存首(起始)地址2.内存结构:大小/范围, 数据的意义和数据表示范围3.操作:与数据类型所对应的操作(函数)x = x + 10; x = x %10; 28 C+基本数据类型称为内置数据(Build-In)类型,内置数据类型不仅定义了数据类型,还定义了常用操作。本节仅介绍各种基本数据类型的定义,常用操作将在后面介绍。 整型,integer(int,4B)

16、:用来存放整数,整数(有符号的整数在内存中存放的是它的补码,无符号数没有符号位,存放的就是原码)。内置数据类型:注意课本表述不准确:C+为强类型语言,所有数据的使用严格遵从“先定义(非说明或声明)后使用”的原则,以便编译器进行编译(检查语法,分配内存空间)。原码、反码和补码1.原码符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: +1原 = 0000 0001 -1原 = 1000 0001第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: 1111 1111 , 0111 1111 即 -127 , 127补充知识2. 反码正数的反

17、码是其本身负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. +1 = 00000001原 = 00000001反 -1 = 10000001原 = 11111110反补充知识3. 补码正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)+1= 00000001原 = 00000001反 = 00000001补-1 = 10000001原 = 11111110反 = 11111111补补充知识例:int i=-10;000000101010的原码1111110101取反1111110110再加1,-10的补码10/2=

18、5 余数05/2=2 余数12/2=1 余数01/2= 0 余数110的二进制:1010 补充知识33 字符型(char,1B):用来保存字符,存储的是该字符的ASCII码,占用一个字节。如大写字母A的ASCII码为65,在对应的一个字节中存放的就是65。字符型数据从本质上说也是整数,可以是任何一个8位二进制整数。常用字符的ASCII码值: A, a, 0 实型:单精度(float,4B)和双精度型(double,8B)都用来存放实数,两者表示的实数的范围和精度不同。实数在内存中以规范化的浮点数存放,包括尾数、数符和阶码。34逻辑型(bool):也称布尔型,其取值为true(逻辑真)和fals

19、e(逻辑假),存储字节数在不同编译系统中可能有所不同。布尔型在运算中可以和整型相互转化,false对应为0,true对应非0无值型(void):主要用来说明函数的返回值类型和空指针,将在函数一章中具体介绍。 基本数据类型还可以加上一些修饰词,包括:signed(有符号)、unsigned(无符号)、long(长)、short(短)、long long(C+11)。35类 型名 称占用字节数取 值 范 围bool布尔型1true, false(signed) char有符号字符型1-128 127unsiged char无符号字符型10 255(signed) short (int)有符号短整型

20、2-32768 32767unsigned short (int)无符号短整型20 65535(signed) int (signed)有符号整型4-231 (231-1)unsigned (int)无符号整型40 (232-1)(signed) long (int)有符号长整型4-231 (231-1)unsigned long (int)无符号长整型40 (232-1)float实型4-1038 1038double双精度型8-10308 10308long double长双精度型8-10308 10308void无值型0无值VC+中所有基本数据类型?361.5 常量和变量1.5.1 变

21、量1.5.2 文字常量1.5.3 常变量在程序中,常量和变量是用来存储数据的;常量又分为字面常量、常变量;ok371.5.1 变 量1 变量说明 2 变量初始化值 变量/对象,在程序中是指可以改变值的量;变量必须用标识符进行标识,称为变量名;变量有类型之分,如整型变量、字符变量等;任何变量都必须先定义后使用:1)编译程序为变量分配空间,2)编译时进行语法检查;变量使用的第一步,是给变量赋初始值;ok思考:变量的三要素有什么意义?38变量定义 变量定义的一般格式为:类型说明符 变量名1,变量名2, ,变量名n; 例:int i, j, k; /定义三个整型变量i, j, kfloat x, y,

22、 z; /定义三个单精度实型变量x, y, zchar c1, c2; /定义两个字符型变量c1, c2double dx; /定义一个双精度型变量dx 判断下面变量定义是否正确:1. int 1a; 2. inti,k; 3. int main; 4. int i;k; 5. int i,小提示: 把课本中的说明改成定义39变量初始化赋初值:定义变量时即给变量一个值称为变量初始化或给变量赋初值 例如:int a=3, b(3);int c=3,d3; /C+11 建议:变量初始化可以避免引用到随机值。小提示:int ival(4);/直接初始化 效率高,灵活int ival=4;/复制初始化

23、 效率低,不灵活 补充知识变量名的本质char c=A; /思考:编译器做了哪些事情?coutc unsigned int eng,math;auto类型说明符 (C+11)auto i=45;auto j=1.0;auto c=A; /- int i=45; double j=1.0; char c=A;decltype类型指示符int i=0;decltype(i) j; / j的类型是int 补充知识431.5.2 字面值常量1. 整型常量 4. 字符串常量3. 字符型常量2. 实型常量字面值常量(literal constant):指程序中直接给出的量常量的值在程序执行过程中保持不变;

24、根据取值和表示方法的不同,可分为以下几种:ok5.布尔常量: true和false小提示:literal constant 翻译成字面值常量更为合适44整型常量十进制表示法八进制表示法十六进制表示法其他表示法整型常量表示方法:ok默认为int类型45 整数的十六进制表示 十六进制以0X(大小写均可)开始,由数字09和字母AF(大小写均可)组成,用来表示一个十六进制数。例:0 x32A /十六进制数32A,即十进制数810-0 x2fe0 /十六进制数-2fe0,即十进制数-12256int i=0 x30;ok46 整数的十进制表示方法十进制表示与我们熟悉的书写方式相同。例:15 -24int

25、 i=30;ok47 整数的八进制表示 八进制表示以数字0开始,由数字07组成,用来表示一个八进制数。例:012 /八进制数12,即十进制数10-0655/八进制数-655,即十进制数-429int i=030;ok48整数的其他表示方法长整型常量和无符号整型常量:长整型常数以 L 或 l 结尾,无符号常整数以 U 或 u 结尾,以 U L 或 L U(大小写均可)结尾则可表示无符号长整型常数。例如:-84L/十进制长整数-84026U/八进制表示的无符号整数260X32LU /十六进制表示的无符号长整型数32。int i=026UL49实型常量(1)一般形式与平时书写形式相同,由数字 0 9

26、和小数点组成。例如:0.23 -125.76 0.(与0的区别) .46 -35.0(2) 指数形式(也称为科学表示法)表示为尾数乘以10的次方形式,由尾数、E或e和阶数组成。指数形式要求在E或e前面的尾数部分必须有数字,后面的指数部分必须为整数。 例 : 判断下列表示是否合法123E12 -.34e-2 E4 1.43E3.5 包含小数点和10的幂的数,默认为double类型表示方法:50字符型常量 字符常量:用单引号引起来的单个字符。在内存中保存的是字符的ASCII码值。在所有字符中,可显示字符通常就用单引号引起来表示: a /字符a ASCII值为97 /字符4/字符4 /空格字符特殊情

27、况字符,如不可显示的字符等,c+使用转义序列表示方法(详见表1-3,此处略):n /换行 /字符 课下作业: b, 142, 和x62分别代表什么?其ASCII值是多少?如何输出 和 ?514. 字符串常量字符串常量与字符型常量的区别:字符串常量 a占两个字节,存放a和0,值为0 x6100字符型常量 a占一个字节,存放a,值为0 x610aa字符串常量:用双引号引起来的若干个字符。例如:I am a Chinese.,123, a , 521.5.3 常量const标识符常量 const:用常量说明符const给字面值常量起的名字,例如:const float PI=3.14159;cons

28、t int Number_of_Student=100;constexpr int i=10; /C+11常量必须也只能在定义时进行初始化;常量初始化之后,不允许再被赋值;常量必须先定义后使用;C+建议使用常量,而不要使用字面值常量。const int i; /error i=10; /error作业21. unsigned 和signed 类型有什么区别?2. int,long和short类型有什么区别?3. 当给16位unsigned short对象赋值100000时,赋的值是多少?4.查找资料下列哪些是(如果有)非法的? a).Lwho goes with F145rgus?012 b)

29、3.14e1L c)two Lsome d)1024f e)581 f)x0H “F145r s?012” 有多少个字符?541.6 运算符和表达式1.6.1 运算符、优先级和结合性 1.6.2 基本运算符及其表达式 1.6.4 算术类型转换和赋值类型转换 (选读)1.6.5 求值次序与副作用 1.6.3 语句 本节的重点:介绍与基本数据类型封装在一起的运算(操作)。ok551.6.1 运算符、优先级和结合性ok对对象进行运算或处理的符号称为运算符(operator),参与运算的对象称为操作数(operand)。运算符按操作数的数量分类: 单目(unary)运算符只对一个操作数运算,如负号运算

30、符-: -5 双目(binary)运算符要求有两个操作数,如乘号运算符*: 8*4 三目(ternary)运算符要求有三个操作数,三元运算符只有一个: ?:(后面介绍)。561.6.1 运算符、优先级和结合性ok 优先级和结合性共同决定了运算中的优先关系。优先级(Precedence):指不同运算符在运算中的优先关系,可以用序号表示,序号越小,优先级越高。例如: 加号()和减号()的优先级是6;乘号( * )和除号( / )的优先级是5;* 和 / 的优先级高于和; ()凌驾于优先级之上int a(3),b(2),c(1),d(2);表达式 a*b+c/d 计算顺序为(a*b)+(c/d),值

31、为6 571.6.1 运算符、优先级和结合性结合性(Associativity):决定优先级相等的运算符组合在一起时的运算次序,同一优先级的运算符有相同的结合性(左/右结合)。 如加法(+)和减法(-)的结合性是从左到右(左结合)假设 int a(0), b(-1), c(5), d(1);表达式, a+b+c-d的运算次序为:(a+b)+c)-d /先算a+b,再加c,最后减d其值为3 581.6.1 运算符、优先级和结合性例:(1) a+b*c; /先做乘法运算,再做加法(2) a+b-c ;/根据左结合性,先取a、b相加;/再取c,最后相减演示如下:设int a=10,b=20,c=15

32、;10201510203015-15abc591 算术运算符及其表达式4 逻辑运算、逻辑表达式及其求值优化 5 位运算(选读) 2 赋值运算符赋值表达式3 自增、自减运算 6 逗号运算符与逗号表达式 1.6.2 基本运算符及其表达式7 sizeof( )运算符 表达式:由运算符、操作数及标点符号组成的,能取得一个值的式子。提示:牢记表达式求值的三(四)要素(求值次序)1.表达式都有一个值,确定值的数据类型2.优先级 ,确定每个运算符的优先级3.结合性,优先级相同时,确定结合性表达式求值方法:根据运算符的优先级和结合性,给表达式添加小括号(),按照由内到外的方式来逐个求解每个小括号里面表达式的值

33、601.算术(Arithmetic)运算符及其表达式优先级运算符名 称3+正,单目-负,单目5*乘,双目/除,双目%求余,双目6+加,双目-减,双目ok表达式求值三要素61整数的算术运算:当两个操作数均为整数时,*和/重载为整乘和整除,结果为整数,除法运算后舍去小数取整。如:7/4/结果为1,整数当两个操作数均为整数,%定义为求余运算,也称求模运算,结果为两个整数相除后的余数。如果两个整数中有负数,则先用两数绝对值求余,最后结果的符号与被除数相同。例如6%3/结果为06%7/结果为67%6/结果为1-7%6/结果为-17%-6/结果为1-7%-6/结果为-1表达式求值三要素62实数的算术运算:

34、 不同类型的操作数进行运算时,将表示范围小的类型操作数转换为表示范围大的类型.*和/重载为普通的乘和除,结果是实数: 5/4.0 /5(int),4.0(double)结果为1.25(double)表达式求值三要素63算术表达式:使用时注意:数据溢出问题,即运算结果超出对应数据类型的表示范围。编译器只会对除法运算时除数为0这种情况提示出错,因此,程序员必须在程序中解决检查并处理整数溢出问题。ok由算术运算符连接的表达式,如:a+b*3 ;short x=32767;x = x + 1;coutx=xendl;输出结果:x=-32768表达式求值三要素0111 1111 1111 1111+ 1

35、1000 0000 0000 0000想一想,算术表达式的结核性?各类数值型数据间的混合运算整型、实型、字符型间可以混合运算10+ a+1.5-2.0* b课下计算1/3*2 1./3 1/3. 0/(a-1) 0/(a-1.0)doublefloatlongunsignedintchar, short低高表达式求值三要素double t1int t2double t3double t4652.赋值(Assignment)运算符与赋值表达式 ok赋值(数据写入)与数据读取: 将数据存放到相应存储单元中称为赋值,(无如果)该单元中已有值,赋值操作以新值取代旧值;int i=0; /对象初始化 i

36、=5; /=为赋值运算符从某个存储单元中取出数据使用,称为数据读取(非引用),数据读取不影响单元中的值,即一个变量的值可以多次读取。int j=1; coutj 运算符=ab例子a=ba=b小于等于 = c+d /*等同于(a+b)(c+d), 结果为0或1*/y=ab /*计算ab的值0或1 赋给y,y的值为0或1*/abc /*等同于(ab)c,先求ab 的值, 再将结果0或1与c比较大小*/由关系运算符连接的表达式。值为true或false。ok表达式求值三要素754.逻辑运算、逻辑表达式及其求值优化设有定义 float a=3.2;int b=2;则: 4ab/结果是?根据左结合原则其

37、运算过程如下:a2b3.24T, 即1F即0表达式求值三要素练习设 int a(2), b(4), c(1); 计算以下关系表达式和对应对象的值: 1. a+bb+c2. (x=2)(y=5) 可以是赋值表达式3. ab=b b77优先级运算符名 称语 义3!逻辑非, 单目操作数的值为真,则结果为假;反之结果为真12&逻辑与,双目当两个操作数全为真时,结果为真,否则为假;13|逻辑或,双目两个操作数中有一个为真,则结果为真;逻辑运算符:包括:!、&和|,其优先级和语义见下表。逻辑运算符和逻辑表达式有时,只用一个简单的关系表达式无法完整地表达一个条件,如: y= 其中的条件需要用逻辑表达式来表达

38、: x!=0 & a!=0 &就是一种逻辑运算符。1/x+1/a 当x0,a0时 10000 其它79由逻辑运算符连接的表达式。其操作数和运算结果均为逻辑量。运算结果同样可以作为一个整数参与其他运算。 由于逻辑值和整数之间的对应关系,也允许整型和字符型操作数进行逻辑运算:21&0/逻辑与,21与0,结果为假:021|0/逻辑或,21或0,结果为真:1!21/逻辑非,21的非,结果为假:0逻辑表达式:优先级:结合性: &, |:左结合性 !:右结合性! 逻辑非算术运算符关系运算符&逻辑与|逻辑或赋值运算符表达式求值三要素高低81逻辑表达式求值的短路效应:在求逻辑表达式值的过程中,一旦表达式的值能

39、够确定,编译器就不再计算后面的运算。称为短路求值(short-circuit evaluation)。已知: int a=10, b=20, c=30;求: ab&c+,c值为多少?82ok已知: int a=10, b=20, c=30;float x=1.8, y=2.4; ay|ab-!c按优先级与结合性,其求值顺序等同于:(ay)|(a(b-(!c)t1=1 t2=0t4=0 -&t3=0t5=b=b=c 5=4=3答案:a=b&b=c答案1:a=0&b!=0 | a!=0&b=0答案2:a*b=0&a+b!=0深入讨论846.逗号运算符与逗号表达式用逗号连接起来的表达式称为逗号表达式

40、, 格式为:表达式1,表达式2,表达式n 逗号表达式求值时,依次从左向右(左结合性)计算每一个表达式的值,整个逗号表达式的值为最后一个表达式的值。逗号运算符的优先级最低,且是左结合性。例如:a=(x=3,x+=6,5+6);/a=11 x=9表达式1条件表达式 取表达式2的值条件表达式取表达式3的值非00条件运算符: ?: 表达式1 ? 表达式2 : 表达式3优先级:低于逻辑或运算符,高于赋值运算符。结合性:右结合性。例:求a,b,c中的最大值:max= ab ? (ac?a:c) : (bc?b:c) ;! 逻辑非算术运算符关系运算符&逻辑与|逻辑或条件运算符赋值运算符逗号运算符运算符结合性

41、高低优先级右单目右,双目左左左右左右左运算符小结887. sizeof( ) 运算符 用于计算一个操作数类型或一个变量在内存中占用的存储空间(单位B)。一般格式为: sizeof (数据类型) 或 sizeof(变量名) 例如:sizeof(int) 值为4 sizeof( float) 值为4 double x; sizeof( x) 值为8 891.6.4 算术类型转换和赋值类型转换(选读)1 混合运算的类型转换规则 2 赋 值 类 型 转 换 ok类型相容:类型不同但系统可以自动进行转换。3 强 制 类 型 转 换 901. 混合运算的类型转换规则charshortintlongunsi

42、gned charunsigned shortunsigned intunsigned longfloatdoublelong doubleok91具体规则:(1)字符可以作为整数参与数值运算,整数值为其ASCII码值。(2)操作数为字符或短整型时,自动变换成整型(整型提升),规则如上。(3)其余情况,当两操作数类型不同时,将精度低(或表示范围小)的操作数的数据类型变换到与另一操作数类型相同再进行运算 注意:切勿有符号和无符号混用int a=-1;unsigned b=1; 表达式:a*b=? int i=176+1; / 176 二进制: 01 111 110 十进制:126 int j=3

43、76+1; / 376 二进制: 11 111 110 十进制:-2couti j; /输出:127 -1 0XFFFF FFFF92 赋值运算中,当左值与右值类型不一致时,编译器将按照左值的类型,自动进行强制转换。例如: 设有以下定义 double x=2.3,y; int i=2,j;(1) j2.3x2.3 22(1) j=x;(2) y=i;由系统按左值j 、y类型自动完成强制转换功能 (2) y2i2 2.02.02.赋值转换(隐式强制类型转换)933 强制类型转换ok强制类型转换运算符格式为: 类型说明符(表达式) 或static_cast (表达式) /推荐方式作用:将表达式的值

44、强制转换为类型说明符指定的类型例:int a(7), b(5); float x;表达式 x=a/b的值将为1。如果希望实数商1.4赋给x,可表示为:x=float (a)/ float (b)或x=float(a)/b 或者x=static_cast(a)/static_cast(b) orx=static_cast(a)/b注意:1.强制类型转换不改变表达式本身的值类型 2.只对紧随其后的表达式起作用941.6.5 求值次序 ok在符合优先级和结合性的前提下,C+对表达式中各操作数的求值次序没有做统一规定,这时就会产生副作用。 例如,设有int a=2, b=5, c; 对表达式c=a*b

45、+(+a)+(b=10)左结合:从左到右把三个表达式的和依次相加求值次序:a*b,+a,b=10三个同级运算中,是先算a*b,还是+a,还是b=10,其次再算哪个?显然求值次序不同将导致结果不同。 表达式求值第四要素课下计算Code:block13.12(GNU GCC编译器, 下载/ )上述表达式值为23,访问过程为从左向右a*b(值10); (+a)(值3);(b=10)(值10);Visual Studio 上述表达式值为43,求值过程为从右向左(b=10)(值10) (+a)(值3);a*b(值30);建议:显示告诉编译器的求值次序,消除副作用c=a*b; +a; b=10; c+=a

46、+b; 或+a; b=10; c=a*b+a+b;961.7 数组与字符数组1.7.1 数 组1.7.2 字 符 数 组本节介绍一种用户自定义的导出数据类型 数组类型ok现将100名学生的英语成绩输入计算机并储存起来 s1 86 s2 98 s3 66 s100 89 #include using namespace std;int main() int s1,s2,s3,s4,s5, , s100 ;cins1s2s3s100; 数组:现将100名学生的英语成绩输入计算机并储存起来。 s100: si, i (0-99) for(i=0; i100; i+)cinsi; . int main

47、() int s100,i; . 991.7.1 数组数组定义:数组是有限个同类型元素的有序集合,这些元素有一个共同的名字,每个元素以其在数组中的位置区分,位置用下标表示。数组下标的个数称作维数,如: int arri10; /一维数组 double arrd510; /二维数组ok100 一维数组一维数组的定义格式: 数据类型 数组名常量; 写在中括号中的常量用来定义数组大小,即数组中元素的个数。例如:int m5; /定义数组m, 其中有5个整数 const int N=3; double xN;/数组x中有3个实数ok101 一维数组数组的存储: 数组在存储单元中是按下标的顺序连续存放的

48、,数组名代表数组存储区域的首地址。数组的元素:标识方法是用数组名和下标:数组名整型类型的表达式表达式用来计算下标值。数组第一个元素的下标为0。okm4 m3m2m1m0 x2x1x0int m5;0X01120X010D0X01090X01050X01010X02120X02090X0201double x3;内存地址内存地址102 一维数组注意:C+中数组大小在编译时(非运行时)确定,编译器按照定义为数组分配一段连续的存储单元,这段单元的大小也是不能改变的,因此数组大小不能用变量定义,而只能是一个正整数常量。下列定义是非法的:int count;float scount;/数组个数不能是变量

49、,且必/须在定义时指明;const float Num=3;int nNum;/数组个数不能是实数;ok总结数组的特点 1、数组元素在内存中占用连续的存储单元 2、数组元素的个数固定 3、数组元素的类型相同 一维数组初始化1. 用列出元素值int num3=4,15,24;2.缺省值int num5=4,15,24; / num3和num4均为03.数组元素个数由初始化值的个数指定int num=4,15,24; /数组num元素个数为3 注意:不能对数组名直接赋值, 如:int a3=1,2,1; int b3;b=a; /错误,不能对数组整体操作105 一维数组int_arr3=int_a

50、rr2=int_arr1=int_arr0=11231输出2.4.1结束1231+2=3【例1.2】使用数组的简单例子。. .int main() int int_arr4;int_arr0=1; int_arr1=1; int_arr2=2;int_arr3=int_arr1+int_arr2;coutint_arr0n int_arr1n int_arr2n int_arr3 n; 1061.7.2 字符数组字符数组定义:如果数组中的元素为字符,就称为字符数组。例如:char string110; /可用来保存10个字符的字符数组;char city_name1 =N,a,n,j,i,n,

51、g;/保存7个字符的字符数组;字符串与字符数组:C+中用字符数组保存字符串。允许直接用字符串常量给字符数组初始化。例如:char city_name2=”Nanjing”; /注意:只能定义时用字符串常量初始化字符数组用字符串初始化,字符数组会自动加上一个串结束符0 。okNanjing0city_name2Nanjingcity_name2=”Wuhan”;/非法,只能定义时这样初始化1071.7.2 字符数组字符串处理函数:字符串处理函数定义在头文件中,其中包括: strlen(s)/返回字符串s的实际长度(不包括0)strcpy(s1,s2)/将字符串s2中0之前的所有字符依次赋值到字符

52、串s1中,最后再加上一个0。char s1=Nanjing;char s220;strcpy(s2,s1); coutstrlen(s1)endl;/输出 7couts2ixc;#include 库函数scanf scanf(%d %f %c, &i, &x,&c);键盘输入:10 1.34 A scanf(%d,%f,%c, &i, &x,&c);键盘输入:10,1.34,A#include或#includeok1.8.1 输入输出简介cin只能紧跟左值对象名格式控制地址列表110输出流对象cout:cout实现将数据输出到显示器的操作,一般格式为:int i; double x;couti只能紧跟左值对象名1111.8.2 数据的输入输出cin 与cin.get( )的区别:(1) cin例如:char c1, c2, c3;cinc1;/Acinc2c3;程序执行到A行时,等待用户输入数据。若输入:A b c 则cin分别将字符A、b、c赋给变量c1、c2、c3。 cin自动跳过输入的空白字符(包括空格,制表和回车符等)。 ok1.字符的输入输出1121.8.2 数据的输入输出(2)cin.get()例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论