C++过程控制——for循环(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangqimo/article/details/86760634

今天是2019.2.3

就当是立一个flag,从今天开始,每天发一篇c++的学习博客

今天的是过程控制

当前的学习内容均来自钱能先生的《C++程序设计教程详解——过程化编程》

一、 首先是简单的for循环

1.1 for循环结构

1.1.1 循环结构

一般循环结构

一个循环结构处理的过程,总是包含了循环结构结束条件的判断操作以及判断回跳。它或者先进行条件判断,以决定是进入循环体工作还是退出循环体;或者先进行循环体工作,然后再判断是继续循环体工作还是结束循环体。

这种循环体可以描述一项不断重复的工作。

循环结构的特点是通过回跳操作来指示后续的工作乃是重复过去的处理;通过条件判断的分流来控制继续重复工作或是结束。

整体性理解

循环处理过程是一个结构整体,它可以看做一项单一的工作。从结构上看,它只有唯一的入口和出口,所以循环作为一个整体,可以是一个矩形处理框,或者属于矩形处理框中若干计算处理的一部分。

不定形循环结构

不定形式的循环是指循环结束判断既不在重复执行语句集合的头上,也不在语句集合的尾巴上,而是在重复执行语句集合的中间。将条件判断之前执行的语句集中为A语句块,将条件判断之后执行的语句集中为B语句块。

1.1.2 for循环语句

循环形式

循环处理过程可以用编程语言的多种编程语句来实现。循环语句可以将计算机定义成反复从事相同工作的状态。for语句是c++编程中典型的循环语句。

一个for语句的描述,包括由小括号括起来的部分(循环控制部分)和花括号括起来的部分(循环体)。小括号的内容又由两个分号隔开成三部分:循环初始状态、条件判断与状态修正。

代码形式为:

for(循环初始状态;条件判断;状态修正)    //小括号中的由分号隔开的三部分描述
{                                   //一对花括号将循环体括住
    //循环体
}

循环描述

小括号只能怪的三部分用来描述循环的控制方式。

循环初始状态:为一次性执行语句。一般定义循环变量或循环中使用的临时变量,并赋给其初始值。

条件判断:描述条件值的表达式,其值非真即假。每次循环体执行之前,都必须进行该表达式的条件判断。

状态修正:描述执行计算的语句。每次循环体执行之后,都首先执行该表达式,对状态进行调整,然后再去进行条件判断。所以,它一般是对循环条件进行修正的赋值语句。

循环执行流程

for语句的循环结构,先进行条件判断,后进行循环体计算。

for循环首先执行“循环初始状态”的语句,然后执行“条件判断”。如果为真,则执行循环体,否则退出循环。

如果执行了循环体,则后面便会执行“状态修正”,之后就要进行新一轮的“条件判断”,以决定是执行循环体呢还是退出循环。

也就是按下列执行顺序:

初始状态过程→条件循环(真)→循环体→状态修正→……→条件判断(假)→循环体→状态修正→条件判断(假)→结束循环

循环初始状态,条件循环和状态修正的描述方法有很多,相应的描述语句种类也很多,所以for循环有许多的表现形式。

1.2 次数控制方式

1.2.1 问题——一个@字符矩阵(1163)

基本描述

根据读入的n值,输出以@为填充字符,高为n的字符矩形。

输入描述

输入为一个正整数n(1≤n≤50)。

输出描述

输出以@为填充字符,宽为10,高为n的字符矩形。

样本输入

5

样本输出

@@@@@@@@@@

@@@@@@@@@@

@@@@@@@@@@

@@@@@@@@@@

@@@@@@@@@@

1.2.2 分析设计

普通解决方案

for循环设计比较容易描述以次数控制的循环,其设计也比较容易理解。

本问题在描述一个代码框架之后,先定义一个整型变量n,然后输入其值。接下来就是一个按n值进行次数控制的循环了。

循环体的设计就是输出一行10个@字符,让循环一共去执行n次循环体,就能输出n行@字符。n次执行的循环,即建立一个循环变量,让其从1变化到n终止。

其具体代码如下:

//一个@字符矩阵
//----------------------
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;//获取循环次数
    for(int i = 1;i <= n;i ++)
    {
        cout <<"@@@@@@@@@@\n";
    } 
}

for循环中的循环变量,不是非得取名为i,许多时候是一种习惯,似乎i,j,k,n,m之类的名字简单而常用,而且它们与整数的计数或个数概念特别容易对应。

另一种设计角度

for循环中的循环初始状态,也并非一定要定义一个循环变量,循环变量可以早在for循环之前先行定义和初始化。例如,一种同样合理的代码为:

#include<iostream>
using namespace std;
int main()
{
    int n, i = 1;
    for (cin >> n;i <= n;i = i+1)
        cout<<"@@@@@@@@@@\n";
}

该代码将n和i这两个同类型的变量放在同一条语句中定义,其中i变量给予了初始化。

而在for循环中的循环初始状态部分中,却意外的看到一条输入一个整数给n的语句,循环初始状态下的语句可以说是一次性执行的任何语句。只要把握整体语句的执行顺序和代码的可理解性,则没有什么语句会觉得不可思议。

for循环语句的循环体因为仅含一条语句,而省略了包裹它的花括号。

次数控制的关键是要在循环的次数控制中列出上、下界。本代码中,上界是n,下界是1,增幅也是1。

猜你喜欢

转载自blog.csdn.net/zhangqimo/article/details/86760634