重庆警院《计算机基础》课件第9章 程序设计初步_第1页
重庆警院《计算机基础》课件第9章 程序设计初步_第2页
重庆警院《计算机基础》课件第9章 程序设计初步_第3页
重庆警院《计算机基础》课件第9章 程序设计初步_第4页
重庆警院《计算机基础》课件第9章 程序设计初步_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章 程序设计初步教学目的了解计算机解决问题的基本思路熟悉VC+6.0上机环境,掌握简单程序的编写掌握常用的算法具有初步的程序设计能力,会读、会编、会调试如何学习C/C+语言重在编程思路、编程构思模仿、改写、编写,重视上机实践通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法C/C+发展简史C+: Bell实验室的Bjarne StroustrupCSimula 67带类的C类基础1979年Cpre预处理器C+ 1.01985年C+程序设计语言C+ 2.01989年C+ 3.01993年C语言:Bell实验室的D.M.Ritchie 1972年,为了编写UNIX设计的。 两个重要的标

2、准: 老标准:1978年,The C Programming Language B.W.Kernighan和D.M.Ritchie合著 新标准;1983年,ANSI制定,称为ANSI C引例要求:已知一元二次方程的三个系数a、b、c,求两个实根x1、x2。分析:输入a,b,c系数;根据判别式:问题求解的过程-问题分析与算法设计输入a、b、c三个系数判别b*b-4*a*c是否0?0时,输出两个实根=0时,输出两个重根a;)通过赋值语句赋值 (如:a=3;)通过初始化方式赋初值 (如:int k=3;)初始化是指在定义变量的同时指定变量的初值,有两种方式例如: int k=3,m=3, n(3);

3、char a=A,b=b;()int k=m=n=3; /不允许为多个变量同时初始化数据类型 变量名=表达式; 数据类型 变量名(表达式);符号常量在程序运行过程中其值不能改变的量是以标识符形式出现的常量,作用是便于程序阅读和修改。习惯上符号常量名用大写,而变量名用小写,以示区分。#define 标识符 常量值const 数据类型 标识符 = 常量值;符号常量示例 #define PI 3.14 /const double PI=3.14; #include iostream.h void main( ) float r=3.0,s,l; l=2*PI*r; s=PI*r*r; coutl=l

4、,s= sx; h=x/3600; /整数相除得整数 s=x % 60; /取余数 m=(x % 3600 )/60; couth:m:sendl;关系运算符 (小于)、 (大于) = =(等于)、 =(大于等于)、 !=(不等于)优先级: (从高到低) ( 、 、 = ) ( = = 、 != )关系运算描述的是一种“判断关系”,其结果有“真(true)”和“假(false)”两种。用“1”代表“真”,用 “0” 代表“假” 例如:53的结果为1,aA的结果为0区分= 和=用关系运算符将2个表达式连接起来的式子。表示比较的数学式 C/C+关系表达式x10 x10 x10 x = 10思考:x

5、为0到100之间的数能否表示为: 0=x=100?x = 10 x != 10 x = 10 x=0&xy?x:y); /将和中较大的一个数赋值给变量max如: x=0?a+:b+ 若已知a=4,b=3,x=5 则a、b=?a=4 b=4思考题对n(0)个人进行分班,每班k(0)个人,最后不足k人也编一班,问要编几个班?(试用条件运算符表达)int n,k,x;x=n%k0?n/k+1:n/k逗号运算符e1,e2,e3,e1、e2、e3均为表达式,从左向右依次计算各个表达式的值,而将最后一个表达式的值作为整个表达式的值,如:j=3,k=j+2,m=k+2;逗号运算符的优先级别最低常用于循环语句

6、的表达式中结果:j=3 k=5 m=72.表达式表达式由常量、变量、运算符、函数和圆括号按一定规则组成的式子。 如:x1=(-b+sqrt(d)/(2.0*a);注意事项:(1) 乘号不能省略。例如,x乘以y 应写成:x*y。(2) 简化记忆运算符的优先级问题,增加圆括号可以改变表达式中运算符的优先级和增加可读性,圆括号必须成对出现。3.内部函数C/C+中提供了多种内部函数供用户编程序时直接调用,只需把包含内部函数的头文件,通过#include 预处理命令装入到程序中。如:程序中要使用平方根函数sqrt,应该在程序加入: #include math.h常用的内部函数如:pow(1.2, 2)

7、的值为1.44 (即1.12) log10(123.45) 的值为2.091491Sin(45*3.1415/180)+(exp(7)+log(10)/(x+y)4.计算与类型参与计算的数据都有类型,计算过程中就自然会出现数据类型转换问题。(1)不同类型隐式转换(自动) charint longfloatdouble例如:若两端类型不同,则系统自动将右端类型转换为左端类型。整数运算得整数。 float y =3/2; / y的结果是1,而不是1.5float y =3.0/2; / y的结果是1.5(2)强制转换:(类型)表达式 int x=3;float y=(float)x/2; /y的结

8、果是1.55.输入和输出输入/输出分为两大类:一类是人机交互,把人们可以识别的形式(字符串、数)按一定格式输入到程序的变量中,输出相反,按用户要求的格式将变量或常量的值显示;另一类是程序之间以文件形式数据传送。cin和cout需要在程序前面加头文件:#include iostream.h #include cin变量1变量2变量n; “”为输入运算符,从键盘输入;各个数据项之间用空格、Tab建或回车分隔;cout表达式1表达式1表达式n;“”为输出运算符,从显示屏显示。cout示例cout表达式1表达式1表达式n; #include iostream.hvoid main()int a=2;d

9、ouble b=3.32;char c=A;couta bendl; coutc abcd变量变量2变量n;说明:数据之间用空格、TAB键或回车分隔 #include iostream.hvoid main()int a;float b;coutab;couta+b=a+babc;p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c);cout三角形面积为:sabc;s=sqrt(p*(p-a)*(p-b)*(p-c);语句是有顺序的,顺序结构不是语句的简单罗列。(观察以下初学者常犯错误) 2.选择结构 通过判断特定条件,选择一个分支执行。当P条件成立时,执行A操作,否则

10、执行B操作APB 成立不成立 语句不成立 P成立当P条件成立时,执行语句操作,否则跳过语句操作逻辑判断程序段2: p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c); cout三角形面积为:sc&a+cb&b+ca )单分支选择结构if(表达式) 语句值非0执行语句,否则跳过复合语句:一对花括号将多条语句组合成一个整体,以满足语法上对此位置只允许有一条语句的要求。用逻辑表达式表达三边构成条件ABA&BABA|BA!A逻辑运算符种类:逻辑与(&)逻辑或(|)逻辑非(!)A BA&BA|B!A0 0 0 010 1 0 111 0 0 101 1 1 100-false

11、 1-true程序段3:if(a+bc&a+cb&b+ca) p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c); cout三角形面积为:sendl; 如何进一步改进程序段2,在不满足三角形三边构成条件时给予相应的提示? else cout不是三角形的三边endl;双分支选择结构if(表达式) 语句1 else 语句2非0执行语句1,否则执行语句21、比较两数大小 一2、比较两数大小 二3 、成绩转换4、分组体检典型案例if语句单分支形式示例【例1】对任意输入的两个整数x,y进行处 理,要求将大数放在x中,小数存于y中。要点:当xy时需交换两数?如何交换两个变量?如

12、何把交换变量的语句置于某条件控制之下t=x; x=y; y=t;if(xy) t=x; x=y; y=t; #include iostream.hvoid main() int x,y,t; cout输入 x yxy; if (xy) t=x; x=y; y=t; coutxyendl;程序实现xyt=x;x=y;y=t;true三条语句作为一个执行整体【例2】将任意输入的两个整数x,y中较大的数放 在max变量中,较小的数存于min变量中。if语句双分支形式示例要点:根据xy成立与否,分别对变量max 和min赋不同值。关键:多条语句置于分支控制之下的表达#include iostream.

13、hvoid main() int x,y,max,min; cout输入 x yxy; if (xy) else coutmin=minendl; coutmax=maxendl;程序实现观察并思考:?去掉if表达式后面的一对花括号会怎样?原因 min=x; max=y; min=y; max=x;?去掉else表达式后面的一对花括号会怎样?分别对照以下两组数据的结果第一组: 10 20第二组: 20 10 3. 循环结构 在给定条件下,反复执行循环体,直到条件不满足为止.(1)形式a当型循环结构不成立 PA成立 当P条件成立时,反复执行A,直到P为零为止。逻辑判断逻辑判断(2)形式b直到型循

14、环结构先执行A操作,再判断P是否成立,若P成立,再执行A,直到P不成立为止。AP成立不成立逻辑判断逻辑判断实现 s=1+3+5+ +99循环前准备:s=0i=1循环条件循环体#include iostream.hvoid main( ) int i(1),s(0); while(i100) s=s+i; i=i+2; couts=sendl;关键:要求一条语句,需复合程序实现(while语句)通项取第一个数累加和清零i100s=s+ii=i+2s+=ii+=2等价于又如“+=”、“-=”、“*=”、“/=”和“%=”等等都是复合赋值运算符,理解关键:右端的表达式是一个整体例如: 变量+=表达式

15、变量 = 变量表达式复合赋值运算符赋值运算符还可以与算术运算符等组合在一起构成复合赋值运算符,使得表达更加简洁、高效,其含义如下:b/=a+2 b = b/(a+2)等价于:#include iostream.hvoid main( ) int i(1),s(0); while(i100) s=s+i; i=i+2; couts=sendl;程序实现(for语句)#include iostream.hvoid main( ) int i,s(0); for(i=1; i100; i=i+2) s=s+i; couts=sendl;循环条件循环变量增量控制循环变量赋初值注意:两个分号分隔三个表达

16、式do语句while (表达式);先执行后判断的循环语句(循环体至少执行1次)?如何用do_while语句实现累加和do-while循环循环体(1条语句)循环条件(非0时执行循环体)【例6】猜数游戏。计算机随机产生一个0100之间的整数,用户通过输入的方式来猜测此数,根据比较的结果屏幕上会给出“大了”或“小了”的提示,根据提示重新猜测,直到猜对提示“恭喜你!猜对了”要点:?如何产生0m之间的随机整数rand( )%(m+1)?循环条件guess!=resultdo-while循环示例需包含头文件stdlib.hmn之间呢?#include iostream.h#include stdlib.h

17、void main()int guess,result;cout产生随机数endl;result=rand()%101;docout输入猜测的数:guess;if(guessresult)couttoo big;else if(guessresult)couttoo small;while(guess!=result);cout恭喜你,猜对了!endl;语句结尾有分号程序实现?如果限定最多只能猜5次程序如何修改【例7】将可打印的ASCII码制成表格输出,使每个字符与其编码值对应,每行打印7个字符。 ?忘记某个字符的ASCII码怎么办要点:?字符与整型数据如何转换字符在内存中以ASCII码形式存

18、储字符与整型数据间可相互赋值?如何控制每行打印7个字符满足i%7=0时,输出换行?可打印字符有哪些int a=cchar c=97ASCII码在32126之间的字符程序实现#include iostream.hvoid main()int i(0),ascii;char c;couttttASCII码对照表endl;for(ascii=32;ascii=126;ascii+)c=ascii; coutc=asciit;i+;if (i % 7=0) coutendl; coutx;xmax=x程序实现#include iostream.hvoid main() int x,xmax; cinx

19、; xmax=x; while(x!=-1) if(xxmax) xmax=x;cinx; cout最大值=xmaxn吗m n r 10 4 4 24 2 0#include iostream.hvoid main( ) int m, n, t, r; do cout请输入 m n mn; while(m=0|n=0); if(mn) t=m; m=n; n=t; while( (r=m % n) !=0) m=n; n=r; cout最大公约数为 nm; for(k=2;km;k+)if(m%k=0) break; if(k=m)coutm是素数endl; elsecoutm不是素数endl

20、;循环退出的条件有几个?循环怎样退出的?如何输出某个范围内的所有素数?程序实现辅助控制语句,强制退出循环【例11】将2100之间的所有素数以每行8个输出。要点: 前例的素数判别过程成为该列的循环体?嵌套循环的内外循环体如何正确表达使用双重循环-嵌套循环逻辑上清楚哪些语句是外循环循环体,哪些是内循环循环体明确循环体语句只能是一条语句,何时需以复合语句表达程序实现#include iostream.hvoid main()int k,m,num=0;for(m=2;m100;m+)for(k=2;km;k+) if(m%k=0) break;if(k=m)coutmt;num+;if(num%8=

21、0)coutendl; 能下移一行吗?谁的循环体?能放在复合语句之外吗?【例12】交通事故中肇事车辆撞人后逃逸,警方在 现场找到3位目击证人询问肇事车辆5位车牌号码。一位说只看清最左两位为27,一位说只看清最后位是3,另一位说牌号是67的倍数。请帮助找出该车牌号。要点:枚举法是通过逐个考察某类事件的所有可能情况,从中找出符合要求的答案的方法。 ?需要枚举的数字有几位?需要枚举的几位数字间的关系如何?5位车牌号如何描述枚举法(穷举法)0909百位(i3)权重100十位(i2)权重10for(i3=0;i3=9;i3+) for(i2=0;i2=9;i2+) num=27003+i3*100+i2

22、*10十位、百位可为09间数字的任意组合,故用嵌套循环关键点分析#include iostream.hvoid main()int num;for(int i3=0;i3=9;i3+) for(int i2=0;i2=9;i2+) num=27003+i3*100+i2*10; if(num %67=0 ) coutnumendl; 程序实现筛选出符合条件的答案什么是顺序结构?顺序结构是语句的简单罗列吗?什么是选择结构?有几种语句形式?if语句有几种分支形式?每种形式的作用是什么?什么是if语句的嵌套形式?如何理解嵌套形式的语义关系?在选择结构中如何正确使用复合语句?本单元知识要点小结实验(选择结构)1、在购买某物品时,若所花的的钱x在下述范围内,所付钱y按对应折扣支付: x x1000 0.9x 1000 x2000 0.8x 2000 x3000 0.7x x30002、输入x,y,z三个数,按从小到大的次序显示。显示形式:3、输入一元二次方程的系数,计算并输出一元二次方程的两个实根。 y=4、 编一

温馨提示

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

最新文档

评论

0/150

提交评论