8、C程序的循环结构

本文详细介绍了C语言中的循环结构,包括for、while和do...while循环的语法、执行流程及使用示例。强调了各种循环在不同场景下的应用,并给出了打印奇数和绘制星号图案的作业。此外,还讨论了goto语句在程序控制流程中的作用,展示了其在内存分配失败情况下的典型应用。
摘要由CSDN通过智能技术生成

8.C程序三大结构之循环结构
8.1.循环结构功能:将一组语句重复多次执行
      三种类型循环:for循环,while循环,do...while循环
8.2.for循环
a)语法格式:
   for(表达式1; 表达式2; 表达式3) {
    循环语句;
   }
  语义(执行流程):
  第一步骤:首先计算,运行表达式1(只做一次)
  第二步骤:然后计算,运行表达式2
      如果表达式2的结果为真,那么就执行运行循环语句
      如果表达式2的结果为假,那么for循环结束退出
  第三步骤:如果如果表达式2的结果为真,那么就执行运行循环语句,并且当循环语句执行完毕
      再接着计算,运行表达式3,表达式3运行完毕,重复第二步骤

b)for循环的使用形式:
形式1:
int i;
for(i = 0; i < 5; i++) {
    printf("i = %d\n", i);
}
注意:这里i有对应的专业术语:循环变量

形式2:
int i = 0;
for(; i < 5; i++) {
    printf("i = %d\n", i);
}

形式3:
int i = 0;
for(; i < 5; ) {
    printf("i = %d\n", i);
    i++; //循环变量放在循环语句中
}

形式4:死循环
for(;;) {
      printf("hello,world\n");
}
注意:按ctrl+c键退出程序

int i = 0;
for(;;) {
    printf("i = %d\n", i);
    i++; //循环变量放在循环语句中
    if(i >= 5) {
         break; //中断,结束for循环,如果for循环是嵌套,只是中断最内层for循环
    }
}

形式5:
int i, j;
for(i = 0, j = 0;  i < 5 && j < 5; i++, j++) {
    printf("i = %d, j = %d\n", i, j);
}

形式6:
for(int i = 0; i < 5; i++) {
    printf("i = %d\n", i);    
}
printf("i = %d\n", i); //gcc报错
注意:如果循环变量定义是在表达式1中完成,那么循环变量只能用于for循环
          for循环之外不可用

形式7:
int i;
for(i = 0; i < 5; i++) {
    if(3 == i) {
        continue; //中断,结束本次循环,继续下一次循环
            //当i=3时,执行continue关键字,
                                                   //后面的循环语句不再执行,直接去执行表达式3,i++
              然后重复下一次循环
    }
    printf("i = %d\n", i);    
}

作业:打印100以内的奇数
          1  3  5 7 ...
作业:打印图案
          **********
          **********
          **********
          **********
          **********
          for(....) { //负责打印多少行
              for(....) //负责打印一行多少个*
          }

c)for循环语句中如果仅有一条语句,{}可以省略(建议不要这么干)
   for(int i = 0; i < 5; i++) 
    printf("i = %d\n", i);    

8.3.while循环 
a)语法格式
   while(循环控制表达式) {
    循环语句;
   }
   语义,执行流程:
   第一步骤:首先计算,运算循环控制表达式
       如果计算的结果为真,那么执行循环语句
       如果计算的结果为假,while循环直接结束
  第二步骤:当循环语句执行完毕,继续执行运行第一步骤
   
  例如:
  int i = 0;
  while(i < 5) {
    printf("i = %d\n", i);
    i++;
  }
  
 while死循环:
 while(1) {
    printf("hello,world\n");
 }

b)注意:如果while的循环语句只有一条,{}可以不加(由衷建议不要这么做)
  int i = 0;
  while(i++ < 5) 
        printf("i = %d\n", i);
8.4.do-while循环
a)语法格式
   do {
       循环语句;
   }while(循环控制表达式); //切记此分号不可省略
   语义:执行流程:
   第一步骤:先执行循环语句; //第一次没有做判断
   第二步骤:然后计算,运行循环表达式
       如果为真,继续执行循环语句,后续依次重复
       如果为假,循环结束
   特点:do-while至少执行一次!
   例如:
   int i = 0;
   do {
      printf("i = %d\n", i);
   }while(i++ < 5);

8.5.goto语句(从哪来滚回哪去)
1)作用:可以让CPU跳转到任何一条语句去执行(孙悟空翻跟头)
      应用:linux内核操作系统大量使用goto语句(linus)
2)语法:
      goto 标签名; //标签名就是指定要跳转的地方
      注意:标签名根据标识符命名规则来定
3)使用形式:两种
      形式1:
      标签名:
    语句
       ...
      goto 标签名;
     ....
     例如:
     label:
    printf("1\n");
     goto label;
     printf("2\n");

     形式2:
     goto  标签名;
     ....
     标签名:
               语句;
     ...
     例如:
     goto label;
     printf("2\n");
     label:
    printf("1\n");
     练习:用goto实现0+1+2+...+100

4)linux内核源码中goto语句经典使用模板
      需求:启动一个程序,分配三块内存,只要有一块内存分配失败,程序结束,并且把之前分配
                成功的内存释放归还给linux操作系统
      参考代码:goto.c

/* goto.c */
#include <stdio.h>
int main(void)
{
    int ret = 0; //0:表示分配内存成功;1:表示分配内存失败
    printf("分配第一块内存.\n");
	// ret = 1; //表示第一块分配失败了
    // printf("第一块分配失败了.\n");
    if(1 == ret)
        goto free1;
    printf("分配第二块内存.\n");
	// ret = 1; //表示第二块分配失败了
    // printf("第二块分配失败了.\n");
    if(1 == ret)
        goto free2;
    printf("分配第三块内存.\n");
    // ret = 1; //表示第三块分配失败了
    // printf("第三块分配失败了.\n");
    if(1 == ret)
        goto free3; 

    printf("三块内存都分配成功.\n");
    return 0; //给操作系统返回成功

free3:  
    printf("释放第二块内存.\n");
free2:
    printf("释放第一块内存.\n");
free1:
    return ret; //给操作系统返回失败
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗里い着迷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值