计算机程序设计C++ 第三周笔记

发布于 2020-02-29  225 次阅读


运算的流程控制

程序流程控制

结构化程序设计

  • 目标:设计出结构清晰、可读性强、易于分工合作编写和调试的程序。
  • 步骤:
    1. 自顶向下分析:把复杂问题分解成若干小问题以后再解决
    2. 模块化设计:将程序划分为若干个模块,每个模块独立存放、完成一个特定功能。
    3. 结构化编码:使用基本控制结构控制程序的执行流程。

模块

  • 模块组成:可以是一条语句、一段程序、一个函数等。
  • 模块特征:仅有一个入口和一个出口。
  • 模块间关系:相互独立,内聚性很强。
    示例图:
    模块

基本控制结构

  • 顺序结构:
    顺序结构
  • 选择结构:
    选择结构
  • 循环结构:
    循环结构

控制结构语句

  • 流程控制语句:
    1. 选择
      a. if--else(条件分支)
      b. switch--case(开关分支)
    2. 循环
      a. while
      b. for
      c. do-while
  • 辅助控制语句:
    1. break
    2. continue
    3. goto
    4. 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;
}

重要技巧

程序调试方法--加输出语句
程序调试方法--单步跟踪


我们都要做生活的高手。