C/C++ L3

2018/07/04 C/C++

C/C++程序语言设计 Level3。

MAC

循环结构程序设计

日常生活中或在程序所处理的问题中常常遇到需要重复处理的问题,例如:

  1. 对计算机输入全班50个学生的成绩。
  2. 统计全班50个同学的平均成绩。
  3. 求100个整数的和。
  4. 检查100个学生的成绩是否合格,等等。

顺序结构能够实现这种重复性的工作,但是这种做法不可取,因为工作量大、程序冗长、重复、难以阅读与维护。C语言中使用循环结构来处理重复操作。

用while语句处理循环结构

实例

#include <iostream>
using namespace std;

int main(){
    int i = 1, sum = 0;
    while(i <= 100){
        sum = sum + i;
        i++;
    }
    cout << "sum=" << sum << endl;
    return 0;
}

用do…while语句处理循环结构

实例

#include <iostream>
using namespace std;

int main(){
    int i = 1, sum = 0;
    do{
        sum = sum + i;
        i++;
    }while(i<=100);
    cout << "sum=" << sum << endl;
    return 0;
}

用for语句处理循环结构

除了使用while、do…while语句实现循环之外,C语言还提供for语句实现循环,而且for语句更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句工作。

for语句的格式:

for(循环变量赋予初值;循环条件;循环变量递增){ 循环体 }

实例

#include <iostream>
using namespace std;

int main(){
    int sum = 0;
    for(int i=1;i<=100;i++){
        sum += i;
    }
    cout << "sum=" << sum << endl;
    return 0;
}

循环结构的嵌套

一个循环体内部包含另一个完整的循环体,称为循环结构的嵌套。这就是多重循环,常见的多重循环是二层、三层,四层以及以上的嵌套很少,也不建议使用。

循环结构体的提前终止

正常的循环结构终止是依赖指定的跳出条件。但有的时候在某种特定情况下,我们需要提前终止正在执行的循环操作。循环结构中用break语句以及continue语句来实现。

用break语句终止循环

问题:现在全系1000个学生中,征集慈善募捐,当总数达到10W元时就结束,并统计此时募捐的人数、以及平均每人捐款的数目。

实例

#include <iostream>
#define SUM 100000
using namespace std;

int main(){
    double amount, aver, total=0;
    for(int i=1;i<=1000;i++){
        cout << "请输入捐款的金额:" << endl;
        cin >> amount;
        total = total + amount;
        if(total >= SUM){
            aver = total/i;
            cout << "num=" << i << ",aver=" << aver << endl;
            break;
        }
    }
    return 0;
}

注意,break只能用于循环语句以及switch语句中。

用continue语句终止循环。

continue与break的区别是,continue只是终止1次循环,而break是终止整个循环。

问题:要求输出100-200之间不能被3整除的数。

#include <iostream>
using namespace std;

int main(){
    for(int n=100;n<=200;n++){
        if(n%3==0)
            continue;
        else
            cout << n << " ";
    }
    cout << endl;
    return 0;
}

实例1

#include <iostream>
using namespace std;

int main(){
    for(int i=1;i<=4;i++){
        for(int j=1;j<=5;j++,n++){
            if(n%5==0)
                cout << endl;
            cout << i*j << '\t';
        }
    }
    cout << endl;
    return 0;
}

实例2

求解圆周率的近似公式:

PI = 4*(1-1/3+1/5-1/7+1/9...)

求解PI的近似值,保留小数8位。

#include <iostream>
using namespace std;

int main(){
    int sign = 1;
    double PI = 0.0, term = 1.0;
    int n = 0;

    while(fabs(term)>=1e-6){
        PI += term;
        n += 2;
        sign *= -1;
        term = sign/n;
    }
    PI *= 4;
    cout << "PI=" << PI << endl;
    return 0;
}

实例3

求解斐波那契数列的前40个数,规定f1 = 1,f2 = 1。

#include <iostream>
using namespace std;

int main(){
    int f1 = 1;
    int f2 = 1;
    int f3 = 0;
    cout << f1 << endl << f2 << endl;
    for(int i=1;i<=38;i++){
        f3 = f1 + f2;
        cout << f3 << endl;
        f1 = f2;
        f2 = f3;
    }
    return 0;
}

习题

求解xn = sum(n!)。

例如x10 = 1! + 2! + 3! + … + 10!。

Search

    Table of Contents