谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt

上传人:牧羊曲112 文档编号:1374990 上传时间:2022-11-16 格式:PPT 页数:75 大小:461KB
返回 下载 相关 举报
谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt_第1页
第1页 / 共75页
谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt_第2页
第2页 / 共75页
谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt_第3页
第3页 / 共75页
谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt_第4页
第4页 / 共75页
谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt》由会员分享,可在线阅读,更多相关《谭浩强版C++程序设计第3章程序设计初步ppt课件.ppt(75页珍藏版)》请在三一办公上搜索。

1、第3章 程序设计初步,本章要点基本概念赋值语句C+输入与输出关系运算和逻辑运算选择结构循环结构,3.1 面向过程的程序设计和算法,在面向过程的程序设计中,设计者必须制定计算机执行的具体步骤。处理问题的一系列步骤即算法。计算机算法分为:数值算法和非数值算法。算法的表示方法有:自然语言 用人们使用的语言描述算法流程图 用一些图框、线条以及文字说明来形象 地、直观地描述算法。伪代码 计算机语言(程序),流程图示例,开始,结束,3.2 C+程序和语句,1.C+程序结构,程序包括:数据描述(声明语句)数据操作(执行语句),2. C+语句概述,(1)声明语句 变量说明,如 inta;(2)执行语句 控制语

2、句主要完成分支结构程序和循环结构程序的控制。 C+主要包括以下9个控制语句: ifelse语句 分支语句 switch语句 多分支语句 for语句 循环语句 while语句 循环语句 dowhile语句 循环语句 continue语句 结束本次循环语句 break语句 结束循环或结束switch语句 goto语句 转向语句 return语句 从函数返回语句,2. C+语句概述,函数调用语句 C+有大量的系统函数,程序员也可以自己定义函数,对这些函数的调用可以作为一条语句。表达式语句 由一个表达式构成一个语句,即在表达式后添加一个分号,如赋值表达式语句等。(3)空语句 空语句只有一个分号。即:

3、; 因此空语句什么也不做。(4)复合语句 除了上面的简单语句外,可以将一组简单语句用大括号 括起来,称之为复合语句。,3.3 赋值语句,赋值语句由赋值表达式加上一个分号构成。 a=b+25; c=(29.5*d)/(a+b);赋值运算符具有“右结合性”,如: a=2;x=b;与 2=a; b=x;C+程序中可以出现连续赋值的情况。 a=b=c=d;,3.4 C+的输入与输出,C+通过调用输入输出流库的流对象cin和cout 实现输入、输出功能。1. 输入输出流的基本操作cin语句的一般格式: cin变量1变量2变量n;cout语句的一般格式: cout。,流提取运算符,流插入运算符,说明,一个

4、cin、cout语句可以分写成若干行。如:cinab; 可以写成: cout“this is a C+ program”endl;可写成: 不能用一个插入运算符插入多个输出项。 如:couta,b,c ;coutabc;输入多个数据时用空格分开。cin不能输入空格。,cina b;,cout“this is” “a C+program” endl;,2.在输入输出流中使用控制符-格式控制,说明,使用控制字符时,头文件应包含#includ 和 #include 一个cout语句中可以用多个控制符,但每个流插入运算符“后只能跟一个控制符,多个控制符需要用多个流插入运算符“。如:double a=1

5、23.456789012345; couta; 输出123.456(默认精度6) coutsetprecision(9)a; 输出123.456789 coutsetioflags(ios:fixed) setprecision(4)a输出123.4567(小数点后精度4),例3.1:输出使各行小数点对齐,#include #include using namespace std;int main( ) double a=123.456,b=3.14159,c=-3214.67; coutsetiosflags(iosfixed)setiosflags(iosright) setprecisi

6、on(2); coutsetw(10)aendl; coutsetw(10)bendl; coutsetw(10)cendl; return 0;,输出: 123.46 3.14 -3214.67,2.putchar和 getchar函数,utchar函数(字符输出函数) 其作用是向终端输出一个字符,格式: putchar(c);输出字符变量c的值 其中:c 可以是字符型变量或整型变量也可以输出转义字符 putchar(101) 等效 putchar(A),和putchar(65); putchar() 输出单引号,例3.2:输出单个字符,#include using namespace st

7、d;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;运行结果:BOY BOY,getchar()函数(字符输入函数),getchar() 函数的返回值为字符的值。例 3.3 输入单个字符#include using namespace std;int main() char c; c=getchar(); putchar(c+32); return 0; getcha

8、r函数得到的字符可以赋给一个字符或整型变量,也可以不赋给任何变量。在调试程序时,可以用getchar() 暂停程序执行;,rintf的作用是向终端输出若干个任意类型的数据。一般格式:printf(格式控制,输出列表)例如: printf(“%d%d”,a,b); 格式控制 输出列表printf(“a=%d b=%d”,a,b) 格式说明 普通字符 输出列表 结果 a=3 b=4,3. scanf 和printf函数,d 格式符,d格式符。用来输出十进制整数。%d printf(“%d,%d”,a,b);%md printf(“%4d,%4d”,a,b) a=123; b=12345; prin

9、tf(“%4d,%4d”,a,b); 123,12345%ld 输出长整型数 printf(“%ld,%ld”,a,b); 如:a=1234; printf (“%10ld”),a) ; 则: 1234,C 格式符,c格式符。用来输出一个字符。例:main ( ) char a =a;int b = 97; print(“%c,%dn”,a,a); print(“%c,%d”,b,b);结果:a,97 a,97整数的范围在0255之间,可以用字符形式输出;一个字符数据可以用整数形式输出。也可指定字符宽度。如: printf(“%3d”,c);,S 格式符,s格式符。用来输出一个字符串。% s

10、原长输出% ms 字符串占m列,小于m左补空格% -ms 大于m原样输出,小于m右补空格% m.ns 输出占m列,只取字符串左端n个字符% -m.ns n个字符输出在m列的左侧,右补空格例:main ( )printf(“%3S,%7.2s,% 5.4s,% -5.3n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);结果:CHINA,CH,CHIN,CHI,f 格式符,f格式符。用来输出实数,以小数形式输出。 %f,不指定字段宽度,由系统自动指定。整数部分如数输出,并输出6位小数。单精度实数有效位数为7位;双精度实数有效位数为16位,小数6位。如:main ( )floa

11、t x,y;x=111111.111;y=222222.222;printf(“%f”,x+y);结果:333333.326125 % m.nf 指定输出的数据占m列,其中n位小数;右对齐。 % -m.nf 同上,左对齐。,e 格式符,e格式符。以指数形式输出实数。 % e 整数一位,小数6位,指数5位包括e和符号位.例: printf(“%e,%e”,123.456,0.006543); 输出:1.234560e+002,6.543000e-003 % m.ne和% -m.ne 其中m为输出宽度,- 为左齐, n为尾数的小数位数.,说明,格式字符一般用小写格式控制字符串中可以包括转义字符d、

12、c、s、f、e、等字符,紧接在“%”后面即为格式字符,在其它位置则为普通字符 printf(“c=%cf=%fs=%s”,c,f,s):若想输出“%”,则用连续两个“%”表示 如:printf(“%f % %”,1.0/3); 输出:0.333333%不同系统的格式输出,可能会有些小差别,scanf 格式输入函数,用来输入任何类型的多个数据一般格式: scanf (格式控制,地址列表)例: main ( ) int a,b,c; scanf(“%d%d%d”,运行时的合法输入可以是:345 3453 3(按Tab键)4 45 5非法输入为:3 , 4 , 5,scanf 函数,说明,1 .格式

13、控制后面是变量地址,而不是变量名如:scanf(“%d,%d”,a,b); 是不对的2.格式控制字符串中除了格式说明符以外的其它字符,在输入时要原样输入,如:scanf(“%d : %d : %d”, 输入:a b c,3.5 编写顺序结构的程序,例3.5 求一元二次方程式ax2+bx+c=0的根。 a,b,c的值在运行时由键盘输入,它们的值满足b2-4ac0。,源程序,#include #include /由于程序要用到数学函数 sqrt,故应包含头文件cmathusing namespace std;int main( )float a,b,c,x1,x2; cinabc; x1=(-b+

14、sqrt(b*b-4*a*c)/(2*a); x2=(-b-sqrt(b*b-4*a*c)/(2*a); coutx1=x1endl; coutx2=x2endl; return 0;,#,3.6 关系运算与逻辑运算,关系运算符与关系表达式 6个关系运算符:、=、 =、!= 优先级高 优先级低 关系运算符优先级低于算术运算符、高于赋值运算符 注意区分“等于”运算符 “=” 与“赋值”运算符 “=” 关系表达式的结果类型为bool,值只能为 true 或 false 如: int a = 4, b = 10; a b, a=b, a=b, a!=b的结果分别为:true, true, false

15、, false, false, true在C/C+中用数值1代表true,用0代表false。,例:布尔量值的表示,#includeusing namespace std;int main()int a,b;bool c;a=2;b=5;c=ab;coutbendl;return 0;,C+ 提供3个逻辑运算符: |(或) 、&(与)、!(非) 优先级:低 高 逻辑表达式:用逻辑运算符连接进行逻辑运算的式子。逻辑表达式的结果类型为bool,值只能为 true 或 false。判断一个逻辑量是否为true的标准是:如果其值为0认为是false,如果其值为非0就认为是true。,逻辑运算符与逻辑表

16、达式,例如:,(a=60) & (a90) | (b85) / a大于90,或者b大于85,结果为true,条件成立 ! (a= =100) / a不等于100时,条件成立 若a=4 则 !a 为false,逻辑与&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。逻辑或 | :当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。 逻辑非! :当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。,逻辑运算符的运算规则,判断某一年是否为闰年的逻辑表达式,分析:闰年是符合下列条件之一的年份:(1)能被4整除,但不能被100整除;(

17、2)能被100整除,又能被400整除。用逻辑表达式表示:(year % 4=0 & year % 100!=0) | year % 400=0,3.7 选择结构和if语句,选择结构也称分支结构,就是在程序运行过程中,根据具体条件执行不同的程序段。C+选择结构可以由if语句或switch语句实现。C+提供了3种形式的if语句。,1. if语句形式一,一般形式: if(表达式) 语句组; ,注意:表达式必须用“( )”括起来 若语句组中只有一条简单的语句,则大括号“”可以省略。,表达式,语句,假(0),真(非0),表达式,语句,假(0),真(非0),例 输入一个成绩,判断是否需要补考,如果需要打印

18、出来,#include int main()int score;cout score;if(score 60)cout 不及格,需要补考! endl;,程序运行时,若输入的成绩大于或等于60,则没有任何输出。,2. if语句形式二,一般形式: if(表达式) 语句组1; else 语句组2; ,注意:表达式必须用“( )”括起来 若语句组中只有一条简单的语句, 则大括号“”可以省略。 外不用加分号。,例:求两个数中较大的值和较小的值,#include using namespace std;int main()int a,b,max,min;a=10;b=20;if(ab)max = a;mi

19、n = b;elsemax = b;min = a;cout max = max endl;cout min = min endl; return 0;,程序运行结果为:max = 20min = 10,3. if语句形式三,一般形式: if(表达式1) 语句组1;else if(表达式2) 语句组2; else if(表达式m) 语句组m; else 语句组n;,举例:,从键盘上输入一个成绩,如果大于等于90,输出“优”,如果大于等于80,小于90,输出“良”,如果大于等于70,小于80,输出“中”,如果大于等于60,小于70,输出“及格”,如果小于60,输出“不及格”。,#include

20、void main()int s;cout s;if (s = 90) cout = 80) ,else if( (s = 70) ,4. if语句的嵌套,在 if 语句的“语句组1”或“语句组2”中又包含有 if 语句的情况。if ( ) if ( ) 语句 1 else 语句 2else if ( ) 语句 3 else 语句 4 if语句嵌套时,else子句总是与在它前面、距它最近、且尚未匹配的if配对。为明确匹配关系,避免匹配错误,建议将内嵌的if语句一律用“ ”括起来。,例: 输入三个数a、b、c,输出其中最大的数,#include void main() int a, b, c,

21、max;cout a b c;if (a b) if(a c)max = a;elsemax = c;elseif(bc)max = b;elsemax = c;cout max = max endl;,程序运行结果为:请输入3个整数,以空格分隔:45 64 32max = 64,3.8 条件运算符和条件表达式,若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if语句: if (ab) max=a; else max=b; 可以用条件运算符(? :)来处理: max=(ab)?a:b;,条件运算符和条件

22、表达式,条件运算符: ?:(三目运算符)条件表达式:表达式1 ? 表达式2 : 表达式3 运算规则:如果“表达式1”的值为真(非0),则整个表达式的值等于表达式2的值,否则,整个表达式的值等于表达式3的值。 如: max=(ab) ? a : b / 如ab,结果为a,否则为b,可求两数中较大者。 min=(ab) ? a : b / 如ab,结果为a,否则为b,可求两数中较小者 。,例3.7 输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include using namespace std;int main( ) char ch

23、; cinch; ch=(ch=A ,3.9 多分支选择结构和switch语句,switch语句的一般形式: switch(表达式) case 常量1:语句组1; break; case 常量2:语句组2; break; case 常量n:语句组n; break; default:语句组n+1; break; ,注意:表达式只能是整型、字符型或枚举型,各case语句的出现次序不影响执行结果。,多个case语句可以共用一组执行语句。,switch语句流程图,例: 用switch语句实现成绩分等级的功能,#include void main()int s, i;cout s;i = s/10;sw

24、itch (i) case 9:case 10: cout “优” endl;break;case 8:cout “良” endl;break;case 7:cout “中” endl;break;case 6:cout “及格” endl;break; default:cout “不及格” endl;break;,3.10 编写选择结构的程序,例3.8 编写程序,判断某一年是否为闰年。分析:闰年是符合下列条件之一的年份:(1)能被4整除,但不能被100整除;(2)能被100整除,又能被400整除。用一个逻辑表达式表示:(year % 4=0 & year % 100!=0) | year %

25、 400=0用条件语句实现如下:,#include using namespace std;int main( ) int year; bool leap; coutyear; /输入年份 if (year%4=0) /年份能被4整除 if(year%100=0) /年份能被4整除又能被100整除 if (year%400=0) /年份能被4整除又能被400整除 leap=true; /闰年,令leap=true(真) else leap=false; /非闰年,令leap=false(假) else /年份能被4整除但不能被100整除肯定是闰年 leap=true; /是闰年,令leap=t

26、rue else /年份不能被4整除肯定不是闰年 leap=false; /若为非闰年,令leap=false,源程序,if (leap) coutyear is ; /若leap为真,就输出年份和“是” else coutyear is not ; /若leap为真,就输出年份和“不 是” cout a leap year.endl; /输出“闰年” return 0;运行情况如下: 2005 2005 is not a leap year. 1900 1900 is not a leap year.,源程序(续),例:求一元二次方程ax2+bx+c=0的解,一元二次方程ax2+bx+c=0

27、,根据3个系数的关系,有以下几种情况: (1)a=0 ,不是二次方程。 (2)b 2-4ac =0,有两个相等的实根。 (3)b 2-4ac 0,有两个不相等的实根。 (4)b 2-4ac 0,有两个共轭复根。,源程序,#include iostream.h#include math.hvoid main()double a,b,c,disc,x1,x2,p,q;cin a b c;if(fabs(a) 1e-6)cout 不是一元二次方程 endl;elsedisc=b*b-4*a*c;if (fabs(disc)=1e-6) /有两个相等的实根cout x1=x2= -b/(2*a) en

28、dl;else,fabs和sqrt是库函数,分别用于求绝对值和平方根。使用之前要包含 math.h 头文件,实数在计算机中存储会有误差,因此判断实数是否=0时,通常是通过判断该数的绝对值是否小于一个很小的数(如10-6 ),如果小于这个数就认为它等于0。,if (disc1e-6) / 有两个不相等的实根x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);cout x1= x1 endl;cout x2= x2 endl;else / 有两个共轭复根 p=-b/(2*a); q=sqrt(fabs(disc)/(2*a); cout x1= p +

29、q i endl; cout x2= p - q i endl;,源程序(续),#,例:编一个程序计算指定年月有几天,年月由键盘输入。,分析:每年的1,3,5,7,8,10,12月份有31天,4,6,9,11月份有30天,如果不是闰年,2月份有28天,闰年的2月有29天。判断闰年的条件是:能被4整除但不能被100整除,或者能被400整除。,源程序,#include void main() int year,month,days;cout year month;switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case

30、12: days = 31;break; case 4: case 6: case 9: case 11:days = 30;break;,源程序(续),case 2:if( ( (year%4 = 0),3.11 循环结构和循环语句,当同一段程序要反复执行多次时,就要用到循环结构。结构化程序设计的三种基本结构: 顺序结构选择结构循环结构,1. while语句,while语句的一般形式: while(表达式) 循环体语句组; ,例3.10 求1100的累计和,#include using namespace std;int main() int i=1,sum=0; while(i=100)s

31、um += i;i+; cout sum= sum endl; return 0;,注意:(1)循环体包含一个以上语句时要用 ;(2)在循环体中应有使循环趋于结束的语句。,2. do-while语句,do-while语句的一般格式: do 循环体语句组; while(循环条件);,例3.11 用do-while语句求1100的累计和,#include void main() int i=1;int sum=0; dosum += i;i+; while(i=100); cout sum= sum endl;,3. for语句,for语句的一般格式: for (表达式1; 表达式2; 表达式3)

32、 循环体语句组; 执行过程: 求解表达式1; 求解表达式2,若其值为真,则执行循环体,然后求解表达式3 ,再转表达式2;否则,结束循环。,说明:,表达式1通常用于为循环变量赋初值; 表达式2通常为循环条件; 表达式3通常为循环变量增值或减值,以使循环趋于结束。三个表达式都可以省略,但分号不能省。如果表达式2省略,则循环条件总为真。如果表达式3省略,循环体中应有改变循环变量的语句。,例: 用for语句求1100的累计和,#include void main() int i;int sum=0; for( i=1; i=100; i+ )sum += i; cout sum= sum endl;,

33、3.13 break 、 continue语句,1.break语句 一般格式 break;作用:提前结束循环。当程序运行到break语句时,立即结束循环,转向循环语句下面的语句继续执行。它只能用在循环语句和switch语句内。2. continue语句 一般格式 continue;作用:当程序运行到continue语句时,循环体余下的语句不再执行,立即试图进入下次循环。 对于for循环,遇到continue语句时,跳过循环体其余语句,转向循环语句中的表达式3的计算;对于while和do-while循环,跳过循环体其余语句,转向循环条件表达式的计算。,例 求1100不能被3整除的整数之和,#in

34、clude void main() int i;int sum=0; for(i=1; i=100; i+)if(i%3=0)continue;sum += i; cout sum= sum endl;,如果i能被3整除,则执行continue语句,立即结束本次循环,执行i+语句,接下来判断i=100是否满足;如果i不能被3整除,则不执行continue语句,将i加到变量sum中。,3.14 编写循环结构的程序,例3.12 用下面公式求的近似值。/41-1/3+1/5-1/7+ 直到最后一项的绝对值小于10-7为止。,源程序,#include #include #include using n

35、amespace std;int main( )int s=1; double n=1,t=1,pi=0; while(fabs(t)1e-7) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4;coutpi=setiosflags(iosfixed)setprecision(6)piendl;return 0;,n不能定义为整型变量,例3.13 求Fibonacci数列前40个数。这个数列有如下特点:第1、2个数为1、1。从第3个数开始,每个数是其前面两个数之和。即F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n3),#include #incl

36、ude using namespace std;int main( ) long f1,f2; int i; f1=f2=1; for(i=1;i=20;i+) coutsetw(12)f1setw(12)f2; /设备输出字段宽度为12,每次输出两个数 if(i%2=0) coutendl; /每输出完4个数后换行,使每行输出4个数 f1=f1+f2; /左边的f1代表第3个数,是第1、2个数之和 f2=f2+f1; /左边的f2代表第4个数,是第2、3个数之和 return 0; ,例3.14 找出100200间的全部素数。#include #include #include using

37、namespace std;int main( ) int m,k,i,n=0; bool prime; /定义布尔变量prime for(m=101;m=200;m=m+2) /判别m是否为素数,m由101变化 到200,增量为2 prime=true; /循环开始时设prime为真,即先认为m为素数 k= int(sqrt(m); /用k代表根号m的整数部分 for (i=2;i=k; i+) /此循环的作用是将m被2根号m除,检查 是否能整除 if (m % i=0) /如果能整除,表示m不是素数 prime=false; /使prime变为假 break; /终止执行本循环 ,if (

38、prime) /如果m为素数 coutsetw(5)m; /输出素数m,字段宽度为5 n=n+1; /n用来累计输出素数的个数 if(n%10=0) coutendl; /输出10个数后换行 coutendl; /最后执行一次换行 return 0;,例: 打印所有水仙花数,#include void main() int i,j,k,n;for(n=100; n=999; n+)i = n/100; /得到百位数j = (n-100*i)/10; /得到十位数k = n%10; /得到个位数if(i*i*i + j*j*j + k*k*k = n)cout n endl;,分析:所谓水仙花数

39、是指一个3位数,其各位数字的立方和等于其本身。要计算各位数字的立方和,首先要将各位数分解出来,可以使用求余数运算符和两个整数相除得到各位数。,例: 输出ASCII为32到127之间的字符,#include void main() unsigned char c;int i = 0;for(c=32; c128; c+)cout c ;i+; if(i%10=0)cout endl;,分析:由于可以将整数值赋给字符型变量,因此可以定义一个字符型变量,使其从32循环到127,逐个输出即可。,由于字符型数据的范围是从-128到127,无法与128进行比较,因此定义无符号字符型变量,其范围是从0到255,可以完成比较。,#,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号