1、第第3章章 程序设计初步程序设计初步3.1 面向过程的程序设计和算法面向过程的程序设计和算法3.2 C+程序结构和语句程序结构和语句3.3 C+的输入与输出的输入与输出3.4 C+程序的控制结构程序的控制结构3.5 程序举例程序举例在面向过程的程序设计中,程序设计者必须在面向过程的程序设计中,程序设计者必须指定计算机执行的具体步骤,清晰程序要指定计算机执行的具体步骤,清晰程序要“做做什么什么”,清晰,清晰“怎么做怎么做”,并写出一个个语句,并写出一个个语句,安排好它们的执行顺序。安排好它们的执行顺序。步骤要合理,保证它的步骤要合理,保证它的正确性和具有较高的正确性和具有较高的效率效率,这就是,
2、这就是算法算法(algorithm)需要解决的需要解决的问题。问题。3.1 面向过程的程序设计和算法面向过程的程序设计和算法一个面向过程的程序应包括以下两方面内容:一个面向过程的程序应包括以下两方面内容:(1)对数据的描述对数据的描述。在程序中要指定。在程序中要指定数据的类型和数据的组织形式数据的类型和数据的组织形式,即即数据结构数据结构(data structure)。(2)对操作的描述对操作的描述。即操作步骤,也就是。即操作步骤,也就是算法算法(algorithm)。算法是处算法是处理问题的一系列的步骤。理问题的一系列的步骤。对于面向过程的程序,可以用下面的公式表示:对于面向过程的程序,可
3、以用下面的公式表示:程序程序=算法算法+数据结构数据结构 如:处理的数据如何读入与存放?如何处理?结果如何存放与输出?如:处理的数据如何读入与存放?如何处理?结果如何存放与输出?(必须考虑与设计清晰!)(必须考虑与设计清晰!)(3)算法可分为两大类别:)算法可分为两大类别:数值算法数值算法和和非数值算法非数值算法。数值算法的。数值算法的目的是求数值解。非数值算法包括的面十分广泛,最常见的是用于事目的是求数值解。非数值算法包括的面十分广泛,最常见的是用于事务管理领域。务管理领域。C+既支持面向过程的程序设计,又支持面向对象的程序设计。无既支持面向过程的程序设计,又支持面向对象的程序设计。无论面向
4、过程的程序设计还是面向对象的程序设计,都离不开算法设计。论面向过程的程序设计还是面向对象的程序设计,都离不开算法设计。3.1.1 算法的概念算法的概念1、自然语言、自然语言2、流程图、流程图3、伪代码、伪代码 介于自然语言和计算机程序设计语言之间的介于自然语言和计算机程序设计语言之间的文字和符号来描述算法。一般无固定、严格的语法文字和符号来描述算法。一般无固定、严格的语法规则,只须把意思表达清楚,并且要书写的格式要规则,只须把意思表达清楚,并且要书写的格式要写成清晰易读的形式。写成清晰易读的形式。4、计算机语言表示、计算机语言表示3.1.2 算法的表示算法的表示1、程序结构、程序结构 一个程序
5、包含一个或多个程序单位,一个程序包含一个或多个程序单位,C+程序单程序单位一般由位一般由3个部分组成:个部分组成:(1)预处理指令预处理指令。如。如#include和和#define指令。指令。(2)全局声明全局声明,如果需要时。,如果需要时。(3)函数函数。例例3.1:#include using namespace std;int a=3;int main()float b;b=4.5;coutab;return 0;3.2 C+程序结构和语句程序结构和语句2、语句、语句(1)说明语句)说明语句 (3)空语句,单独的一个分号。)空语句,单独的一个分号。(4)复合语句)复合语句 一对一对 之
6、间的若干个语句的组合,如:之间的若干个语句的组合,如:3.2 C+程序结构和语句程序结构和语句如如 int a;(2)执行语句)执行语句控制语句控制语句函数调用语句,如函数调用语句,如 sort(x,y,z);表达式语句,如表达式语句,如 i=i+1;t=a;a=b;b=t;相对内存,处理的数据如何进行输入和输出?相对内存,处理的数据如何进行输入和输出?输入和输出并不是输入和输出并不是C+语言中的正式组成成语言中的正式组成成分。分。C和和C+本身都没有为输入和输出提供专本身都没有为输入和输出提供专门的语句门的语句结构。输入输出不是由结构。输入输出不是由C+本身定义本身定义的,而是在的,而是在编
7、译系统提供的编译系统提供的I/O库库 中定义的中定义的。C+的输出和输入是用的输出和输入是用“流流”(stream)的方的方式实现的。下图分别表示式实现的。下图分别表示C+通过流进行输入通过流进行输入输出的过程。输出的过程。3.3 C+的输入与输出的输入与输出 有关有关流对象流对象cin、cout和流运算符和流运算符的定义等的定义等信息是存放在信息是存放在C+的的输入输出流库输入输出流库中的,因此中的,因此使用使用cin、cout和流运算符,就必须:和流运算符,就必须:#include 为了叙述方便,常常把由为了叙述方便,常常把由cin和流提取运算和流提取运算符符“”实现输入的语句称为输入语句
8、或实现输入的语句称为输入语句或cin语语句句;把由把由cout和流插入运算符和流插入运算符“”实现输出实现输出的语句称为输出语句或的语句称为输出语句或cout语句。语句。流运算符相当于一个输入或输出函数,由流运算符相当于一个输入或输出函数,由对象调用之对象调用之。cout语句的一般格式为语句的一般格式为cout表达式表达式1表达式表达式2变量变量1变量变量2变量变量n;输出流中的数据在输出流中的数据在系统默认的设备系统默认的设备(一般为显示器一般为显示器)输出。输出。3.3.1 输入流与输出流的基本操作输入流与输出流的基本操作int i;float x;cinix;coutic1c2c3;若输
9、入:若输入:abc,则,则c1、c2、c3的值分别为字符的值分别为字符a、b、c若输入若输入:abc,则,则c1、c2、c3的值分别为字符的值分别为字符、a、若输入:若输入:a b c,则,则c1、c2、c3的值分别为字符的值分别为字符a、b、c则则i的值为的值为12,x的值为的值为34.5则则i的值为的值为34,x的值为的值为0.5输出为:输出为:340.5 有时为了输入输出特殊的要求,如在输出有时为了输入输出特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。向左或向右对齐等。C+提供了在输入输出流中使用的控制符提供了在输入
10、输出流中使用的控制符(有的书中称为操纵符有的书中称为操纵符),见书中表,见书中表3.1,P.54页。页。需要注意的是:需要注意的是:如果如果使用使用了了控制符控制符,在程,在程序单位的开头除了要加序单位的开头除了要加iostream头文件外,还头文件外,还要加要加iomanip头文件。头文件。3.3.2 在输入流与输出流中使用控制符在输入流与输出流中使用控制符 coutntm“n”;cout“n=”n“,m=”mn;1020n=10,m=20 coutsetw(4)nsetw(4)mn;setw只对其后一个输出项有效只对其后一个输出项有效10 20 coutoctnthexmn;只适用于整型数
11、只适用于整型数。12 14如如 3.140000e+000C+中用于输入和输出单个字符的函数:中用于输入和输出单个字符的函数:其中最常用的有其中最常用的有getchar函数和函数和putchar函数。函数。1、putchar函数(字符输出函数)函数(字符输出函数)putchar函数的作用是函数的作用是向终端输出一个字符向终端输出一个字符。如。如putchar(c);它输出字符变量的值。它输出字符变量的值。2、getchar函数(字符输入函数)函数(字符输入函数)此函数的作用是从终端输入一个字符。其一般形式此函数的作用是从终端输入一个字符。其一般形式为为getchar(),),函数的值就是从输入
12、设备得到的字符。函数的值就是从输入设备得到的字符。3.3.3 用用getchar和和putchar函数函数进行字符的输入和输出进行字符的输入和输出例例3.2 输出单个字符。输出单个字符。#include /或者或者#include using namespace std;int main()char a,b,c;a=B;b=O;c=getchar();putchar(a);putchar(b);putchar(c+32);putchar(n);return 0;用用putchar可以输出转义字符可以输出转义字符。如果从键盘输入大写字母如果从键盘输入大写字母A并并按回车键,第三个输出的结果按回车
13、键,第三个输出的结果在屏幕上实际显示就是小写字在屏幕上实际显示就是小写字母母a。请注意,请注意,getchar()只能只能接收一个字符接收一个字符。getchar函函数得到的字符可以赋给一数得到的字符可以赋给一个字符变量或整型变量,个字符变量或整型变量,也可以不赋给任何变量,也可以不赋给任何变量,作为表达式的一部分。作为表达式的一部分。3.4 C+程序的基本结构程序的基本结构1.顺序结构顺序结构2.选择结构选择结构3.循环结构循环结构 顺序结构顺序结构a块块b块块AB选择结构选择结构a块块a块块成立成立不成立不成立条件条件AB条件条件a 块块成立成立不成立不成立AB当型循环结构当型循环结构条件
14、条件a 块块成立成立不成立不成立AB直到型循环结构直到型循环结构一、条件语句一、条件语句1.单选条件语句(单选条件语句(if语句)语句)语句格式:语句格式:条条 件件 if(表达式表达式)S 执行过程执行过程3.4.1 选择结构语句选择结构语句条件条件语句语句10例例3.3 从键盘输入一个数,若该数为正数,输出从键盘输入一个数,若该数为正数,输出1。条条 件件S110S22.双选条件语句(双选条件语句(if.else语句)语句)语句格式:语句格式:if(表达式表达式)S1 else S2 执行过程执行过程例例3.4 从键盘输入一个数。若该数为正数,输出从键盘输入一个数。若该数为正数,输出1;否
15、则输出否则输出-1。3.4.1 选择结构语句选择结构语句条件条件1条件条件2条件条件3S1S2S3S41110003.嵌套的条件语句嵌套的条件语句 语句格式:语句格式:if(表达式表达式1)S1 else if(表达式表达式2)S2 else if(表达式表达式3)S3 else S4 执行过程执行过程例例3.5 从键盘输入一个实数。若该数为正数,输出从键盘输入一个实数。若该数为正数,输出1;若为负数输出若为负数输出-1;否则,输出;否则,输出0。3.4.1 选择结构语句选择结构语句 if后面的表达式可以是逻辑表达式、关系表达式、赋值表后面的表达式可以是逻辑表达式、关系表达式、赋值表达式等,达
16、式等,其值非其值非0时等同于时等同于1,表示条件成立;否则为,表示条件成立;否则为0表表示条件不成立示条件不成立。if和和else后的语句后的语句可以是单个语句,也可以是复合语句,可以是单个语句,也可以是复合语句,还可以是空语句还可以是空语句。if与与else的配对规则:的配对规则:else总是与其前面的同一个块中的最总是与其前面的同一个块中的最近的尚未配对的近的尚未配对的if配对配对。例如:例如:int a=5,b=10,c=20,d=0;if(a=b)if(b5)a=30;d=100;else d=200;else d=300;a的值为的值为30,d的值为的值为1003.4.1 选择结构语
17、句选择结构语句例例3.6 求一元二次方程求一元二次方程ax2+bx+c=0的解。其中系数的解。其中系数a、b、c由键盘输入。由键盘输入。可用数学库函数可用数学库函数sqrt(参数)求参数的平方根,(参数)求参数的平方根,此时应有头文件:此时应有头文件:#include例例3.7 判断从键盘输入的字符的种类。假设字符分为判断从键盘输入的字符的种类。假设字符分为5类:数字、大写字母、小写字母、控制字符(其类:数字、大写字母、小写字母、控制字符(其ASCII值小于值小于32)和其他字符。)和其他字符。3.4.1 选择结构语句选择结构语句 基本格式:基本格式:switch (表达式表达式)case 常
18、量表达式常量表达式 1:语句序列:语句序列1 case 常量表达式常量表达式 2:语句序列:语句序列2 case 常量表达式常量表达式 n:语句序列:语句序列n default:语句序列语句序列n+1 执行过程执行过程以以case中的中的常量表达式常量表达式的值为入口标号,由此开始顺序执行,的值为入口标号,由此开始顺序执行,遇到遇到break语句时语句时结束结束switch语句的执行。语句的执行。二、开关语句二、开关语句 switch 后面后面的表达式通常为的表达式通常为变量表达式变量表达式;case 后面后面的的表达式必须为表达式必须为常量表达式常量表达式;上述表达式值的类型上述表达式值的类
19、型通常为整型通常为整型;default分支不是必须的,习惯上放在最后面分支不是必须的,习惯上放在最后面,当放在前,当放在前面满足条件被执行时,若没有面满足条件被执行时,若没有break,则后续,则后续case会被继会被继续执行,不管是否匹配。续执行,不管是否匹配。例如:例如:当当a的值为的值为5时,输出时,输出25150当当a的值为的值为10时,输出时,输出150当当a的值为的值为15时,输出时,输出5二、二、开关语句开关语句int a,m=15,n=10;cina;switch(a)default:coutm-n;case 5:coutm+n;case 10:couta;switch(a)c
20、ase 5:coutm+n;case 10:coutm*n;break;default:cout=b?a:b;等同于:等同于:if(a=b)max=a;else max=b;三、条件运算符三、条件运算符三目运算符允许嵌套使用,如三目运算符允许嵌套使用,如ab?ac?a:c:bc?b:c;当需要程序重复地做相似工作时,可通过循环当需要程序重复地做相似工作时,可通过循环语句实现。语句实现。该类问题通常有该类问题通常有4个要素:个要素:循环变量的初始化;循环变量的初始化;循环的条件;循环的条件;循环体循环体 (循环过程中要做的事);(循环过程中要做的事);改变循环控制变量的值。改变循环控制变量的值。
21、例如:求例如:求S=1+2+3+.+100的值。的值。算法:算法:S=S+i(i=1,2,3,.,100)S=0i=1 i=100 S=S+i(S+=i)i=i+1(i+)3.4.2 循环结构语句循环结构语句一、一、while 语句语句 语句格式语句格式while (表达式)S 循环体,可以是单语句、复合语循环体,可以是单语句、复合语句,甚至空语句句,甚至空语句 执行过程执行过程 先判断表达式的值,先判断表达式的值,非非 0 时执行语句时执行语句S;然;然后再判断表达式的值,后再判断表达式的值,直至表达式的值为直至表达式的值为0时,时,退出循环。退出循环。表达式表达式STF例例3.9 用whi
22、le语句求S=1+2+3+.+100的值。3.4.2 循环结构语句循环结构语句二、二、do.while 语句语句 语句格式do S while(表达式表达式);执行过程执行过程先执行语句,再判断条件;先执行语句,再判断条件;当表达式非当表达式非0时,继续执行时,继续执行循环体;直至表达式为循环体;直至表达式为0时,时,退出循环。退出循环。STF表达式表达式例例3.10用do.while语句求S=1+2+3+.+100的值。3.4.2 循环结构语句循环结构语句三、三、for 语句语句 语句格式语句格式for (表达式表达式1;表达式;表达式2;表达式;表达式3)S 执行过程执行过程执行表达式执行
23、表达式1;执行表达式执行表达式2(循环条件);(循环条件);表达式表达式2 为非为非0时,先执行循环时,先执行循环体体S,然后执行表达式,然后执行表达式3,再执行,再执行表达式表达式2;当表达式当表达式2为为0时,退出循环。时,退出循环。表达式表达式1TF表达式表达式2S表达式表达式3例例3.11 用for语句求S=1+2+3+.+100的值。for语句头部的三个表达式皆可语句头部的三个表达式皆可以空缺以空缺3.4.2 循环结构语句循环结构语句例例3.12 用迭代法求x=的近似值。算法(迭代公式):Xn+1=(Xn+a/Xn)/2;当|Xn+1-Xn|0为止。可设定一个起始初值X0(如a/2)
24、。a3.4.2 循环结构语句循环结构语句四、四、循环嵌套循环嵌套 循环语句的循环体又包含一个循环语句。循环语句的循环体又包含一个循环语句。例例3.13:打印如下所示的九九乘法表:打印如下所示的九九乘法表:1 2 3 4 5 6 7 8 91 12 2 43 3 6 94 4 8 12 16.9 9 18 27 36 45 54 63 72 813.4.2 循环结构语句循环结构语句 结束循环语句或结束循环语句或switch语句的执行。语句的执行。结束本次循环,进入下一次循环。结束本次循环,进入下一次循环。for(int i=1;i=10;i+)for(int i=1;i=10;i+)if(i%3
25、=0)break;if(i%3=0)continue;coutit;coutit;3.4.3 控制执行顺序的语句控制执行顺序的语句 图3.18 图3.193、exit()和和abort()函数函数(1)exit()函数函数格式:格式:exit(表达式表达式);(2)abort()函数函数格式:格式:abort();相同:终止程序的运行,将控制返还给操作系统;相同:终止程序的运行,将控制返还给操作系统;使用头文件使用头文件stdlib.h。区别:区别:exit()函数有参数,函数有参数,abort()函数无参数;函数无参数;exit()函数做结束前的收尾工作,函数做结束前的收尾工作,abort(
26、)函函 数直接结束数直接结束C+程序的运行。程序的运行。3.4.3 控制执行顺序的语句控制执行顺序的语句例例3.14 设计一个密码登设计一个密码登录程序,用户至多尝试录程序,用户至多尝试三次密码。三次密码。算法(流程图)算法(流程图)程序段:程序段:int pw=999,count=0,password;cout“Please input password:”;while(countpassword;if(pw=password)cout“Welcome!n”;else cout“Input again:”;count+;cout“You failed!n”;初始化密码初始化密码(pw=999
27、)和计算器和计算器(count=0)读入密码读入密码 password count=3)例例3.16 求求2100之间所有的素数。之间所有的素数。例例3.17 设计一个程序,求键盘输入的整数的各位数字之和。设计一个程序,求键盘输入的整数的各位数字之和。例例3.18 设计一个程序,求前设计一个程序,求前4项之和为项之和为120、首项和公差都、首项和公差都 不为不为0的正整数等差序列。的正整数等差序列。例例3.19 用下面公式求用下面公式求的近似值。的近似值。/41-1/3+1/5-1/7+直到直到最后一项的绝对值小于最后一项的绝对值小于10-7为止。为止。作业:作业:第第3章所有例题。章所有例题。习题习题12、15、17、18、21