C语言分支和循环

目录

一.分支

一.if

二.if else

三.if else嵌套

四.else if

五.switch语句

 二.循环

一.while  (do while)break :

二.for函数:

三.goto语句:

四.猜数字:

 


一.分支

一.if

if要条件为真才执行为假不执行而且if只能执行后面第一条如果要执行多条就得用{}包起来

下面if的判断条件是a等于2就为真执行打印yes否则为假不执行直接跳过printf执行下一条语句

0表示假非0表示真

int main()
{
int a=1;
if(a==2)
printf("yes");
}

下面的代码是输入一个数如果小于5为真执行if{}里的俩条printf语句如果大于或等于5就不执行if{}里的语句直接跳过

int main()
{int a;scanf("%d",&a);if(a<5){printf("yes\n");printf("yes\n");}
}

二.if else

这段代码是判断输入的a是否为1,如果是1为真就只执行printf("1");不执行printf("a不等于1");如果输入的数不是1就不执行if里的只执行else里的内容,else是后离他最近的if匹配的

#include<stdio.h>
int main()
{int a;scanf("%d",&a);if(a==1){printf("1");}else {printf("a不等于1");}
}

三.if else嵌套

代码风格很重要比如这个和小他下面的就有区分if else匹配的难度了可以多用{}

#include<stdio.h>
int main()
{int a=0;int b=0;if(a==2){if(b==2){printf("a,b的值都是2");}}else{if(b==2){printf("只有b是2");}else{printf("都不等于2");}}
}
#include<stdio.h>
int main()
{int a=0;int b=0;if(a==2)if(b==2)printf("a,b的值都是2");elseif(b==2)printf("只有b是2");elseprintf("都不等于2");}

四.else if

下面程序执行后输入1就执行if(a==1)的语句并不再执行他的其他分支else if  ,a为2就只执行else if(a==2)里的内容并不再继续执行后面的分支 ,如果a不等于1,2,3就执行else里的内容

当然也可以把最后一个else不要

#include<stdio.h>
int main()
{int a;scanf("%d",&a);if(a==1){printf("1");}else if(a==2){printf("2"):}else if(a==3){printf("3");}else{printf("没得");}
}

分支语句中也可以嵌套分支比如:

int main()
{ 
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<=10)
{if(b<=10)   {if(c<=10){printf("a,b,c中全是小于等于10的值");}else{pintf("a,b,c中有2个小于等于10的值");}}else{printf("a,b,c中有1个上小于等于十的值");}
}
else
{printf("a,b,c中一个以上大于等于10的值");
}
}

五.switch语句

switch语句也是一种分支语句,常常用于多分支情况:

比如

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期七

switch语句一般是从匹配case的地方开始执行

break;是用来跳出语句的如果没有break;则会以只从开始执行的语句执行下去知道遇到break;或者执行完

#include<stdio.h>
int main()
{int day=0;scanf("%d",&day);switch(day){case 1:printf("星期一\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;}
}

如果表达式的值与所有的case标签的值都不匹配也就是所有的语句都被条过而已,但是如果你并不想忽略不匹配所有标签的表达式的值可以再语句列表中增加一条defaul语句当switch表达式不匹配所有的case标签的值是这个default就会执行所以每个switch语句中只能出现一条default但是他可以出现在switch里的列表的任何位置,switch允许嵌套

#include<stdio.h>
int main()
{int n=1;int m=2;switch(n){case 1:m++;case 2:n++;case 3:switch(n){case 1:n++;case 2:m++;n++;break;}case 4:m++;break;default:break;}printf("m=%d,n=%d\n",m,n);
}

    

 二.循环

一.while  (do while)break :

如果要打印1-100的数字用可以用while来执行流程是这样的先判断成立进去执行里面的代码执行完之后就回到while这继续判断如果成立继续进去不成立跳过这端语句

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

在while语句中的break的使用:下面的带码只会打印1,2,3,4因为到5时就会到if里的break那退出了后面的内容不会执行

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

continue的介绍:执行到continue里就会直接结束本次循环回到while里重新判断后面的代码依然不会执行,这个成是进入之后i的值先加1后判断i==5,直到i等于5进入执行continue后会不执行后面的代码直接回到循环判断那所只打印2,3,4,6,7,8,9,10

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

do while是先进入执行执行完了再判断如果成立就继续执行否则直接退出循环,执行流程是这样的:

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

break和continue在do while的应用:这里是打印了1,2,3,4,6,7,8,9因为print在break前面所已有9

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

二.for函数:

for(表达式1;表达式2;表达式3),表达式1为初始化部分用于初始化循环变量的,表达式2是判断条件部分用于判断循环时候终止,表达式3为调整部分,用于循环条件的调整,使用for在屏幕上打印1-10的数字是这样写的,执行流程是这样的。

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

对比for循环和while循环:可以发现while循环中依然存在循环的三个必须条件,但是由于风格问题使得三个部分可能很偏离较远查找修改就不够集中和方便所以,for循环的风格更胜一筹;for使用的频率也最高

#include<stdio.h>
int main()
{int i=0;i=1;//功能相同while(i<=10)//判断部分{printf("hehe\n");i=i+1;//调整部分}//使用for实现了相同的功能for(i=1;i<=10;i++){printf("hehe\n");}
}

break和continue在for循环中的使用:他们的意义和在while循环中是一样的,但是因为for的写法不同所以使用中和while中使用还是有区别的,break是打印到5就结束了,continue是不打印5其他的都打印

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

for循环的初始化部分,判断,调整部分是可以省略的但是不建议初学时省略,容易导致问题

三.goto语句:

C语言提供了可以随意滥用的goto语句和标记跳转标号,goto语句最常用在嵌套结构过深的程序中,如依次跳出多层循环,跳出多层循环使用break是达不到目的,他只能从最内层循环退到上一层的循环,下面使用goto语句的一个例子,一个关机程序

#include<stdio.h>
#include<stdlib.h>
int main()
{char input[10]={0};system("shutdown -s -t 60");
again:printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");scanf("%s",input);if(0==strcmp(input,"我是猪")){system("shutdown -a");}else{goto again;}
}

四.猜数字:

是用do while来反复游玩 switchcase选择是玩还是不玩  if来判断输入  rand和srand随机生成数后余100就得出了100以内的随机数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{int input = 0,random_num = rand() % 100 + 1;srand((unsigned)time(NULL));do{printf("**********************\n");printf("******  1.play   *****\n");printf("******  0.exit   *****\n");printf("**********************\n");printf("请选择>:");scanf("%d", &input);switch (input){case 1:input = 0;while (1){printf("请输入猜的数字>:");scanf("%d", &input);if (input > random_num){printf("猜大了\n");}else if (input < random_num){printf("猜小了\n");}else{printf("恭喜你,猜对了\n");break;}}case 0:break;default:printf("选择错误,请重新输入!\n");break;}} while (input);
}

 

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

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

相关文章

Ubuntu共享文件夹创建及访问 Windows 最简单的方法!

第一步&#xff1a;在Windows下随便建一个文件夹&#xff0c;这里我是在D盘建了一个文件夹叫share 第二步&#xff1a;安装VMware tools&#xff0c;这里就不细说了 第三步&#xff1a;vmware的上方选择 虚拟机-->设置 第四步&#xff1a; 在虚拟机设置里面选择 选项-…

EFcore的实体类配置

1 约定配置 约定大于配置&#xff0c;框架默认了许多实体类配置的规则&#xff0c;在约定规则不满足要求时&#xff0c;可以显示地定义规则 1 数据库表明在不指定的情况下&#xff0c;默认使用的是数据库上下文类【DBContext】中DbSet 的属性名&#xff1b; 2 数据库表列的名字…

19、【qlib】【其他组件/特性/主题】任务管理

简介 工作流部分介绍了如何松耦合地运行研究流程,但使用qrun时只能执行单个任务。为了自动地生成和执行不同的任务,任务管理模块提供了一整套流程,包括任务生成、任务存储、任务训练及任务收集。借助这个模块,用户可以在不同时间段、不同损失函数或甚至不同模型下自动运行…

摘录笔记——2024年3月22日

目录 一、背景 1.1 新人的选择困局 1.2 高人才密度环境下普通员工的成长效率困局 1.3 业务发展和个人成长的二元对立困局 1.4 中年打工人低费效比引发的职场生涯终结困局 二、人的本质 2.1 人的本质的定义 2.2 由“人的本质”引出的几个关键过程 2.2.1 认知指引实践&a…

IPV6协议之RIPNG

目录 前言&#xff1a; 一、RIPNG与RIP的区别 二、如何配置RIPNG 如何解决RIPNG环路问题呢&#xff1f; 控制RIPNG的选路 1、修改RIPNG默认优先级 2.配置接口附加开销值从而干涉RIPNG的选路 RIPNG拓展配置 1.RIPNG的认证 配置RIPNG进程下的IPsec认证&#xff1a; 配…

C++默认构造函数(二)

目录 构造函数补充 构造函数初始化列表的使用 赋值运算符重载函数 运算符重载函数介绍 运算符重载函数的使用 赋值运算符重载函数 赋值运算符重载函数的使用 拷贝构造函数和赋值运算符重载函数 重载前置和后置 前置 后置 重载流插入<<与流提取>> 流插…

Navicat 干货 | 探索 PostgreSQL 的外部数据包装器和统计函数

PostgreSQL 因其稳定性和可扩展性而广受青睐&#xff0c;为开发人员和数据管理员提供了许多有用的函数。在这些函数中&#xff0c;file_fdw_handler、file_fdw_validator、pg_stat_statements、pg_stat_statements_info 以及 pg_stat_statements_reset 是其中的重要函数&#x…

鸿蒙:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二层的属性变化是无法观察到的。这就引出了Observed/Object…

AJAX介绍使用案例

文章目录 一、AJAX概念二、AJAX快速入门1、编写AjaxServlet&#xff0c;并使用response输出字符&#xff08;后台代码&#xff09;2、创建XMLHttpRequest对象&#xff1a;用于和服务器交换数据 & 3、向服务器发送请求 & 4、获取服务器响应数据 三、案例-验证用户是否存…

由浅入深一步步了解什么是哈希(概念向)

文章目录 什么是哈希哈希函数直接定址法除留余数法 哈希冲突闭散列线性探测法二次探测法负载因子和闭散列的扩容 开散列开散列的扩容 非整形关键码 什么是哈希 我们来重新认识一下数据查找的过程&#xff1a; 在顺序结构以及平衡树中&#xff0c;记录的关键码与其存储位置之间…

【自然语言处理】统计中文分词技术(一):1、分词与频度统计

文章目录 一、词与分词1、词 vs 词素2、世界语言分类 二、分词的原因与基本原因1、为什么要分词2、分词规范3、分词的主要难点-切分歧义如何排除切分歧义利用词法信息利用句法信息利用语义信息利用语用、语境信息 4、分词的主要难点-未登录词未登录词如何识别未登录词 三、分词…

Docker入门到实践之环境配置

Docker入门到实践之环境配置 docker 环境安装 Ubuntu/Debian: sudo apt update sudo apt install docker.ioCentOS/RHEL: sudo yum install dockerArch Linux: sudo pacman -S docker如果未安装成功&#xff0c;或者env的path未设置成功&#xff0c;运行时会报错 Bash: Do…

[HackMyVM]靶场 Slowman

kali:192.168.56.104 靶机:192.168.56.132 端口扫描 # nmap 192.168.56.132 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-24 15:28 CST Nmap scan report for 192.168.56.132 Host is up (0.00066s latency). Not shown: 995 filtered tcp ports (no-response) …

NX二次开发-调内部函数创建进度条MT_create_progress_bar

一、概述 最近学习NX二次开发&#xff0c;看到NX打开装配模型或者加载模型时会显示进度条的问题&#xff0c;个人觉得很有意思&#xff0c;然后参考阿飞2018中的文章进行学习。 二、代码解析 //User Defined Header File#include <uf.h>#include <uf_ui.h>#includ…

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法 需求&#xff1a;需要一个搜索框&#xff0c;可以选择员工&#xff0c;&#xff08;员工人数多无法一次性获取&#xff0c;全部放入options中&#xff09;&#xff0c;所以需要使用搜索功能&#xff0c;而且是可以多…

HarmonyOS NEXT应用开发之ArkWeb同层渲染

介绍 该方案展示了ArkWeb同层渲染&#xff1a;将系统原生组件直接渲染到前端H5页面上&#xff0c;原生组件不仅可以提供H5组件无法实现的一些功能&#xff0c;还能提升用户体验的流畅度 效果图预览 使用说明 进入页面即可看到同层渲染效果&#xff0c;Text&#xff0c;searc…

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅰ)

1.SQL概述 SQL&#xff08;Structured Query Language&#xff09;结构化查询语言&#xff0c;是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 SQL的动词 基本概念 基本表 &#xff1a;本身独立存在的表&#xff1b; SQL中一个关系就对应一个基本表&am…

SecureCRT:高效安全的远程连接工具

SecureCRT是一款功能强大的终端仿真工具&#xff0c;主要用于连接和运行包括Windows、UNIX和VMS在内的远程系统。它支持多种协议&#xff0c;如SSH1、SSH2、Telnet、SFTP、Rlogin、Serial、SCP等&#xff0c;确保用户与目标设备之间的通信安全&#xff0c;并防止网络攻击和窥探…

HTTP系列之HTTP缓存 —— 强缓存和协商缓存

文章目录 HTTP缓存强缓存协商缓存状态码区别缓存优先级如何设置强缓存和协商缓存使用场景 HTTP缓存 HTTP缓存时利用HTTP响应头将所请求的资源在浏览器进行缓存&#xff0c;缓存方式分两种&#xff1a;强缓存和协商缓存。 浏览器缓存是指将之前请求过的资源在浏览器进行缓存&am…

安卓findViewById 的优化方案:ViewBinding与ButterKnife(一)

好多小伙伴现在还用findViewById来获取控件的id, 在这里提供俩种替代方案&#xff1a;ViewBinding与ButterKnife&#xff1b; 先来说说ButterKnife ButterKnife ButterKnife是一个专注于Android系统的View注入框架&#xff0c;在过去的项目中总是需要很多的findViewById来查…