分支语句与循环语句(三)

for循环

我们已经知道了while循环,但是为什么还有一个for循环呢?

for循环的语法:

for(表达式1;表达式2;表达式3)

循环语句;

表达式1为初始化部分,用于初始化循环变量的。

表达式2为条件判断部分,用于判断循环什么时候终止。

表达式3为调整部分,用循环条件的调整。

for循环是用的最多以及最常见的。

循环使用的次数——从多到少——for      while       do   while

实际上,在写代码的时候其实只要一种循环就能解决问题,三种循环是早期C语言设计出来的。

在新兴的语言中,只留一种for循环,当然其他语言也可能会有其他的循环。(for循环的强大之处。)

写while循环时候,通常要先有一个循环变量,然后在写while循环。

如:

int i=0;   //循环变量的初识化

while(i<10){

                   //.....内容

                   i++;//——调整

}

注意:当我们在写这个循环的时候,如果这个代码越写越多,越写越复杂的时候;这时初始化的变量的位置要放在while循环前面,会导致越来越多;循环体的内容也可能会很长。

这样会导致初始、判断、调整位置拉开;这样当我们调整循环时,分开的三个部分在输入时可能导致出现错误。

while循环的不足之处就体现在这里。

for循环可以很好解决。

如:

int main(){

                     int i=0;

                     for(i=1;i<=10;i++){

                                                    printf("%d ",i);

                                                 }

                     return 0;

}

i=1;——初始化

i<=10;——判断

i++;——调整

这串代码执行顺序其实与while循环一样。

for语句的执行流程:

 在while循环与for循环中break的作用是一样的,是用于跳出循环。

如:

int main(){
           int i=0;
           for(i=1;i<=10;i++){
                               if(i==5)
                               break;
                               printf("%d ",i);
                              }
           return 0;
}

若将break换成continue的话,打印结果12345678910.

for循环里的continue是不会跳过调整部分;

while循环的continue若将i++;放在continue后面,则会跳过调整部分,会陷入死循环。

for语句的循环控制变量一些建议:

1、不可在for循环体内修改循环变量,防止for循环失去控制。

2、建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

第一种的例子:

int main(){

                int i=0;

                for(i=0;i<10;i++){

                                            if(i=5) //这将5赋值给i,并不是判断相等;又因i=5<10陷入死循环

                                            printf("haha\n");

                                            printf("hehe\n");

                                            }

                   return 0;

 }

一般我们对于i的调整不要放在循环内部。

这就是在循环体内部改变循环变量。

第二种的例子:

int main(){

                  int arr[10]={1,2,3,4,5,6,7,8,9,10}

                  int i=0;

                  for(i=0;i<10,i++){

                                                printf("%d ",arr[i]);

                                               }

                    return 0;

}

这里的“10”可以直观地给出10次循环、10次打印、10个元素的意思;若改“i<=9”,这样并不那么直观。

前闭后开:i=10——闭区间       i<10开区间

for循环的特殊情况:

第一种:

int main(){

     for( ; ; ){                           //发现这里初始化、判断、调整都被省略掉了。(可不写)

                   printf("hehe\n");

                 }

      return 0;

}

得出:

1、for循环的初识化、判断、调整都可以省略,但是for循环的判断部分如果被省略,那判断条件就是:恒为真。

2、如果不是非常熟练,建议大家不要随便省略。

如:

int main(){
              int i=0;
              int j=0;
              for(i=0;i<10;i++){
                                  for(j=0;j<10;j++){
                                                      printf("hehe\n");
                                                    }
                                }
              return 0;
}

这个打印结果为100个hehe。【注:可以省略i,但j不建议省略。】

这里因为我们发现前面有int=0;和int j=0;后面for也有i=0和j=0;那这样是否可以将其省略掉?

如:

for( ;i<10;i++){

                       for( ;j<10; j++)

 }

换成这样,打印结果为10个hehe

分析:我们知道i=0最先开始进入循环,然后在内部开始执行j的循环,一直循环到j=0的时候跳出循环;那这时当i=1,有开始进入;因为j没有初始化,所以j=10是不变的。

第二种:

int x,y;                  //初始化有两个代码

for(x=0,y=0;x<2&&y<5;++x,y++){ 

       pintf("hehe\n")

}

return 0;

打印结果:两个hehe

(可以连续创建两个变量)

这里x=0,y=0;由逗号隔开的表达式叫逗号表达式。

这个循环由两个循环变量来控制(比较少见)

因为x<2&&y<5;是并且的关系,所以只要x<2的条件为假,后面y<5就不用管,直接跳出循环。

练习:请问以下循环要循环多少次?

#include<stdio.h>
int main(){
             int i=0;
             int k=0;
             for(i=0,k=0;k=0;i++,k++)  //这里第二个k=0意思是把0赋值给了k
                 k++;
              return 0;
}

这个表达式的结果就是k的值,而又因k=0且0为假,就意味着循环压根就进不去。

但若将k=0改为k=1,因为1为真,且是赋值等号,就是恒为真。

只要让这个表达式的结果为非0(永远都是),这个代码就死循环了。

do...while()循环

do语句的语法:

do

 循环语句;

while(表达式);——先执行后判断

执行流程:

如:

int main(){

                 int i=1;

                 do{

                         printf("%d ",i);

                         i++;

                     }

                  while(i<=10);

}

打印——调整——判断

int main(){
            int i=1;
            do{
                 if(i==5)
                 break;
                 printf("%d ",i);
                 i++;
              }
             while(i<=10);
             return 0;
}

do语句的特点:

循环至少执行一次,使用的场景有限,所以不是经常使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值