过程控制——for循环(二)

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

没想到第二篇c++的学习blog居然在7天之后,也就是几天哈哈哈。真是被自己的拖延症折服。

进入正题。几天学习的是for循环的第二部分,输入控制方式。

1. 问题——正方形面积

基本描述

根据读入的正整数值,输出其正方形的面积数。

输入描述

输入数据含有一些正整数(1≤n≤10000),每个正整数之间以空格隔开。

输出描述

输出以每个正整数为边长的正方形的面积,每个面积占一行。

样本输入

1 3  5 7

样本输出

1

9

25

49

2.分析设计

循环的输入控制

for 语句的循环体是否将被执行,是以条件判断的真假来决定的。前面我们看到的次数控制循环,是将循环变量先设定为1,然后用关系不等式来判断循环变量是否超过上界,以此来控制循环。

本问题需要读入一些数据,边读边处理,等到数据读完,处理也就结束了。这时候,希望以读入数据成功与否来控制循环。

for循环有多种控制方式,根据读入数据的成功与否来控制循环是其一种方式。

因为读入的数据个数不确定,所以不能用预先设定的表达式来控制循环执行的次数。c++中的流输入操作被设定为一个表达式,该表达式在读入数据操作失败时会表现为假值,否则表现为真值。这个特征正好可以拿来作为for循环的条件判断,从而控制循环。

每次执行输入时,能够判断其操作的成功与否,以决定循环是否继续,是求之不得的简单操作。

这样可以得到以下的代码:

#include<iostream>
using namespace std;
int main()
{
    for (int a ;cin>>a)
        cout<<a*a<<"\n";
}

输入控制方式说明

代码中的for语句在描述循环控制时,只列出了前两个部分,第三部分却省略掉了。循环控制由分号隔开成三个部分,这是语言的语法要求。也就是说,循环控制描述中必须使用这两个分号,少一个或多一个都不行,也不能用逗号代替。但是,这三部分的任何部分描述却是可以省略的。就像这里的for循环,既然不是用逗号代替。但是,这三部分的如何部分描述却是可以省略的。就像这里的for循环,既然不是次数控制型循环,第三部分描述没有必要,就干脆省略。因为每次条件判断的真假性取决于当时输入操作的状态,而不是通过修改循环变量去影响条件判断的关系不等式。

条件判断中用到了输入语句,输入数据到变量a中,所以变量a必须先于输入语句而定义。这就是将定义变量a的语句放在循环初始状态部分中的原因。

输入语句“cin>>a;”用作条件判断,是一举两得。它既作为输入操作而使变量a获得一个新的总数量,又作为条件判断控制循环继续下去或是终止。每次循环体的运行之前,新的整数,条件判断便判为假,循环将推出,循环体也不会得到执行。

问题与求解模式总是以输入数据为开始,结束读数为终止,所以以输入结束作为循环控制方式被当做普通的循环控制手段使用。

需要注意的是:在c++环境中调试运行,每次从键盘输入数据,都会在结果窗口看到一个结果,并且运行中的程序处于等待输入状态,需要按下ctrl+Z并换行,以指示本次运行之后再无输入数据。这一指示是让执行中处于等待的“cin>>a;”得到输入数据结束的回应,从而终止循环,最终使程序结束。

循环体中的输入语句“cout<<a*a<<"\n”“;”涉及两个不同类型数据的输入,一个为整型数,一个为字串。每个不同类型的数据输入都需要一个独立的流操作,所以这里就分成两个“<<”操作。它不能写成"cout<<"a*a\n";",如果这样写的话,就没有整型数的计算和输出了,有的只是一个"a*a\n"字串的输出。

好了,到目前为止,for循环的一些基本语法和注意点之类就学习完了,下一篇是分支语言——if和switch。

猜你喜欢

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