[工学]第3章_程序设计初步.ppt
《[工学]第3章_程序设计初步.ppt》由会员分享,可在线阅读,更多相关《[工学]第3章_程序设计初步.ppt(149页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1工学第3章_程序设计初步 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望23.1 面向过程的程序设计和算法 面向过程的程序设计方法不仅要求程序设计者考虑要“做什么”,还要解决“怎么做”的问题。3.1.1 算法的概念一个面向过程的程序应包括以下两方面内容:1)对数据的描述,即数据结构。在C+语言中,最基本的数据结构就是C+提供的基本数据类型。2)对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。程序=算法+数据结构3算法什么是算
2、法?算法就是为解决某个问题而采取的一系列步骤。算法要解决什么问题?算法必须具体地指出在执行时每一步应当怎样做,例如程序中应该出现什么语句?语句的顺序如何安排?程序中的操作语句,就是算法的具体体现。广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。如太极拳的算法、一首歌曲的乐谱。计算机算法可分为两大类别:v数值算法:用于求数值解。如求方程的根。v非数值算法:用于事务管理领域。如排序。4把大象放冰箱里的算法,分几步?53.1.2 算法的表示1.自然语言v例如,用自然语言表示“把大象放冰箱”的算法2.伪代码v用介于自然语言和计算机语言之间的文字和符号来描述算法。详见P46的例子。v特点l没
3、有固定、严格的语法规则l不用图形符号,因此书写方便、容易修改l便于向计算机语言算法过渡。v广泛应用于国外的计算机教材和专业编程人员的实际编程中。3.用计算机语言表示算法:即程序。64.流程图:用图的形式表示算法,比较直观,但修改算法时很不方便。流程图包括传统流程图传统流程图和结构化流程图(N-S流程图)。v传统流程图使用的符号:7v传统流程图的例子:理解它的含义开始从键盘输入数据a输出a结束a0?输出-aYN8v结构化流程图(N-S流程图):l传统流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程。l在使用过程中,人们发现流程线不一定是必需的,随着结构化程
4、序设计方法的出现,1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式,这种流程图完全去掉了流程线,算法的每一步都用一个矩形框来描述,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述。这种流程图同两位学者名字的第一个字母来命名,称为N-S流程图。l只要求掌握一种流程图,传统流程图更好理解。93.2 C+程序和语句一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件,如图3.1所示)。每一个程序单位由以下几个部分组成:1)预处理命令。如#include命令和#define命令。2)声明部分。例如对数据类型和函数的声明,以及对变量的定义。3)函数。包
5、括函数首部和函数体,在函数体中可以包含若干声明语句和执行语句。v注意:每个程序(project)必须有一个(而且只能有一个)main函数,可以包含其他函数。10C+程序结构11#include/预处理命令using namespace std;/在函数之外的声明部分int a=3;/在函数之外的声明部分int main()/函数首部float b;/函数内的声明部分b=4.5;/执行语句couta0)cout x;else cout-x;142)函数和流对象调用语句:l一次函数调用加上一个分号就构成了一个函数调用语句,如:sort(x,y,z);/假设已定义了sort函数,它有3个参数l输入输
6、出流的使用也构成一条语句,如:cout x endl;3)表达式语句l任何一个表达式的最后加一个分号都可以成为一个语句,如:i=i+1/赋值表达式i=i+1;/赋值语句l函数调用语句也可以认为是一个表达式语句153.空语句v只有一个分号的语句,它什么也不做。v有时用来做被转向点,或循环语句中的循环体。4.复合语句v用 把一些语句括起来成为复合语句v注意:在复合语句中定义的局部变量的作用范围仅限于该复合语句。#include/预处理命令using namespace std;/在函数之外的声明部分int main()/函数首部int a=5;cout 0)cout0 endl;含义:先进行赋值运
7、算(将b的值赋给a),然后判断a是否大于0,如大于0,执行cout 0 endl;173.4 C+的输入与输出C与C+的输入输出C和C+都没有专门的输入输出语句,分别是由函数和流对象来实现的。在C语言中,输入和输出是通过调用scanf和printf函数来实现的,C+中保留了这2个函数。在C+中,输入和输出是通过调用输入输出流库中的流对象cin和cout实现的。也就是说输入输出不是C+本身定义的,而是在编译系统提供的I/O库中定义的。因此在使用到cin和cout的程序文件里,必须包含iostream头文件。18输入输出流“流”是指来自设备或传给设备的一个数据流cout是输出流对象的名字,是流提取
8、运算符,作用是从默认的输入设备(一般为键盘)的输入流中提取若干字节送到计算机内存中指定的变量。19说明:有关流对象cin、cout和流运算符的定义等信息是存放在C+的输入输出流库中的,因此如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件iostream包含到本文件中:#include 为了叙述方便,常常把由cin和流提取运算符“”实现输入的语句称为输入语句或cin语句,把由cout和流插入运算符“变量1变量2变量n;cout表达式1表达式2表达式n;cout语句的一般格式为cin语句的一般格式为理解流对象理解流对象理解流对象理解流对象:在定义流对象时,系统会在内存中开辟
9、一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或n,ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。21一个不大贴切的比喻缓冲区、缓冲器在计算机软硬件里是一个很重要的概念。使用cout进行输出的一个比喻:做生意,攒钱,不可能赚了100,就去银行存一次;要么攒够了10000,去银行存一次(对应于缓冲区满的情况);要么攒了一个月,去银行存一次(对应于cout语句中的遇到endl等就将缓冲区中已有的数据一起输出)。输出完,
10、要清空缓冲区。(把攒的钱存入银行以后,又从0开始攒钱了)22cout This is/末尾无分号 a simple C+program.endl;/(2)最后有分号cout This is a simple C+program.endl;/(1)一个cout语句可以分写成若干行。如:可以写成(以下各行是同一个C+语句),注意与P26比较 coutcout This isa C+program.endl;功能上等效(不推荐使用)语法上等效(是同一个C+语句)cout This is a simple C+program.endl;/(3)23cout This is;/语句末尾有分号cout a
11、 simple C+;cout program.;coutendl;也可写成多个cout语句,以上3种情况的输出均为couta,b,c;/错误,不能一次插入多项couta+b+c;/正确,这是一个表达式,作为一项注意,不能用一个插入运算符“c1c2ab;在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。如有:如果输入系统会提取第一个字符1给字符变量c1,取第二个字符2给字符变量c2,再取34给整数变量a,最后取56.78给实型变量b。cin1234 56.78253.4.2 在输入流与输出流中使用控制符在输入输出流中使用控制符,可以达到一些特殊的效果,如在输出实数时规定字段
12、宽度,只保留两位小数,数据向左或向右对齐等。C+提供了在输入输出流中使用的控制符(有的书中称为操纵符),见表3.1。如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。26double a=123.456789012345;对a赋初值(1)couta;输出:123.457 (2)coutsetprecision(9)a;输出:123.456789 (3)coutsetprecision(6);恢复默认格式(精度为6)(4)cout setiosflags(ios:fixed)a;输出:123.456789(书上漏掉了)(5)coutsetiosfla
13、gs(ios:fixed)setprecision(8)a;输出:123.45678901(6)coutsetiosflags(ios:scientific)a;输出:1.234568e+02(7)coutsetiosflags(ios:scientific)setprecision(4)a;输出:1.2346e+02说明:说明:说明:说明:第(1)行按默认格式输出(以十进制小数形式输出,全部有效数字为6位)。第(2)行指定输出9位有效数字。第(3)行恢复默认格式,精度为6。第(4)行要求以固定小数位输出,默认输出6位小数。第(5)行指定输出8位小数。第(6)行指定按指数形式输出,默认给出6位
14、小数(第7位四舍五入)。第(7)行以指数形式输出,指定4位小数。注意:在保留精度时要进行四舍五入。双精度数输出的例子:27#include#include using namespace std;int main()double a=123.456789012345;/对a赋初值cout a endl;/输出:123.457(四舍五入)cout setprecision(9)a endl;/输出:123.456789cout setprecision(6);/恢复默认格式(精度为6)cout setiosflags(ios:fixed)a endl;/输出:123.456789cout set
15、precision(8)a endl;/输出:123.45678901cout resetiosflags(ios:fixed);/在按scientific输出之前如果使用了fixed,一定要先取消fixed,/否则无法按科学计数法形式输出。cout setiosflags(ios:scientific)a endl;/输出:1.234568e+02(四舍五入)cout setiosflags(ios:scientific)setprecision(4)a endl;/输出:1.2346e+02(四舍五入)return 0;28关于格式控制时有效数字的说明(在第13章还会详细讲述,初学者不必拘
16、泥细节,这些细节也没有什么意义,只是初学者在对输出的有效数字位数感到困惑时,可以查阅这些说明)除表3.1列出的控制符外,还有一个特殊的控制符(P425,表13.3):resetiosflags(),用于终止已设置的输出格式状态,在括号中应指定要取消的格式控制符,比如:cout resetiosflags(ios:scientific);可以取消科学计数法显示浮点数。在使用setiosflags(ios:scientific)按科学计数法输出浮点数之前如果使用了setiosflags(ios:fixed),一定要先用resetioflags(ios:fixed)取消fixed,否则无法按科学计数
17、法形式输出。对于6位有效数字,有小数点后6位有效数字与全部6位有效数字之分。那么到底在什么情况下是指小数点后的有效数字,在什么情况下是指全部有效数字呢?29全部有效数字的情形:1)默认情况下(是指在此之前没有设置过fixed和scientific),输出6位有效数字,是指按固定小数形式输出全部6位有效数字,包括小数部分和整数部分,进行四舍五入(如果整数部分超过6位,则默认以科学计数法输出,也是全部6位有效数字)。当然如果同时用setprecision(n)指定了有效数字的位数,则全部有效数字的位数为n。2)如果在输出前用resetiosflags()取消最近设置过的fixed或scientif
18、ic格式,这时有效数字是指全部有效数字。如果没有用setprecision(n)指定有效数字的位数,则默认为6位,反之是n位。3)使用scientific输出完后,没有用resetiosflags()取消scientific,紧接着按fixed输出,也是指全部有效数字。4)但是在使用fixed输出完后,没有用resetiosflags()取消fixed,紧接着按scientific输出,无法按科学计数法形式输出,这时仍然是按固定小数点形式输出,而且也是指全部有效数字。30小数点后有效数字的情形:1)第一次设置fixed格式,则按固定小数形式输出,这时有效数字是指小数点后的有效数字;如果没有用s
19、etprecision(n)指定有效数字的位数,则默认为6位,反之是n位。2)第一次设置scientific格式,则按科学计数法形式输出,这时有效数字是指小数点后的有效数字;如果没有用setprecision(n)指定有效数字的位数,则默认为6位,反之是n位。3)对比前面的第3)点,使用scientific输出完后,用resetiosflags()取消scientific,紧接着用fixed输出,这时有效数字是指小数点后的有效数字。4)对比前面的第4)点,使用fixed输出完后,用resetiosflags()取消fixed,紧接着用scientific输出,这时有效数字是指小数点后的有效数字
20、。31int b=123456;对b赋初值(1)coutb;输出:123456(2)couthexb;输出:1e240(3)coutsetiosflags(ios:uppercase)b;输出:1E240 (4)coutsetw(10)b,b;输出:123456,123456(5)coutsetfill(*)setw(10)b;输出:*123456(6)coutsetiosflags(ios:showpos)b;输出:+123456说明:说明:说明:说明:第(1)行按十进制整数形式输出。第(2)行按十六进制整数形式输出,其中字母e代表十进制中的14。第(3)行按十六进制形式输出,字母e改为大写
21、。第(4)行指定字段宽为10,在123456前留4个空格。紧接着再输出一次b,但由于setw只对其后第一个数据起作用,因此在输出第二个b时setw(10)不起作用,按默认方式输出,前面不留空格。第(5)行在输出时用*代替空格。第(6)行在正数前面加一个+号。整数输出的例子:32#include#include using namespace std;int main()int b=123456;/对b赋初值cout b endl;/输出:123456cout hex b endl;/输出:1e240 cout setiosflags(ios:uppercase)b endl;/输出:1E240
22、 cout dec;/还原成10进制输出cout setw(10)b,b endl;/输出:123456,123456cout setfill(*)setw(10)b endl;/输出:*123456cout setiosflags(ios:showpos)b endl;/输出:+123456return 0;33#include#include using namespace std;int main()double a=123.456,b=3.14159,c=-3214.67;coutsetiosflags(iosfixed)setiosflags(iosright)setprecisio
23、n(2);coutsetw(10)aendl;coutsetw(10)bendl;coutsetw(10)cendl;return 0;如果在多个cout语句中使用相同的setw(n),并使用setiosflags(iosright),可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。例3.1 各行小数点对齐。运行情况如下:运行情况如下:123.46 123.46 3.14 3.14 -3214.67 -3214.67343.4.3 用getchar和putchar函数进行字符的输入与输出除了可以用cin和cout语句输入和输出字符外,C+还保留了C语言中用于输入和输出单个字
24、符的函数,使用很方便。其中最常用的有getchar函数和putchar函数。351.putchar函数(字符输出函数)putchar函数的作用是向终端输出一个字符。例如putchar(c);它输出字符变量的值。#include/或者包含头文件stdio.h:#include using namespace std;int main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(n);putchar(66);putchar(79);putchar(89);putchar(10);return 0;运行情况如下:运
25、行情况如下:BOYBOY36用putchar可以输出转义字符putchar(n)输出换行符putchar(66)将66(字母B)作为ASCII码转换为字符输出putchar(10)10是换行符的ASCII码,输出一个换行符putchar(101)输出字符A,八进制的101是A的ASCII码putchar()输出单引号字符putchar(015)八进制的015是十进制的13,代表“回车”,不换行,使输出的当前位置移到本行开头372.getchar函数(字符输入函数)此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为getchar()函数的值就是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 程序设计 初步
限制150内