




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3章程序设计初步章程序设计初步 第3章 程序设计初步 3.1 面向过程的程序设计和算法面向过程的程序设计和算法 面向过程的程序设计:就是考虑程序要“做什么”, 解决“怎么做”的问题. 一个面向过程的程序应包括以下两方面内容: (1) 对数据的描述。在程序中要指定数据的类型和数 据的组织形式,即数据结构(data structure)。 (2) 对操作的描述。即操作步骤,也就是算法 (algorithm)。 3.1 面向过程的程序设计和算法面向过程的程序设计和算法 面向过程的程序,可以用下面的公式表示: 程序=算法+数据结构 算法:解决一个问题而采取的方法和步骤。(广义) 计算机算法分两类:
2、数值算法和非数值算法 学习面向对象的语言依然要学习和掌握一些常用的算 法。(C+语言也是如此) 3.1 面向过程的程序设计和算法面向过程的程序设计和算法 算法的表示: 1、自然语言 2、流程图 (特点:形象直观,修改不方便,不适合复 杂程序,本教材多使用流程图表示算法) 3、伪代码(pseudo code) (一种介于自然语言和计算机语言之间的文 字和符号) 4、用计算机语言 3.2 C+程序的组成程序的组成 1. 声明语句 如int a,b; 2. 执行语句 通知计算机完成一定的操作。执行语句包括: (1) 控制语句,完成一定的控制功能。C+有9种控制语句, 即 if( )else (条件语
3、句) for( ) (循环语句) while( ) (循环语句) dowhile( ) (循环语句) continue (结束本次循环语句) break (中止执行或循环语句) switch (多分支选择语句) goto (转向语句) return (从函数返回语句) C+程序的语句程序的语句 (2) 函数和流对象调用语句。函数调用语句由一次函 数调用加一个分号构成一个语句,例如 sort(x,y,z); /假设已定义了sort函数,它有3个参数 coutx100) z=z-100; coutz; 3.4 C+的输入与输出的输入与输出 在C+程序中可以方便的利用cout和cin进行输出和 输入
4、。但是cout和cin并不是C+语言中正式的输入与输 出语句。 cout和cin是输入输出流库中的流对象,是在编译系 统提供的I/O库中定义的。 在使用cout和cin进行输出和输入时要使用预处理命令把 头文件stream包含到本文件中: #include 3.4 C+的输入与输出的输入与输出 3.4 C+的输入与输出的输入与输出 cout语句的一般格式:语句的一般格式: cout表达式表达式1表达式表达式2.变量变量1变量变量2变量变量n; 一个cout语句可以分写成若干行。如 coutThis is a simple C+ program.endl; 可以写成 coutThis is /注
5、意行末尾无分号 a C+ program. endl; /语句最后有分号 也可写成多个cout语句,即 coutThis is ; /语句末尾有分号 cout a C+ ; cout program.; coutendl; 比较比较printf 与与cout 在用cout输出时,用户不必通知计算机按何种类 型输出,系统会自动判别输出数据的类型,使输出 的数据按相应的类型输出。如已定义a为int型,b为 float型,c为char型,则 couta b cabcd; 可以写成 cina /注意行末尾无分号 b /这样写可能看起来清晰些 c d; 也可以写成 cina; cinb; cinc; c
6、ind; 以上3种情况均可以从键盘输入: 1 2 3 4 也可以分多行输入数据: 在用cin输入时,系统也会根据变量的类型从 输入流中提取相应长度的字节 char c1,c2; int a; float b; cinc1c2ab; coutc1 c2 a b acb就可以 3.4.2 在输入流与输出流中使用控制符在输入流与输出流中使用控制符 满足输入输出时有一些特殊的要求 double a=123.456789012345;对a赋初值 couta;输出: 123.456 coutsetprecision(9)a;输出: 123.456789 coutsetiosflags(ios fixed)
7、setprecision(8)a;输出: 123.45678901 coutsetiosflags(ios scientific)setprecision(4)a; 输出: 1.2346e02 int b=123456; coutsetw(10)b,b; 输出: 123456,123456 setw.:只对其后的第一个数据起作用 程序的三种基本结构程序的三种基本结构 1、顺序结构、顺序结构 A B C #include #include /由于程序要用到由于程序要用到 /数学函数数学函数sqrt,故应包含头文件,故应包含头文件cmath using namespace std; int mai
8、n( ) 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=x2y? 真真 假假 z=xz=y 例如: if(xy) cout“x is smaller than y.”; else cout“x is larger than y or equal to y. ”; if(a=b 3.6 关系运算和逻辑运算关系运算和逻辑运算 关系表达式:用关系运算符将两个表达式连接起来的式子; 优先级相同 (高) (小于) (大于) = (大于
9、或等于) = (等于) != (不等于) 优先级相同 (低) 1. 前4种关系运算符(,)的优先级别相同, 后两种也相同。前4种高于后两种。例如,“”优先于 “”。而“”与“a+b 等效于 c(a+b) ab=c 等效于(ab)=c a=bc 等效于a=(bc 等效于a=(bc) 关系表达式的值是一个逻辑值,即“真”或 “假”。例如,关系表达式“5=3”的值为“假”, “5=0”的值为“真”。 在C和C+中都用数值1代表“真”,用0代表 “假”。 如果有以下赋值表达式: d=ab 则d得到的值为1 f=abc f得到的值为0 逻辑常量和逻辑变量逻辑常量和逻辑变量 C语言没有提供逻辑型数据,关系
10、表达式的值(真或假)分 别用数值1和0代表。 C+增加了逻辑型数据。逻辑型常量只有两个,即false(假) 和true(真)。 逻辑型变量要用类型标识符bool来定义,它的值只能是 true和false之一。如: bool found,flag=false; /定义逻辑变量found和flag,并使flag的初值为false found=true; /将逻辑常量true赋给逻辑变量found 由于逻辑变量是用关键字bool来定义的,因此又称为布尔 变量。逻辑型常量又称为布尔常量。所谓逻辑型,就是布 尔型。 设立逻辑类型的目的是为了看程序时直观易懂。 在编译系统处理逻辑型数据时,将false处理
11、为0, 将true处理为1。因此,逻辑型数据可以与数值型 数据进行算术运算。 如果将一个非零的整数赋给逻辑型变量,则按 “真”处理,如 flag=123; /赋值后flag的值为true coutb) coutb) couta; else cout500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0; 注意:注意:1) if 后可跟复合语句。后可跟复合语句。 2) 注意注意 ;的位置。;的位置。 3) 注意多重注意
12、多重 if else 的搭配。的搭配。 if (ab) a=1; b=0; else a=0; b=1; a=0 b=1 a=1 b=0 ab 真真假假 if (i j) i+; if (ij); i+; i+ + ij 真真假假 if 总是与它上面最近的总是与它上面最近的 else 配对,如要改变,用复合语配对,如要改变,用复合语 句句 。 注意书写格式注意书写格式,相互配对的语句要对齐。,相互配对的语句要对齐。 ij 真真假假 i+ + 例:输入两个实数,按代数值由小到大次序输出这两个数。例:输入两个实数,按代数值由小到大次序输出这两个数。 void main( void ) float
13、a,b,t; /定义变量定义变量 coutab; /给变量赋值给变量赋值 a:7, b:3 if(ab) t=a; a=b; b=t; /交换数据,用中间变量交换数据,用中间变量 coutatbendl; /输出变量输出变量 b a t 7 3 7 7 3 输出结果:输出结果: 3 7 3.7.2 语句的嵌套语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套。 一般形式如下: if( ) if( ) 语句1 else 语句2 else if( ) 语句3 else 语句4内嵌if 应当注意if与else的配对关系。else总是与它上面最近 的、且未配对的if配对。 限定了内嵌i
14、f语句的范围,关系清楚,不易出错 1、编写程序计算y的值: -1 (x0) 1. #include void main() int x,y; cinx; if (x0) y=1; coutyendl; 2. #include void main() int x,y; cinx; if (x0) y=-1; else if (x=0) y=0; else y=1; coutyendl; 3. #include void main() int x,y; cinx; if (x=0) if (x=0) y=0; else y=-1; else y=1; coutyendl; 4. #include
15、void main() int x,y; y=1; cinx; if (x=0) if (x=0) y=0; else y=-1; coutyendl; 3.8 条件运算符和条件表达式条件运算符和条件表达式 条件表达式的一般形式为 表达式1 ? 表达式2 表达式3 优先级高于赋值运算符,低于逻辑运算符 用if语句表示则为: if (表达式1 ) 表达式2 ; else 表达式3; eg. x? a b 若x=0,则条件表达式的值为字符b的ASCII码。 例 3.7 #include using namespace std; int main() char ch; cinch; ch=(ch=A
16、 coutchendl; return 0; b=(a0?2:0); 1.#include void main() int a,b; cina; if(a0) b=2; else b=0; coutbendl; 2.#include void main() int a,b; cina; if(a) if(a0) b=2; else b=0; coutbendl; 3.#include void main() int a,b; cina; b=2; if(a) if(a0) b=1; else if(a=0) b=0; else b=2; coutbendl; 4.#include void m
17、ain() int a,b; cina; b=0; if(a=0) if(a0) b=1; else b=2; coutbendl; 格式如下: switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 . case 常量表达式n:语句n default:语句n+1 /可无 语义为: 根据对表达式的计 算得到的值,从第 一个case常量开始 从上到下逐个进行 匹配,若相等,则 以此为入口,顺序 向下执行各条语句 序列。 3.9 多分支选择结构和多分支选择结构和switch 语句语句 格式如下: Switch() case:; break; case:; break
18、; case:;break; default: /可无可无 通过加 break强行 跳转语句, 在执行完第 一个语句序 列后,就强 行跳出 switch结构 P86第11题:将百分制成绩转换成5级 switch(int(score/10) case 10: case 9: grade=A;break; case 8: grade=B;break; case 7: grade=C;break; case 6: grade=D;break; default:grade=E; 3.11 循环结构和循环语句循环结构和循环语句 while语句的一般形式如下: while (表达式) 语句 例3.10 求
19、1+2+3+100。 #include using namespace std; int main( ) int i=1,sum=0; while (i=100) sum=sum+i; i+; coutsum=sumendl; do-while语句构成循环语句构成循环 do-while语句的特点是先执行循环体,然后判断循环 条件是否成立。其一般形式为 do 语句 while (表达式); 例3.11 用do-while语句求1+2+3+100。 #include using namespace std; int main( ) int i=1,sum=0; do sum=sum+i; i+;
20、while (i=100); coutsum=sumendl; return 0; 对同一个问题用while语句处理和用dowhile语句 处理是否等价 ? #include using namespace std; int main( ) int i,sum=0; cini; while (i=100) sum=sum+i; i+; coutsum=sumendl; return 0; #include using namespace std; int main( ) int i,sum=0; cini; do sum=sum+i; i+; while (i=100); coutsum=su
21、mendl; return 0; 格式: for(e1;e2;e3) 计算计算e2e2 执行执行 非非0 0 0 0 退出退出 循环循环 计算计算e1e1 计算计算e3e3 e1; while(e2) ; e3; forfor循环语句循环语句 for(循环变量赋初值;循环条件;循环变量增值) 语句 例如 for(i=1;i=100;i+) sum=sum+i; 它的执行过程与图3.10完全一样。它相当于以下语句: i=1; while(i=100) sum=sum+i; i+; for语句语句 for(; ;)表示无限循环,相当于while()语句 包含逗号表达式的其它形式的for语句,如:
22、for(sum=0,i=1;i100;i+) for(i=1,j=100;i=j;i+,j+) k=k+i+j; for(i=1;i=100;i+,i+); 例例 当结束条件为和大于2000时,如何表示? while(sumn; while(n!=-1) sum=sum+n; cinn; int h=12,f=32; int count=0; while(2*h!=f) h+;f+;count+; 例例 输入若干字母,将它们变成其后的第四个字母, AE,WA,非字母字符忽略。 思路: 1.建立循环,循环结束以输入回车符为准while (c=getchar( )!=n) 2.判断输入的是否是字符
23、,否则忽略 if(c=a i=1;i+) cout“1”“*”i“=”setw(2)1*i“ ”; coutendl; for(i=1;i=2;i+) cout“2”“*”i“=”setw(2)2*i“ ”;coutendl; for(i=1;i=n;i+) cout“n”“*”i“=”setw(2)n*i“ ”;coutendl; for(n=1;n=9;n+) for(i=1;i=n;i+) coutn*i=setw(2)n*i ; coutendl; 举一反三举一反三 for(i=1;i=;i+) cout“1”“*”i“=”setw(2)1*i“ ”; coutendl; for(i=
24、1;i=;i+) cout“2”“*”i“=”setw(2)2*i“ ”;coutendl; for(i=1;i=10-n;i+) cout“n”“*”i“=”setw(2)n*i“ ”;coutendl; for(n=1;n=9;n+) for(i=1;i=10-n;i+) coutn*i=setw(2)n*i ; coutendl; 第1行一个 第2行二个 。 第N行N个 int i,j,n; coutn; for(int i=1;i=n;i+) for(j=1;j=i;j+) cout*;/打印若干个 coutendl; /换行 for(j=1;j=n-i+1;j+) 第1行:4个,接着
25、1个,换行 第2行:3个,接着3个,换行 第3行:2个,接着5个,换行 第4行:1个,接着7个,换行 第5行:0个,接着9个,换行 每行的个数:5-i 每行的个数: 2*i-1 每次循环要做三件事: 先打印(5-i) 个 后,接着打 印(2*i-1)个,再换行 for(int i=1;i=5;i+) for(j=1;j=5-i;j+) cout;/打印若干个 for(k=1;k=2*i-1;k+) cout;/打印若干个 coutendl; /换行 练习练习 ia 10 21i3成立 32i3不成立 4 5 63 7 8 格式: break; 该语句在程序中只用于下列两种情况: 1、在开关语句
26、中,其功能是退出开关语 句,执行其后的语句; 2、在循环体中,其功能是用来退出该重 循环 breakbreak语句语句 格式:格式: continue;continue; 功能:只用在循环体中,用来功能:只用在循环体中,用来结束结束 该次循环该次循环。 在循环体中遇到在循环体中遇到continuecontinue语句时,语句时, 本次循环结束,回到循环条件判断本次循环结束,回到循环条件判断 是否执行下一次循环。是否执行下一次循环。 continuecontinue语句语句 #define M 10 void main() int num,sum(0); coutinput number:; f
27、or(int i=0;inum; if(num0) break; sum+=num; coutsum=sumendl; #define M 10 void main() int num,sum(0); coutinput number:; for(int i=0;inum; if(num0) continue; sum+=num; coutsum=sumendl; 求求10个数之和,个数之和, 遇负数终止遇负数终止 求求10个中的正个中的正 数之和数之和 快速算法:判断它能否被2到sqrt(m)sqrt(m)之间的数之间的数整除, 若不能则是素数。 int m; coutm; int sqrtm=sqrt(m); for (int i=2;i=sqrtm+1) coutmis prime.n; else coutmisnt prime.n; /输出 如何使程序更有效如何使程序更有效
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息技术贷款居间合同
- 有色金属贷款居间合同
- 2024泰来县职业技术教育中心学校工作人员招聘考试及答案
- 2024湖南省衡阳市第五技工学校工作人员招聘考试及答案
- 离婚双方财产分割合同书
- 舞蹈教师合作合同及条款
- 化工制图与识图试题库与参考答案
- 采购合同范文大全
- 电路理论考试题(附答案)
- 酒店餐饮部后厨承包合同
- 用人单位劳动合同书范例
- 运动营养学(第三版)全套课件第1-10章
- 浙江省温州市2024年九年级数学八校联考学生素养检测中考模拟试卷(含答案)
- 2025届甘肃省白银市部分学校高三下学期开学检测物理试题(含答案)
- 雅安建筑垃圾循环利用项目可行性研究报告
- 中国历史朝代简表全
- 铁总计统【2017】177号关于进一步加强铁路建设项目征地拆迁工作和费用管理的指导意见
- 立式水轮发电机轴线分析及处理
- 蹲踞式起跑PPT
- 1云南省初中综合素质,完整版综合素质评定表
- HAD 101-07《核电厂厂址查勘》_图文
评论
0/150
提交评论