首页 > 其他分享 >嵌入式开发学习日记——第五天(c语言)

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

时间:2024-09-29 18:49:37浏览次数:11  
标签:main int 嵌入式 while 循环 printf 第五天 include 日记

循环控制语句

 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;
}

标签:main,int,嵌入式,while,循环,printf,第五天,include,日记
From: https://blog.csdn.net/Find_tim/article/details/142641157

相关文章

  • 【日记】这下真要穷得吃不起饭了(1504 字)
    正文忽然想起,昨天有一个财政局的工作人员,过来转款。那时候已经快下班了。我们给他办完之后,他说他没想到这么快。看来还得回去,明明都打算不回去了来着。我有些疑惑。照理来说,财政局应该挺好玩。我这么问他。他苦笑了一下,说要是好玩就回去上班了,天天都不想去单位。然后开......
  • d2l-ai深度学习日记(四)-深度学习计算
    前言:这个博客《d2l-ai深度学习日记》将记录我在深度学习领域的学习与探索,特别是基于《动手学深度学习》这本经典教材的学习过程。在这个过程中,我不仅希望总结所学,还希望通过分享心得,与志同道合的朋友一起交流成长。这不仅是对知识的沉淀,也是我备战研究生考试、追逐学术进阶之......
  • d2l-ai深度学习日记(三)-多层感知机
     前言:这个博客《d2l-ai深度学习日记》将记录我在深度学习领域的学习与探索,特别是基于《动手学深度学习》这本经典教材的学习过程。在这个过程中,我不仅希望总结所学,还希望通过分享心得,与志同道合的朋友一起交流成长。这不仅是对知识的沉淀,也是我备战研究生考试、追逐学术进阶......
  • [正点原子-I.MX6ULL]嵌入式 Linux 通过 nfs 下载出现 T T T T
    [正点原子-I.MX6ULL]嵌入式Linux通过nfs下载出现TTTT问题叙述但是有几个地方要注意1.安装驱动应该是2.修改GRUB_DEFAULT时,后面的引号是英文字符,直接复制过去会有语法报错3.最后就是重启linux时,如果你是在vmware上运行的,记得按shift进入boot界面问题叙述其实......
  • 9月28日记录
    一个管理流水线的MES系统的java实现:代码如下:点击查看代码importjava.util.Scanner;importjava.util.Objects;publicclassPlanInformation{privatestaticintcounter=0;//用于ID递增privateintid;privateStringplanid;privateStringp......
  • 嵌入式的核心能力-Debug调试能力(一)
    一、栈回溯引入:调试程序时,经常会发生这类错误:读写某个地址,程序报错;调用某个空函数,导致程序报错等等。解决方法是,可以利用异常处理函数去打印出“发生错误瞬间”的所有寄存器地址根据这些打印出来的地址信息,回溯发生错误的位置,并且需要知道位于调用链路。1.栈回溯的原理本......
  • 嵌入式学习--数据结构+算法
    嵌入式学习--数据结构+算法数据结构1.1数据1.2逻辑结构1.3存储结构1)顺序存储结构2)链式存储结构1.4操作(数据的运算)算法2.1算法与程序2.2算法与数据结构2.3算法的特性2.4如何评价一个算法的好坏?2.5时间复杂度2.6空间复杂度数据结构数据的逻辑结构、存储结构、......
  • 嵌入式学习——进程间通信方式(2)—— 信号
    一、基本概念什么是信号:由进程或系统发出的,用来通知发生了某个事件,希望接收方进行响应。    信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。正如我们所了解的中断服务函数一样,在中断发......
  • 新手答疑 | 零基础该怎么学习嵌入式?嵌入式Linux学习路线是什么?嵌入式开发板推荐?
    很多初学者想要涉足嵌入式Linux开发领域,但往往在刚入门阶段,会因为初次接触到大量复杂的概念术语和深奥的技术文档感到压力重重,面对这些内容不知从何下手,感到十分迷茫,网上的内容也纷繁复杂,没有清晰的学习线路,看完后甚至更蒙圈。实际上,嵌入式Linux开发并没有想象中的那样高不可攀,关键......
  • 演化日记:从数据仓库到数据中台与文娱业的数据飞轮
    在文娱行业,每一帧画面、每一段音符都埋藏着用户偏好的密码。解锁这些密码并非易事,但借助数据技术的演化,我们终于可以高效地挖掘这些珍贵信息,推动业务的革新和增长。本文将探讨数据技术如何从简单的数据仓库演变为强大的数据飞轮,并具体说明这一进程如何在文娱行业具体应用。数据技术......