最简单的循环

news2024/9/29 19:32:08

☃️个人主页:fighting小泽
🌸作者简介:目前正在学习C语言和数据结构
🌼博客专栏:C语言学习
🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻

文章目录

  • 分支语句和循环语句
  • 1. 什么是语句?
  • 2. 分支语句(选择结构)
    • 2.1 if语句
    • 2.1.1 悬空else
    • 2.1.2 if书写形式的对比
    • 2.2 switch语句
    • 2.2.1 在switch语句中的 break
    • 2.2.2 default子句
    • 2.2.3 练习
  • 3. 循环语句
    • 3.1 while循环
    • 3.1.1 while语句中的break和continue
  • 结尾

分支语句和循环语句

众所周知,C语言是一门结构化的语言。什么是结构化呢?
如果对我们的生活细细拆分,我们会发现我们的生活主要分为三种结构,顺序结构,选择结构和循环结构。大家想一想我们的日常生活是不是分为这三种结构。而C语言也主要由这三种结构构成,是不是很巧妙?

在这里插入图片描述

所以不论学习什么语言,分支和循环都是我们必须要掌握的一项技能,所以今天我就给大家分享一些关于分支语句和循环语句的基础知识。

1. 什么是语句?

C语句可分为以下五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

本章后面介绍的是控制语句。
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:

  1. 条件判断语句也叫分支语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

2. 分支语句(选择结构)

在这里插入图片描述

2.1 if语句

那if语句的语法结构是怎么样的呢?

通常情况下就是一个if带一个括号,括号中填写你要判断的条件。如果条件判断为真,就执行对应的语句。如果为假则不执行,或者执行else的语句。

当然了,我们的 if else 是可以一直判断下去的,可以对多种情况进行讨论。

语法结构:
if(表达式)
    语句;
    
if(表达式)
    语句1;
else
    语句2;
    
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

我们来看一个判断年龄的代码

#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
}

这个代码大家都能看明白吧,如果我们输入的数小于18,就会打印未成年。如果输入的数大于18,就会打印成年。

我们再看一个多分支的语句:

#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)
   {
        printf("青年\n");
   }
    else if(age>=30 && age<50)
   {
          printf("中年\n");
   }
    else if(age>=50 && age<80)
   {
        printf("老年\n");
   }
    else
   {
        printf("老寿星\n");
   }
    
}

这样是不是就可以对年龄进行多次判断,如果符合条件,就会打印相应的结果。

解释一下:
如果表达式的结果为真,则语句执行。
在C语言中如何表示真假?

0表示假,非0表示真。

如果条件成立,要执行多条语句,怎应该使用代码块。

#include <stdio.h>
int main()
{
    if(表达式)
   {
        语句列表1}
    else
   {
        语句列表2}
    return 0;
}

这里的一对 { } 就是一个代码块。当我们只执行一条语句的时候可以不带{},但是执行多条语句就必须带上{}。所以,主动带上{}也是一个好习惯。

2.1.1 悬空else

这个代码大家想想它会打印什么呢?

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

在这里插入图片描述

哈哈哈其实它什么也不打印,我们的分支语句算是一条语句,并且else 只和与它最近的 if 相匹配。当我们第一次进行判断的时候,判断错误了,所以就不会再执行下一条语句了。

改正上面的代码:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}

else的匹配:else是和它离的最近的if匹配的。

2.1.2 if书写形式的对比

//代码1
if (condition) {
    return x;
}
return y;
//代码2
if(condition)
{
    return x;
}
else
{
    return y;
}

代码1和代码2输出的结果一样吗?

答案是一样的,但是代码1我们第一眼看上去就会有些不知所措,而代码2就十分的浅显易懂了。
所以我们在写代码的时候就要写像代码2这样的代码,这样的才是好代码。

//代码3
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

有时候我们在判断相等的时候会不小心写出赋值,为了避免这种情况,我们可以把判断的值放在左边,因为常量是不能改变的,如果写成 = 就会直接报错,不用我们麻烦的去找了。这也是一个代码小秘诀。

2.2 switch语句

switch语句也是一种分支语句。
常常用于多分支的情况。

比如:

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日

如果我们写出 if else 的形式,是不是感觉十分冗余,所以我们就得有不一样的语法形式。

这就是switch 语句。

switch(整型表达式)
{
    语句项;
}

而语句项是什么呢?

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

2.2.1 在switch语句中的 break

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
        case 1:
            printf("星期一\n");
        case 2:
            printf("星期二\n");
        case 3:
            printf("星期三\n");
        case 4:
            printf("星期四\n");
        case 5:
            printf("星期五\n");
        case 6:
            printf("星期六\n");
        case 7:
            printf("星期天\n");
    }
    return 0;
}

这样子我们的switch语句写对了吗?我们来测试一下:

在这里插入图片描述
我们发现,我们只选了第4个,但是却把后面的全都打印了出来,这是为什么呢?

我们在执行完对应选择的语句后,是不是就想跳出switch语句。这时我们就需要用一个break来帮助我们跳出语句。如果没有break,我们就会从当前语句一直向下执行下去。

正确的代码:

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}

有时候我们的需求变了:

  1. 输入1-5,输出的是“weekday”;
  2. 输入6-7,输出“weekend”

所以我们的代码就应该这样实现了:

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

break语句 的实际效果是把语句列表划分为不同的分支部分。

编程好习惯

在最后一个 case 语句的后面加上一条 break语句。(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

2.2.2 default子句

如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯:

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

2.2.3 练习

#include <stdio.h>
int main()
{
      int n = 1;
      int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
            switch (n)
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
            break;
    default:
            break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

注意:case3中的switch语句跳出的是case3,之后还会实现case4的语句,然后才跳出来。

在这里插入图片描述

3. 循环语句

  • while
  • for
  • do while

在这里插入图片描述

3.1 while循环

我们已经掌握了,if语句:

if(条件)
     语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
 循环语句;

while语句执行的流程:
在这里插入图片描述
比如我们实现:

在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

在这里插入图片描述
上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:

3.1.1 while语句中的break和continue

break介绍

//break 代码实例
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

这里代码输出的结果是什么?

1 2 3 4
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3 4 6 7 8 9 10

在这里插入图片描述

总结:
break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。

continue介绍:

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

这里代码输出的结果是什么?

1 2 3 4
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3 4 6 7 8 9 10

在这里插入图片描述

我们发现4后面有光标闪烁,说明程序是在运行着的,为什么呢?

因为continue是跳过本次循环后面的代码,所以 i 永远等于5,而等于5就不会打印,所以光标一直闪烁。

//continue 代码实例2
#include <stdio.h>
int main()
{
    int i = 1;
    while (i <= 10)
    {
        i = i + 1;
        if (i == 5)
            continue;
        printf("%d ", i);
    }
    return 0;
}

这里代码输出的结果是什么?

1 2 3 4
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3 4 6 7 8 9 10
2 3 4 6 7 8 9 10

在这里插入图片描述
总结:
continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

结尾

今天我给大家分享的关于分支与循环的知识就到这里了,之后我还会更新剩下的部分,希望我们都能有所收获
先赞后看,养成习惯!!^ _ ^
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘了关注我哦!

如有错误,还请您批评改正(。ì _ í。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6. Docker——详说镜像

本章讲解知识点 Docker 镜像 Union File System&#xff08;联合文件系统&#xff09;技术 回说 Docker 镜像分层 Docker 镜像分层原理 1. Docker 镜像 镜像是一种轻量级、可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行环境开发的软件&#xff0c;它包含…

一文了解 Zebec Labs 投资的 Coral Finance,空投计划或在不久推出

在前不久&#xff0c;Zebec Labs 宣布对链上衍生品协议 Coral Finance 进行150万美元的投资&#xff0c;以帮助该协议完成早期启动并&#xff0c;并在后续持续的为其提供孵化支持。Coral Finance 将在不久部署在 Nautilus Chain 主网上。据了解&#xff0c;Coral Finance 是 Na…

【VM服务管家】VM4.2平台SDK_6.2 模块操作类

目录 2.2.1 流程操作&#xff1a;通过流程或Group设置输入输出图像的方法2.2.2 模块操作&#xff1a;设置输入图像、参数和ROI2.2.3 N点标定&#xff1a;清空标定点、生成标定文件2.2.4 分支字符&#xff1a;控制调试模式开关的方法2.2.5 条件检测&#xff1a;条件检测模块设置…

【GAMES101】02 Review Of Linear Algebra

1.点乘&#xff1a; 向量点乘 → 一个数值 点乘在图形学中的应用&#xff1a; 找到两个方向之间的夹角。找到一个向量投影到另一个向量上是什么样的。计算两个向量的方向&#xff08;是接近还是远离&#xff09;判定高光范围&#xff0c;从1&#xff08;重合&#xff…

【VM服务管家】VM4.2平台SDK_6.5 全局类

目录 2.5.1 全局相机&#xff1a;获取全局相机列表和设置相机参数的方法 2.5.1 全局相机&#xff1a;获取全局相机列表和设置相机参数的方法 描述 环境&#xff1a;VM4.2 VS2013及以上 问题&#xff1a;问题1&#xff1a;如何获取方案中所有的全局相机的连接状态&#xff0c;…

c++基础-分支语句

目录 if语句 if-else switch语句 if语句 在C中&#xff0c;if语句是一种分支结构&#xff0c;它允许程序根据条件执行不同的操作。可以使用if语句来检查一个条件是否为真&#xff0c;如果为真就执行一个语句块&#xff0c;否则执行另一个语句块。 if语句的语法如下&#xff…

自媒体平台图文创作建议和技巧

自媒体博主在自媒体平台进行图文创作时&#xff0c;需要注意哪些方面才能创造出更好的内容获得更多的关注呢&#xff1f;今天跟大家分享自媒体创作中的一些图文创作建议和技巧。 一、确定目标受众 首先需要明确自己要传达的信息和目标受众。要考虑读者的兴趣、需求和阅读习惯&…

2001-2021年全国30省就业人数数据

2001-2021年全国30省就业人数数据/各省就业人数数据 1、时间&#xff1a;2001-2021年 2、范围&#xff1a;包括30个省市不含西藏 3、指标&#xff1a;就业人数 4、来源&#xff1a;各省NJ、社会统计NJ 5、缺失情况说明&#xff1a;无缺失 6、指标说明&#xff1a; 就业人…

【Python入门】人生苦短,我用Python

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

10万字城市大脑一网统管分析平台及大数据平台建设方案(WORD)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 一.1.1.督查监管子系统 督察监管子系统是指通过独立的督察队伍&#xff0c;以日常督察、专项督察的方式&#xff0c;来检查运行效果。根据工作进度&#xff0c;工作中存在的…

【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ChatGPT常见问题及其解决方法汇总

好久没有更新过技术类的文章了&#xff0c;希望本篇文章能够对你有所帮助&#xff0c;今天这篇博客将会把ChatGPT注册中可能遇到的问题彻头彻尾的讲一下&#xff0c;创作不易&#xff0c;如果感觉有帮助的话就动动你发财的小手点个收藏点个赞吧。如有需要转载请附上原文链接&am…

mysql5.7以上的启动、停止、赋权命令

文章目录 1、启动mysql server2、查看初始密码3、本地登陆mysql4、修改本地root用户密码5、防火墙设置6、开启mysql的远程登录 1、启动mysql server systemctl start mysqld #启动程序 systemctl enable mysqld #开机自运行 systemctl status mysqld #查看状态…

浅谈WebGIS未来应用与技术发展趋势

前言 WebGIS&#xff08;Web GIS&#xff09;是一种基于Web的地理信息系统&#xff0c;它可以实现地理空间数据的查询、分析、管理和可视化。与传统的 GIS 相比&#xff0c;WebGIS 是通过浏览器实现客户端与服务器间的信息交流&#xff0c;成本降低&#xff0c;且界面友好&…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(上)》

《&#xff08;高项&#xff09;备考大全》【专项2】《案例分析 - 计算题》 1 题型全部概况2 时间管理2.1 关键路径法 CMP2.1.1 原理2.1.2 关键路径的基本问题2.1.3 题目7、题目6 - 正推、反推8、题目7 2.2 PERT&#xff08;计划评审技术&#xff09;2.3 活动排序网络图 3 成本…

CesiumForUnreal、UE5实现限高分析效果

文章目录 1.实现目标2.实现过程2.1 材质2.2 Widget2.3 运行测试3.参考资料1.实现目标 在UE5中基于CesiumForUnreal插件实现简单GIS分析功能中的限高分析效果,GIF动图如下: 2.实现过程 实现限高分析功能的方法可以大致分为两种,一种是修改3DTileset的材质;另一种是基于贴花…

gitee同一台电脑使用多个账号的问题

官方文档&#xff1a;https://gitee.com/help/articles/4238#article-header0 目录 一、通过 https / ssh 协议推拉代码二、通过 https 推拉代码但是存在多个账号的问题三、通过 ssh 推拉代码四、Git配置多个SSH-Key五、TortoiseGit客户端 一、通过 https / ssh 协议推拉代码 …

Eplan 部件库导入部件的方法

1. 部件宏文件如何下载 1.1 西门子部件宏文件下载 EPLAN 的部件库是可以更新的,一般元器件厂商会提供其部件文件,以 SIEMENS 为例 进入网站,点击EPLAN 的图标 https://www.automation.siemens.com/bilddb/index.aspx?lang=en 在订货号中输入所需部件订货号,点击搜索。点…

超快速搭建Vue3 + Vite + Cesium 开发环境

发现一个大神写的插件&#xff0c;使用非常方便 GitHub - nshen/create-cesium: &#x1f30f; Create blazing fast Cesium apps with no configuration.&#x1f30f; Create blazing fast Cesium apps with no configuration. - GitHub - nshen/create-cesium: &#x1f30…

leetcode刷题之有关树的算法

144.二叉树的前序遍历 方法一:递归 var preorderTraversal function(root) {let arr []const preorder root >{//递归的出口if(rootnull){return}arr.push(root.val)preorder(root.left)preorder(root.right)}preorder(root)return arr };方法二&#xff1a;迭代 使用栈…