C++大学基础教程
第3章 过程化语句
北京邮电大学电信工程学院
计算机技术中心
用计算机解决实际问题,首
先要分析问题,设计合适的
算法,然后编程实现算法。
第3章 过程化语句
3.1 算法的基本控制结构
3.2 if选择语句
3.3 switch选择语句
3.4 循环语句
3.5 循环嵌套
3.6 应用举例
3.1 算法的基本控制结构
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-5-
3.1 算法的基本控制结构
算法
1、计算机执行的操作
2、这些操作的顺序
伪码
采用类似计算机语言的分句格式,以自然
语言描述算法。
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-6-
3.1 算法的基本控制结构
流程图
开始/结束 执 行 判 断 联 系
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-7-
3.1 算法的基本控制结构
程序的三种基本控制结构
(1)顺序结构
(2)选择结构
(3)循环结构
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-8-
3.1 算法的基本控制结构
流程控制语句
选择语句 : if..else、 switch
循环语句 : while、 for 、 do..while
转向语句 : break、 continue
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-9-
3.2 if选择语句
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-10-
3.2 if选择语句
if_else
1、没有 else分支
2、双分支
3、多分支
4、 if 语句的嵌套
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-11-
3.2 if选择语句
1、没有else分支
例如:比较x和y的大小,如果x大则输出x的值
if (表达式)
语句;
if ( x>y )
cout<<x<<endl;
3.2 if选择语句
2、双分支
例如:比较x,y的大小,将较大的数输出
if (表达式)
语句1;
else
语句2;
if ( x>y )
cout<<x<<endl;
else
cout<<y<<endl;
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-13-
例子
任意输入一个4位整数的年份,判断
该年是否是润年?
是指年份能被 4整除的那些年,但不包
括能被 100整除而不能被 400整除的年
#include <iostream>
using namespace std;
void main()
{
int year;
cin>>year;
if ((year % 4==0) &&
!((year %100 == 0) && (year % 400!=0)))
cout<<"润年 "<<endl;
else
cout<<"不是润年 "<<endl;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-15-
3.2 if选择语句
3、多分支
if (表达式 1)
语句 1;
else if (表达式 2)
语句 2;
else if (表达式 3)
语句 3;
…
else
语句 n;
例子:输出学生的成绩
#include <iostream>
using namespace std;
void main()
{
int x; cin>>x;
if(x>=90)
cout<<“优秀 ”<<endl;
else if(x>=80)
cout<<“良好 ”<<endl;
else if(x>=60)
cout<<“合格 ”<<endl;
else
cout<<“不及格 ”<<endl;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-18-
3.2 if选择语句
if (表达式 1)
if (表达式 2)
语句 1
else
语句 2
else
if (表达式 3)
语句 3
else
语句 4
4、 if 语句的嵌套
例子:输出a,b,c中较大的数
#include <iostream>
using namespace std;
void main(){
int a,b,c;
cin>>a>>b>>c;
if (a>b)
{
if (a>c) cout<<a<<endl;
else cout<<c<<endl;
}
else
{
if (b>c) cout<<b<<endl;
else cout<<c<<endl;
}
}
cout<< (a>b?(a>c?a:c):(b>c?b:c ) );
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-21-
3.2 if选择语句
注意:二义性
int x=-1;
if (x>0)
if (x<50)
cout<<“x is <50”endl;
else
cout<<“x is <=0”<<endl;
if和 else的对应关系, else总是与离它
最近的 if匹配。
{
}
3.3 switch选择语句
3.3 switch选择语句
switch (表达式 )
{
case 常量表达式 1:
语句 1
break;
case 常量表达式 2:
语句 2
break;
┇
case 常量表达式 n:
语句 n
break;
default:语句 n+1
}
跳出 switch语句
例子:输出学生的成绩
int x; cin>>x;
switch(x/10)
{
case 10:
case 9:cout<<“优秀 ”<<endl;
break;
case 8: cout<<“良好 ”<<endl;
break;
case 7:
case 6: cout<<“合格 ”<<endl;
break;
default: cout<<“不及格 ”<<endl;
}
3.4 循环语句
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-27-
3.4 循环语句
三种基本语法
1、 while 语句
2、 do…while 语句
3、 for 语句
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
cout<<setfill('*')
<<setw(2)<<'\n'
<<setw(3)<<'\n'
<<setw(4)<<'\n'
<<setw(5)<<'\n'
<<setw(6)<<'\n'
<<setw(7)<<'\n'
<<setw(8)<<'\n';
}
*
**
***
****
*****
******
*******
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
int i=2;
cout<<setfill('*');
while(i<=8)
{
cout<<setw(i)<<'\n';
i++;
}
}
*
**
***
****
*****
******
*******
循环控制
条件
循环体
循环变量
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-30-
3.4 循环语句
主要包括3个部分:
1、 循环控制条件:
判断循环操作是否进行的条件;
2、 循环体:
重复进行的操作;
3、 循环控制变量:
记录循环体执行的次数,或控制循环的结束
条件。
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-31-
3.4 循环语句
while循环语句
while(表达式)
循环体语句;
例1:编程循环输出 1-9这 9个数字?
运行结果 :
1
2
3
4
5
6
7
8
9
循环结束
#include <iostream>
using namespace std;
void main()
{
int i=1;
while (i<9)
{
cout<<i<<endl;
i++;
}
cout<<“循环结束 ”<<endl;
}
例2:编程计算1+2+3+ ….+10的值
#include <iostream>
using namespace std;
void main()
{
int sum=0, i=0;
whil(i<=10)
{
sum+=i;
i++;
}
cout<<sum<<endl;
}
55
例3:打印可视字符
#include<iostream>
using namespace std;
void main()
{
unsigned char ch=32;
while(ch<128)
{
cout<<(int)ch<<'\t'<<ch<<'\t';
ch++;
}
}
例4:编程计算 的值
#include <iostream>
using namespace std;
void main()
{
int k=1,sum=0,n;
cout<<"input n(n>0):";
cin>>n;
while(k<=n)
{
sum=sum+k*k;
k++;
}
if(n>0) cout<<sum/n<<endl;
else cout<<"n不能 <=0"<<endl;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-36-
3.4 循环语句
do..while循环语句
do
{
循环体语句;
} while(表达式 );
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int i=2;
cout<<setfill('*');
while(i<=8)
{
cout<<setw(i)<<'\n';
i++;
}
}
*
**
***
****
*****
******
*******
do
{
cout<<setw(i)<<'\n';
i++;
} while(i<=8);
例子:编程计算 的值
#include <iostream>
using namespace std;
void main()
{
int k=1,sum=0,n;
cout<<"input n(n>0):";
cin>>n;
while(k<=n)
{
sum=sum+k*k;
k++;
}
if(n>0) cout<<sum/n<<endl;
else cout<<"n不能 <=0"<<endl;
}
do
sum=sum+k*k;
k++;
}while(k<=n);
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-39-
3.4 循环语句
for循环语句
循环结构
1、表达式1 ? 循环变量初始化;
2、表达式2 ? 循环控制条件;
3、表达式3 ? 循环变量的变化;
for (表达式 1; 表达式 2; 表达式 3)
循环体;
例1: 编程循环输出 1-9这 9个数字?
#include <iostream>
using namespace std;
void main()
{
for (int i=1;i<10;i++)
cout<<i<<endl;
cout<<“循环结束 ”<<endl;
}
运行结果 :
1
2
3
4
5
6
7
8
9
循环结束
例 2:编程计算 1+2+3+….+10的值
#include <iostream.>
using namespce std;
void main()
{
int sum=0;
for (int i=1;i<=10;i++)
sum+=i;
cout<<sum<<endl;
}
运行结果: 55
例3
*
**
***
****
*****
******
*******
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
cout<<setfill('*');
}
for(int i=2;i<=8;i++)
cout<<setw(i)<<'\n';
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-43-
3.4 循环语句 ——for语句
1、<表达式1>可以省略
for(int i=1 ; i<=9 ; i++)
循环体;
int i=1;
for( ; i<=9 ; i++)
循环体;
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-44-
3.4 循环语句 ——for语句
2、<表达式2>可以省略
for(int i=1; i<=9; i++)
循环体;
for(int i=1; ; i++)
{
if (i<=9)
循环体;
else
break; //跳转语句,用来跳出循环
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-45-
3.4 循环语句 ——for语句
3、<表达式3>可以省略
for(int i=1; i<=9; i++)
循环体;
for(int i=1; i<=9; )
{
循环体;
i++;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-46-
3.4 循环语句 ——for语句
3、<表达式1> <表达式3>同时省略
for(int i=1; i<=9; i++)
循环体;
int i=1;
for(; i<=9; )
{
循环体;
i++;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-47-
3.4 循环语句 ——for语句
5、极端情况,可实现无限循环
for( ; ; )
{
循环体;
}
例4:判断输出结果?
分析:
i j k
0 10 0
1 9 9
2 8 25
3 7 46
4 6 70
5 5 跳出
#include <iostream>
using namespace std;
void main(){
for(int i=0,j=10,k=0; i<j; i++,j--)
k+=i*j;
cout<<k<<endl;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-49-
3.4 循环语句
1、 for:
最适合循环次数固定,循环规律非常明显程
序。
2、 while:
使用最多最频繁的循环结构,具有普适性。
3、 do_while:
最适合至少循环一次的循环结构。
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-50-
3.4.4 转向语句
1、 break语句
2、 continue语句
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-51-
3.4.4 转向语句 ——break
用途:
常用在 while、 do-while、 for和 switch语句
中,用来跳出循环或 switch语句。
例1:判断输出结果?
#include <iostream>
using namespace std;
void main(){
int sum=0;
for (int i=1;i<10;i++)
{
if (i % 3==0) break;
sum+=i;
}
cout<<sum<<endl;
}
分析
i sum
1 1
2 3
3 跳出
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-53-
3.4.4 转向语句 ——continue
用途
用于循环语句中,结束本次循环,进行下
一次循环;即跳过循环体中尚未执行的部分。
分析
i sum
1 1
2 3
3 3
47
512
612
719
827
927
10 跳出
例1:判断输出结果?
#include <iostream>
using namespace std;
void main(){
int sum=0;
for (int i=1;i<10;i++)
{
if (i % 3==0) continue;
sum+=i;
}
cout<<sum<<endl;
}
3.5 循环嵌套
3.5 循环嵌套
编程输出国际象棋棋盘
#include <iostream>
using namespace std;
void main()
{
for (int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
if ((i+j)%2==0)
cout<<"■ ";
else
cout<<" ";
}
cout<<"\n";
}
}
■■■■
■■■■
■■■■
■■■■
■■■■
■■■■
■■■■
■■■■
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-57-
思考
题目: 使用 For循环输出如下图形:
*
**
***
****
*****
******
*******
#include <iostream>
using namespace std;
void main()
{
for (int i=1;i<=7;i++)
{
for (int j=7; j>i; j--)
cout<<' ';
for (j=1; j<=i; j++)
cout<<'*';
cout<<endl;
}
}
3.6 应用举例
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-60-
3.6 应用举例1
任意输入一个整数,判断是否是素数?
问题:什么是素数?
#include <iostream>
using namespace std;
void main(){
int n,i;
cin>>n;
for (i=2;i<n;i++)
if (n%i==0) break;
if (i<n)
cout<<n<<"不是素数! \n";
else
cout<<n<<"是素数 \n";
}
改进:输出2-100之间的素数
#include <iostream>
#include <cmath>
using namespace std;
void main()
{
for(int k=2;k<100;k++)
{
int n=sqrt(k);
for (int i=2;i<=n;i++)
if (k%i==0) break;
if (i>n)
cout<<k<<'\t';
}
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-63-
3.6 应用举例2
题目
任意输入一个整数,按位翻转输出。例如
输入124,输出421。
#include <iostream>
using namespace std;
void main(){
int i, n, result=0;
cout<<"请输入任意一个整数: ";
cin>>n;
cout<<"按位翻转的结果为: ";
while (n!=0){
i =n % 10;
result=result*10+i;
n /= 10;
}
cout<<result<<endl;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-65-
3.6 应用举例3
题目
一球从100米高度落下,每次落地后反弹回原高度
的一半,再落下。编程求解它在第n次落地时,共经过
多少米?
#include <iostream>
using namespace std;
void main()
{
double height=100;
double sum=height;
for (int i=1;i<10;i++)
{
sum+=height;
height/=2;
}
cout<<sum<<endl;
}
2005-4-27
北京邮电大学电信工程学院计算机技术中心
-67-
3.6 应用举例4
题目
若一头小母牛,从出生起第四个年头开始
每年开始生一头小母牛,按此规律,第n年时
有多少头母牛?
f(1)=1;
f(2)=1;
f(3)=1;
f(n)=f(n-1)+f(n-3);
#include <iostream>
using namespace std;
void main()
{
int n;
long a=1, b=1, c=1, temp;
cout <<"please input a value:\n";
cin >>n;
for(int i=4; i<=n; i++)
{
temp=a+c; a=b; b=c; c=temp;
}
cout << c <<endl;
}
总结
三种基本结构:顺序、选择和循环
流程图和伪码,帮助我们设计算法、完善算
法,增强算法的可读性