收藏 分享(赏)

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

上传人:精品资料 文档编号:11286798 上传时间:2020-03-11 格式:PPT 页数:75 大小:461KB
下载 相关 举报
谭浩强版C++程序设计 第3章  程序设计初步.ppt_第1页
第1页 / 共75页
谭浩强版C++程序设计 第3章  程序设计初步.ppt_第2页
第2页 / 共75页
谭浩强版C++程序设计 第3章  程序设计初步.ppt_第3页
第3页 / 共75页
谭浩强版C++程序设计 第3章  程序设计初步.ppt_第4页
第4页 / 共75页
谭浩强版C++程序设计 第3章  程序设计初步.ppt_第5页
第5页 / 共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。,流提取运算符,流插入运算符,说明,一个c

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

5、.456789012345;couta; 输出123.456(默认精度6)coutsetprecision(9)a; 输出123.456789coutsetioflags(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)setprecision(2)

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

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

8、给一个字符或整型变量,也可以不赋给任何变量。 在调试程序时,可以用getchar() 暂停程序执行;,printf的作用是向终端输出若干个任意类型的数据。 一般格式: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; printf(“%4d,

9、%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,97a,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 ( ) f

11、loat 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为尾数的小数位数.,说明,格式字符一般用小写 格式控制字符串中可以包括转

12、义字符 d、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 345 3 3(按Tab键)4 45 5 非法输入为:3 , 4 , 5,scanf

13、 函数,说明,1 .格式控制后面是变量地址,而不是变量名 如: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,故应包含头文件cmath using namespace std; int main( ) float a,b,c,x1,x2

14、;cinabc;x1=(-b+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

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

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

17、除,但不能被100整除; (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;i

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

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

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

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

23、ing namespace std; int main( ) char ch;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 m

24、ain() int s, i;cout s;i = s/10;switch (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整除。 用一个逻辑表达

25、式表示: (year % 4=0 & year % 100!=0) | year % 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整除但不

26、能被100整除肯定是闰年leap=true; /是闰年,令leap=trueelse /年份不能被4整除肯定不是闰年leap=false; /若为非闰年,令leap=false,源程序,if (leap)coutyear is ; /若leap为真,就输出年份和“是”elsecoutyear is not ; /若leap为真,就输出年份和“不 是”cout a leap year.endl; /输出“闰年”return 0; 运行情况如下: 20052005 is not a leap year. 19001900 is not a leap year.,源程序(续),例:求一元二次方程ax

27、2+bx+c=0的解,一元二次方程ax2+bx+c=0,根据3个系数的关系,有以下几种情况:(1)a=0 ,不是二次方程。(2)b 2-4ac =0,有两个相等的实根。(3)b 2-4ac 0,有两个不相等的实根。(4)b 2-4ac 0,有两个共轭复根。,源程序,#include “iostream.h“ #include “math.h“ void 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)

28、/有两个相等的实根cout “x1=x2=“ -b/(2*a) endl; 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

29、); q=sqrt(fabs(disc)/(2*a);cout “x1= “ p “+“ 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)

30、case 1: case 3: case 5: case 7: case 8: case 10: case 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

31、 namespace std; int main() int i=1,sum=0; while(i=100)sum += 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 “su

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

33、0; for( i=1; i=100; i+ )sum += i; cout “sum= “ sum endl; ,3.13 break 、 continue语句,1.break语句 一般格式 break; 作用:提前结束循环。当程序运行到break语句时,立即结束循环,转向循环语句下面的语句继续执行。它只能用在循环语句和switch语句内。 2. continue语句一般格式 continue; 作用:当程序运行到continue语句时,循环体余下的语句不再执行,立即试图进入下次循环。 对于for循环,遇到continue语句时,跳过循环体其余语句,转向循环语句中的表达式3的计算;对于whi

34、le和do-while循环,跳过循环体其余语句,转向循环条件表达式的计算。,例 求1100不能被3整除的整数之和,#include 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

35、-1/7+直到最后一项的绝对值小于10-7为止。,源程序,#include #include #include using namespace 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个数开始,每个数

36、是其前面两个数之和。即 F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3),#include #include 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;

37、,例3.14 找出100200间的全部素数。#include #include #include using namespace std; int main( ) int m,k,i,n=0;bool prime; /定义布尔变量primefor(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) /如果能整除,表示

38、m不是素数 prime=false; /使prime变为假break; /终止执行本循环,if (prime) /如果m为素数coutsetw(5)m; /输出素数m,字段宽度为5n=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*

39、i*i + j*j*j + k*k*k = n)cout n endl; ,分析:所谓水仙花数是指一个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,可以完成比较。,#,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报