第三章 程序的流程控制 胡昊 南京大学计算机系软件所.

Slides:



Advertisements
Similar presentations
1 第 3 章 C++ 中的条件与循环 第 3 次见面! acm.nefu.edu.cn/C++_03.ppt.
Advertisements

C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
C语言程序设计 主讲教师 :张群燕 电话:
程序设计实习 3月份练习解答
第一章 C语言概述 计算机公共教学部.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
高级语言程序设计 主讲人:陈玉华.
C#程序设计基础 $5 流程控制.
資料大樓 --談指標與陣列 綠園.
函數(一) 自訂函數、遞迴函數 綠園.
C++Primer 3rd edition 中文版 Chap 5
C++程序设计 第二讲 清华大学软件学院.
第4章 函数与预处理 4.1 概述 4.2 定义函数的一般形式 4.3 函数参数和函数的值 4.4 函数的调用 *4.5 内置函数
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
走进编程 程序的顺序结构(二).
计算机网络讲义 第5章 批量数据处理—数组 一维数组 排序和查找 二维数组 字符串.
第二章 C++对C 在非面向对象方面的改进 更简洁,更安全.
第3章 程序设计初步 第4章 函数与预处理 第5章 数组 第6章 指针 第7章 自定义数据类型
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++语言程序设计 第二章 C++简单程序设计.
C++大学基础教程 第4章 函数 北京科技大学 信息基础科学系.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第七章 操作符重载 胡昊 南京大学计算机系软件所.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第2章 C++流程控制语句 if 语句 switch语句 for语句 while语句 do - while语句 break语句
第三章 C# 基础知识.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第4讲 C++程序控制结构(二) 4.1 循环结构 4.2 转向控制 4.3 综合案例分析.
六、函数 教学目标: 函数的概念、定义、调用和返回 带自定义函数的程序设计 递推算法 递归思想及算法实现 函数的参数传递方式 C语言程序设计.
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
第三章 C++的语句和简单的程序设计 主要内容:
第 二 章 数据类型、运算符与表达式.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
第一章 C语言概述 教师:周芸.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++程式設計入門 變數與運算子 作者:黃建庭.
第三章 程序的控制结构 第一节 概述 第二节 if选择结构 第三节 switch语句.
第二讲 基本数据类 型及数组等 此为封面页,需列出课程编码、课程名称和课程开发室名称。
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第三章 程序的流程控制 胡昊 南京大学计算机系软件所

重要内容

简单的C++程序 //This is a C++ program #include <iostream> using namespace std; int main() { double x,y; cout<<“Enter two numbers:”; cin>>x>>y; double z=x+y; cout<<x<<‘+’<<y<<‘=‘<<z<<endl; return 0; }

C++语言的语句分类

表达式语句:计算级数a, 2a, 3a,…的前n项的和 公式 #include <iostream> using namespace std; int main() { int n; double a, sum; cout<<“a= “; cin>>a; cout<<“n=“; cin>>n; sum=a*(1+n)*n/2; cout<<“sum=“<<sum<<endl; return 0; }

另一个例子 输入一个数,输出该数的平方,立方以及平方根。 <cmath>, x, square, cube, square_root

复合语句 例子: { int a, b; cin>>a>>b; int max; if (a>=b) max=a; else max=b; cout<<max<<endl; }

If语句的含义 False或0 true或非0 true或非0 表达式 表达式 语句 语句 语句 False或0

If语句示例 输入三个整数,输出最大者 #include <iostream> using namespace std; int main() { int a, b, c, max; cout<<“请输入三个整数:”<<endl; cin>>a>>b>>c; if(a>b) max=a; else max=b; if(c>max) max=c; cout<<“最大者为:”<<max<<endl; return 0; }

求一元二次方程 的实根 解:一元二次方程根的计算公式为: 实根的要求是:

求一元二次方程 的实根 作业:用if else改写上面程序段 求一元二次方程 的实根 #include <iostream> #include <cmath> using namespace std; int main() { double a, b, c, root1, root2, t; cout<<“请输入一元二次方程的系数(a, b, c):”<<endl; cin>>a>>b>>c; ………… cout<<“方程的根为:”<<root1<<“和”<<root2<<endl; return 0; } if (a==0) { cout<<“不是一个一元二次方程”<<endl; return -1; } t=b*b-4*a*c; if(t<0) { cout<<“方程没有实根”<<endl; return -1; } if(t==0) root1=root2=-b/(2*a); else { root1=(-b+sqrt(t))/(2*a); root2=(-b-sqrt(t))/(2*a); } 作业:用if else改写上面程序段

作业: 书p47页三角形判断的例子,并且将等腰直角三角形的程序段落补足。

比较两个时刻的先后次序 #include <iostream> using namespace std; int main() { int h1, m1, s1, h2, m2, S2; cout<<“请输入第一个时刻(时、分、秒):”; cin>>h1>>m1>>s1; cout<<“请输入第二个时刻(时、分、秒):”; cin>>h2>>m2>>s2; ………… return 0; }

比较两个时刻的先后次序 if (h2>h1) r=1; else if (h2<h1) r=-1; else if (m2>m1) //h1==h2 r=1; else if (m2<m1) r=-1; else if (s2>s1) //h1==h2 && m2==m1 r=1; else if (s2<s1) r=-1; else //h1==h2 && m1==m2 && s1==s2 r=0; if (r==1) cout<<“第一个时刻在前。”; else if (r==-1) cout<<“第二个时刻在前。”; else cout<<“两个时刻相同”; int t1, t2; t1=s1+m1*60+h1*3600; t2=s2+m2*60+h2*3600; if(t1<t2) cout<<“第一个时刻在前。”; else if(t1>t2) cout<<“第二个时刻在前。”; else cout<<“两个时刻相同”;

if-else配对问题 例: y= -1 (x<0) 0 (x=0) 1 (x>0) main( ) { int x, y; cin>>x; ………… cout<<“x=”<<x<<“, y=”<<y<<endl; } 例: 算法二: 输入x 若x<0, y=-1 否则 若x=0, y=0 若x>0, y=1 输出y 算法一: 输入x 若x<0, y=-1 若x=0, y=0 若x>0, y=1 输出y

if-else配对问题-哪个对? 程序1: if(x<0) y=-1; else if (x==0) y=0; else y=1; 程序2: if(x>=0) if (x>0) y=1; else y=0; else y=-1; 程序3: y=-1; if (x!=0) if(x>0) y=1; else y=0; 程序4: y=0; if (x>=0) if(x>0) y=1; else y=-1;

if-else配对问题-程序1 x<0 y=-1 Y x=0 N y=1 N y=0 Y

if-else配对问题-程序2 x>=0 Y x>0 y=-1 N y=1 Y y=0 N

if-else配对问题-程序3 y=-1 N x!=0 Y x>0 y=1 Y y=0 N

if-else配对问题-程序4 y=0 N x>=0 Y x>0 y=1 Y y=-1 N

例 3‑8从键盘输入一个星期的某一天(0:星期天;1:星期一;...),然后输出其对应的英语单词 #include <iostream> using namespace std; int main() { int day; cin >> day; switch (day) { case 0: cout << "Sunday"; break; case 1: cout << "Monday"; break; case 2: cout << "Tuesday"; break; case 3: cout << "Wednesday"; break; case 4: cout << "Thursday"; break; case 5: cout << "Friday"; break; case 6: cout << "Saturday"; break; default: cout << "Input error"; } cout << endl; return 0;

例:编程统计从键盘上输入的数字中每种数字的个数和其他字符的个数,并以字符‘$’作为输入结束符。 #include <iostream> using namespace std; void main() { char c; int nother(0), ndigit[10]; for(int i=0; i<10; i++) ndigit[i]=0; cin>>c; …… for(i=0; i<10; i++) cout<< ndigit[i]<<’ ‘; cout<<”\nother=”<<nother<<endl; } while(c!=’$’) { switch( c ) case ‘0’: case ‘1’: case ‘2’: case ‘3’: case ‘4’: case ‘5’: case ‘6’: case ‘7’: case ‘8’: case ‘9’: ++ndigit[c—‘0’]; break; default: ++nother; } cin>>c;

三种循环语句的比较 下面将用三种循环语句来解决同一个问题:求 n! 1、用while语句 #include <iostream> using namespace std; int main() { int n; cin >> n; int i=2,f=1; //循环初始化 while (i <= n) //循环条件 { f *= i; i++; //下一次循环准备 } cout << "factorial of " << n << " = " << f << endl; return 0;

2、用do-while语句 #include <iostream> using namespace std; int main() { int n; cin >> n; int i=1,f=1; //循环初始化 do { f *= i; i++; //下一次循环的准备 } while (i <= n); //循环条件 cout << "factorial of " << n << " = " << f << endl; return 0; }

3、用for语句 #include <iostream> using namespace std; int main() { int n,i,f; cin >> n; for (i=2,f=1 //循环初始化 ; i<=n //循环条件 i++) //下一次循环准备 f *= i; //循环体 cout << "factorial of " << n << " = " << f << endl; return 0; }

循环程序设计实例(一):求第n个费波那契(Fibonacci)数。 #include <iostream> using namespace std; int main() { int n; cin >> n; int fib_1=0; //用于记住前一个Fibonacci数 int fib_2=1; //用于记住新的Fibonacci数 for (int i=3; i<=n; i++) { int temp=fib_1+fib_2; //计算新的Fibonacci数 fib_1 = fib_2; //记住前一个Fibonacci数 fib_2 = temp; //记住新的Fibonacci数 } cout << "第" << n << "个费波那契数是:" << fib_2 << endl; return 0;

 循环程序设计实例(二):编程求出小于n的所有素数(质数)。 #include <iostream> using namespace std; int main() { int n,count=0; cout << "请输入一个正整数:" cin >> n; //从键盘输入一个正整数 for (int i=2; i<n; i++) //循环:分别判断2、3、...、n-1是否为素数 { int j=2; while (j < i && i%j != 0) //循环:分别判断i是否能被2 ~ i-1整除 j++; if (j == i) //i是素数 { cout << i << ","; count++; if (count%6 == 0) cout << endl; //控制每一行输出6个素数。 } cout << endl; return 0;

作业:将该程序实现成函数isPrime的实现方式  循环程序设计实例(三):编程求出小于等于n的所有素数(质数)用break语句。 #include <iostream> #include <cmath> using namespace std; int main() { int n, i, j, k ; cin>>n; if(n<=2) cout<<“no prime number under ”<<n<<endl; else { for (i=2; i<n; i++) k=sqrt(i); for(int j=2; j<=k; j++) if(i%j==0) break; if(j>=k+1) cout<<i<<“is a prime number”<<endl; cout<<i<<“is not a prime number”<<endl; } return 0; 作业:将该程序实现成函数isPrime的实现方式

Continue的用法 #include <iostream.h> #define M 10 void main() { int num, sum(0); cout<<”Input number:”; for(int i=0; i<M; i++) cin>>num; if(num<0) continue; sum+=num; } cout<<”sum=”<<sum<<endl;

#include的例子-无模块 int x=1; //全局变量 double y=2.0; //全局变量 int f() //全局函数 { int m; //局部变量 …… m+=x; //语句 return m; } void g() //全局函数 double z; //局部变量 z=y+10; //语句 int main() //全局函数 { double r; //局部变量 …… r=x+y*f(); //语句 g(); //语句 }

#include的例子-模块 //file1.h extern int x;//全局变量x的声明 extern double y;//全局变量y的声明 int f();//全局函数f的声明 //file1.cpp int x=1;//全局变量x的定义 double y=2.0;//全局变量y的定义 int f()//全局函数f的定义 { int m;//局部变量m的定义 …… m+=x; //语句 return m; } //file2.h void g();//全局函数g的声明 //file2.cpp #include “file1.h”//把文件file1.h中的内容包含进来 void g()//全局函数g的定义 { double z;//局部变量z的定义 …… z=y+10;//语句 } //main.cpp #include “file1.h”//把文件file1.h中的内容包含进来 #include “file2.h”//把文件file2.h中的内容包含进来 int main() //全局函数main的定义 double r;//局部变量r的定义 r=x+y*f();//语句 g();//语句

条件编译的例子 #include <iostream> using namespace std; #define A -10 void main( ) { #if A>0 cout <<”a>0”<<endl; #elif A<0 cout<<”a<0”<<endl; #else cout<<”a= =0”<<endl; #endif }

条件编译的作用-防止重复包含 #ifndef MYHEAD_H //main.cpp #define MYHEAD_H #endif //main.cpp #include “myfile1.h” #include “myfile2.h” void main() { ….. } //myfile1.h #include “myhead.h” ……. //myfile2.h

条件编译的作用-调试开关 #define DEBUG 1 …… #if DEBUG = = 1 cout<<”OK!”<<endl; #endif cout<<a<<”\t”<<b<<endl; ........

条件编译的作用-多环境编程 #ifdef UNIX …….. //适合于UNIX环境的代码 #else …….. //适合于其他环境的代码 …….. //适合于其他环境的代码 #endif …….. //适合于任何环境的代码 #if defined(WINDOWS) defined(<宏名>) …….. //适合于WINDOWS环境的代码 #elif defined(UNIX) …….. //适合于UNIX环境的代码 #elif defined(MAC_OS) …….. //适合于MAC_OS环境的代码 #esle …….. //适合于其他环境的代码 #endif