《程序设计初步.ppt》由会员分享,可在线阅读,更多相关《程序设计初步.ppt(36页珍藏版)》请在三一办公上搜索。
1、第3章 程序设计初步,3.1 面向过程的程序设计和算法3.2 C+程序结构和语句3.3 C+的输入与输出3.4 C+程序的控制结构3.5 程序举例,在面向过程的程序设计中,程序设计者必须指定计算机执行的具体步骤,清晰程序要“做什么”,清晰“怎么做”,并写出一个个语句,安排好它们的执行顺序。步骤要合理,保证它的正确性和具有较高的效率,这就是算法(algorithm)需要解决的问题。,3.1 面向过程的程序设计和算法,一个面向过程的程序应包括以下两方面内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。(2)对操作的描述。即操作步骤,也就
2、是算法(algorithm)。算法是处理问题的一系列的步骤。对于面向过程的程序,可以用下面的公式表示:程序=算法+数据结构 如:处理的数据如何读入与存放?如何处理?结果如何存放与输出?(必须考虑与设计清晰!)(3)算法可分为两大类别:数值算法和非数值算法。数值算法的目的是求数值解。非数值算法包括的面十分广泛,最常见的是用于事务管理领域。C+既支持面向过程的程序设计,又支持面向对象的程序设计。无论面向过程的程序设计还是面向对象的程序设计,都离不开算法设计。,3.1.1 算法的概念,1、自然语言2、流程图3、伪代码 介于自然语言和计算机程序设计语言之间的文字和符号来描述算法。一般无固定、严格的语法
3、规则,只须把意思表达清楚,并且要书写的格式要写成清晰易读的形式。4、计算机语言表示,3.1.2 算法的表示,1、程序结构 一个程序包含一个或多个程序单位,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)复合语句 一对 之间的若干个语句的组合,如:,3.2 C+程序结
4、构和语句,如 int a;,(2)执行语句控制语句函数调用语句,如 sort(x,y,z);表达式语句,如 i=i+1;,t=a;a=b;b=t;,相对内存,处理的数据如何进行输入和输出?输入和输出并不是C+语言中的正式组成成分。C和C+本身都没有为输入和输出提供专门的语句结构。输入输出不是由C+本身定义的,而是在编译系统提供的I/O库 中定义的。C+的输出和输入是用“流”(stream)的方式实现的。下图分别表示C+通过流进行输入输出的过程。,3.3 C+的输入与输出,有关流对象cin、cout和流运算符的定义等信息是存放在C+的输入输出流库中的,因此使用cin、cout和流运算符,就必须:
5、#include 为了叙述方便,常常把由cin和流提取运算符“”实现输入的语句称为输入语句或cin语句;把由cout和流插入运算符“”实现输出的语句称为输出语句或cout语句。流运算符相当于一个输入或输出函数,由对象调用之。,cout语句的一般格式为cout变量1变量2变量n;输出流中的数据在系统默认的设备(一般为显示器)输出。,3.3.1 输入流与输出流的基本操作,例如:int i;float x;cinix;coutix;运行时输入:12 34.5,若输入:34.5 12,,char c1,c2,c3;cinc1c2c3;,若输入:abc,则c1、c2、c3的值分别为字符a、b、c若输入:
6、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+提供了在输入输出流中使用的控制符(有的书中称为操纵符),见书中表3.1,P.54页。需要注意的是:如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。,3.3.2 在输入流与输出流中使用控制符,设置输出内容的格式 用字符和字符串 coutntm“n”;cout“
7、n=”n“,m=”mn;,1020n=10,m=20,用setw()函数(#include)coutsetw(4)nsetw(4)mn;setw只对其后一个输出项有效,10 20,用科学计数法表示实数(纯小数,小数后6位)cout.setf(ios:scientific,ios:floatfield);,输出十六进制/八进制整数 coutoctnthexmn;只适用于整型数。,12 14,如 3.140000e+000,C+中用于输入和输出单个字符的函数:其中最常用的有getchar函数和putchar函数。1、putchar函数(字符输出函数)putchar函数的作用是向终端输出一个字符。如
8、putchar(c);它输出字符变量的值。2、getchar函数(字符输入函数)此函数的作用是从终端输入一个字符。其一般形式为getchar(),函数的值就是从输入设备得到的字符。,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可以输出转义字符。如果从键盘输入
9、大写字母A并按回车键,第三个输出的结果在屏幕上实际显示就是小写字母a。,请注意,getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。,3.4 C+程序的基本结构,1.顺序结构2.选择结构3.循环结构,一、条件语句1.单选条件语句(if语句)语句格式:条 件 if(表达式)S 执行过程,3.4.1 选择结构语句,例3.3 从键盘输入一个数,若该数为正数,输出1。,2.双选条件语句(if.else语句)语句格式:if(表达式)S1 else S2 执行过程,例3.4 从键盘输入一个数。若该数为正数,输出1;否则输
10、出-1。,3.4.1 选择结构语句,3.嵌套的条件语句 语句格式:if(表达式1)S1 else if(表达式2)S2 else if(表达式3)S3 else S4 执行过程,例3.5 从键盘输入一个实数。若该数为正数,输出1;若为负数输出-1;否则,输出0。,3.4.1 选择结构语句,if后面的表达式可以是逻辑表达式、关系表达式、赋值表达式等,其值非0时等同于1,表示条件成立;否则为0表示条件不成立。if和else后的语句可以是单个语句,也可以是复合语句,还可以是空语句。if与else的配对规则:else总是与其前面的同一个块中的最近的尚未配对的if配对。例如:int a=5,b=10,c
11、=20,d=0;if(a=b)if(b5)a=30;d=100;else d=200;else d=300;,a的值为30,d的值为100,3.4.1 选择结构语句,例3.6 求一元二次方程ax2+bx+c=0的解。其中系数a、b、c由键盘输入。可用数学库函数sqrt(参数)求参数的平方根,此时应有头文件:#include例3.7 判断从键盘输入的字符的种类。假设字符分为5类:数字、大写字母、小写字母、控制字符(其ASCII值小于32)和其他字符。,3.4.1 选择结构语句,基本格式:switch(表达式)case 常量表达式 1:语句序列1 case 常量表达式 2:语句序列2 case 常
12、量表达式 n:语句序列n default:语句序列n+1,执行过程以case中的常量表达式的值为入口标号,由此开始顺序执行,遇到break语句时结束switch语句的执行。,二、开关语句,switch 后面的表达式通常为变量表达式;case 后面的表达式必须为常量表达式;上述表达式值的类型通常为整型;default分支不是必须的,习惯上放在最后面,当放在前面满足条件被执行时,若没有break,则后续case会被继续执行,不管是否匹配。例如:,当a的值为5时,输出25150当a的值为10时,输出150当a的值为15时,输出5,二、开关语句,int a,m=15,n=10;cina;switch(
13、a)default:coutm-n;case 5:coutm+n;case 10:coutm*n;break;,int a,m=15,n=10;cina;switch(a)case 5:coutm+n;case 10:coutm*n;break;default:coutm-n;,例3.8 设计一个程序,按下列规则,将从键盘上输入的百分制成绩,转换成对应的五分制成绩,并输出。转换规则:90分以上为A;8089分为B;7079分为C;6069分为D;60分以下为E。,二、开关语句,基本格式:表达式1?表达式2:表达式3运算规则:先计算表达式1的值,若为1,则计算表达式2的值,否则计算表达式3的值。
14、条件运算符要求有3个操作对象,称三目(元)运算符,唯一的三目运算符。应用:代替简单的if.else语句。例如:max=a=b?a:b;等同于:if(a=b)max=a;else max=b;,三、条件运算符,三目运算符允许嵌套使用,如ab?ac?a:c:bc?b:c;,当需要程序重复地做相似工作时,可通过循环语句实现。该类问题通常有4个要素:循环变量的初始化;循环的条件;循环体(循环过程中要做的事);改变循环控制变量的值。例如:求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 循环结
15、构语句,一、while 语句语句格式while(表达式)S,执行过程 先判断表达式的值,非 0 时执行语句S;然后再判断表达式的值,直至表达式的值为0时,退出循环。,例3.9 用while语句求S=1+2+3+.+100的值。,3.4.2 循环结构语句,二、do.while 语句语句格式do S while(表达式);,执行过程先执行语句,再判断条件;当表达式非0时,继续执行循环体;直至表达式为0时,退出循环。,例3.10用do.while语句求S=1+2+3+.+100的值。,3.4.2 循环结构语句,三、for 语句语句格式for(表达式1;表达式2;表达式3)S,执行过程执行表达式1;执
16、行表达式2(循环条件);表达式2 为非0时,先执行循环体S,然后执行表达式3,再执行表达式2;当表达式2为0时,退出循环。,例3.11 用for语句求S=1+2+3+.+100的值。,3.4.2 循环结构语句,例3.12 用迭代法求x=的近似值。,算法(迭代公式):Xn+1=(Xn+a/Xn)/2;当|Xn+1-Xn|0为止。可设定一个起始初值X0(如a/2)。,3.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
17、54 63 72 81,3.4.2 循环结构语句,1、break 语句 结束循环语句或switch语句的执行。2、continue 语句 结束本次循环,进入下一次循环。例如:比较下列程序段的差异。for(int i=1;i=10;i+)for(int i=1;i=10;i+)if(i%3=0)break;if(i%3=0)continue;coutit;coutit;,3.4.3 控制执行顺序的语句,图3.18 图3.19,3、exit()和abort()函数(1)exit()函数格式:exit(表达式);(2)abort()函数格式:abort();相同:终止程序的运行,将控制返还给操作系统
18、;使用头文件stdlib.h。区别:exit()函数有参数,abort()函数无参数;exit()函数做结束前的收尾工作,abort()函 数直接结束C+程序的运行。,3.4.3 控制执行顺序的语句,例3.14 设计一个密码登录程序,用户至多尝试三次密码。算法(流程图),程序段:int pw=999,count=0,password;coutpassword;if(pw=password)cout“Wele!n”;exit(0);else cout“Input again:”;count+;cout“You failed!n”;,3.4.3 控制执行顺序的语句,3.5 程序举例,例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,