第三章 C++程序的流程控制
3.1 流程控制与程序结构(P51)
顺序结构:按先后顺序执行。
条件分支结构:由条件决定执行哪个语句(if switch)。
循环结构:由条件决定语句重复执行次数。
可分为先判断后执行和先执行后判断。
(while for do…while)
3.2 条件分支结构
3.2.1 if 语句
1. 单分支(P53)
形式:if(表达式) 语句;
功能:表达式值非0,则执行子语句.
流程图:
例如: ......
if(a>0)
cout<<"该数大于0";
......
2.双分支(P53)
形式:if(表达式) 语句1;
else
语句2;
功能:表达式值非0,则执行子语句1,
表达式值为0,则执行子语句2.
流程图:
例如:把大数赋值给m
......
if(a>b)
m=a;
else
m=b;
......
3.2.2 if语句的嵌套(P54)
例如:大数赋值z
n<=0 n>0 z=a
z=b
————+———+———+———>
0
b a
if(n>0)
if(a>b) z=a;
else z=b;
else与最近的if配对。
If语句嵌套应该放在else后面。(P54)
例如:
z=b n<=0 n>0 z=a
z=b n<=0 n>0 z=a
—————+———+———+———>
0
b a
if(n>0)
{if(a>b) z=a;}
else z=b;
改写为
if(n<=0)
z=b;
else
if(a>b) z=a;
例3.1 找2个数中的大数(P55)
if(I>=j)
cout<<I<<endl;
else
cout<<j<<endl;
例3.2 找3个数中的大数(P55)
if(I>=j){
if(I>=k)
cout<<I<<endl; //大到小ijk
else
cout<<k<<endl; //大到小kij
}
else{
if(j>=k)
cout<<j<<endl; //大到小jik
else
cout<<k<<endl; //大到小kji
}
例3.4 3个数排序(P58)
中间变量 |
P |
||
变量名 |
I |
J |
K |
数值 |
22 |
33 |
44 |
排序1 |
33 |
22 |
44 |
排序2 |
44 |
22 |
33 |
排序3 |
44 |
33 |
22 |
排序结果 |
大 |
中 |
小 |
If(I<j){p=I;I=j;j=p;}
If(I<k){p=I;I=k;k=p;}
If(j<k){p=j;j=k;k=p;}
3.2.3 if 多分支结构(P61)
if(条件1) 语句1;
else if(条件2) 语句2;
else if(条件3) 语句3;
3.2.4 switch语句(P62)
形式:switch(表达式)
{
case 常量表达式1: 语句1; break;
case 常量表达式2: 语句2; break;
......
case 常量表达式n: 语句n; break;
default: 语句; break;
}
功能:由表达式值控制转向相应情况常量后的语句.
流程图:
例:3.7 数字星期
switch(weekday){
case 0: cout<<"Sunday"<<endl;break;
3.3 循环结构
1. for 循环(P67)
形式:for(初值;终值;增量)
循环体语句;
功能:小于终值,则执行循环语句.
流程图:
例:for(int I=0;I<100;I++=5)cout<<I<<' ';
例3.11 显示输出99乘法表
i j |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
2 |
2 |
4 |
6 |
8 |
10 |
12 |
14 |
16 |
18 |
For(I=1;I<10;I++){
For(int j=1;j<10;j++)cout<<setw(3)<<I*j;
}
3.3.2 while 循环(P71)
形式:while(表达式)
语句;
功能:先判断表达式值,非0则执行循环语句.
流程图:
例 3.12 求1/2+3/4+5/8+7/16+9/32……
递推公式:(Ni+2)/2di
while((s0=double(n)/d)>=0.000001){
s+=s0;
n+=2;
d+=d;
}
3.3.3 do-while 循环(P75)
形式:do 语句;
while(表达式);
功能:先执行循环语句,直到表达式值为0,才结束循环.
流程图:
例3.15 求一元二次方程的根。
#include<math.h>
……
do cin>>A>>B>>C;
while(A!=0.0);
double Delta=B*B-4*A*C;
if(Delta<0.0)
cout<<"无实根!”;
3.3.4 break和continue的使用(P77)
while(true){
cin>>radius;
if(radius==0.0) break;
if(radius<0.0) {
continue;
}
area=Area(radius);
}
1. break 语句(P76)
形式:break;
功能:终止循环、跳出switch语句.
2. continue 语句(P76)
形式:contineu;
功能:跳过continue后的语句,重新开始循环.
3.4 其他流程控制
3.4.1 goto 语句(P79)
形式:goto 语句标号;
功能:无条件转向标号语句.
例
for(n=1;;n++)
{
if(n>100) goto end;
}
end:; //标号语句
3.4.2 return 语句
1. 函数定义(P79)
形式:类型 函数名(形式参数表)
{
函数体;
}
例如: void subf( void )
无返回 函数名 参数为空 无分号
2. 函数调用(P79)
形式:函数名(实际参数表);
例如 add( a,b );
函数名 参数名 有分号
3. 返回语句(P79)
形式:return(表达式);
功能:函数返回一个值,即函数值.
无返回值的函数,return后无表达式。
习题三(P85)题 311 312
实验三 条件分支程序设计(P33)
第四章 数组
4.1一维数组
4.1.1一维数组的定义和初始化(P86)
1.数组格式:类型 数组名[元素个数];
例如:int d[ ]={1,2,3,4,5,6};
2.数组元素的引用:下标访问操作符[ ](P87)
形式:数组名[下标];
例如:k=num[4];
3.数组的机内存储(P88)
按行逐一元素逐行存储.
例4.1 反显输入数
……
int data[8];
for(I=0;I<8;I++)cin>>data[I]; //正方向扫描
……
for(I=7;I>=0;I--)cout<<data[I];<<’’; //反方向扫描
例4.3 升序排数 SXPS.CPP(P90)
数组 |
Data |
Data |
Data |
Data |
Data |
Data |
Data |
Data |
Data |
Data |
元素 |
12 |
23 |
9 |
34 |
45 |
7 |
78 |
-33 |
59 |
3 |
元素 |
Data |
Data |
|
|||||||
I=1 |
-33 |
23 |
9 |
34 |
45 |
7 |
78 |
12 |
59 |
3 |
I=2 |
|
3 |
23 |
|||||||
I=3 |
|
|
7 |
|||||||
I=4 |
|
|
|
|||||||
结果 |
-33 |
3 |
7 |
9 |
12 |
23 |
34 |
45 |
59 |
78 |
For(m=0;m<SIZE;m++){
Int j=m; //j 最小位置,data[m]最小元素
For(int I=m+1;I<SIZE;I++)
If(data[I]<data[j])j=I; //挑选
If(j>m){ //排序
Int k=data[m];
Data[m]=data[I];
Data[j]=k;
4.2 多维数组
4.2.1 二维数组的定义和初始化(P94)
例如:float d[4][5]; //4行5列
定义数组时对数组元素列表初始化(赋初值).
例如:int num[ ][3]={1,3,5},{0},{2,4,6};
4.2.2 二维数组应用举例(P96)
例4.5 整数矩阵5*5
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
4.3 字符数组与字符串(P100)
定义:char s[ ];
赋值:字符 char s1[ ]={'A','B','C'};
字符串 char s2[ ]="A String";
* 字符串(数组)的输入(P)
重载运算符>>:同运算符装载单字符或重新装载字符串.
例如:char str[5];
cin>>str[0]; //装载单字符
cin>>str; //同运算符重新装载字符串
标准库函数gets:装载字符串
* 字符串(数组)的输出(P)
重载运算符<<:同运算符输出单字符或重新输出字符串.
例如:char str[]="ABCDE";
cout<<str[3]; //输出单字符
cout>>str; //同运算符重新输出字符串
标准库函数puts:输出字符串
4.3.3 字符串的主要操作(P101)
字符串测长度:strlen(字符串)
字符串复制:strcpy
字符串连接:strcat
字符串比较:strcmp
字符串输出:cout<<字符串
字符串输入:cin>>字符串变量
字符串大写转小写 strlwr
字符串小写转大写 strupr
自测题(P105)
4.3-2 char s1[10]="abcdef",s2[20]="inter";
// s1:abcdef+4, s2:inter+15
cin>>s1; //s1:net
int k=0,j=0;
while(s2[k])k++; //k:01234,4+1
while(s2[k++]=s1[j++]); //k:567,j:012,s2:inter+net