2009-7-29 -1-
C++大学基础教程第 3章 过程化语句
2009-7-29 -2-
用计算机解决实际问题,首先要分析问题,设计合适的算法,然后编程实现算法。
2009-7-29 -3-
第 3章 过程化语句
3.1 算法的基本控制结构
3.2 if选择语句
3.3 switch选择语句
3.4 循环语句
3.5 循环嵌套
3.6 应用举例
2009-7-29 -4-
3.1 算法的基本控制结构
2009-7-29 -5-
3.1 算法的基本控制结构算法
1、计算机执行的操作
2、这些操作的顺序伪码采用类似计算机语言的分句格式,以自然语言描述算法。
2009-7-29 -6-
3.1 算法的基本控制结构流程图开始 /结束 执行 判断 联系
2009-7-29 -7-
3.1 算法的基本控制结构程序的三种基本控制结构
( 1)顺序结构
( 2)选择结构
( 3)循环结构
2009-7-29 -8-
3.1 算法的基本控制结构流程控制语句选择语句,if..else,switch
循环语句,while,for,do..while
转向语句,break,continue
2009-7-29 -9-
3.2 if选择语句
2009-7-29 -10-
3.2 if选择语句
if_else
1,没有 else分支
2,双分支
3,多分支
4,if 语句的嵌套
2009-7-29 -11-
3.2 if选择语句
1、没有 else分支例如:比较 x和 y的大小,如果 x大则输出 x的值
if (表达式 )
语句;
if ( x>y )
cout<<x<<endl;
2009-7-29 -12-
3.2 if选择语句
2、双分支例如:比较 x,y的大小,将较大的数输出
if (表达式 )
语句 1;
else
语句 2;
if ( x>y )
cout<<x<<endl;
else
cout<<y<<endl;
2009-7-29 -13-
例子任意输入一个 4位整数的年份,判断该年是否是润年?
是指年份能被 4整除的那些年,但不包括能被 100整除而不能被 400整除的年
2009-7-29 -14-
#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;
}
2009-7-29 -15-
3.2 if选择语句
3、多分支 if (表达式 1)
语句 1;
else if (表达式 2)
语句 2;
else if (表达式 3)
语句 3;

else
语句 n;
2009-7-29 -16-
2009-7-29 -17-
例子:输出学生的成绩
#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;
}
2009-7-29 -18-
3.2 if选择语句
4,if 语句的嵌套 if (表达式 1)
if (表达式 2)
语句 1
else
语句 2
else
if (表达式 3)
语句 3
else
语句 4
2009-7-29 -19-
2009-7-29 -20-
例子:输出 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 ) );
2009-7-29 -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匹配。
{
}
2009-7-29 -22-
3.3 switch选择语句
2009-7-29 -23-
3.3 switch选择语句
switch (表达式 )
{
case 常量表达式 1:
语句 1
break;
case 常量表达式 2:
语句 2
break;

case 常量表达式 n:
语句 n
break;
default,语句 n+1
}
跳出 switch语句
2009-7-29 -24-
2009-7-29 -25-
例子:输出学生的成绩
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;
}
2009-7-29 -26-
3.4 循环 语句
2009-7-29 -27-
3.4 循环语句三种基本语法
1,while 语句
2,do…while 语句
3,for 语句
2009-7-29 -28-
#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';
}
*
**
***
****
*****
******
*******
2009-7-29 -29-
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
int i=2;
cout<<setfill('*');
while(i<=8)
{
cout<<setw(i)<<'\n';
i++;
}
}
*
**
***
****
*****
******
*******
循环变量循环体循环控制条件
2009-7-29 -30-
3.4 循环语句主要包括 3个部分:
1,循环控制条件:
判断循环操作是否进行的条件;
2,循环体:
重复进行的操作;
3,循环控制变量:
记录循环体执行的次数,或控制循环的结束条件。
2009-7-29 -31-
3.4 循环语句
while循环语句
while(表达式)
循环体语句;
2009-7-29 -32-
例 1:编程循环输出 1-9这 9个数字?
#include <iostream>
using namespace std;
void main()
{
int i=1;
while (i<10)
{
cout<<i<<endl;
i++;
}
cout<<“循环结束” <<endl;
}
运行结果,
1
2
3
4
5
6
7
8
9
循环结束
2009-7-29 -33-
例 2:编程计算 1+2+3+….+10的值
#include <iostream>
using namespace std;
void main()
{
int sum=0,i=1;
while(i<=10)
{
sum+=i;
i++;
}
cout<<sum<<endl;
}
55
2009-7-29 -34-
例 3:打印 ASCII码表中的可视字符
#include<iostream>
using namespace std;
void main()
{
unsigned char ch=32;
while(ch<128)
{
cout<<(int)ch<<'\t'<<ch<<'\t';
ch++;
}
}
2009-7-29 -35-
例 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;
}
2009-7-29 -36-
3.4 循环语句
do..while循环语句
do
{
循环体语句;
} while(表达式 );
2009-7-29 -37-
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int i=2;
cout<<setfill('*');
while(i<=8)
{
cout<<setw(i)<<'\n';
i++;
}
}
*
**
***
****
*****
******
*******
do
{
cout<<set (i)<<'\n';
i++;
} while(i<=8);
2009-7-29 -38-
例子:编程计算 的值
#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);
2009-7-29 -39-
3.4 循环语句
for循环语句循环结构
1、表达式 1? 循环变量初始化 ;
2、表达式 2? 循环控制条件;
3、表达式 3? 循环变量的变化 ;
for (表达式 1; 表达式 2; 表达式 3)
循环体;
2009-7-29 -40-
例 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
循环结束
2009-7-29 -41-
例 2:编程计算 1+2+3+….+ 10的值
#include <iostream>
using namespace std;
void main()
{
int sum=0;
for (int i=1;i<=10;i++)
sum+=i;
cout<<sum<<endl;
}
运行结果,55
2009-7-29 -42-
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
cout<<setfill('*');
}
*
**
***
****
*****
******
*******
例 3
for(int i=2;i<=8;i++)
cout<<setw(i)<<'\n';
2009-7-29 -43-
3.4 循环语句 ——for语句
1,<表达式 1>可以省略
for(int i=1 ; i<=9 ; i++)
循环体;
int i=1;
for( ; i<=9 ; i++)
循环体;
2009-7-29 -44-
3.4 循环语句 ——for语句
2,<表达式 2>可以省略
for(int i=1; i<=9; i++)
循环体;
for(int i=1; ; i++)
{
if (i<=9)
循环体;
else
break; //跳转语句,用来跳出循环
}
2009-7-29 -45-
3.4 循环语句 ——for语句
3,<表达式 3>可以省略
for(int i=1; i<=9; i++)
循环体;
for(int i=1; i<=9; )
{
循环体;
i++;
}
2009-7-29 -46-
3.4 循环语句 ——for语句
3,<表达式 1> <表达式 3>同时省略
for(int i=1; i<=9; i++)
循环体;
int i=1;
for(; i<=9; )
{
循环体;
i++;
}
2009-7-29 -47-
3.4 循环语句 ——for语句
5、极端情况,可实现无限循环
for( ; ; )
{
循环体;
}
2009-7-29 -48-
例 4:判断输出结果?
#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;
}
分析:
i j k
0 10 0
1 9 9
2 8 25
3 7 46
4 6 70
5 5 跳出
2009-7-29 -49-
3.4 循环语句
1,for:
最适合循环次数固定,循环规律非常明显程序。
2,while:
使用最多最频繁的循环结构,具有普适性。
3,do_while:
最适合至少循环一次的循环结构。
2009-7-29 -50-
3.4.4 转向语句
1,break语句
2,continue语句
2009-7-29 -51-
3.4.4 转向语句 ——break
用途:
常用在 while,do-while,for和 switch语句中,用来跳出循环或 switch语句。
2009-7-29 -52-
例 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 跳出
2009-7-29 -53-
3.4.4 转向语句 ——continue
用途用于循环语句中,结束本次循环,进行下一次循环;即跳过循环体中尚未执行的部分。
2009-7-29 -54-
例 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;
}
分析
i sum
1 1
2 3
3 3
4 7
5 12
6 12
7 19
8 27
9 27
10 跳出
2009-7-29 -55-
3.5 循环 嵌套
2009-7-29 -56-
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";
}
}
■ ■ ■ ■■ ■ ■ ■
■ ■ ■ ■■ ■ ■ ■
■ ■ ■ ■■ ■ ■ ■
■ ■ ■ ■■ ■ ■ ■
2009-7-29 -57-
思考题目,使用 For循环输出如下图形:
*
**
***
****
*****
******
*******
2009-7-29 -58-
#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;
}
}
2009-7-29 -59-
3.6 应用举例
2009-7-29 -60-
3.6 应用举例 1
任意输入一个整数,判断是否是素数?
问题:什么是素数?
2009-7-29 -61-
#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";
}
2009-7-29 -62-
改进:输出 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';
}
}
2009-7-29 -63-
3.6 应用举例 2
题目任意输入一个整数,按位翻转输出。例如输入 124,输出 421。
2009-7-29 -64-
#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;
}
2009-7-29 -65-
3.6 应用举例 3
题目一球从 100米高度落下,每次落地后反弹回原高度的一半,再落下。编程求解它在第 n次落地时,共经过多少米?
2009-7-29 -66-
#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;
}
2009-7-29 -67-
3.6 应用举例 4
题目若一头小母牛,从出生起第四个年头开始每年开始生一头小母牛,按此规律,第 n年时有多少头母牛?
f(1)=1;
f(2)=1;
f(3)=1;
f(n)=f(n-1)+f(n-3);
2009-7-29 -68-
#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;
}
2009-7-29 -69-
总结三种基本结构:顺序,选择和循环流程图和伪码,帮助我们设计算法,完善算法,
增强算法的可读性