运算的流程控制
程序流程控制
结构化程序设计
- 目标:设计出结构清晰、可读性强、易于分工合作编写和调试的程序。
- 步骤:
- 自顶向下分析:把复杂问题分解成若干小问题以后再解决
- 模块化设计:将程序划分为若干个模块,每个模块独立存放、完成一个特定功能。
- 结构化编码:使用基本控制结构控制程序的执行流程。
模块
- 模块组成:可以是一条语句、一段程序、一个函数等。
- 模块特征:仅有一个入口和一个出口。
- 模块间关系:相互独立,内聚性很强。
示例图:
基本控制结构
- 顺序结构:
- 选择结构:
- 循环结构:
控制结构语句
- 流程控制语句:
- 选择
a.if--else
(条件分支)
b.switch--case
(开关分支) - 循环
a.while
b.for
c.do-while
- 选择
- 辅助控制语句:
break
continue
goto
return
单路和双路分支
语句格式
单路分支
if(表达式)
语句顺序
双路分支
if(表达式)
语句顺序1
else
语句顺序2
分支嵌套
多路分支
语句格式
switch(表达式){
case 常量表达式1:
语句序列1;
......
case 常量表达式2:
语句序列2;
......
default:
语句序列n+1;
}
例如:
#include<iostream>
using namespace std;
int main(){
int old_grade,new_grade;
cin>>old_grade;
switch(old_grade/10){
case 10:new_grade=5;
break;
case 9:new_grade=5;
break;
case 8:new_grade=4;
break;
case 7:new_grade=3;
break;
case 6:new_grade=2;
break;
default:new_grade=1;
}
cout<<new_grade;
return 0;
}
已知次数循环
语句格式:
for(表达式1;表达式2;表达式3){
执行语句
}
打印输出乘法表:
#include<iostream>
using namespace std;
int main(){
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++){
cout<<j<<"*"<<i<<"="<<i*j<<"\t";
}
cout<<endl;
}
return 0;
}
已知条件循环
格式1:
while(表达式){
语句顺序
}
格式2:
do{
语句顺序
}while(表达式)
注意:
break
能够跳出所在位置最近的一层循环
continue
能够跳过后续语句,开始新一轮循环
实例
解一元二次方程
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double a,b,c; //定义变量保存系数
double delta; //表示根的判别式
double x,x1,x2; //表示根
cout<<"请输入一元二次方程的三个系数a,b,c: ";
cin>>a>>b>>c;
if(a==0){
if(b==0){
cout<<"输入的系数不构成方程"<<endl;
}
else{
x=-c/b;
cout<<"实际为一元一次方程,根为 "<<x<<endl;
}
}
else{
delta=b*b-4.0*a*c;
if(delta>=0){
delta=sqrt(delta);
x1=(-b+delta)/2.0/a;
x2=(-b-delta)/2.0/a;
cout<<"方程有实根,他们是 "<<endl;
cout<<"x1 = "<<x1<<" ,x2 = "<<x2<<endl;
}
else{
delta=sqrt(-delta);
x1=-b/2.0/a;
x2=delta/2.0/a;
cout<<"方程有复根,他们是 "<<endl;
cout<<"x1 = "<<x1<<" ,x2 = "<<x2<<endl;
}
}
return 0;
}
简单计算器
#include<iostream>
#include<cmath>
using namespace std;
int main(){
char op;
double num1,num2;
double result;
char caption1[20]="除数不能为0";
char caption2[20]="非法的运算符";
cout<<"请输入";
cin>>num1>>op>>num2;
switch(op){
case '+':
result=num1+num2;
cout<<num1<<op<<num2<<"="<<result;
break;
case '-':
result=num1-num2;
cout<<num1<<op<<num2<<"="<<result;
break;
case '*':
result=num1*num2;
cout<<num1<<op<<num2<<"="<<result;
break;
case '/':
if(fabs(num2)<1.0e-8){ //fas() 求绝对值函数
cout<<caption1<<endl;
} //除数为0
else{
result=num1/num2;
cout<<num1<<op<<num2<<"="<<result;
}
break;
default:
cout<<caption2<<endl;
}
return 0;
}
寻找自幂数
#include <iostream>
#include <cmath>
int main()
{
using namespace std;
int n; //表示数的位数
int start, end; //表示n位数的起始值和终止值
int m;//待分解各位的数,即待判断的数
int digit;//某个数位的值
int sum; //各位数的n次方的和
int i; //循环变量,待检测的数
cout << "求n位自幂数,请输入位数:\n";
cin >> n;
while (n>0)
{
start = pow(10, n - 1); //n位数的起始值
end = pow(10, n) - 1;//n位数的终止值
cout << n << " 位自幂数:";
for (i = start; i <= end; i++)
{
m = i; //检测过程中m的值会改变,而i的值不变
sum = 0;//检测前赋值0
while (m != 0) //m开始为待检测的数
{ //分离各位数字
digit = m % 10;//取最低位数
sum += pow(digit, n);
m = m / 10;//去掉个位,刚才的十位成为新的各位
}
//上面的循环结束时sum就是各位数字的n次方的和
if (sum == i) //逻辑表达式的值为true时,表示的是自幂数
{
cout << i << " "; //显示该数
}
}
cout << endl;
cout << "求n位自幂数,请输入位数:\n";//再输入一个n表示位数
cin >> n;
} //while循环
cout << endl;
return 0;
}
重要技巧
程序调试方法--加输出语句
程序调试方法--单步跟踪
Comments | NOTHING