C语言基础应用(五)循环结构

引言

如果要求1+2+3+…+100,你会怎么求解呢?
如果按照常规代码

int main() {
    int sum =0;
    sum += 1;
    sum += 2;
    sum += 3;
    ...
    sum += 100;
    printf("The value of sum is %d\n",sum);
    return 0;
}

就会特别麻烦,并且代码过于冗长。下面将引入循环的概念,将更合理地解决此类问题。

一、while语句实现循环

while语句的一般形式:
while(表达式) 语句
注:
循环体:while后面的语句称为循环体。

针对while循环,我们可以简易地记成 只要循环条件表达式为真,就可以执行循环体语句。
针对引言的问题,现给出用whlie语句实现的代码:

int main() {
    int sum,i = 1;
    while(i <= 100) {
        sum += i;
        i++;
    }
    printf("The value of sum is %d\n",sum);
    return 0;
}

运行结果:
在这里插入图片描述
需要注意的是:
1、循环体如果是多个语句,则需要用花括号括起来作为复合语句使用。如果不加花括号,while语句的范围就只到while后面第一个分号处。
2、循环体中应该有让循环结束的语句。就如上述代码的i++;
while循环是由i进行控制,当i不超过100时,继续执行循环体代码;每次循环结束前,i都会加一;当i超过100时,则循环结束。

二、do…while语句实现循环

2.1 do…while的一般实现

do…while的一般形式为:
do
语句
while(表达式);

同样我们也可以用do…while来实现上述问题

int main() {
    int sum,i = 1;
    do{
        sum += i;
        i++;
    } while (i <= 100);
    printf("The value of sum is %d\n",sum);
    return 0;
}

运行结果:
在这里插入图片描述

2.2do…while与while的区别

我们以具体的问题进行分析。
Q:要求输入一个整数i,求i到10的和。

2.2.1用while进行实现

A:

int main() {
    int sum = 0,i;
    printf("Input a number:\n");
    scanf("%d",&i);
    while(i <= 10) {
        sum += i;
        i++;
    }
    printf("The value of sum is %d\n",sum);
    return 0;
}

先输入一个小于10的数:
在这里插入图片描述
再输入一个大于10的数:
在这里插入图片描述
我们可以看到,由于i值大于10,所以并没有执行循环体语句。

2.2.2用do…while进行实现

A:

int main() {
    int sum = 0,i;
    printf("Input a number:\n");
    scanf("%d",&i);
    do {
        sum += i;
        i++;
    } while (i <= 10);
    printf("The value of sum is %d.\n",sum);
    return 0;
}

运行结果:
先输入一个小于10的数:
在这里插入图片描述
再输入一个大于10的数:
在这里插入图片描述
可以看到,这时输出的sum值为11,这是因为在do…while中,是先执行循环体语句,再进行条件判断。

三、for语句实现循环

for语句的一般形式为:
for(表达式1;表达式2;表达式3)
语句

表达式1:设置初始条件,只执行1次。可以为0个(即没有)、一个或者多个变量设置初值。
表达式2:循环条件的表达式,用来判断是否还需要继续循环。在每次执行循环体之前先执行此表达式。
表达式3:作为循环的调整,如可以使循环变量增值,该表达式是在执行完循环体后才进行的。

for语句的常用形式为:
for(循环变量赋初值;循环条件;循环变量增值)
语句

针对引言的问题,现给出用for语句实现的代码:

int main() {
    int sum = 0,i;
    for(i=1;i <= 100;i++) {
        sum += i;
    }
    printf("The value of sum is %d.\n",sum);
    return 0;
}

for语句里面的三个表达式均可省略。

四、break和continue语句

我们以一个具体问题进行分析
Q:找出0-10的偶数。

4.1 break

break语句可以提前终止循环。
A:

int main() {
    int sum = 0,i = 0;
    while(i <= 10) {
        if(i % 2 == 0) {
            printf("%d\t",i);
            i++;
            break;
        }
        i++;
    }
    return 0;
}

运行结果:
在这里插入图片描述
运行结果并不符合我们对0-10之间的偶数的认知,说明break语句用在此处不合理(此处代码并不符合题目要求,此处使用break旨在区分break与continue的区别)
i从0开始执行,在执行循环体语句时,i可以整除2,执行了break。当执行break语句后,该循环就没在继续执行,如果继续执行了,后面应该还会输出2,4,6…
所以break就直接结束了最近的一次循环。

4.1 continue

continue结束是本次循环,而不是整个循环。
A:

int main() {
    int sum = 0,i = 0;
    while(i <= 10) {
        if(i % 2 == 0) {
            printf("%d\t",i);
            i++;
            continue;
        }
        i++;
    }
    return 0;
}

运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值