C++程序设计谭浩强超级完整

上传人:san****019 文档编号:22918390 上传时间:2021-06-02 格式:PPT 页数:930 大小:17.74MB
返回 下载 相关 举报
C++程序设计谭浩强超级完整_第1页
第1页 / 共930页
C++程序设计谭浩强超级完整_第2页
第2页 / 共930页
C++程序设计谭浩强超级完整_第3页
第3页 / 共930页
点击查看更多>>
资源描述
1 C+程序设计 谭浩强编著 清华大学出版社 课件制作:南京理工大学 陈清华 朱红 2 第一章 C+概述 C+语言发展历史 自从 1946年第一台电子数字计算机 ENIAC 问世以来,随着计算机应用领域的不断扩大, 促进了计算机技术的高速发展,尤其是近年 来计算机的硬件和软件都是日新月异。作为 应用计算机的一种工具 程序设计语言,得 到不断的充实和完善。每年都有新的程序设 计语言问世,老的程序设计语言不断地更新 换代。 3 20世纪 60年代 , Martin Richards为计算机软件人员 在开发系统软件时 , 作为记述语言使用而开发了 BCPL语 言 (Basic Combined Programming Language)。 1970年 , Ken Thompson在继承 BCPL语言的许多优点的基础上发 明了实用的 B语言 。 到了 1972年 , 贝尔实验室的 Dennis Ritchie和 Brian kernighan在 B语言的基础上 ,作了进一步的 充实和完善 , 设计出了 C语言 。 当时 , 设计 C语言是为了 编写 UNIX操作系统的 。 以后 ,C语言经过多次改进 ,并开始 流行 。 C+是在 C语言的基础上发展和完善的 , 而 C是吸 收了其它语言的优点逐步成为实用性很强的语言 。 4 C语言的主要特点是: 1、 C语言是一种结构化的程序设计语言 , 语言本 身简洁 、 使用灵活方便 。 既适用于设计和编写大 的系统程序 , 又适用于编写小的控制程序 , 也适 用科学计算 。 2、 它既有高级语言的特点 , 又具有汇编语言的特 点 。 运算符丰富 , 除了提供对数据的算术逻辑运算 外 , 还提供了二进制的位运算 。 并且也提供了灵活 的数据结构 。 用 C语言编写的程序表述灵活方便 , 功能强大 。 用 C语言开发的程序 , 其结构性好 , 目 标程序质量高 , 程序执行效率高 。 5 3、 程序的可移植性好 。 用 C语言在某一种型号的计 算机上开发的程序 , 基本上可以不作修改 , 而直接 移植到其它型号和不同档次的计算机上运行 。 4、 程序的语法结构不够严密 , 程序设计的自由度 大 。 这对于比较精通 C语言的程序设计者来说 , 可 以设计出高质量的非常通用的程序 。 但对于初学者 来说 , 要能比较熟练运用 C语言来编写程序 , 并不 是一件容易的事情 。 与其它高级语言相比而言 , 调 试程序比较困难 。 往往是编好程序输入计算机后 , 编译时容易通过 , 而在执行时还会出错 。 但只要对 C语言的语法规则真正领会 , 编写程序及调试程序 还是比较容易掌握的 。 6 随着 C语言应用的推广 , C语言存在的一 些缺陷或不足也开始流露出来 , 并受到大 家的关注 。 如: C语言对数据类型检查的 机制比较弱;缺少支持代码重用的结构; 随着软件工程规模的扩大 , 难以适应开发 特大型的程度等等 。 7 为了克服 C语言本身存在的缺点 , 并保持 C语言简 洁 、 高效 , 与汇编语言接近的特点 , 1980年 , 贝 尔实验室的 Bjarne Stroustrup博士及其同事对 C语 言进行了改进和扩充 , 并把 Simula 67中类的概念 引入到 C中 。 并在 1983年由 Rick Maseitti提议正式 命名为 C+( C Plus Plus) 。 后来 , 又把运算符的 重载 、 引用 、 虚函数等功能加入到 C+中 , 使 C+ 的功能日趋完善 。 当前用得较为广泛的 C+有: VC+ ( Visual C Plus Plus) 、 BC+( Borland C Plus Plus) 、 AT /输出字符串 主函数 函数体 开始 函数体 结束 输出流,在屏幕上打 印引号内的字符串 分号,一条完整 语句的结束符 本程序编译执行后,在 DOS屏幕上打印出 I am a student. 包含文件 注释或说明 10 编译过程: 1)启动 Visual C+,选择“文件”菜单中的“新建” 命令,选择“文件”标签中的“ C+ Source File” 选项。 2)选择源程序存放的目录和输入源程序名,单击 “确定”。 3)在编辑器中编写源程序。 4)单击 F7或“编译”中的“重建全部”编译源程 序,若编译通过,单击“执行”,在 DOS屏上看 结果,任按一键返回编辑器。 11 启动 VC+ 编译系统 12 VC+编译 系统界面 单击“ File”菜单 中“ New”命令 13 选择“ Files”选项卡 选择 C+源 文件命令 输入文件名 输入文件 存放位置 单击选择 驱动器 选择驱动 器或目录 14 C+源文件 编辑界面 输入 C+ 源代码 15 可以将此源 代码另起文 件名存盘 16 选择编译命令,将源文 件 .cpp生成 .obj文件 17 如果编译出错,会出现提示信息, 指出错误的位置及种类 错误所在行 错误的原因 18 双击错误 所在行 光标移到该行 19 生成可执 行文件 通过后单 击该命令 运行程序 20 运行结果显示 在 DOS屏上 注意:不可以在软盘上 运行程序!应该把保存 在软盘中的源文件拷贝 到硬盘的目录中再运行 ! 21 源程序所在目录 未编译前,只 有一个源程序 22 编译运行后,出 现众多附加文件 同时,产生一个 子目录 Debug 23 Debug目录中,有 obj和 EXE文件 24 #include void main(void) cout i; /从键盘上输入变量 i的值 cout “i的值为: ” in; / 输出变量 i的 值 另一个例子 25 第二章 数据类型、运算符与表达式 26 2000H 2001H 2002H 2003H 2004H 3 3+5=? 5 运算器 (2000H)+(2002H) 用一个字节表示整数,范围为 -128127;用两个字节表 示整数,范围为 -32768 32767。一般用四个字节表示整 数。 (举例 ) 内存 CPU 内存 data 外存 Program 8 硬盘 软盘 27 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 有符号数 无符号数 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 32767 32767 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 32766 32766 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1(补码 ) 65535 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 -2 65534 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -32767 32769 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -32768 32768 28 常量与变量 常量:在程序运行过程中,其值一直保持不变的 量为常量。 常量也区分不同的类型: 30, 40 为整型, 30.0, 40.0为实型, 编辑器只是根据其表面形式来判断其 类型。 变量:在程序运行过程中,其值可以改变的量为 变量。 变量在程序的执行中能够赋值,发生变化 。变量 有一个名字, 并在使用之前要说明其类型 ,一经 说明, 就在内存中占据与其类型相应的存储单元。 29 #include #define PRICE 30 /常量,在程序中保持不变 void main(void) int num, total; /定义变量 ,在内存中开辟区间 num=10; /变量赋值 ,10为常量 total=num*PRICE; cout“total=“total; /输出结果 其中: num=10 total=num*PRICE 是赋值号,不同于数学意义上的等号。 num total 10 300 PRICE 30 30 C+中有多种数据类型,均有常量与变量之分,各 占不同的内存空间,正确定义与使用数据是编写 程序的基本前提。 31 变量名的命名方法: 变量名、数组名、函数名 称为 标识符 。 标识符只能由 字母、数字、下划线 这三种字符组成,且第 一个字符必须为字母或下划线,长度不大于 247个字符, 大小写不通用 。(关键字不能作为标识符)。 关键字即是 VC+的语法要求中使用的字 。 如 int if while 等。 正确的标识符: INT, sum , de12, SUM等。 变量必须使 用前定义,以分配空间。 举例说明 32 abc English 2xy x-y if Else b(3) def Chine_bb b3y AbsFloat float 一般变量都是用匈牙利命名法命名的。 int nCount; char chChoice; 33 整型数据 整型常量: 常量是根据其表面形式来判定,整型量即是没有小数点的 整数,范围: -231( 231-1) ,有三种形式 : 1)十进制(默认方式) 43 1345 87654 2)八进制 以 0开头 043, 056, 011 3)十六进制 以 0 x开头 0 x12 0 xa3 0 x34 0 xdf (举例说明) 34 #include void main(void) int int10,int8,int16; /定义 3个整型变量 int10=10; /默认为十进制 int8=010; /八进制 int16=0 x10; /十六进制 coutint10=int10endl; coutint8=int8endl; coutint16=int16endl; 输出 int10=10 int8=8 int16=16 35 整型变量: 分为有符号型与无符号型。 有符号型: short 在内存中占两个字节,范围为 -215( 215-1) int 在内存中占四个字节,范围为 -231( 231-1) long在内存中占四个字节,范围为 -2-31231-1 无符号型: 最高位不表示符号位 unsigned short 在内存中占两个字节,范围为 0216-1 unsigned int 在内存中占四个字节,范围为 0232-1 unsigned long在内存中占四个字节,范围为 0232-1 36 1) 整型常量 亦有长短之分,常量中无 unsigned型,但一 个非负的整型常量可以赋给 unsigned型的变量。 2)若一个常量定义为长整型数,则在其后加 l或 L进行区 分。 如: 32l 32L 564L等,内存为其分配四个字节存储。 一个数在内存中为 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 当这个数为有符号数时,是 -1;为无符号数时,是 232-1 内存中的数是以 补码 的形式存放的。(举例说明) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 #include void main() unsigned short a; short int b= -1; a=b; couta=aendl; 结果: 65535 不同类型的整型数据间 的赋值归根到底就是一 条: 按存储单元中的存 储形式直接传送。 a 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 b 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 unsigned short a; 38 实型数据 实型数又称浮点数,有两种表示方式: 1)十进制形式: 23.0 24.5 3.56789 2) 指数形式: 23E1 145e-1 356789e1 e前有数字,后 面必须是整数。 实型变量分单精度 float 和双精度 double 两种形式: float:占四个字节,提供 78位有效数字。 double: 占八个字节,提供 1516位有效数字。 举例说明 39 #include void main(void) float a, b; double c, d; a=0.01; b=3.45678e-2; c=3.45678e-2; d=9.7654e-5; couta=atb=bendl; coutc=ctd=dendl; a=0.01 b=0.0345678 c=0.0345678 d=9.7654e-005 Press any key to continue 40 如果为实数,则用浮点数的形式在内存存储,表示如下: Jt J Sf S 阶符 阶码 数符 尾数 实数是既有整数又有小数的数。 实数可以表示成: N=S RJ S 称为尾数,尾数决定有效数字,即数字的精度。 J 表示指数(阶码)。 R 是基数,可取 2, 4, 8, 16等,对具体机器而言,基数 取好后,就不能再变了。 数有正有负 , 所以设置数符 ; 阶码亦有正负 , 所以设置阶符 41 一般用 4个字节表示一个浮点数,也有用 8个字 节表示的。 字长一定,尾数越多,精度越高;阶码越多, 范围越大。 当计算机中出现小于机器所能表示的最小数 时,机器只能当零来处理 , 当出现超过机器所能 表示的最大数时,出现溢出现象 ,一旦出现溢出, 就会停止运算。 定点数,浮点数均会出现溢出现 象。 42 字符型数据( char) 字符型数据实际上是作为 整型数据 在内存中存储的。 计算机是以字符编码的形式处理字符的,因此,我们在计算机内部 是以 ASCII码 的形式表示所有字符的。所以 7位二进制数即可表示 出一个字符, 我们用一个字节的容量( 8位)存储一个字符。 例如:字符 A的 ASCII码为 0 x41或 65,在内存中表示为: 0 1 0 0 0 0 0 1 在程序中表示为: char grade ;/定义一个字符型的变量空间 (1个字节 ) grade=A; /必须用 表示,否则易与标识符混同 内括起来的字符表示该字符的 ASCII码。 43 进一步,由于在内存中的形式与整型数据相同,所以, 可以直接用 其整型值给变量赋值。 char grade; grade=65; 以下的赋值形式均是等同的。 grade=A; grade=65 ; grade=0 x41; grade=0101; #include void main(void) char a,b; a=A; /输入 ASCII码 b=65; /输入十进制数 couta=aendl; coutb=bendl; 输出: a=A b=A 即在内存中的表示均是相同的 0 1 0 0 0 0 0 1 44 非打印字符 有些 ASCII的字符代表某些操作,不能打印出来, 如回车、退格等,可用两种方式表示这些字符。 1)用 ASCII码的形式 char re=13; 2)用转义字符 char re=n;( p15) 45 转义字符 含 义 ASCII代码 a 响铃 7 换行 , 将当前位置移到下一行开头 10 水平制表 ( 跳到下一个 tab位置 ) 9 退格 , 将当前位置移到前一列 8 回车 , 将当前位置移到本行开头 13 换页 , 将当前位置移到下页开头 12 v 竖向跳格 8 反斜杠字符 “ ” 92 单引号 ( 撇号 ) 字符 39 双引号字符 34 0 空字符 0 ddd 1到 3位 8进制数所代表的字符 xhh 1到 2位 16进制数所代表的字符 46 转义字符虽然包含 2个或多个字符,但它只代 表一个字符。 编译系统在见到字符 “ ”时, 会接着找它后面的字符,把它处理成一个字 符,在内存中只占一个字节。 47 典型转义字符 : n换行 b 退格 t 下一个输出 区 若输出中包含这些特定格式,则再加一个 输出 c:tctc 表示为 coutc:tctc; 可以用转义字符表示任一一个 ASCII字符 ddd (八进制) xhh (十六进制) 101 x41 x61 141 48 #include void main(void) char c1,c2,c3,c4; char n1,n2; c1=a; /字符常量 c2=97; /十进制 c3=x61; /转义字符 c4=0141; /八进制 coutc1=c1tc2=c2endl; coutc3=c3tc4=c4endl; n1=n; /转义字符:回车 n2=t; /转义字符:下一个输出区 (Tab) cout使用转义字符 n; coutc1=c1n2c2=c2n1; coutc3=c3n2c4=c4n1; 输出: c1=a c2=a c3=a c4=a 使用转义字符 c1=a c2=a c3=a c4=a 49 字符串常量: 用 表示, 在内存中顺序存放,以 0结束。 如: CHINA 0 x43 0 x48 0 x49 0 x55 0 x41 0 a在内存中占一个字节 a占两个字节 a a 0 实际上 内存是对应字符的 ASCII码形式 01000011 01001000 01001001 01010101 01000001 00000000 C H I N A 0 01100001 01100001 00000000 50 标识符常量 在 C+中有二种方法定义 标识符常量 , 一种是使用编译预 处理指令;另一种是使用 C+的常量说明符 const。 例如: #define PRICE 30 /在程序中凡是出现 PRICE均用 30替代 #define PI 3.1415926 #define S “China” const float pi=3.1415926; /将 变量 pi定义为 常量 (举例说明) 51 #include #define PI 3.14156 #define S China void main(void) const float pi=3.14156; /变量作为常量使用 coutPI=PIendl; cout10*PI=10*PIendl; coutSendl; / PI=PI+3; / pi=pi+4; coutPI=PIendl; coutpi=piendl; 输出: PI=3.14156 10*PI=31.4156 China PI=3.14156 pi=3.14156 52 下列常量的表示在 C+中是否合法 ? 若不合法 , 指出原因; 若合法 , 则指出常量的数据类型 。 32767 35u 1.25e3.4 3L 0.0086e-32 87 “Computer System” “a” a 9645 -0 +0 .5 -.567 53 变量 1) 在程序的执行过程中 , 其值可以改变的量 称为变量 。 2) 变量名必须用标识符来标识 。 3) 变量根据其取值的不同值域 , 分为不同类 型的变量:整型变量 、 实型变量 、 字符型变 量 、 构造型变量 、 指针型变量等等 。 54 4) 对于任一变量 , 编译程序要为其分配若干 个字节 ( 连续的 ) 的内存单元 , 以便保存变 量的取值 。 5) 当要改变一个变量的值时 , 就是把变量的 新的取值存放到为该变量所分配的内存单元 中;用到一个变量的值时 , 就是从该内存单 元中取出数据 。 6) 不管什么类型的变量 , 通常均是 变量的说 明在前 , 使用变量在后 。 55 int i, j, k; /定义了三个整型变量 i,j,k float x,y,z; /定义了三个实型变量 x,y,z char c1,c2; /说明了二个字符型变量 c1,c2 double dv1; /说明了一个双精度型变量 dv1 k 四个字节的 连续空间 j 四个字节的 连续空间 i 四个字节的 连续空间 z 四个字节的 连续空间 y 四个字节的 连续空间 x 四个字节的 连续空间 dv1 八个字节的 连续空间 c2 1个字节的 空间 c1 1个字节的 空间 开辟空间后 , 空 间中为随机值 56 变量赋初值 在定义变量的 同时 给变量赋值,即在内存中开辟出一个空 间后马上给此空间赋值。 但这个空间的值并不是固定不变的, 在程序的运行中一样 可以改变。 char a=x64, b=d; int a1=6, a2=98; a=A; b=n; a1=011; a2=121; int a=4; /定义语句,在开辟空间后马上为空间赋值 a=6; /重新为该空间赋值 a 4 6 57 算术运算符和算术表达式 一、算术运算符和算术表达式 + * % 用算术运算符连接起来的式子是算术表达式 两个整数相除结果为整数 1/2=0 5/2=2 整数才可求余,余数的符号与左边数的符号相同。 3%2=1 -3%2=-1 3%-2=1 -3%-2=-1 8%4=0 二、优先级与结合性 () * / % + 58 三、强制转换类型 (类型名)(表达式) ( double) a (int) (x+y) (int) 6.2%4=2 在强制类型运算后原变量不变,但得到一个所需 类型的中间变量。 如: int x; float y=5.8; x=(int)y; x=5 y=5.8 y的值没有改 变,仍是单精 度浮点型 59 四、自增、自减运算符 (难点) + i 6 i 3 7 int i, j; i=3; j = +i; i=4 j=4 +在前 , 先运算 ,后赋值 int i, j; i=3; j = i+; i=4 j=3 +在后 , 先赋值 ,后运算 j 4 4 i 3 j 3 4 i=6; i+; i=i+1 i=7 +i; i=i+1 i=7 i=6; i ; i=i 1 i=5 i ; i=i 1 i=5 i 6 7 60 1) 自增、自减运算符只能用于变量,不可用于常量和表 达式 因为表达式在内存内没有具体空间,常量所占的空间不能 重新赋值 3+ ( x+y)+ ( i)+ 若 i=3, j=2 (i+) +j 等于 5 i=4, j=2 2)结合方式自右至左,优先级最高,向右取最大 i+ (i+) i+j (i+) +j 61 赋值运算符和赋值表达式 bmw=2002 =左边 必须是变量名。 若“ = ” 两边变量类型不同,在赋值时要进 行 类型转换 。 转换原则:根据左边变量的类型转换。 62 少字节 多字节 1)若多字节变量为 unsigned ,则转换后多余字节补 零。 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 unsigned short int a=-1; unsigned long b; b=a; a b 63 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 有符号型,符号扩展 short int a=-1; long b; b=a; 2)若多字节变量为有符号型,则转换后扩展少字 节的最高位。 转换后,数据的符号不变。 a b 64 多字节 少字节 低位照搬 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 int a=-1; short int b; b=a; b=-1 int a=65535; short int b; b=a; b=-1 b a 1 1 1 1 1 1 1 1 65 赋值表达式 a=b=5 ; b=5 a=5 =的结合性为 自右至左 复合的赋值运算符 a+=3 a=a+3 x*=y+3 x=x*(y+3) x/=x-4 x=x/(x-4) x+=y x=x+y i+=j- i=i+(j-) 66 a=12; a+=a-=a*a; 12 a a=a-(a * a) =12-(12*12)=-132 a=a+(-132)=-132-132=-264 -132 264 67 关系运算符和关系表达式 关系运算符(比较运算) = = = != 1. = = 与 = a=5; 赋值运算 a= =5;判断是否相等 2. = 的优先级大于 = = != 3. 算术运算符的优先级大于关系运算符的优先级 68 关系表达式:用关系运算符将表达式连接起来称 为关系表达式。其值非真即假。在 C+语言中,用 非 0代表真,用 0表示假。 关系表达式的结果只有 两个,真为 1,假为 0。 a=2 b=3 c=4 a2 ab+c a= =2 a= =a aa b=a= =2 aA b= =a+1 c-a= =a 0 0 1 0 0 1 1 0 1 69 逻辑运算符 1. 运算符 与 a=3 a=3*3, a+6, a+7; 16 (a=3*5, a*4), a+5 20 a=9 a=15 76 下列语句中表达式中 i, j的值各为多少 1、 int i=0, j=0; 2、 int i=0, j=1; i=3, (j+)+i ; i+=j*=3; 3、 int i=1, j=0; 4、 int i=1, j=1; j=i=(i=3)*2); i+=j+=2; i=3,j=1 i=3,j=3 i=6,j=6 i=4,j=3 77 各类数值型数据间的混合运算 整型、实型、字符型数据间可以混合运算。 float double long unsigned int char 10+a+1.5-87.65*b 在进行运算时,不同类型的数据要先转换成同一 类型的数据再进行运算。 转换规则如下: 78 第三章 简单的输入输出 79 输入语句: cin 程序在执行期间, 接收外部信息的操作称为 程序的输入 ;而把 程序向外部发送信息的操 作称为程序的输出 。在 C+中没有专门的输 入输出语句,所有输入输出是通过 输入输出 流 来实现的。 80 要使用 C+提供的输入输出时 , 必须在程序 的开头增加一行: #include 即包含输入输出流的头文件 “ iostream.h”。 有关包含文件的作用 , 在编译预处理部分 ( 第五章 ) 作详细介绍 。 81 输入十进制整数和实数 cin . ( 举例说明 ) int a,b; cinab; /程序运行至此停下,等待从键盘输入变量值 键盘输入: 3 5 或: 3 5 均可。 输入语句自动过滤空白字符。 a 3 键盘 b 5 键盘 82 浮点型数据同整型数据一样。 float c,d; cincd; char ch1,ch2; cinch1ch2; 若输入: ab 则 ch1为 a, ch2为 b。 若输入: a b 则 ch1为 a, ch2为 b。 字符型变量过滤空白字符。 cin格式过滤空白字符 83 float a; int i1,i2; char ch1,ch2; cini1ai2ch1ch2; 输入: 34 5.678 1a b i2:1 在缺省的情况下, cin自动跳过输入的空格 ,换言 之, cin不能将输入的空格赋给字符型变量,同样 地,回车键也是作为输入字符之间的分隔符, 也 不能将输入的回车键字符赋给字符型变量 。 a:5.578 i1:34 ch1:a ch2:b 84 若要把从键盘上输入的每一个字符 , 包括 空格和 回车键 都作为一个输入字符赋给字符型变量时 , 必须使用函数 cin.get()。 其格式为: cin.get(); cin.get()从输入行中取出一个字符 , 并将它赋给字 符型变量 。 这个语句一次只能从输入行中提取一 个字符 。 char c1; cin.get(c1); 85 char ch1,ch2,ch3; cin.get(ch1); cin.get(ch2); cin.get(ch3); 输入: A B 则: ch1:A 并且在输入缓冲区中保留回车键。 ch2:空格 ch3:B 空格的 ASCII码为 32 0 0 1 0 0 0 0 0 ch2 86 输入十六进制或八进制数据 在缺省的情况下,系统约定输入的整型数是十进 制数据。当要求按八进制或十六进制输入数据时, 在 cin中必须指明相应的数据类型: hex为十六进 制; oct为八进制; dec为十进制 。 87 int i,j,k,l; cinhexi; /指明输入为十六进制数 cinoctj; /指明输入为八进制数 cink; /输入仍为八进制数 cindecl; /指明输入为十进制数 当执行到语句 cin时 , 若输入的数据为: 11 11 12 12 结果: i:17 j:9 k:10 l:12 88 使用非十进制数输入时 , 要注意以下几点: 1、 八进制或十六进制数的输入 , 只能适用于 整型 变量 , 不适用于字符型变量 , 实型变量 。 2、 当在 cin中指明使用的数制输入后 , 则所指明的 数制一直有效 , 直到在接着的 cin中指明输入时所 使用的另一数制为止 。 如上例中 , 输入 k的值时 , 仍为八进制 。 89 3、 输入数据的 格式 、 个数和类型 必须与 cin中所列 举的变量类型 一一对应 。 一旦输入出错 , 不仅使 当前的输入数据不正确 , 而且使得后面的提取数 据也不正确 。 cina,b; cina b; cinab; int a, b; cinab; 90 输出数据 cout 与输入 cin对应的输出是 cout输出流。 当要输出一个表达式的值时 , 可使用 cout来实现 , 其一般格式为: cout . ; 其中运算符“ ”称为插入运算符,它将紧跟其后 的表达式的值,输出到显示器 当前光标 的位置。 91 int a=6; float f1=12.4; char s1 =“abcd”; coutatf1ts1endl; t为转义字符 Tab endl为回车或 n 显示器 显示器 显示器 a 6 f1 12.4 s1 0 d c b a 6 12.4 abcd 92 cout将 双引号中的字符串常量 按其原样输出 char ch1=a,ch2=b; cout“c1=“ch1t“c2=“ch2endl; c1=a c2=b int i1=4,i2=5; float a=3.5; cout“a*i1=“a*i1endl“a*i2=“a*i2endl; a*i1=14 a*i2=17.5 93 指定输出项占用的宽度: 在输出的数据项之间进行隔开的另一种办法是 指定输出项 的宽度 。 如上面的两个输出语句可改写为: cout setw(6) isetw(10)jendl; _ _ _ _ _ 4_ _ _ _ _ _ _ _ _12 cout setw(5)msetw(10)j*kendl; _ _ _ _ 7_ _ _ _ _ _ _ _ 24 其中 setw(6)指明其后的 输出项占用的字符宽度为 6,即 括号中的值指出紧跟其后的输出项占用的字符位置个数, 并向右对齐 。 setw是“ set width”的缩写。 94 使用 setw()应注意以下三点: 1、 在程序的开始位置必须包含头文件 iomanip.h, 即在程 序的开头增加: #include 2、 括号中必须给出一个表达式 ( 值为正整数 ) , 它指明 紧跟其后输出项的宽度 。 3、 该设置仅对其后的一个输出项有效 。一旦按指定的宽 度输出其后的输出项后,又回到原来的缺省输出方式。 95 输出八 、 十六进制数和科学表示法的实数 对于整型数据可指定以十六进制或八进制输出 , 而对于 实型数据可 指定以科学表示法形式 输出 。 例如 , 设有如 下一个程序: #include void main(void) float x=3.14,y=100; cout.setf(ios:scientific,ios:floatfield); /表明浮点数用科学表示法输出 cout xt; cout yy? 真 假 z=x z=y 99 3、循环 A 当 P为真 当型 i+ i=10 i+ P A Y N 101 if语句 判断选择 语句,有三种形式: 1) if(表达式) 语句 语句 条件 真 假 语句 2 语句 1 条件 真 假 2) if(表达式) 语句 1 else 语句 2 if (ab) coutb) couta; else coutb) a=1; b=0; else a=0; b=1; a=0 b=1 a=1 b=0 ab 真 假 105 if (i j) i+; if (ij); i+; i+ + ij 真 假 if 总是与它上面最近的 else 配对,如要改变,用复合语 句 。 注意书写格式 ,相互配对的语句要对齐。 ij 真 假 i+ + 106 例:输入两个实数,按代数值由小到大次序输出这两个数。 void main( void ) float a,b,t; /定义变量 coutab; /给变量赋值 a:7, b:3 if(ab) t=a; a=b; b=t; /交换数据,用中间变量 coutatbendl;/输出变量 b a t 7 3 7 7 3 输出结果: 3 7 107 嵌套的条件语句(举例说明) x=100; a=10; b=20; ok1=5; ok2=0; if(ab?a:b ; / 求 a, b中的大者 当 a=2 b=1 ab为真,表达式的值等于 a, max值为 2 当 a=1 b=2 ab为假,表达式的值等于 b, max值为 2 注意: 1. 条件运算符的优先级比赋值运算符高 x=(x=3) ? x+2 : x-3 2. 结合方向自左至右 ab?a:cd?c:d 3. 三个表达式的类型可不同 z=ab?A:a+b x=5 109 x=9, y=6, z=5; x=(x+y)%z=x%z+y%z)?1:0; coutx= xendl; x=1; y=2; z=3; x+=y+=z; couty?x+:y+) endl; y=y+z=5 x=x+5=6 9 x=0 110 void main(void ) int x=1,y=2,z=3; x+=y+=z; coutxy?y:xendl; coutxy?x+:y+endl; coutx“,”yendl; couty?x+:y+endl; couty“,”zendl; x=3; y=z=4; cout=y cout=y x y z 输出 6 5 3 6 5 3 6 6 6 3 5 6 6 3 6,6 6 7 9 9 6 7 9 7,9 3 4 4 3 4 4 0 3 4 4 1 111 执行以下程序段后,变量 a,b,c的值分别是: int x=10, y=9; int a,b,c; a=(-x= =y+)?-x:+y; b=x+; c=y; x=8 y=10 a=8 b=8 x=9 c=10 112 void main(void ) int a=5,b=1,c=0; if(a=b+c) cout“* * *n”; else cout“$ $ $n”; * * * 113 switch语句 多分支选择语句。 if语句只有两个分支,而实际问题中常 常需要用到多分支的选择。如,成绩分为 A(10085)、 B(8470)、 C(6960)、 D(60以下 )等。 A 10085 Y B Y 8470 C Y 6960 D Y no pass N N N N 显示出错 114 cin.get(grade); if(grade= =A) cout“10085n”; else if (grade= =B) cout“8470n”; else if (grade= =C) cout“6960n”; else if (grade= =D) cout“no passn”; else cout“errorn”; 115 switch(表达式) case 常量表达式 1:语句 1 case 常量表达式 2:语句 2 case 常量表达式 n:语句 n default:语句 n+1 switch(grade) case A: cout“10085n”; case B: cout“8470n”; case C: cout“6960n”; case D: cout“no passn”; default: cout“errorn”; 如果 grade为 A,则结果 为 10085 8470 6960 no pass error 116 其流程为:先计算表达式的值,然后顺序地 与 case子句中所列出的各个常量进行比较,若 表达式的值与常量中的值相等,就开始进入 相应的 case语句执行程序, 遇到 case和 default 也不再进行判断,直至 switch语句结束。 如果 要使其在执行完相应的语句后中止执行下一 语句,可以在语句后加 break。 117 switch(grade) case A: cout“10085n”; break; case B: cout“8470n”; break; case C: cout“6960n”; break; case D: cout“no passn”; break; default: cout“errorn”; 118 注意: 1、 switch与 if不同,它仅能判断一种逻辑关系,即 表达式是否 等于 指定的常量,而 if 可以计算并判断 各种表达式。 2、 case子句后必须为常量,常常是整型和字符型。 3、 default可以省略,这时,不满足条件什么也不 执行。 119 4、 case和 default只起标号的作用, 顺序可以颠倒 , 颠倒时注意后面的 break语句。 5、多个 case语句可以共用一组程序。 case A: case B: case C: cout“pass!n”; 120 void main(void ) int i=10; switch(i) case 9: i+; case 10: i+; case 11: i+; default: i+; cout“i=”iendl; i=11 i=12 i=13 i=13 121 int x=1, y=0, a=0, b=0; switch( x ) case 1: switch( y ) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+; b+; cout“a=“at“b=”bendl; a=1 a=2 b=1 a=2 b=1 122 有 3个整数 a,b,c,由键盘输入,输出其中最大的 数。 123 while语句 while ( 表达式) 语句组 1 语句组 2 表达式 语句组 1 真 语句组 2 假 a=3; while(a100) a=a+5; cout“a=“a; 当循环语句超过一条时,要 用 将语句组组合在一起。 124 求 1+2+3+100 void main(void) int i=1,sum=0; /定义变量,初始化 while(i=100) /构造循环 sum=sum+i; / 循环体,多次执行 i=i+1; cout“sum=”sumendl; /输出结果 循环条件 初值 循环次数 1 2 3 4 . 99 100 101 sum i 0 1 1 2 真 3 3 真 6 4 真 10 5 真 真 100 真 101 真 5050 假 sum 5050 0 sum 1 i 1 2 3 3 6 4100 5050 101 循环结束 ! 实际上是将 i不停地累加到一起 125 注意: 1、循环体如果为一个以上的语句,用 括起。 2、循环体内或表达式中必须有使循环结束的条件, 即一定有一个循环变量。 3、 while表达式可以成为语句,要特别小心。 126 k=2; while(k!=0) coutk, k-; coutendl; k 循环条件 输出 输出: 21 2 真 2 1 真 1 0 假 回车 127 void main(void) int num=0; while(num=2) num+; coutnumendl; num 循环条件 输出 1 2 3 0 真 1 1 真 2 2 真 3 3 假 无 128 void main(void) int y=10; while (y-); cout“y=”yendl; y 条件 输出 输出: y=-1 输出是什么? 循环几次? 10 真 无 9 真 无 . 真 无 1 真 无 0 假 1 循环: 10次 129 k=10; while( k=0 ) k=k-1; cout k; k 10 表达式 0 输出: 0 130 x=10; while (x!=0) x-; x=10; while (x) x-; x=10; while(x-); x=10; while(-x); 以下语句,循环退出时 x为多少? x=0 x=0 x=-1 x=0 131 #include void main() char ch; while(cin.get(ch) case 2: cout(char)(ch+4); break; case 3: cout(char)(ch+3) ; default : cout(char)(ch+2); break; coutendl; 从键盘输入 2473,则程序 的输出结果是: 输出: 6 6 8 9 7 7 132 直到 P为真 A 直到型 dowhile语句 表达式 语句组 1 真 语句组 2 假 do 语句组 1 while(表达式); 语句组 2 133 求 1+2+3+100 void main(void) int i=1,sum=0; /定义变量,初始化 do /构造循环 sum=sum+i; / 循环体,多次执行 i=i+1; while (i=100); cout“sum=”sum0) cout“y=“y“,”“x=”xendl; y 0 x 0 条件 输出: y=1,x=0 1 0 假 若为 while循环,则 一次也不执行循环 体,输出为: y=0, x=0 136 s=7; do s-=2; while(s= =0); cout“s=”sendl; 第一次 s 7 5 表达式 N 输出: s=5 137 for语句 for(表达式 1;表达式 2; 表达式 3) 语句组 1(循环体 ) 语句组 2 N 表达式 2 语句组 1 Y 语句组 2 表达式 1 表达式 3 for( 循环变量赋初值 ;循环结束条件; 循环变量增值 ) 138 求 1+2+3+100 void main(void) int i, sum; for (i=1, sum=0; i=100; i+) sum=sum+i; cout“sum=”sumendl; void main(void) int i, sum; i=1; sum=0; while(i=100) sum=sum+i; i=i+1; cout“sum=”sumendl; 139 注意: 1、当型循环,条件测试是在循环开始时进行,有可能一次 也进入不了循环体。 2、 for语句中的三个表达式可以部分省略或全部省略, 但 ; 不能省略, 若省略表达式 2,则表示循环条件 为真 。 3、 for语句中三个表达式可以是任何有效的 C语言表达式。 140 void main(void) char i, j ; for (i=a,j=z ; ij ; i+, j-) coutij; coutendl; 次数 i j ij 输出 输出: azbycx.lomn a z 真 az b y 真 by c x 真 cx 真 . 真 . m n mn . n m 假 CR 141 以下循环结果如何? for ( i=0, k= -1; k=1; i+, k+) cout“*n”; 以下循环最多执行 _次,最少执行 _次 for (i=0, x=0; ix; 10 1 142 循环的嵌套 一个循环体内又包含另一个完整的循环体,称为循 环的嵌套。 注意: 1、循环体内有多个语句要用括起来。 2、书写格式要清晰。 for ( ; ; ) . for ( ; ; ) . 143 void main(void) int i, j, k=0, m=0; for ( i=0; i2; i+) for ( j=0; j3; j+) k+; k- =j; m=i+j; cout“k=“k“, m=“ mendl; i i2 j jn) 1、 m被 n除得到余数 r( 0r n) r=m%n m=6 n=4 r=m%n=6%4=2 while ( r=m%n ) m=n; n=r ; 最小公倍数为两数之积除以最大公约数。 4*6/2=12 2、若 r=0,则算法结束, n为最大公约数,否则做 3 3、 mn , nr , 回到 1 m=4 n=2 r=m%n=4%2=0 所以,公约数 =2 147 最大公约数:能同时被 m和 n整除的最大数。 r=mn?n:m for(i=1; ir; i+) if(m%i=0 couta; 148 将 12345 的每位分别打印出来。 12345 10 5 12345/10 1234 1234 10 4 1234/10 123 123 10 3 123/10 12 12 10 2 12/10 1 1%10 1 1/10 0 while(n) coutn%10=1e-5) S=S+term; term=(-1)*term*x*x/(2*n)*(2*n-1); n+; term=(-1)*term*t; 前一项 当前项 旧的 新的 后一项 (-1) 前一项 t 设通项为 term,则可以写出迭代公式 t=x*x/(2*n)*(2*n-1) 151 )!2( )1(. !8!6!4!2 1 28642 n xxxxx S n n t=x*x/(2*n)*(2*n-1) 第 n项 /第 n-1项: 第一项: term=1; 第一次循环: S=S+term; term=(-1)*term*t; 第二次循环: S=S+term; term=(-1)*term*t; 这时 左边的 term代表第二项,而 右边的 term为第一项。 这时 左边的 term代表第三项,而 右边的 term为第二项。 term=(-1)*term*t; 前一项 当前项 同样是 term,在循环中不断用旧的数值去推导赋值出新的 数值。 152 S=0;term=1;n=1;/一定要赋初值 while(fabs(term)=1e-5) S=S+term; term=(-1)*term*x*x/(2*n)*(2*n-1); n+; 旧的 新的 )!2( )1(. !8!6!4!2 1 28642 n xxxxx S n n 153 break语句和 continue语句 break在 switch语句中,可以 使流程跳过判断体 , 执 行下面的程序 。 在循环体中,也可以从循环体内跳 出循环体,提前结束循环 。 for ( ; ; ) cinx; if (x= =123) break; 当输入 123时,结束循环。 break 只能退出一层循环或 switch语句。 154 a=10 ; y=0; do a+=2; y+=a; cout“a=“a“, y=“ y50) break; while (a=14); 第一次: a=12 y=12 输出: a=12 , y=12 第二次: a=16 y=28 输出: a=16 , y=28 第三次: a=16 y=44 输出: a=16 , y=44 第四次: a=16 y=60 输出: a=16 , y=60 155 continue:其作用为 结束本次循环 ,即跳过循环体中下面 尚未执行的语句, 接着进行下一次是否执行循环的判定 。 void main(void) int i; for (i=1 ; i=5 ; i+ ) if (i%2) cout“*”; else continue; cout“#”; cout“ $n”; i i=5 i%2 输出 输出: *#*#*#$ 1 真 1 *# 2 真 0 无 3 真 1 *# 4 真 0 无 5 真 1 *# 6 假 $ 156 void main(
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!