第 3章 C++控制语句
3.1 C++语句概述
3.2 选择结构
3.3 循环结构
3.1 C++语句概述
1,控制语句控制语句主要完成分支结构程序和循环结构程序的控制。
C++主要包括以下 9个控制语句:
if~else~语句 分支语句
switch语句 多分支语句
for语句 循环语句
while语句 循环语句
do~while语句 循环语句
continue语句 结束本次循环语句
break语句 结束循环或结束 switch语句
goto语句 转向语句
return语句 从函数返回语句第 3章 C++控制语句
3.1 C++语句概述
2,函数调用语句
C++有大量的系统函数,程序员也可以自己定义函数,对这些函数的调用可以作为一条语句。
3,表达式语句由一个表达式构成一个语句,即在表达式后添加一个分号,
如赋值表达式语句等。
4,空语句空语句只有一个分号。即:;
因此空语句什么也不做。
除了上面的简单语句外,可以将一组简单语句用大括号 {}括起来,称之为复合语句。
第 3章 C++控制语句返 回
3.2 选择结构选择结构也称分支结构,就是在程序运行过程中,根据具体条件执行不同的程序段。
3.2.1 if语句
1,if语句的基本结构,
if(表达式 )
{
语句组 1;
}
else
{
语句组 2;
}
表达式语句组 1 语句组 2
真 假
if-else语句流程图注意:表达式必须用,( )”括起来若语句组中只有一条简单的语句,则大括号,{}”可以省略。
第 3章 C++控制语句例 3.1 求两个数中较大的值和较小的值
#include <iostream.h>
void main()
{
int a,b,max,min;
a=10;
b=20;
if(a>b)
{
max = a;
min = b;
}
else
{
max = b;
min = a;
}
cout << "max = " << max << endl;
cout << "min = " << min << endl;
}
第 3章 C++控制语句程序运行结果为:
max = 20
min = 10
例 3.2 输入一个成绩,判断是否需要补考,
如果需要打印出来
#include <iostream.h>
void main()
{
int score;
cout << "请输入成绩,";
cin >> score;
if(score < 60)
cout << "不及格,需要补考! " << endl;
}
第 3章 C++控制语句程序运行时,若输入的成绩大于或等于 60,则没有任何输出。
仅需要一个分支,因为不需要补考时不用进行处理,因此可以省略 else语句部分
3.2 选择结构
3.2.1 if语句(续一)
2,if语句的嵌套,在 if 语句的“语句组 1”或“语句组 2”中又包含有 if 语句的情况。
if ( )
if ( ) 语句 1
else 语句 2
else
if ( ) 语句 3
else 语句 4
if语句嵌套时,else子句总是与在它前面、距它最近、且尚未匹配的 if配对。为明确匹配关系,避免匹配错误,建议将内嵌的 if
语句一律用,{ }”括起来。
第 3章 C++控制语句例 3.3 输入三个数 a,b,c,输出其中最大的数
#include <iostream.h>
void main()
{
int a,b,c,max;
cout << "请输入 3个整数,以空格分隔,";
cin >> a >> b >> c;
if (a > b)
{
if(a > c) max = a;
else max = c;
}
else
{
if(b>c) max = b;
else max = c;
}
cout << "max = " << max << endl;
}
第 3章 C++控制语句程序运行结果为,
请输入 3个整数,以空格分隔,45 64 32
max = 64
3.2 选择结构
3.2.1 if语句(续二)
3,用 if语句实现多分支,
if(表达式 1)
{
语句组 1;
}
else if(表达式 2)
{
语句组 2;
}

else if(表达式 n)
{
语句组 n;
}
else
{
语句组 n+1;
}
第 3章 C++控制语句表达式 1
语句组 1 语句组 2
真假表达式 2
真假语句组 3
表达式 3
真假语句组 4
if - else 实现多分支流程图例 3.4 从键盘上输入一个成绩,如果大于等于 90,输出“优”,如果大于等于 80,小于 90,输出“良”,如果大于等于 70,小于 80,输出
“中”,如果大于等于 60,小于 70,输出“及格”,如果小于 60,输出
“不及格”。
#include <iostream.h>
void main()
{
int s;
cout << "请输入成绩 ";
cin >> s;
if (s >= 90)
{
cout << "优 " << endl;
}
else if( (s >= 80) && (s < 90) )
{
cout << "良 " << endl;
}
第 3章 C++控制语句
else if( (s >= 70) && (s < 80) )
{
cout << "中 " << endl;
}
else if( (s >= 60) && (s < 70) )
{
cout << "及格 " << endl;
}
else if( s < 60)
{
cout << "不及格 " << endl;
}
}
3.2 选择结构
3.2.2 switch语句
1,switch语句的一般结构,
switch(表达式 )
{
case 常量 1:语句组 1; break;
case 常量 2:语句组 2; break;
……
case 常量 n:语句组 n; break;
default:语句组 n+1; break;
}
第 3章 C++控制语句注意:表达式只能是整型、字符型或枚举型注意:常量 1~n的值必须各不相同若没有 break语句,将会从满足条件的语句组开始一直执行下去。
3.2 选择结构
3.2.2 switch语句(续)
switch语句流程图:
第 3章 C++控制语句其它常量 n常量 1 常量 2
表达式语句组 1 语句组 2 语句组 n 语句组 n+1
例 3.5 用 switch语句实现例 3.4的功能
#include <iostream.h>
void main()
{
int s,i;
cout <<,请输入成绩 ";
cin >> 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章 C++控制语句
3.2 选择结构
3.2.3 程序举例例 3.6 有一函数:
-1 x < 0
y= 0 x = 0
1 x > 0
编写程序,输入一个 x的值,求出 y的值并输出。
第 3章 C++控制语句例 3.6 源程序
#include <iostream.h>
void main()
{
int x,y;
cout << "请输入 x的值,";
cin >> x;
if(x<0)
y = -1;
else
{
if(x==0)
y = 0;
else
y = 1;
}
cout << "y= " << y << endl;
}
第 3章 C++控制语句
3.2 选择结构
3.2.3 程序举例(续一)
例 3.7 求一元二次方程 ax2+bx+c=0的解。
一元二次方程 ax2+bx+c=0,根据 3个系数的关系,有以下几种情况:
( 1) a=0,不是二次方程。
( 2) b 2-4ac =0,有两个相等的实根。
( 3) b 2-4ac >0,有两个不相等的实根。
( 4) b 2-4ac <0,有两个共轭复根。
第 3章 C++控制语句例 3.7 源程序
#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) << endl;
else
{
第 3章 C++控制语句
fabs和 sqrt是库函数,分别用于求绝对值和平方根。使用之前要包含 math.h 头文件实数在计算机中存储会有误差,因此判断实数是否 =0时,通常是通过判断该数的绝对值是否小于一个很小的数 (如 10-6 ),如果小于这个数就认为它等于 0。
例 3.7 源程序(续)
if (disc>1e-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 << "x1= " << p << "+" << q << "i" << endl;
cout << "x2= " << p << "-" << q << "i" << endl;
}
}
}
}
第 3章 C++控制语句
3.2 选择结构
3.2.3 程序举例(续二)
例 3.8 编一个程序计算指定年月有几天,年月由键盘输入。
分析:每年的 1,3,5,7,8,10,12月份有 31天,4,6,
9,11月份有 30天,如果不是闰年,2月份有 28天,闰年的 2月有
29天。判断闰年的条件是:能被 4整除但不能被 100整除,或者能被 400整除。
第 3章 C++控制语句例 3.8 源程序
#include <iostream.h>
void main()
{
int year,month,days;
cout << "请输入年和月,用空格分隔 " ;
cin >> year >> month;
switch(month)
{
case 1,case 3,case 5,case 7,case 8,case 10,case 12,
days = 31;
break;
case 4,case 6,case 9,case 11:
days = 30;
break;
第 3章 C++控制语句例 3.8 源程序(续)
case 2:
if( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) )
days = 29;
else
days = 28;
break;
default:
days = 0;
break;
}
if(days ==0)
cout << "月份输入有误! " <<endl;
else
cout << "该月份有 " << days << "天。 " << endl;
}
第 3章 C++控制语句返 回
3.3 循环结构当同一段程序要执行多次时,就要用到循环结构。
3.3.1 while语句
while语句的一般格式,
while(循环条件 )
{
循环体语句组 ;
}
循环条件循环体语句组真假
while语句流程图第 3章 C++控制语句例 3.9 求 1~100的累计和
#include <iostream.h>
void main()
{
int i=1;
int sum=0;
while(i<=100)
{
sum += i;
i++;
}
cout << "sum= " << sum <<endl;
}
第 3章 C++控制语句
3.3 循环结构
3.3.2 do-while语句
do-while语句的一般格式,
do
{
循环体语句组 ;
} while(循环条件 );
第 3章 C++控制语句循环条件循环体语句组真假
do-while语句流程图例 3.10 用 do-while语句求 1~100的累计和
#include <iostream.h>
void main()
{
int i=1;
int sum=0;
do
{
sum += i;
i++;
} while(i<=100);
cout << "sum= " << sum <<endl;
}
第 3章 C++控制语句
3.3 循环结构
3.3.3 for语句
for语句的一般格式,
for (表达式 1; 表达式 2; 表达式 3)
{
循环体语句组 ;
}
表达式 1通常用于为循环变量赋初值 ;
表达式 2通常为循环条件 ;
表达式 3通常为循环变量增值或减值,
以使循环趋于结束。
三个表达式都可以省略,但分号不能省。
如果表达式 2省略,则循环条件总为真。
第 3章 C++控制语句假
for语句流程图表达式 2
表达式 1
真循环体语句组表达式 3
例 3.11 用 for语句求 1~100的累计和
#include <iostream.h>
void main()
{
int i;
int sum=0;
for( i=1; i<=100; i++ )
{
sum += i;
}
cout << "sum= " << sum <<endl;
}
第 3章 C++控制语句
3.3 循环结构
3.3.4 continue,break与 goto语句
1,continue语句,当程序运行到 continue语句时,循环体余下的语句不再执行,立即试图进入下次循环。
对于 for循环,遇到 continue语句时,跳过循环体其余语句,转向循环语句中的表达式 3的计算;对于 while和 do-while循环,跳过循环体其余语句,转向循环条件表达式的计算 。
2,break语句,当程序运行到 break语句时,立即结束循环 。 转向循环语句下面的语句继续执行 。
3,goto语句,无条件转向语句 。 goto语句易使程序流程混乱 。
一般形式,goto 语句标号;
语句标号也要符合标识符的命名规则,语句标号处要在标号后面加,,,,当执行 goto语句时,会无条件转向标号所在语句执行 。
第 3章 C++控制语句例 3.12 求 1~100不能被 3整除的整数之和
#include <iostream.h>
void main()
{
int i;
int sum=0;
for(i=1; i<=100; i++)
{
if(i%3==0)
continue;
sum += i;
}
cout << "sum= " << sum <<endl;
}
第 3章 C++控制语句如果 i能被 3整除,则执行 continue语句,
立即结束本次循环,执行 i++语句,接下来判断 i<=100是否满足;
如果 i不能被 3整除,则不执行 continue
语句,将 i加到变量 sum中例 3.13 判断某个整数是否为素数
#include <iostream.h>
void main()
{
int i,n;
cout << "请输入一个整数,";
cin >> n;
for(i=2; i<=n-1; i++)
{
if(n%i==0)
break;
}
if(i==n)
cout << n << " 是素数 !" << endl;
else
cout << n << " 不是素数 !" << endl;
}
第 3章 C++控制语句如果 n能被某个 i整除( n不是素数),则会执行 break语句立即结束循环,此时的 i小于 n
例 用 goto语句实现 1~100的累计和
#include <iostream.h>
void main()
{
int i=1;
int sum=0;
loop:
if(i<=100)
{
sum += i;
i++;
goto loop;
}
cout << "sum= " << sum <<endl;
}
第 3章 C++控制语句遇到该语句,会自动转移到 loop
标号处,即从 if(i<=100)语句开始继续往下执行例 3.14 找出 50到 100之间的所有素数并输出
#include <iostream.h>
#include <math.h>
void main()
{
int i,n,s;
for(n=50; n<=100; n++)
{
s = (int) sqrt(n);
for(i=2; i<=s; i++)
{
if(n%i==0)
break;
}
if(i>s)
cout << n << endl;
}
}
第 3章 C++控制语句通过循环的嵌套实现多个连续整数是否为素数的判断过程例 3.15 打印所有水仙花数
#include <iostream.h>
void main()
{
int i,j,k,n;
for(n=100; n<=999; n++)
{
i = n/100; //得到百位数
j = (n-100*i)/10; //得到十位数
k = n%10; //得到个位数
if(i*i*i + j*j*j + k*k*k == n)
cout << n << endl;
}
}
第 3章 C++控制语句分析:所谓水仙花数是指一个 3位数,其各位数字的立方和等于其本身。要计算各位数字的立方和,首先要将各位数分解出来,可以使用求余数运算符和两个整数相除得到各位数 。
例 3.16 输出 ASCII为 32到 127之间的字符
#include <iostream.h>
void main()
{
unsigned char c;
int i = 0;
for(c=32; c<128; c++)
{
cout << c << " ";
i++;
if(i%10==0)
cout << endl;
}
}
第 3章 C++控制语句分析:由于可以将整数值赋给字符型变量,因此可以定义一个字符型变量,使其从 32循环到 127,逐个输出即可。
返 回由于字符型数据的范围是从 -128到
127,无法与 128进行比较,因此定义无符号字符型变量,其范围是从 0到
255,可以完成比较。
谢 谢!