嵌入式开发学习日记——第五天(c语言)

循环控制语句

 while循环

        基本语法

while (循环条件表达式)
{
    循环体语句;
}

        流程图

案例——计数循环

   实现计数循环要满足:

        ①必须初始化循环变量

        ②循环变量比较作为循环条件

        ③循环变量变化。

   代码展示

1.循环输出数字 7~15

#include <stdio.h>
int main()
{
  int i = 7;
  while (i <= 15)
  {
    printf("%d \n", i);
    i++;
  }
  printf("循环后变量的值为:%d \n", i);
  return 0;
}

2.倒序输出数字 53 ~ 48

#include <stdio.h>
int main()
{
  // 倒序输出53-48
  int i = 53;
  while (i >= 48)
  {
    printf("%d \n", i);
    i--;
  }
  printf("循环结束后,循环变量的值:%d \n",i);
  return 0;
}

3.输出10(包括10)以内所有的偶数

#include <stdio.h>
int main()
{
  // 输出10以内的偶数
  int i = 0;
  while (i <= 10)
  {
    if (i % 2 == 0)
    {
      printf("%d \n", i);
    }
    i++;
  }
  printf("循环结束后,循环变量的值:%d \n", i);
  // 方式2:
  int j = 0;
  while (j <= 10)
  {
    printf("%d \n", j);
    j += 2;
  }
  printf("循环结束后,循环变量的值:%d \n", j);
  return 0;
}

案例——不确定循环

不确定循环直到循环表达式不成立之前,不确定循环次数,不需要循环变量。

实现需求:输入5位数密码,直到密码匹配成功结束循环。

#include <stdio.h>
int main()
{
  // 提示用户输入密码,只要不是12345,就一直提示
  int pwd;
  while (pwd != 12345)
  {
    printf("请输入密码:");
    scanf("%d", &pwd);
  }
  printf("程序结束,您输入的密码是:12345");

  return 0;
}

do...while循环

  基本语法

do
{
    循环体语句;
} while (循环条件表达式);

        流程图

案例——计数循环

   实现计数循环要满足:

        ①必须初始化循环变量

        ②循环变量比较作为循环条件

        ③循环变量变化。

   代码展示

1.循环输出数字 7~15

#include <stdio.h>
int main()
{
  // (2)循环输出数字7~15
  int i = 7;
  do
  {
    printf("%d \n", i);
    i++;
  } while (i <= 15);
  printf("循环结束后,循环变量的值为:%d \n", i);
  return 0;
}

2.计算100以内(包括100)所有数字的和

#include <stdio.h>
int main()
{
  int i = 0;
  int sum = 0;
  do
  {
    sum += i;
    i ++;
  } while (i <= 100);
  printf("计算100以内(包括100)所有数字的和:%d \n",sum);
  printf("循环结束后,循环变量的值为:%d \n", i);
  return 0;
}

3.计算10以内所有奇数的乘积

#include <stdio.h>
int main()
{
  // 计算10以内所有奇数的乘积
  int i = 1;
  int result = 1;
  do
  {
    result *= i;
    i += 2;
  } while (i < 10);
  printf("10以内所有奇数的乘积:%d \n", result);
  printf("循环结束后,循环变量的值为:%d \n", i);
  return 0;
}

案例——不确定循环

实现需求:输入5位数密码,直到密码匹配成功结束循环。

#include <stdio.h>
int main()
{
  // 输入5位数密码,直到密码匹配成功结束循环
  int pwd;
  do
  {
    printf("请输入密码 \n");
    scanf("%d",&pwd);
  } while (pwd!=12345);
  printf("程序结束,输入的密码是:%d", pwd);
  return 0;
}

while和do...while的差异

#include <stdio.h>
int main()
{
  // while和do_while循环的区别
  // 请输入密码
  int pwd = 123;
  while (pwd != 123)
  {
    printf("请输入密码 \n");
    scanf("%d", &pwd);
  }
  printf("程序结束1 \n");
  do
  {
    printf("请输入密码 \n");
    scanf("%d", &pwd);
  } while (pwd != 123);
  printf("程序结束2 \n");
  return 0;
}

        总结: do_while循环至少执行一次,while循环有可能一次都不执行

for循环

 基本语法

for (循环变量初始化; 循环条件表达式; 循环变量变化)
{
    循环语句;
}

说明:

  1. 循环变量初化只执行一次,且循环开始前就执行。
  2. 循环条件表达式每次循环都执行,同while循环一样,每次先判断后执行循环体语句。
  3. 循环标记变量变化每次循环都执行,在大括号中循环体语句之后执行。

 

        流程图

   代码展示

1.循环输出数字 7~15

#include <stdio.h>
int main()
{
  for (int i = 7; i <= 15; i++)
  {
    printf("%d \n", i);
  }
  return 0;
}

2.计算100以内(包括100)所有数字的和

#include <stdio.h>
int main()
{
  // 1-100所有的和
  int sum = 0;
  for (int i = 0; i <= 100; i++)
  {
    sum += i;
  }
  printf("1-100所有数字和为:%d \n", sum);

  return 0;
}

3.计算10以内所有奇数的乘积

#include <stdio.h>
int main()
{
  // 10以内奇数的乘积
  int result = 1;
  for (int i = 1; i < 10; i += 2)
  {
    result *= i;
  }
  printf("10以内的奇数乘积为:%d \n", result);

  return 0;
}

案例——不确定循环

实现需求:输入5位数密码,直到密码匹配成功结束循环。

#include <stdio.h>
int main()
{
  // 不确定循环,输入密码
  for (int pwd; pwd!=123; )
  {
    printf("请输入密码 \n");
    scanf("%d",&pwd);
  }
  printf("程序结束");
  return 0;
}

 案例——特殊结构的for循环

#include <stdio.h>
int main()
{
  // 特殊的一些写法
  for (int i = 0; i < 5; i++)
  {
    printf("正常的写法 \n");
  }
  // 循环变量放在外面
  int j = 0;
  for (; j < 3; j++)
  {
    printf("循环变量放在外面 \n");
  }
  // 循环变量放在外面,标记变量放在大括号内部
  int k = 0;
  for (; k < 3;)
  {
    printf("循环变量放在外面,标记变量放在大括号里面 \n");
    k++;
  }
  // 使用多个循环标记变量
  for (int i = 0, y = 0; i < 5 && y < 3; i++, y++)
  {
    printf("%d,%d \n", i, y);
  }
  // 死循环
  for (;;)
  {
    printf("死循环 \n");
  }
  return 0;
}

多重循环

 介绍

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环, 其中,for、while、do…while均可以作为外层循环和内层循环,建议一般使用两层,最多不要超过3层,如果嵌套循环过多,会造成可读性降低。
  2. 如果外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

代码示例

#include <stdio.h>
int main()
{
  // 多重循环
  // 根据用户输入的行数和列数,遍历产生对应的行和列
  int rows, cols;
  printf("请输入行数 \n");
  scanf("%d", &rows);
  printf("请输入列数 \n");
  scanf("%d", &cols);
  for (int i = 0; i < rows; i++)
  {
    for (int j = 0; j < cols; j++)
    {
      printf("[%d,%d]", i, j);
    }
    printf("\n");
  }
  return 0;
}

如果输入的行数是4,列数是7,输出结果如下:

[0,0][0,1][0,2][0,3]
[1,0][1,1][1,2][1,3]
[2,0][2,1][2,2][2,3]

案例

分别打印出以下两种形式的九九乘法表。

#include <stdio.h>
int main()
{
  // 第一种乘法表,外层循环控制行数,内层循环控制列数
  for (int i = 1; i <= 9; i++)
  {
    for (int j = 1; j <= i; j++)
    {
      printf("%d*%d=%d \t", j, i, i * j);
    }
    printf("\n");
  }
  return 0;
}

#include <stdio.h>
int main()
{
  // 第一种乘法表,外层循环控制行数,内层循环控制列数
  for (int i = 1; i <= 9; i++)
  {
    // 随着行数的增加,空白符越来越少
    for (int j = 1; j <= 9 - i; j++)
    {
      printf("\t");
    }
    for (int j = 1; j <= i; j++)
    {
      printf("%d*%d=%d\t", j, i, i * j);
    }
    printf("\n");
  }
  return 0;
}

跳转控制语句

break

        介绍

        break语句用于终止某个语句块的执行,用在switch语句或者循环语句中

        流程图

案例

1.编写程序,要求输入一个数字,判断该数字是否是质数。

说明:质数指只能被1和自身整除且大于1的数字。

#include <stdio.h>
#include <stdbool.h>
int main()
{
  // 输入一个数字判断是不是质数
  int prime;
  printf("请输入数字 \n");
  scanf("%d", &prime);
  _Bool isPrime = prime > 1 ? 1 : 0;
  // 质数:只能被1和自身整除,但是如果和这个数字的一半都进行过取余,
  // 并且没有整除,就没有必要向后继续的进行取余了
  for (int i = 2; i <= prime / 2; i++)
  {
    if (prime % i == 0)
    {
      isPrime = 0; // 能够整除,说明不是质数
      break;
    }
  }
  if (isPrime)
  {
    printf("%d是质数", prime);
  }
  else
  {
    printf("%d不是质数", prime);
  }
  return 0;
}

 continue

        介绍

      continue语句用于结束本次循环,继续执行下一次循环。

        流程图

案例

1.输出100以内(包括100)的数字,跳过那些7的倍数或包含7的数字。

#include <stdio.h>
int main()
{
  // 敲7游戏 跳转100以内所有7的倍数的数字,包含7的数字
  for (int i = 0; i <= 100; i++)
  {
    // i % 7 判断 7 的倍数
    // i % 10 判断个位上带7的数字
    // i / 10 判断十位上带7的数字
    if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)
    {
      continue;
    }
    printf("%d\n", i);
  }

  return 0;
}

  goto

        介绍

   goto语句是一种跳转语句,它允许程序控制流程在代码中跳转到带有标签(label)的语句处,标签(label)的名称可以自行设置,需要满足标识符规范。

        注意,我们在开发中不建议使用goto语句,但我们需要掌握 goto 语句的执行流程,以能够看懂其他开发者的代码中可能出现的 goto 语句。

        基本语法

goto 标签名  // 跳转到指定的标签(label)处
...
标签名:      // 定义一个标签(label)
语句;

        流程图

案例

使用goto语句实现循环输出数字1 ~ 5。

#include <stdio.h>
int main()
{
  // 使用goto,实现循环1-5数字的显示
  int i = 1;
  start:
  if(i<=5){
    printf("%d\t",i);
    i++;
    goto start;
  }
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值