break,continue与循环嵌套

break语句可以提前终止循环(break语句的作用为使流程跳到循环体之外,接着执行循环体下面的语句)   (break语句仅可用于循环语句与switch语句中,而不能单独使用)

例:在全系1000个学生中,征集慈善捐募,当总数达到十万元时就结束,统计此时捐款的人数以及平均每人捐款的数目。

#include<stdio.h>
#define SUM 100000    //指定符号常量SUM代表100000
int main()
{
    float amount,aver,total;
    int i;
    for(i=1;total=0;i<=1000;i++)     //实际循环的变量未知,可以先设一个最大值1000
    {
        printf("please enter amount:");
        scanf("%f",&amount);
        total=total+amount;
        if(total>=SUM)break;
    }
    aver=total/i;
    printf("num=%d\naver=%10.2f\n",i,aver);
    return 0;
}

分析:for语句本来指定执行循环体1000次。在每一次循环中,输入一个捐款人的捐款数,然后把它累加到total,如果没有if语句,则执行循环体1000次。现在设置一个if语句,每次累加后,检查累加到total是否达到或超过SUM,当total>=100000时,就执行break语句,流程跳到循环体花括号外,即提前结束循环。

continue语句可以提前结束本次循环(continue语句的作用为结束本次循环,即跳过循环体下面尚未执行的语句,转到循环体结束点之前,接着执行例:for语句中的表达式3,然后进行下一次是否执行循环的判定)。

循环嵌套 一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。而三种循环(for循环、while循环、do...while循环)可以相互嵌套。

例题:(运用循环嵌套与break,continue语句)

输出以下4*5的矩阵

1        2        3        4         5

2        4        6        8        10

3        6        9        12      15

4        8        12       16      20

编写程序:

#include<stdio.h>
int main(void)
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)    //n用来累计输出数据的个数;
        {
            if(n%5==0)           //控制在输出5个数据后换行
            {
                printf("\n");
            }
            printf("%d\t",i*j);
        }
    }
    printf("\n");
    return 0;
}

    
    

该程序包括一个双重循环。外循环变量i由1变到4,用来控制4行数据,内循环变量j由1变到5,用来控制输出每行中的5个数据。输出的值为i*j。如在执行第二次外循环时,i=2,由1变到5,因此i*j的值就是2,4,6,8,10。每行以此类推。n的初始值为5,每执行一次循环,n+1,输出完5个数据后,n=5,用n%5是否等于0来判断是否为5的倍数。是,则换行,然后再输出后面的数据,用这种方法来使每行输出5个数。

1.假如在上面的程序中,做一些改动。在内循环中再加入一个if语句:

#include<stdio.h>
int main(void)
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)    //n用来累计输出数据的个数;
        {
            if(n%5==0)           //控制在输出5个数据后换行
            {
                printf("\n");
            }
            if(i==3&&j==1)break; //遇到第3行第一列,终止内循环
            printf("%d\t",i*j);
        }
    }
    printf("\n");
    return 0;
}

    
    

那么,当i等于3和j等于1时,执行break语句,提前终止内循环,流程进入下一次外循环,实际的输出将会如下面所示:

1        2        3        4        5

2        4        6        8        10

4        8        12        16        20

2.如果把上面的break语句改为continue语句,即:

        if(  i==3&&j==1)continue;

实际的输出如下:

1        2        3        4        5

2        4        6        8        10

6        9        12        15

4        8        12        16        20

那么,原来第3行第1个数据没有输出,从第3行第2个数据6开始输出,并且由于没有执行printf("%d\t",i*j);  ,所以少输出一次  \t,后面4个数据向左移动了一个位置。需要注意的是continue语句只是跳过了后面的printf("%d\t",i*j);   结束了当i=3,j=1时候的那次内循环,会接着执行i=3,j=2时的内循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值