C语言程序设计(上)241_第1页
C语言程序设计(上)241_第2页
C语言程序设计(上)241_第3页
C语言程序设计(上)241_第4页
C语言程序设计(上)241_第5页
已阅读5页,还剩236页未读 继续免费阅读

下载本文档

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

文档简介

C++语言程序设计(上)第1章计算机与程序设计

第2章数据类型、运算符与表达式

第3章输入和输出

第04章控制结构

第5章函数

第6章数组

第7章指针

第9章链表

第10章面向对象程序设计根本概念

第11章类与对象

第12章类和对象的使用

第13章运算符重载

第14章继承

第15章多态性

第16章文件和流

第17章异常

第18章模板第1章计算机与程序设计讲授内容计算机系统的根本组成、工作原理程序设计的根本过程和方法程序设计语言根本概念及其开展历史结构化程序设计和面向对象程序设计方法典型的C++编程环境、开发过程和程序结构程序设计风格1.1计算机系统概述(1/4)计算机系统机器系统能接收和存储信息能对数据进行处理和计算能输出结果计算机系统由硬件系统和软件系统组成硬件系统包括CPU、显示器、内存、硬盘、键盘等软件系统包括各种程序和文档1.1计算机系统概述(2/4)计算机硬件——是软件实现的根底运算器——对数据进行算术运算和逻辑运算主存储器——存储二进制信息,与运算器、控制器等直接交换信息控制器——按程序的要求,控制计算机各功能部件协调一致地动作控制器+运算器=中央处理器中央处理器+主存储器=处理机1.1计算机系统概述(3/4)计算机硬件——是软件实现的根底输入设备——将用户信息〔数据、程序等〕变换为计算机能识别和处理的信息形式输出设备——将计算机中二进制信息变换为用户所需要并能识别的信息形式辅助存储器——存储主存储器难以容纳、又为程序执行所需要的大量文件信息1.1计算机系统概述(4/4)计算机软件——计算机系统中的指挥者系统软件——最靠近硬件,如编译程序和操作系统等支撑软件——支撑其它软件的开发和维护,如各种数据库管理系统、接口软件和工具组应用软件——用于特定应用领域,如财务管理系统上述分类是交叉和变化的一个软件可以在一个系统中是系统软件,在另一个系统中是支撑软件在同一系统中,一个软件可以既是系统软件,也是支撑软件1.2程序设计根本概念(1/6)问题求解过程步骤问题定义——明确要解决的问题算法设计——把要求解的问题转化为计算机的解题步骤程序编码——对设计出来的算法实现进行编程实现测试和调试——发现和纠正程序中的错误1.2程序设计根本概念(2/6)算法与程序算法——由有限个步骤组成的求解问题的方法算法的特点有穷性:执行有穷个步骤后必须终止确定性:每一个步骤必须是无二义的能行性:每一个步骤都可以在有限时间内做完输入:一般有输入信息输出:一般有一个或多个输出信息1.2程序设计根本概念(3/6)算法的描述方式文字描述自然语言图形描述流程图、盒图,PAD图等程序语言描述计算机程序,如C++1.2程序设计根本概念(4/6)程序的组成数据数据结构,程序处理的数据操作处理数据的操作步骤,即算法程序=数据结构+算法1.2程序设计根本概念(5/6)程序设计和程序编码先设计,后编码设计是根底,是编码的依据设计的好坏影响代码的质量1.2程序设计根本概念(6/6)程序设计语言描述数据和对数据的操作机器语言用机器根本指令编码,二进制形式汇编语言使用一组助记符编码,需要汇编才能运行高级语言表示方法更接近于待解问题的表示方法,需要编译才能运行1.3程序设计方法(1/4)结构化程序设计任何程序逻辑都可以用顺序、选择和循环三种根本结构表示1.3程序设计方法(2/4)结构化程序设计自顶向下,逐步求精描述问题,分析问题,分解问题成相对独立的子问题〔反复进行,逐步分解〕描述子问题的数据和操作模块化原那么尽量采用典型根本控制结构:顺序、选择、循环缺点〔对于大型软件开发〕稳定性低、可修改性和可重用性差1.3程序设计方法(3/4)面向对象程序设计面向问题现实世界是由对象组成的问题由哪些对象组成?对象之间如何相互作用?结构化程序由函数组成,面向对象程序由对象组成易于扩展、可维护性好1.3程序设计方法(4/4)面向对象分析和设计步骤找出问题中的对象和类确定每个对象应具备的属性和功能确定类、对象之间关系,相互作用的方式用程序代码实现这些对象和类1.4C与C++(1/3)C语言的历史起源于Algol60在Algol60的根底上开展出CPL语言1967年开展为BCPL,用于编写操作系统和编译器1970年贝尔实验室将BCPL改进成B,并用B语言实现了第一个UNIX操作系统1972年左右,DennisRitchie和KenThompson在贝尔实验室设计UNIX系统时,开发出了C语言之后,C语言开展出很多版本1988年,美国国家标准化协会(ANSI)制定了C的标准——ANSIC1.4C与C++(2/3)C语言的特点数据类型丰富运算符丰富,共34个运算符支持结构化程序设计方便、灵活,结合了高级语言的根本结构、语句和低级语言的实用性程序生成代码质量高、程序执行效率高可移植性好,可用于UNIX、AIX、WINDOWS等操作系统1.4C与C++(3/3)C++语言在C语言中引入了面向对象的思想是一种混合型的语言,同时支持结构化程序设计和面向对象程序设计方法兼容C语言,可不加修改地使用C语言代码允许数据抽象,支持封装、继承和多态等特征1.5C++编程简介使用IDE开发C++程序编辑(edit)预处理(preprocess)编译(compile)连接(link)装入(load)执行(execute)例子1:C++程序:输入一个人的姓名,然后输出"HELLO,***//ex1_2.cpp:输入姓名,然后在屏幕输出问候信息。#include<iostream.h>intmain(){charname[20];//输出提示信息cout<<"Pleaseinputyourname:";

cin>>name;//输入姓名//输出信息,并使用\n换行

cout<<"HELLO,"<<name<<"!\n";

return0;//指示程序运行}1.6程序设计风格(1/2)用好的设计方法编写结构好的程序提高程序的可读性、可理解性和可修改性,以利于程序查错、测试及维护程序员要养成良好的程序设计风格1.6程序设计风格(2/2)注意点以简洁明了的方式编写C++程序缩排规那么标识符命名规那么注释输出信息直观清晰,布局合理学习目的检测了解计算机系统、程序设计语言、程序设计的根本概念掌握简单C++程序的结构明确程序设计风格的意义作业1.21.31.71.9第2章数据类型、运算符与表达式讲授内容C++语言的根本元素、字符集和关键字根本的数据类型的表示方法常量和变量类型转换各种运算符与表达式2.1C++的字符集和关键字(1/2)字符集由52个字母、10个数字、27个特殊字符组成所有C++程序〔忽略换行符和字符串常量中的内容〕都由字符集中的字符按一定规那么构成2.1C++的字符集和关键字(2/2)C++标识符是满足如下条件的一串字符由字母(a~z,A~Z)或下划线(_)开头;其它局部可以由字母、下划线或数字(0~9)组成;只有前32个字符有效;C++的63个关键字也是标识符,但不能作其它用〔保存字〕2.2 根本数据类型(1/5)C++程序中的每个数据对象〔如2、x1、x1+2〕都有确定的数据类型C++的数据类型包括根本数据类型和复合数据类型根本数据类型有整型、浮点型、字符型、布尔型不同数据类型有自己的取值范围和所允许的操作2.2 根本数据类型(2/5)整型signedshortint(简写为short)signedint(简写为int)signedlongint(简写为long)unsignedshortint(简写为unsignedshort)unsignedint(简写为unsigned)unsignedlongint(简写为unsignedlong)2.2 根本数据类型(3/5)浮点型float(浮点型)double(双精度型)longdouble(长双精度型)均有符号不允许的操作:取余%、位运算等2.2 根本数据类型(4/5)字符型charsignedcharunsignedchar实质是占一个字节的整型数〔小整数〕允许的操作:和整型相同2.2 根本数据类型(5/5)布尔型bool值为true和false可以当作整数用〔true一般为1,false为0〕把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false2.3 变量与常量(1/9)函数体说明语句类型名、变量、常量表达式执行语句表达式变量、常量、运算符2.3 变量与常量(2/9)扩充的巴克斯范式表示语法〔全书统一,不涉及语义〕<非0数字>→1|2|3|4|5|6|7|8|9<八进制数字>→0|1|2|3|4|5|6|7<十六进制数字>→0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|A|B|C|D|E|F<整型后缀>→<无符号整型后缀>[<长整型后缀>]|<长整型后缀>[<无符号整型后缀>]<无符号整型后缀>→u|U<长整型后缀>→l|L<八进制整型常量>→0<八进制数字>{<八进制数字>}2.3 变量与常量(3/9)扩充的巴克斯范式<整型常量>→<十进制整型常量>[<整型后缀>]|<八进制整型常量>[<整型后缀>]|<十六进制整型常量>[<整型后缀>]<十进制整型常量>→0|<非0数字>{<数字>}<八进制整型常量>→0<八进制数字>{<八进制数字>}<十六进制整型常量>→0x<十六进制数字>{<十六进制数字>}|0X<十六进制数字>{<十六进制数字>}<数字>→0|1|2|3|4|5|6|7|8|92.3 变量与常量(4/9)扩充的巴克斯范式<浮点常量>→<尾数局部>[<指数局部>][<浮点后缀>]|<数字串><指数局部>[<浮点后缀>]<尾数局部>→[<数字串>].<数字串>|<数字串>.<指数局部>→e[<符号>]<数字串>|E[<符号>]<数字串><符号>→+|­<数字串>→<数字>{<数字>}<浮点后缀>→f|l|F|L2.3 变量与常量(5/9)扩充的巴克斯范式<字符型常量>→‘<c字符>’

<c字符>→字符集中除单引号’、反斜线\外的任意字符|<转义序列><转义序列>→<简单转义序列>|<八进制转义序列>|<十六进制转义序列><简单转义序列>→\’|\“|\?|\\|\a|\b|\f|\n|\r|\t|\v<八进制转义序列>→\<八进制数字>|

\<八进制数字><八进制数字>|

\<八进制数字><八进制数字><八进制数字><十六进制转义序列>→\x<十六进制数字>{<十六进制数字>}2.3 变量与常量(6/9)扩充的巴克斯范式<字符串常量>→“[<s字符序列>]〞<s字符序列>→<s字符>{<s字符>}<s字符>→字符集中除双引号“、反斜线\外的任意字符|其它可显示字符|<转义序列>2.3 变量与常量(7/9)变量四要素:变量名、类型、存储空间、值必须先声明后使用,一般声明形式为:<变量声明>→<存储类别描述符><类型描述符><变量表><存储类别描述符>→auto|register|static|extern<类型描述符>→<类型名><变量表>→<标识符列表><标识符列表>→<非关键字标识符>{,<非关键字标识符>}2.3 变量与常量(8/9)符号常量符号常量是经过定义的代表常量的标识符C++定义符号常量的格式如下:#define<标识符><常量>#define是C++的预处理指令,说明程序中的<标识符>都代表了<常量>。2.3 变量与常量(9/9)例子:#definePRICE30#include<iostream.h>main(){intnum,total;num=10;total=num*PRICE;cout<<"total="<<total<<endl;return0;}2.4 类型转换(1/4)举例(int)3.14将3.14转换成整数3(double)3将3转换成双精度浮点数3.0double(3)将3转换成双精度浮点数3.02.4 类型转换(2/4)提升规那么将数值转换成较低的类型,如从float到int必须显式地使用类型转换,如(int)3.14;将数值转换成较高的类型可以通过隐式的类型转换,如3.14+22.4 类型转换(3/4)隐式类型转换表达式中运算符的操作数类型与要求不符时,要进行隐式类型转换,使之符合要求隐式类型转换规那么:〔1〕表达式中如有char、short和enum类型的数据时,自动将它们转换成int类型〔2〕把表达式中不同类型的数据转换成精度最高、占用内存最多的那个数据的类型在赋值表达式中,自动将赋值运算符右边表达式的值的类型转换成左边变量的类型2.4 类型转换(4/4)强制类型转换〔显式类型转换〕形式为:〔<类型>〕<表达式>或<类型>〔<表达式>〕例如:(double)3/2或double(3)/2(double)(3/2)或double(3/2)2.5 运算符和表达式(1/11)运算符的优先级和结合性运算符包括:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符根据组成表达式的运算符的不同,表达式可以分为算术表达式、关系表达式、逻辑表达式、位运算表达式、逗号表达式和赋值表达式2.5 运算符和表达式(2/11)算术运算之一:一元算术运算+正,运算结果同操作数-负,运算结果为操作数的负数++自增运算符;操作数的位置?--自减运算符2.5 运算符和表达式(3/11)算术运算之一:根本算术运算〔二元〕+加法,运算结果为两个操作数的和-减法,运算结果为左操作数减去右操作数的差*乘法,运算结果为两个操作数的乘积/除法,运算结果为左操作数除以右操作数的商%求余,运算结果为左操作数除以右操作数的余数,只用于整型数据,其结果也是整型2.5 运算符和表达式(4/11)算术运算之一:根本算术运算两个整数作/运算,其结果为整数具体结果依赖于具体机器,一般为直接截去小数局部两个整数求余%如果两数都是正数,结果为正否那么结果与左操作数的符号一致〔MicrosoftC++〕2.5 运算符和表达式(5/11)算术表达式<算术表达式>

→<常量>|<变量>|+<操作数>|-<操作数>|<操作数>++|++<操作数>|<操作数>--|--<操作数>|<操作数><二元算术运算符><操作数>|(<算术表达式>)<操作数>

→<表达式>2.5 运算符和表达式(6/11)关系运算<关系表达式>

→<操作数><关系运算符><操作数><关系运算符>→<|>|<=|>=|==|!=2.5 运算符和表达式(7/11)逻辑运算<逻辑表达式>→<布尔型常量>|<布尔型变量>|<关系表达式>|<操作数>&&<操作数>|<操作数>||<操作数>|!<逻辑表达式>|(<逻辑表达式>)!、||、&&的优先级和结合性逻辑表达式的“短路计算法〞(慎用自增、自减〕2.5 运算符和表达式(8/11)位运算<位运算表达式>→~<操作数>|<操作数>&<操作数>|<操作数>|<操作数>|<操作数>^<操作数>|<操作数><<<操作数>|<操作数>>><操作数>操作数只能是整型或字符型数据,结果亦然符号位参加运算向右移位运算,但左操作数是负数时,高位填0或12.5 运算符和表达式(9/11)逗号运算<逗号表达式>→<表达式>,<表达式>二元运算,左结合先左后右计算表达式的值,取右表达式的值为运算结果逗号的左、右表达式作为逗号运算符的操作数,类型可以不同2.5 运算符和表达式(10/11)赋值运算<赋值表达式>→<变量><赋值运算符><表达式><赋值运算符>→=|*=|/=|%=|+=|­=|>>=|<<=|&=|^=||=二元运算,右结合<变量>可以是由标识符表示的变量,也可以是数组元素或指针指向的存储空间〔“左值性质〞〕赋值运算可用于变量初始化,运算符右边的表达式需编译时可计算2.5 运算符和表达式(11/11)条件运算符

<表达式1>?<表达式2>:<表达式3>三元运算运算符的操作数类型可以不同学习目的检测理解字符集、标识符和关键字的意义掌握根本数据类型的定义及不同数据类型之间的转换机制掌握各种常量的性质和定义掌握变量的声明方法熟练运用各种运算符与表达式作业2.8、2.10、2.11、2.12、2.14、2.15、2.16、2.18、2.19第3章输入和输出讲授内容标准输入输出函数格式化输入输出函数通过流进行输入输出3.1C++的输入和输出两种I/O方式保存自C的——通过标准的I/O函数实现面向对象的——类型平安的,编译器对输入输出操作做严格的类型检查建议尽量使用面向对象的I/O方式3.2标准输入与输出函数字符输入函数getchar

intgetchar(void);字符输出函数putchar

intputchar(intc);例子1:字符输入输出//ex3_1.cpp#include<stdio.h>intmain(){ chara='a',b='b',c;

c=getchar(); putchar(a); putchar(b); putchar('c'); putchar(c); putchar('\"'); putchar(0101); putchar('\n'); return0;}程序运行如果sabcs"A3.3格式化输入输出(1/12)格式化输入函数scanf输入各种类型的数据,并存入相应的参数中读取输入流中的指定的字符跳过输入流中的指定的字符3.3格式化输入输出(2/12)格式化输入函数scanfscanf(<格式控制串>,<参数列表>)<格式控制串>描述输入数据遵循的格式,可以包含3种类型的字符:格式指示符、空白字符〔空格、Tab键和回车键〕和非空白字符〔普通字符〕<参数列表>是存放数据的地址的列表,参数之间用“,〞分隔。参数列表是一个地址列表scanf("%d%f%d",&num1,&num2,&num3);1234.56783.3格式化输入输出(3/12)scanf函数的格式指示符%*<宽度><转换说明符>%是格式指示符的前导符*赋值抑制符,表示该格式指示符对应的数据读入后,不赋给相应的变量

scanf("%d%*d%d%d",&num1,&num2,&num3);输入1234567893.3格式化输入输出(4/12)scanf函数的格式指示符%*<宽度><转换说明符>宽度是任选项,为一整数n,指明了该输入数据长度为n,如果有多余的局部将被舍弃scanf("%3c%3c",&ch1,&ch2);ch1和ch2均为字符型变量,输入为:abcdefg3.3格式化输入输出(5/12)scanf函数的格式指示符%*<宽度><转换说明符>转换说明符d十进制整型量e实型的指数形式o八进制整型量gf和e的较短形式x十六进制整型量c字符u无符号十进制整型s字符串i整型l或h输入short或long类型数据f实型的小数形式l或L用于输入double或longdouble类型数据3.3格式化输入输出(6/12)格式化输出函数printf指定浮点值保存的小数位数浮点值小数点对齐输出数据的右对齐和左对齐将直接字符插入到输出数据中将浮点数按照指数形式输出将整数按照八进制或十六进制形式输出按指定的域宽和精度输出数据3.3格式化输入输出(7/12)格式化输出函数printfprintf(<格式控制串>,<参数列表>);<格式控制串>描述了输出数据的格式。可以包含3种类型的字符格式指示符,那么被参数列表中相应的数据替换转义字符,按其含义输出相应的特殊符号普通字符,按照原样输出3.3格式化输入输出(8/12)格式化输出函数printf

printf(<格式控制串>,<参数列表>);<参数列表>存放输出数据的表达式列表。格式指示符的数量、顺序与输出参数相对应。printf函数执行时,从左到右依次处理格式控制串,遇到格式控制字符,先计算相应的输出参数表达式,然后将该参数的计算结果按照格式指示符指定的方式输出3.3格式化输入输出(9/12)格式化输出函数printf

printf(<格式控制串>,<参数列表>);<格式控制串>中的格式指示符%<标志><域宽><.精度><转换说明符>其中<标志>、<域宽>和<精度>可选3.3格式化输入输出(10/12)格式化输出函数printf

<格式控制串>中的格式指示符%<标志><域宽><.精度><转换说明符>共五种不同的标志标志含义-输出在域宽内左对齐+在正数值之前显示一个加号,在负数值之前显示一个减号空格在正数值之前显示一个空格#与八进制转换说明符o一起使用时,在输出值之前加0;与十六进制转换说明符x或X一起使用时,在输出值之前加0x或0X0用0填充域宽3.3格式化输入输出(11/12)格式化输出函数printf<格式控制串>中的格式指示符%<标志><域宽><.精度><转换说明符>域宽,指明了数据打印的宽度。如果数据实际长度小于域宽,那么数据输出右对齐;如果数据实际长度大于域宽,系统自动突破域宽限制,按数据的实际长度输出3.3格式化输入输出(12/12)<格式控制串>中的格式指示符精度:对于整数,表示至少要打印的数字个数,如果数据长度小于精度,那么左边补齐0;如果数据实际长度大于精度,那么按数据实际长度输出。对于浮点数,如果转换说明符为e、E和f,精度表示小数点后的有效位数,如果数据小数局部的长度小于精度,那么在右边补齐0;否那么按精度对数据进行舍入输出。如果浮点数的转换说明符为g和G,精度表示打印数据的最大的长度。对于字符串,精度表示字符串输出的最大长度,如果输出字符串长度小于精度,那么按照字符串的实际长度输出;否那么按精度截取输出字符串开头的n个字符〔假设精度为n〕输出例子2:格式化输入输出例子(1/2)//ex3_2.cpp:根本格式化输入和输出#include<stdio.h>intmain(){ intnum1; floatnum2; charch2; intna,nb,nc,nd,ne,nf,ng; doubleda,db,dc; printf("---Basicinputandoutput:---\n"); printf(“Inputachar,aintandafloat:"); scanf("%c%d%f",&ch1,&num1,&num2); printf("ch1=%c,num1=%d,num2=%f\n", ch1,num1,num2);例子2:格式化输入输出例子(2/2)

printf("Pleaseentersevenintegers:"); scanf("%d%i%i%i%o%u%x", &na,&nb,&nc,&nd,&ne,&nf,&ng);

printf("%d%d%d%d%d%d%d\n", na,nb,nc,nd,ne,nf,ng);

scanf("%le%lf%lg",&da,&db,&dc); printf("%f\n%f\n%f\n",da,db,dc);

return0;}3.4用流进行输入输出(1/3)通过I/O流对象实现输入输出功能将实现数据传送操作的设备抽象成对象将“流〞作为设备〔如键盘、显示器等〕和程序之间通讯的通道C++预定义的四个输入输出对象cout,标准输出设备,即显示器cin,标准输入设备,即键盘cerr和clog代表标准错误流对象3.4用流进行输入输出(2/3)通过cout流输出数据

cout<<<表达式>;cout<<<表达式1><<<表达式2>...;

cout<<"WelcometoC++!\n";cout<<"123+456="<<(123+456) <<endl;3.4用流进行输入输出(3/3)通过cin流输入数据

cin>><变量>

cin>><变量1>>><变量2>...;

例子3:流输入输出例子//ex3_5.cpp#include<iostream.h>intmain(){ charc; inti; floatx,y; cout<<"Enter:\n"; cin>>i>>x>>y; c=i; cout<<"c="<<c<<"\ti="<<i; cout<<"\tx="<<x<<"\ty="<<y<<"\n"; return0;}3.5流操纵算子(1/4)流操纵算子——为流输入输出提供格式化输入输出的功能常用的流操纵算子流操纵算子功能描述setbase(b)以进制基数b为输出整数值setprecision(n)将浮点精度设置为nsetw(n)按照w个字符来读或者写flush刷新ostream缓冲区ends插入字符串结束符,然后刷新ostream缓冲区endl插入换行符,然后刷新ostream缓冲区ws跳过空白字符setfill(ch)用ch填充空白字符3.5流操纵算子(2/4)设置整数基数将整数按十进制、八进制和十六进制等形式输出流操纵算子oct——将整数输出形式设置为八进制流操纵算子hex——将整数输出形式设置为十六进制流操纵算子dec——将整数输出形式设置为十进制例子4:使用设置整数基数的流操纵算子#include<iostream.h>#include<iomanip.h>intmain(){intn;cout<<"Enteradecimalnumber:";cin>>n;cout<<n<<"inhexadecimalis:"<<hex<<n<<endl<<dec<<n<<"inoctalis:"<<oct<<n<<endl;return0;}

3.5流操纵算子(3/4)设置浮点数精度流操纵算子setprecision和函数precision都可控制浮点数小数点后面的位数例子5:使用设置浮点数精度的流操纵算子//ex3_7.cpp:设置浮点数精度的流操纵算子的使用#include<iostream.h>#include<iomanip.h>#include<math.h>intmain(){doublelog2=log(2.0);

intplaces;cout<<"log(2)withprecisions0-9.\n"<<"Precisionsetbythe"<<"precisionmemberfunction:"<<endl;

for(places=0;places<=9;places++){cout.precision(places);cout<<log2<<'\n';}例子5:使用设置浮点数精度的流操纵算子cout<<"\nPrecisionsetbythe"<<"setprecisionmanipulator:\n";

//使用setprecision算子

for(places=0;places<=9;places++)cout<<setprecision(places)<<log2<<'\n';return0;}3.5流操纵算子(4/4)设置域宽函数width可以设置当前域宽〔输入输出的字符数〕如果输出的数据所需的宽度比设置的域宽小,空位用填充字符〔省缺为空格〕填充如果输出的数据所需的宽度比设置的域宽大,系统输出所有位流操纵算子setw也可以设置域宽例子6:使用设置域宽的流操纵算子//ex3_8.cpp:设置域宽的流操纵算子的使用#include<iostream.h>#defineWIDTH5intmain(){intw=4;charstring[WIDTH+1];cout<<"Enterasentence:\n";cin.width(WIDTH);while(cin>>string){cout.width(w++);cout<<string<<endl;cin.width(WIDTH);}return0;}学习目的检测掌握各种输入输出函数掌握通过I/O流进行输入输出的方法作业3.83.13第04章控制结构讲授内容顺序结构:表达式语句和复合语句选择结构:if语句、if-else语句和switch语句循环结构:while语句、do-while语句、for语句控制转移语句:continue语句、break语句及goto语句4.1程序的根本控制结构顺序结构:包括表达式语句和复合语句等选择结构:if语句、if-else语句、switch语句循环结构:while语句、do-while语句、for语句。其它:空语句、continue语句、break语句、goto语句、return语句4.2顺序结构(1/3)表达式语句表达式;表达式语句例如:a=a+3; //赋值语句x=y=z=0; //多重赋值语句t=2,t+x+a; //逗号表达式语句z=i<j?x:x+y;//条件表达式语句f1(); //函数调用语句x1=exp(x);//函数表达式语句,计算exx2=pow(x,y);//函数表达式语句,计算xy4.2顺序结构(2/3)空语句空语句的形式如下:;表达式语句和空语句例如:a=a+3; //赋值语句; //空语句4.2顺序结构(3/3)复合语句复合语句的语法:<复合语句>→‘{’<语句序列>‘}’<语句序列>→{<语句>}复合语句例如:{a=a+3; //赋值语句x=y=z=0; //多重赋值语句t=2,t+x+a; //逗号表达式语句z=i<j?x:x+y;//条件表达式语句}例子1:计算圆的周长和面积#include<iostream.h>#include<math.h>#definePI3.14intmain(){ doubleradius,area; radius=3.0; { doubleperimeter; perimeter=PI*2*radius; cout<<“Perimeteris:“<<perimeter<<"\n"; } area=PI*radius*radius; cout<<“Areaofthecircleis:“<<area<<"\n"; return0;}4.3选择结构(1/7)

if语句if(<条件表达式>)<语句><条件表达式>可以是任意表达式〔一般为逻辑表达式〕if语句例如:if(grade>=60)cout<<"passed\n";4.3选择结构(2/7)

if-else语句if(<条件表达式>)<语句1>else<语句2>if-else语句例如:if(grade>=60)cout<<"Passed!\n";elsecout<<"Failed!\n";(错:elsecout<<"Failed!\n";)4.3选择结构(3/7)

if-else语句if或if-else的嵌套:if或if-else中嵌套if或if-elseif(grade>=90)printf(“A〞);elseif(grade>=80)printf(“B〞);elseif(grade>=70)printf(“C〞);elseif(grade>=60)printf(“D〞);elseprintf(“F〞);注意else和if的匹配:在if语句后面假设直接跟else,那么把if语句、else和其后的语句一起作为if-else语句4.3选择结构(4/7)

if-else语句if或if-else的嵌套:if或if-else中嵌套if或if-elseif(grade>=60)if(grade==100)printf(“AAA〞);elseif(grade==0)printf(“FFF〞);不等价于if(grade>=60){if(grade==100)printf(“AAA〞);}elseif(grade==0)printf(“FFF〞);4.3选择结构(5/7)

if-else语句复合语句应用例如if(grade>=60)

printf(“Passed.\n〞);else{printf(“Failed.\n〞);printf(“Doyoutakethiscourseagain?y/n〞);cin>>answer;}4.3选择结构(6/7)

switch语句switch(<条件表达式>){case<常量表达式1>:<语句序列1>case<常量表达式2>:<语句序列2>……case<常量表达式n>:<语句序列n>default:<语句序列n+1>}多个case分支和可选的default分支<条件表达式>的值为整数类型〔int,char,…〕每个<语句序列>的最后一个语句一般为break语句,每个<语句序列>也可以为空4.3选择结构(7/7)

switch语句流程┇falsetrue计算条件表达式的值条件表达式的值==常量表达式1语句序列1falsetrue条件表达式的值==常量表达式2语句序列2falsetrue条件表达式的值==常量表达式n语句序列n语句序列n+1┇例子2:用switch语句实现成绩转换#include<iostream.h>

intmain(){ intscore;scorePhrase;

cout<<"Pleaseinputthescore:\n";cin>>score; if(score<0){ cout<<"Thescoreisillegal!"; return1; } scorePhrase=score/10; switch(scorePhrase) { case9: cout<<"Gradeis"<<'A'<<'.'<<endl; break;例子2:用switch语句实现成绩转换 case8: cout<<"Gradeis"<<'B'<<'.'<<endl; break; case7: cout<<"Gradeis"<<'C'<<'.'<<endl; break; case6: cout<<"Gradeis"<<'D'<<'.'<<endl; break; case0:case1:case2:case3:case4:case5: cout<<"Gradeis"<<'E'<<'.'<<endl; break; default: cout<<"Thescoreisillegal!"<<endl; }return0;}4.4循环结构(1/13)

while语句while(<表达式>)

<语句><表达式>的值?<语句>非00例外:break等四个控制语句4.4循环结构(2/13)

while语句 intproduct=2; while(product<=1000)

product=2*product;product<=1000product=2*producttruefalse例子3:while语句和switch语句的应用/*计算各级成绩的人数*/#include<stdio.h>intmain(){ intgrade; intaCount=0,bCount=0,cCount=0,dCount=0,fCount=0;printf("Enterthelettergrades.\n");printf("EnterEOFtoend.\n");while((grade=getchar())!=EOF){ switch(grade){ case'A':case'a':++aCount;break;例子3:while语句和switch语句的应用case'B':case'b':++bCount;break;case'C':case'c':++cCount;break; case'D':case'd':++dCount;break;case'F':case'f':++fCount;break;case'\n':case'':break;例子3:while语句和switch语句的应用default:printf("Incorrectlettergradeentered.");printf("Enteranewgrade.\n");break;}}printf("\nTotalsforeachgradeare:\n");printf("A:%d\n",aCount);printf("B:%d\n",bCount);printf("C:%d\n",cCount);printf("D:%d\n",dCount);printf("F:%d\n",fCount);return0;}程序运行结果Enterthelettergrades.EnterEOFtoend.ABCCADFCEIncorrectlettergradeentered.Enteranewgrade.DABTotalsforeachlettergradeare:A:3B:2C:3D:2F:14.4循环结构(3/13)while语句典型应用1:计数控制循环循环反复执行,直到计数器到达特定的值,是定数循环:即循环次数是的。例如:计算10个学生的平均成绩例子4:计算10个学生的平均成绩#include<stdio.h>intmain(){ intcounter,grade,total,average; total=0; counter=1; while(counter<=10){ printf("Entergrade:"); scanf(“%d",&grade); total=total+grade; counter=counter+1; } average=total/10; printf("Classaverageis%d\n",average); return0;}程序运行结果Entergrade:98Entergrade:76Entergrade:71Entergrade:87Entergrade:83Entergrade:90Entergrade:57Entergrade:79Entergrade:82Entergrade:94Classaverageis81

4.4循环结构(4/13)while语句典型应用2:条件控制循环问题能计算任意个数学生的平均成绩学生人数未知,是不定数循环程序如何结束?使用条件控制当用户输入信号量〔标记值〕时,循环结束信号量不能和一般数据混淆:特殊数据例子5:计算N个学生的平均成绩#include<stdio.h>intmain(){ floataverage; intcounter,grade,total; total=0; counter=0; printf("Entergrade,-1toend:"); scanf(“%d",&grade); while(grade!=-1){ total=total+grade; counter=counter+1; printf("Entergrade,-1toend:"); scanf(“%d",&grade);}例子5:计算N个学生的平均成绩 /*terminationphase*/ if(counter!=0) { average=(float)total/counter; printf("Classaverageis%.2f",average);} else printf("Nogradeswereentered\n"); return0;}程序运行结果Entergrade,-1toend:75Entergrade,-1toend:94Entergrade,-1toend:97Entergrade,-1toend:88Entergrade,-1toend:70Entergrade,-1toend:64Entergrade,-1toend:83Entergrade,-1toend:89Entergrade,-1toend:-1Classaverageis82.50

4.4循环结构(5/13)do-while语句 do

<语句>

while(<表达式>);<表达式>的值?<语句>非00例外:break等四个控制语句4.4循环结构(6/13)do-while语句例如1 intcounter=1; do printf(“%d\n",counter); while(++counter<=10); 打印整数1到104.4循环结构(7/13)do-while语句例如2 intcounter=1,sum=0; do sum=sum+counter; while(++counter<=100); counter=?sum=?4.4循环结构(8/13)计数控制的循环举例 intcounter=1; //初始化 while(counter<=10){//重复条件 printf(“%d\n〞,counter); ++counter; //递增 }或 intcounter=0; //初始化 while(++counter<=10) printf(“%d\n〞,counter);4.4循环结构(9/13)for语句

for(<初始化语句>;[<表达式2>];[<表达式3>])

<语句>

非00<初始化语句>[<表达式3>];<语句><表达式2>的值?当<表达式2>省略时其值为1例外:break等四个控制语句4.4循环结构(10/13)for语句例子1

int

counter; for(counter=1;counter<=10;counter++)

printf(“%d\n",counter);4.4循环结构(11/13)for语句例子2

intcounter;

for(counter=1;counter<=10;counter++)

printf(“%d\n",counter); 打印整数1到10.4.4循环结构(12/13)for语句例子3

inti,j; for(i=0,j=0;j+i<=10;j++,i++)

printf(“%d\n",j+i);4.4循环结构(13/13)for语句和while语句的关系 假设<语句>中不含continue语句,那么 for(<表达式1>;<表达式2>;<表达式3>)

<语句>等价于: <表达式1>; while(<表达式2>){ <语句> <表达式3>;

}例子6:2到100的偶数求和/*for循环求和*/#include<stdio.h>intmain(){intsum=0,number;for(number=2;number<=100;number+=2)sum+=number;printf("Sumis%d\n",sum);return0;}4.5控制转移语句(1/4)break语句 break;只能用于循环体或switch语句中,使程序控制退出while,for,do/while或switch结构程序执行这些语句的后继语句break语句的用途提早退出循环跳出switch结构4.5控制转移语句(2/4)continue语句 continue;只能用于循环体中,跳过while,for或do/while循环体中的剩余语句程序开始执行下一次循环while和do/whilecontinue语句执行后,马上测试循环条件for语句continue语句执行后,

计算递增表达式,然后测试循环条件例子7:在for循环结构中使用break语句#include<stdio.h>intmain(){ intx;for(x=1;x<=10;x++){ if(x==5) break; printf("%d",x);}printf("\nBrokeoutofloopatx==%d\n",x);return0;}例子8:在for循环结构中使用continue语句#include<stdio.h>intmain(){ intx;for(x=1;x<=10;x++){ if(x==5) continue; printf("%d",x);}printf("\nUsedcontinuetoskipprintingthe value5\n");return0;}4.5控制转移语句(3/4)goto

语句

goto<标号>;使程序控制转移到前面带有<标号>:的语句继续执行<标号>是一个非关键字标识符,<标号>:和goto<标号>;必须出现在同一个函数体中,<标号>:不能重复出现4.5控制转移语句(4/4)return语句 return<表达式>;或return;在主函数体中执行return语句,使整个程序结束在其它函数体中执行return语句,返回到调用函数的相应位置继续执行学习目的检测掌握利用复合机制编写较复杂类的方法理解this指针的作用、原理,了解类和对象的实现机制掌握使用this指针编写能连续调用的成员函数的方法掌握const对象和const成员函数的定义和使用方法掌握编写友元函数的方法掌握友元类的用法作业4.64.74.84.114.12第5章函数讲授内容函数的定义和函数原型函数调用和参数传递机制函数重载存储类别和作用域递归函数设计和函数的递归调用类的复合预处理指令5.1模块化程序设计(1/3)复杂问题一般可以分解为假设干稍简单的问题每个问题的解决对应一个模块的求解解决复杂问题的系统一般由逐级抽象的诸模块组成每个模块是一个类或函数5.1模块化程序设计(2/3)函数是C++程序构成的根底任何C++程序至少包含一个函数——main()函数函数也是类的方法的实现手段函数的作用实现系统中按功能分解的各小任务实现类对象的方法C++程序的设计最终都落实到一个个函数的设计上5.1模块化程序设计(3/3)函数是C++源程序的根本模块C++中的函数包括两类:预定义函数,C++提供了丰富的库函数,程序员可以在自己的程序中直接使用用户自定义函数,用户根据需要编写的函数一个C++程序可包含多个文件,一个文件可包含多个函数5.2预定义函数的使用(1/2)C++提供了丰富的库函数,这些库函数的声明都放在相应的头文件中要使用这些库函数,必须先包括相应的头文件,然后直接使用例如:数学运算函数的声明包含在math.h中,要使用这些函数,程序中必须加上代码#include<math.h>5.2预定义函数的使用(2/2)函数调用的一般过程先计算实参表达式的值然后将计算的结果交给被调用函数再执行被调用函数的代码,直至返回语句return或到函数尾最后程序控制返回到函数的调用处,继续执行printf(“%.2f〞,sqrt(900.0));的执行过程以900.0为参数调用sqrt函数,得到返回结果30.0以"%.2f"和30.0为参数调用printf函数,实现格式化输出5.3函数定义与函数原型函数模块化所有在函数体中说明的变量都是局部变量仅在定义的函数中有效参数函数间传递信息局部变量5.3函数定义与函数原型函数的优点分而治之有利于程序开发防止代码重复软件重用重用已有的函数来构造新的程序抽象-隐蔽内部的细节例子1:函数举例#include<stdio.h>intmaximum(int,int,int);/*functionprototype*/intmain(){inta,b,c;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);printf("Maximumis:%d\n",maximum(a,b,c));return0;}/*Functionmaximumdefinition*/intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;}例子2:函数举例#include<stdio.h>intmaximum(int,int,int);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);max=maximum(a,b,c);printf("Maximumis:%d\n",max);return0;}intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;}例子3:函数举例#include<stdio.h>intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;}intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);

max=maximum(a,b,c);printf("Maximumis:%d\n",max);return0;}例子4:函数举例#include<stdio.h>voidmaximum(int,int,int);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);

return0;}voidmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return;/*isnotnecessary*/}例子5:函数举例#include<stdio.h>voidmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return;/*isnotnecessary*/}intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);

maximum(12,23,55);return0;}例子6:函数举例#include<stdio.h>intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return0;/*necessary*/}intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);

maximum(12,23,55);

return0;}例子7:函数举例#include<stdio.h>voidmaximum(int&,int&,int&);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);/*maximum(12,23,55);?*/return0;}voidmaximum(int&x,int&y,int&z){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return;/*isnotnecessary*/}例子8:函数举例#include<stdio.h>voidmaximum(int&,int&,int&);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);/*maximum(12,23,55);?*/return0;}voidmaximum(int&x,int&y,int&z){if(y>x)x=y;if(z>x)x=z;printf("Maximumis:%d\n",x);return;/*isnotnecessary*/}例子9:函数举例#include<stdio.h>voidmaximum(int,int,int);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);retu

温馨提示

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

评论

0/150

提交评论