C语言日记 12 循环结构程序设计(while,do...while...,for语句)

C++语言提供了多种循环语句,可以组成不同形式的循环结构。

(1)while

(2)do...while

(3)for

另外,if语句和goto语句也可以构成循环结构。

goto语句:一种无条件转移语句。

书P47,例 3-13:

用goto 语句和if语句构成循环,求∑1~100,源程序:

#include <iostream>
using namespace std;
int main()
{
    int i, sum = 0;
    i = 1;
loop:if (i <= 100)
{
    sum = sum + i;
    i++;
    goto loop;
}
    cout << i << endl;
    cout << sum << endl;

}

结果:

861e3a24bffa4de887053b1d6e058b74.png

归纳整理得,该程序整体处理执行流程流程图如下:

e2a39179c34e48ea86d300b15ee084a7.png

输入中遇到的问题:

#include <iostream>
using namespace std;
int main()
{
    int i, sum = 0;
    i = 1;
loop:if (i <= 100)
{
    sum = sum + i;
    i++;
    goto loop;
    cout << i << endl;
    cout << sum << endl;
}
}

“}”放错位置,结果导致:

0e38f3c151e94dacaf6d1428bacabb43.png

在这里,实际上程序到goto loop永远会跳到前面的loop语句中

也就是说后面的语句  cout << i << endl;   cout << sum << endl;永远不会被执行,

哪怕程序所有执行完毕,i等于101。   cout << i << endl;    cout << sum << endl;

这两个语句永远都不会执行一次。

所以永远没有输出。

书P48,例 3-14:

用while语句求∑1~100

设计该程序时的设计思路

1.输出循环最后一次务必要让i等于100(sum的累加之中带入的最后的i必须等于100)

2.要考虑到无论where语句成不成立,语句至少要执行一次,也就是说至少要有一个输出。

源程序:

#include <iostream>
using namespace std;
void main()
{
    int i, sum = 0;
    i = 1;
    //注意:这里,虽然sum是变量
    //但是依然要(对sum)赋初值

    while (i <= 100)
    {
        sum = sum + i;
        i++;
    }
    cout << sum << endl;
}

这里输入99时,sum=∑1~99,i(OUT)=100,继续循环。输入100时,sum=∑1~100

i(OUT)=101,结束循环。所以i(OUT)=101。

我们在此基础上举一反三,同时输出i:

一:

#include <iostream>
using namespace std;
void main()
{
    int i, sum = 0;
    i = 1;
    while (i <= 100)
    {
        sum = sum + i;
        i++; 
    }
    cout << i << endl
        << sum << endl;
}
4bbe5218d0214a9bb8ffe15527ac8ce2.png

 二:(结果同"一"一样,下面不再赘述)

#include <iostream>
using namespace std;
void main()
{
    int i, sum = 0;
    i = 1;
    while (i <= 100)
    {
        sum = sum + i;
        ++i; 
    }
    cout << i << endl
        << sum << endl;
}
三:

#include <iostream>
using namespace std;
void main()
{
    int i, sum = 0;
    i = 1;
    while (i <= 100)
    {
        ++i;
        sum = sum + i;

    }
    cout <<i<<endl
        << sum << endl;
}

结果就和上面的不同了:

beae304f7f92419d93cb53e07e6ecfe2.png

四:(结果同"三"一样,下面不再赘述)

#include <iostream>
using namespace std;
void main()
{
    int i, sum = 0;
    i = 1;
    while (i <= 100)
    {
        i++;
        sum = sum + i;

    }
    cout <<i<<endl
        << sum << endl;
}

为什么?

根据上述结果,我们可以根据结果绘制表格如下: 

        sum = sum + i;
        i++; 
        sum = sum + i;
        ++i; 

101

5050

       ++i;
        sum = sum + i;
        i++;
        sum = sum + i;

101

5150

为什么?

答案其实很简单:因为

自增运算符只在单个语句内有效自增运算的功能单位为单个语句。

具体表现形式为:用分号隔开

详细具体解释说明见:自增运算符附加说明_宇 -Yu的博客-CSDN博客 例2。

书P48,例 3-15:分析以下程序的运行结果:

#include <iostream>
using namespace std;
void main()
{
    int a = 0, n;
    cout << "input n:  ";
    cin>>n;
        while 
            (n--)//即(n--)>=0就运行(执行)
            cout << (a++ * 2) << "\t";
}

具体运行流程如下:

4d6f26753d224ccfaa0a98a82e424571.png

书P49 例 3-16:用do...while语句求∑100

#include <iostream>
using namespace std;
void main()
{
    int i, sum = 0;
    i = 1;
    do
    {
        sum = sum + i;
        i++;
    } while (i <= 100);
    cout << sum << endl;
}

举一反三,同时输出i:

具体各种操作,详见:书P49 例 3-16:用do...while语句求∑100 举一反三变型_宇 -Yu的博客-CSDN博客

这里我们只简化总结一下:

while

        sum = sum + i;
        i++; 
        sum = sum + i;
        ++i; 

101

5050       

       ++i;
        sum = sum + i;
        i++;
        sum = sum + i;

101

5150

do while 

i=0

        sum = sum + i;
        i++;          
        sum = sum + i;
        ++i;

101

5050

        i++;
        sum = sum + i;
        ++i;
        sum = sum + i;

101

5151

do while 

i=1

        sum = sum + i;
        i++;          
        sum = sum + i;
        ++i;

101

5050

        i++;
        sum = sum + i;
        ++i;
        sum = sum + i;

101

5150

原本的设想:

1,2,3结果一样,∑100(5050)。

4  不一样:cin i=99;sum=∑100。

所以这时,我们只要把while语句改成 while (i <= 99)即可(得到5050)。

结果实践以后事实大相径庭,不仅3结果和4一样,对3,4执行

"把while语句改成 while (i <= 99)即可(得到5050)"操作后,得到的结果反而是:

8566654cdc0c4857ac9ef5d8e1f758d0.png

解释(收获):

1.为什么每次一和二的结果都一样,三和四的结果都一样?

因为

自增运算符只在单个语句内有效自增运算的功能单位为单个语句。

具体表现形式为:用分号隔开

2. i = 0时三和四的结果5151,i = 1时(while也一样)三和四的结果5150是怎么回事(怎么来的)?

c3e423e563324414a9f446c269d1a480.png

至至于为什么

"把while语句改成 while (i <= 99)即可(得到5050)"操作后,得到的结果反而是:5049

其实很简单:

当i=0时,把while语句改成 while (i <= 99)其实就是输出∑100,即5050。

当i=1时,把while语句改成 while (i <= 99)其实就是输出∑2~100,即5049

而上面是在i=1的基础之上更改的,自然是5049,不必多说。

例3-17

从键盘输入一个整数i,计算区间[i,100]的整数之和。

分别用 while语句和do...while...语句循环实现。、

源程序1(while 语句):

#include <iostream>
using namespace std;
void main()
{
    int sum = 0, i;
    cin >> i;
    while (i <= 100)
    {
        sum = sum + i;
        i++;
    }
    cout << "sum=" << sum << endl;
}

源程序2(do.…while 语句):

#include <iostream>
using namespace std;
void main()
{
    int sum = 0, i;
    cin >> i;
    do
    {
        sum = sum + i;
        i++;
    } while (i <= 100);
    cout << "sum=" << sum << endl;
}

本project碰到的问题(收获):

在用do...while...语句时要注意,不同于while语句,do...while...语句中

while(语句)后要注意:一定要加一个分号。不然就又报错了。

本来还想写for语句的,但是这里介于篇幅过长,还是放到下一章再写,我们下一章再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值