500 likes | 623 Views
语 句. 语句. 语句是程序中可以执行的基本单元 程序的执行过程就是语句的执行过程 多个语句构成函数,函数是 C++ 程序的主要模块. 语句的分类. 简单语句 单个语句,以分号结尾 复合语句 多个简单语句构成的逻辑语句. 简单语句与复合语句. 简单语句 a = b + c ; 复合语句 { temp = a; a = b; b = temp; }. 语句的分类. 说明和定义语句 表达式语句 流程控制语句 其他 标号语句 try-throw-catch 语句.
E N D
语句 • 语句是程序中可以执行的基本单元 • 程序的执行过程就是语句的执行过程 • 多个语句构成函数,函数是C++程序的主要模块
语句的分类 • 简单语句 • 单个语句,以分号结尾 • 复合语句 • 多个简单语句构成的逻辑语句
简单语句与复合语句 • 简单语句 a = b + c ; • 复合语句 { temp = a; a = b; b = temp; }
语句的分类 • 说明和定义语句 • 表达式语句 • 流程控制语句 • 其他 • 标号语句 • try-throw-catch语句
说明和定义语句 • 说明或定义程序中用到的变量、常量、函数、类 int grade; //变量说明 const float PI = 3.14; //常量定义 void swap(int &a, int &b); //函数说明 class People { //类定义 ...... };
表达式语句 • 进行数据输入、输出、运算或者赋值 • 输入语句 cin >> a; • 赋值语句 a = b + c; • 运算语句 a++; • 输出语句 cout << a; • 函数调用语句 swap(a,b); • 返回语句 return a+b; • 空语句 ;
流程控制语句 • 控制程序以非顺序的方式执行语句 • 分支语句(if, switch) • 循环语句(do…while, while, for) • 跳转语句(break, continue, goto)
程序的执行流程 顺序 分支 循环 语句1 条件 语句2 语句1 语句2 语句1 语句2 语句3
分支语句 • switch语句 • switch(表达式) { • case 表达式1: • 语句1 • case 表达式2: • 语句2 • … • default : • 语句n • } if语句 if(条件表达式) 语句1 else 语句2
分支语句 • if语句和switch语句
流程控制语句(分支语句) • if-else语句的模糊性 if(表达式1) if(表达式2) 语句1 else 语句2 ? ?
流程控制语句(分支语句) else子句总是与最后出现的、 还没有else与其匹配的if相匹配
流程控制语句(分支语句) • If-else语句的模糊性 if(表达式1) if(表达式2) 语句1 else 语句2 • if(表达式1) • { • if(表达式2) • 语句1 • else • 语句2 • }
流程控制语句--switch switch(表达式0) { case 表达式1: 语句组1 break; case 表达式2: 语句组2 break; ... default : 语句组n } 整型的常量表达式 表达式的值不能相等 当表达式0和所有表达式的值不等时,执行default语句
switch语句的执行流程 exp 0 Y 0 ?= 1 stat 1 N Y 0 ?= 2 stat 2 N …... Y 0 ?= n stat n N default 没有default子句
没有break语句 exp 0 Y 0 ?= 1 stat 1 N Y 0 ?= 2 stat 2 N …... …... Y 0 ?= n stat n N default 没有default子句
流程控制语句--循环 • while语句 while(表达式) 语句 • do_while语句 do 语句 while(表达式) • for语句 for(表达式1;表达式2;表达式3) 语句
初始化语句 循环体 循环体 循环增量 循环条件 循环条件 循环语句的比较 N 循环条件 Y 循环体 while do...while for
跳转语句--break • while • do…while • for • switch 循环 break 循环的正常出口
跳转语句--continue continue 循环 循环出口
跳转语句--goto 中断程序的正常执行,跳转到同一函数的指定标号处 goto 函数内的任何地方
跳转语句--goto //找到一对乘积为50且都小于10的两个数 for (int i = 1; i < 10; i++) for (int j = 1; j < 10; j++) if (i * j == 50) goto End; //其他程序 End: cout << i << ‘*’ << j << “ = 50”;
跳转语句的比较 goto label break continue label:
应用举例一 要求: 判断一个数m是否为素数。 素数的条件: m不能被 2 ~ m - 1 的数整除 即 : m % i != 0, 2 <= i <= m-1 使用for循环
应用举例一 for ( int i = 2; i < m; i++) { if ( m % i == 0) break;//不是素数 } if ( i == m) //循环正常结束 cout << “m is a prime !”;
m m 改进算法 如果m不是素数,则存在i,j,满足: m = i * j (i < j) 显然,i,j满足: i <= j >=
#include <iostream.h> #include <math.h> void main() { long m; //输入m的值 cout << “Please input a number:\n”; cin >> m; double sqrtm = sqrt(m);
for ( int i = 2; i <=sqrtm; i++) { if ( m % i == 0) break;//不是素数 } if ( i > sqrtm) //循环正常结束 cout << “m is a prime ! \n”; else cout << “m is not a prime! \n”; }
应用举例二 要求: 从键盘读入若干整数,计算并输出它们的平均值,输入结束的标志是输入值为0 分析: 循环次数不定 --> 不适合用for循环 循环结束条件 --> 读入值为0
do...while循环 int iValue; //读入的数 int num = 0; //输入数的个数 float sum = 0; //输入数值的总和 do { cout << “Please input a number:\n”; cin >> iValue; sum += iValue; //计算和 num++; } while (iValue != 0) cout << “The average :” << 1.0 * sum/num;
while循环 int iValue = -1; //读入的数 int num = 0; //输入数的个数 float sum = 0; //输入数值的总和 while ( iValue != 0) { cout << “Please input a number:\n”; cin >> iValue; sum += iValue; //计算和 num++; } cout << “The average :” << 1.0 * sum/num;
break退出循环 int iValue; //读入的数 int num = 0; //输入数的个数 float sum = 0; //输入数值的总和 while(1) { cout << “Please input a number:\n”; cin >> iValue; if ( iValue == 0) break; sum += iValue; //计算和 num++; } cout << “The average :” << sum/num;
应用举例三 要求: 从键盘读入一行字母,计算其中各个元音字母的个数。 分析: • 元音字母:a e u o i • 循环次数不定,不适合用for循环 • 以换行符号表示结束 • 用switch语句
#include <iostream.h> void main() { char c; int aNum = 0; int eNum = 0; int oNum = 0; int iNum = 0; int uNum = 0; cout << “Please input a line of character:\n”;
break的含义不同 while (1) { c = cin.get(); if (c == '\n') break; switch (c) { case 'a': aNum++; break; case 'e': eNum++; break; case 'o': oNum++; break; case 'i': iNum++; break; case 'u': uNum++; break; } } ......
应用举例四 要求: 从键盘读入若干整数,计算并输出其中正整数的平均值,忽略输入的负数,输入结束的标志是输入值为0 分析: 忽略负数 --> 中断当前一次循环,用continue
while (1) { cout << “Please input a number:\n”; cin >> iValue; if (iValue < 0) continue; if (iValue == 0) break; sum += iValue; //计算和 num++; } cout << “The average :” << sum/num;
小结 • 语句的作用 • 语句的分类 • 程序的执行流程 • 分支、循环和跳转 • 简单程序开发
流程控制语句(分支语句) • 简单的if语句 //将字符变量ch由小写转为大写 if (‘a’ <= ch && ch <= ‘z’) ch = ch - ’a’ +’A’; cout << ch;
流程控制语句(分支语句) • if-else 语句 //将字符变量ch存放的值大小写互相转化 if (‘a’ <= ch && ch <= ‘z’) ch = ch - ‘a’ + ’A’; else if (‘A’ <= ch && ch <= ‘Z’) ch = ch - ‘A’ + ‘a’; cout << ch;
流程控制语句(分支语句) • if语句的等价表达式 result = exp1 ? exp2 : exp3 if(exp1) result = exp2 else result = exp3
流程控制语句 • 复合语句--用 ‘{’和 ‘}’括起的若干语句 if (条件表达式) { 语句1; 语句2; …… 语句n; } 复合语句
流程控制语句 举例: 循环从标准输入读取字符, 放入字符数组s中, 直到遇到字符'='为止
N 循环条件 Y 循环体 流程控制语句-while cin >> ch; i = 0; while (ch != '=') { s[i++] = ch; cin >> ch; } s[i] = ‘\0’; 复合语句
循环体 循环条件 流程控制语句--Do-While i = 0; do { cin >> ch; s[i++] = ch; } while(ch != ‘=‘) s[i-1] = ‘\0’;
初始化语句 循环体 循环增量 循环条件 流程控制语句--for cin >> ch; for(i = 0 ; ch != ‘=‘ ; i++) { s[i] = ch; cin >> ch; } s[i] = ‘\0’;
跳转语句--break • 在switch中表示跳出switch语句 • 在循环语句中表示跳出当前循环体,执行循环体后面的语句
跳转语句--break i = 0; while (1) { cin >> s[i++]; if(s[i-1] == '='); break; } s[i] = ‘\0’;
跳转语句--continue //把0~100中间不能被3整除的数输出 for(int i = 0; i <= 100; i++) { if (i % 3 == 0) continue; cout << i << endl; }