谭浩强版C+程序设计-第3章-程序设计初步ppt课件_第1页
谭浩强版C+程序设计-第3章-程序设计初步ppt课件_第2页
谭浩强版C+程序设计-第3章-程序设计初步ppt课件_第3页
谭浩强版C+程序设计-第3章-程序设计初步ppt课件_第4页
谭浩强版C+程序设计-第3章-程序设计初步ppt课件_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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语句中可以用多个控制符,但每个流插入运算符“后只能跟一个控制符,多个控制符需要用多个流插入运

5、算符“。 如:double a=123.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(ios

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

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

8、(c+32); return 0; getchar函数得到的字符可以赋给一个字符或整型变量,也可以不赋给任何变量。 在调试程序时,可以用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,

9、%4d”,a,b) a=123; b=12345; printf(“%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(

10、“%3d”,c,S 格式符,s格式符。用来输出一个字符串。 % s 原长输出 % 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位小数。单精度实数

11、有效位数为7位;双精度实数有效位数为16位,小数6位。 如:main ( )float 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为输出宽度,- 为左齐

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

13、5 3 3(按Tab键)4 45 5 非法输入为:3 , 4 , 5,scanf 函数,说明,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 names

14、pace std; int main( ) float a,b,c,x1,x2; 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 =

15、4, b = 10; a b, a=b, a=b, a!=b 的结果分别为:true, true, 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; coutbendl; return 0;,C+ 提供3个逻辑运算符: |(或) 、,注意:表达式必须用“( )”括起来 若语句组中只有一条简单的语句,则大括号“”可以省略,表达式,语句,假(0,真(非0,表达式,语句,假(0,真(

16、非0,例 输入一个成绩,判断是否需要补考,如果需要打印出来,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,mi

17、n; a=10; b=20; if(ab) max = a; min = b; else max = 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,输出“中”, 如果

18、大于等于60,小于70,输出“及格”, 如果小于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 ( ) 语句 1 else 语句 2 else if ( ) 语句 3 else 语句 4 if语句嵌套时,else子句总是与在它前面、距它最近、且尚未匹配的if配对。为明确匹配关系,避免匹配错误,建议将内嵌的if语句一律用“ ”括起来,例: 输入三个数a、b、c

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

20、 else max=b; 可以用条件运算符(? :)来处理: 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 输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的

21、字符。 #include using 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语句实现成绩分等级的功

22、能,include void main() 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)能

23、被100整除,又能被400整除。 用一个逻辑表达式表示: (year % 4=0 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=true e

24、lse /年份不能被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,根据3个系

25、数的关系,有以下几种情况: (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; else disc=b*b-4*a*c; if (fabs(disc)=1e-6) /有两个相等的实根 cout x1=x2= -b/(2*a)

26、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); q=sqrt(fabs(disc)/(2*a); cout x

27、1= 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) case 1: case 3: case 5: case 7: case 8: case 10: ca

28、se 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(

29、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; do sum += i; i+; while(i=100); cout sum= sum endl;,3. for语句,for语句的一般格式: for (表达式1; 表达式

30、2; 表达式3) 循环体语句组; 执行过程: 求解表达式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

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

32、的整数之和,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-1/7+ 直到最后一项的绝对值小于10-7为止,源程序,include #include #inclu

33、de 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个数开始,每个数是其前面两个数之和。即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)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论