IT廉连看——C语言——循环语句

IT廉连看——C语言——循环语句

循环语句分为三种:

  • while

  • for

  • do while

一、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 语句的基本语法,那我们再了解一下:

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介绍

//continue 代码实例1
#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

//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语句的判断部分。进行下一次循环的入口判断。

再看几个代码:

//代码什么意思?
//代码1
#include <stdio.h>
int main()
{int ch = 0;while ((ch = getchar()) != EOF)putchar(ch);return 0;
}
这里的代码适当的修改是可以用来清理缓冲区的.
//代码2
#include <stdio.h>
int main()
{char ch = '\0';while ((ch = getchar()) != EOF){if (ch < ‘0’ || ch > ‘9’)continue;putchar(ch);}return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、

[IT廉连看]  

二、for循环

我们已经知道了while循环,但是我们为什么还要一个for循环呢?

首先来看看for循环的语法:

2.1 语法

for(表达式1; 表达式2; 表达式3)循环语句;

表达式1

表达式1为初始化部分,用于初始化循环变量的。

表达式2

表达式2为条件判断部分,用于判断循环时候终止。

表达式3

表达式3为调整部分,用于循环条件的调整。

实际的问题:

使用for循环 在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{int i = 0;//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)for(i=1; i<=10; i++){printf("%d ", i);}return 0;
}

for循环的执行流程图:

现在我们对比一下for循环和while循环。

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{printf("hehe\n");i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{printf("hehe\n");
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较

远,这样

查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

2.2 break和continue在for循环中

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

但是还是有些差异:

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

2.3 for语句的循环控制变量

建议:

  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

2.4 一些for循环的变种

#include <stdio.h>
int main()
{//代码1for(;;){printf("hehe\n");}//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。//代码2int i = 0;int j = 0;//这里打印多少个hehe?for(i=0; i<10; i++){for(j=0; j<10; j++){printf("hehe\n");}}//代码3int i = 0;int j = 0;//如果省略掉初始化部分,这里打印多少个hehe?for(; i<10; i++){for(; j<10; j++){printf("hehe\n");}}//代码4-使用多余一个变量控制循环int x, y;for (x = 0, y = 0; x<2 && y<5; ++x, y++){printf("hehe\n");}return 0;
}

[IT廉连看]  

2.5 一道笔试题

//请问循环要循环多少次?
#include <stdio.h>
int main()
{int i = 0;int k = 0;for(i =0,k=0; k=0; i++,k++)k++;return 0;
}

[IT廉连看]  

三、do...while()循环

3.1 do语句的语法:

do循环语句;
while(表达式);

3.2 执行流程

3.3 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

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

3.4 do while循环中的break和continue

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

[IT廉连看]  

四、练习

  1. 计算 n的阶乘。

  2. 计算 1!+2!+3!+……+10!

  3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)

  4. 编写代码,演示多个字符从两端移动,向中间汇聚。

  5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则

    提示登录成,如果三次均输入错误,则退出程序。

4.1 练习参考代码:

//代码1
//编写代码,演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
int main()
{char arr1[] = "welcome to bit...";char arr2[] = "#################";int left = 0;int right = strlen(arr1)-1;printf("%s\n", arr2);//while循环实现while(left<=right){Sleep(1000);arr2[left] = arr1[left];arr2[right] = arr1[right];left++;right--;printf("%s\n", arr2);}//for循环实现for (left=0, right=strlen(src)-1; left <= right; left++, right--){Sleep(1000);arr2[left] = arr1[left];arr2[right] = arr1[right];printf( "%s\n", target);}retutn 0;
}
//代码2
int main()
{char psw[10] = "" ;int i = 0;int j = 0;for (i = 0; i < 3 ; ++i){printf( "please input:");scanf("%s", psw);if (strcmp(psw, "password" ) == 0)break;}if (i == 3)printf("exit\n");elseprintf( "log in\n");
}

[IT廉连看]  

4.2 折半查找算法

比如我买了一双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让

你猜,你会怎么猜?

答案:你每次猜中间数。

代码实现:

//实现在主函数内:
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int left = 0;int right = sizeof(arr)/sizeof(arr[0])-1;int key = 7;int mid = 0;while(left<=right){mid = (left+right)/2;if(arr[mid]>key){right = mid-1;}else if(arr[mid] < key){left = mid+1;}elsebreak;}if(left <= right)printf("找到了,下标是%d\n", mid);elseprintf("找不到\n");}return -1;//找不到
}

[IT廉连看]  

4.3 猜数字游戏实现

参考代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{printf("**********************************\n");printf("*********** 1.play     **********\n");printf("*********** 0.exit     **********\n");printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{int random_num = rand()%100+1;int 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;}}
}
int main()
{int input = 0;srand((unsigned)time(NULL));do{menu();printf("请选择>:");scanf("%d", &input);switch(input){case 1:game();break;case 0:break;default:printf("选择错误,请重新输入!\n");break;}}while(input);return 0;
}

[IT廉连看]  

五、goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过

程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语言真正适合的场景如下:

for(...)for(...){for(...){if(disaster)goto error;}}…
error:if(disaster)// 处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

一个关机程序

#include <stdio.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;}return 0;
}

而如果不适用goto语句,则可以使用循环:

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

[IT廉连看]  

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

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

相关文章

源代码管理——码云Gitee

目录 Git安装 Gitee配置SSH 源代码管理常规操作 1.idea配置git 2.常规操作 Git安装 安装Git是进行源代码管理的基本步骤之一。以下是在本地安装Git的通用步骤&#xff0c;适用于Windows系统&#xff1a; 下载Git安装程序: 访问Git官网的下载页面&#xff1a;Git官网下载地…

选择适合你的编程语言

引言 在当今瞬息万变的技术领域中&#xff0c;选择一门合适的编程语言对于个人职业发展和技术成长至关重要。每种语言都拥有独特的设计哲学、应用场景和市场需求&#xff0c;因此&#xff0c;在决定投入时间和精力去学习哪种编程语言时&#xff0c;我们需要综合分析多个因素&a…

Redis(十四)双写一致性工程案例

文章目录 问题概述canal功能安装部署mysql配置canal服务端canal客户端&#xff08;Java程序&#xff09; 问题概述 canal https://github.com/alibaba/canal 功能 数据库镜像数据库实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据…

爬取数位观察城市数据知识总结

# 抓取数位观察中城市的GDP,公交车数量&#xff0c;户籍人口 # url "https://www.swguancha.com/home/query-city-page" # 1.找数据 # 1.1如果数据在页面源代码里&#xff0c;则访问&#xff0c;在本案例中并没有在源代码中 # 1.2如果数据不在页面源代码里&#xff…

zookeeper快速上手

文章目录 1. docker安装zookeeper2. zookeeper基本使用&#xff08;Linux&#xff09;新增结点查看命令修改命令删除命令其他命令 3. zookeeper ACL(Linux)ACL 命令行ACL 构成ACL 特性world授权模式ip授权模式auth模式digest授权模式 4. IDEA操作Zookeeper连接zookeeper创建结点…

QT Widget自定义菜单

此文以设置QListWidget的自定义菜单为例&#xff0c;其他继承于QWidget的类也都可以按类似的方法去实现。 1、ui文件设置contextMenuPolicy属性为CustomContextMenu 2、添加槽函数 /*** brief onCustomContextMenuRequested 右键弹出菜单* param pos 右键的坐标*/void onCusto…

C++的文件操作详解

目录 1.文本文件 1.写文件 2.读文件 2.二进制文件 1.写文件 2.读文件 1.文本文件 1.写文件 #include<bits/stdc.h> #include<fstream> using namespace std;int main() {ofstream ofs;ofs.open("text.txt",ios::out);ofs << "abc&qu…

Curator基本使用

文章目录 1. 基本操作1.1 建立连接1.2 创建结点1.3 查询结点查询数据查询子结点查看结点信息 1.4 修改结点普通修改带乐观锁的修改 1.5 删除删除单个结点删除带子结点的结点必须成功的删除带回调函数的删除 2. 监听器事件2.1 NodeCache单一结点连续监听2.2 PathChildrenCache监…

“从根到叶:深入理解排序数据结构“

一.排序的概念及引用 1.1排序的概念 排序是指将一组数据按照一定的规则重新排列的过程。排序的目的是为了使数据具有有序性&#xff0c;便于查找、插入、删除等操作&#xff0c;提高数据的组织和管理效率。 稳定性是指如果序列中存在相等元素&#xff0c;在排序完成后&#…

300分钟吃透分布式缓存-12讲:为何MC能长期维持高性能读写?

内存管理 slab 机制 讲完淘汰策略&#xff0c;我们接下来学习内存管理 slab 机制。 Mc 内存分配采用 slab 机制&#xff0c;slab 机制可以规避内存碎片&#xff0c;是 Mc 能持续高性能进行数据读写的关键。 slabclass Mc 的 slab 机制是通过 slabclass 来进行运作的&#x…

程序媛的mac修炼手册-- 小白入门Java篇

最近因为要用CiteSpace做文献综述&#xff0c;间接接触Java了。所以&#xff0c;继Python、C之后&#xff0c;又要涉猎Java了。刺激&#xff01;&#xff01; 由于CiteSpace与Java要求版本高度匹配&#xff0c;有个匹配详情明天为大家讲解。总之&#xff0c;我的Java之旅开始于…

冲击大厂算法面试=>链表专题【链表删除】

冲击大厂算法面试>链表专题【链表删除】 本文学习目标或者巩固的知识点 学习如何删除链表中的某个节点 如何删除valk的节点如何删除倒数第n个节点 学习如何删除链表中的某些节点 涉及头节点问题如何解决 提前说明&#xff1a;算法题目来自力扣、牛客等等途径 &#x1f7e…

java课设之简易版客房管理系统(mvc三层架构)

&#xff08;一&#xff09;、系统概述&#xff1a; 客房管理系统是一个用于管理酒店客房信息的程序&#xff0c;主要功能包括客房信息录入、客房状态查询、客房订单管理&#xff0c;客房的预定功能。 &#xff08;二&#xff09;、功能说明&#xff1a; 1.登录&#xff1a;管理…

【Pytorch】从MoCo看无监督对比学习;从SupCon看有监督对比学习

目录 无监督对比学习&#xff1a;Moco文章内容理解代码解释 有监督对比学习&#xff1a;Supervised Contrastive Learning文章内容理解 无监督对比学习&#xff1a;Moco 文章内容理解 以下内容全部来自于&#xff1a;自监督学习-MoCo-论文笔记. 侵删 论文&#xff1a;Momentu…

一种基于javax.max注解的能力增强技术

目录 现有框架的不足之处 我的改进内容 改进的成果 现有框架的不足之处 Max是javax.validation包中的一个常用注解&#xff0c;用于对传入参数进行最大值校验。但是其校验区间为闭区间&#xff0c;且不支持修改&#xff0c;如&#xff1a;Max(2)&#xff0c;表示表示传入参…

【解决(几乎)任何机器学习问题】:特征选择

当你创建了成千上万个特征后&#xff0c;就该从中挑选出⼏个了。但是&#xff0c;我们绝不应该创建成百上千个⽆⽤的特征。特征过多会带来⼀个众所周知的问题&#xff0c;即 "维度诅咒"。如果你有很多特征&#xff0c;你也必须有很多训练样本来捕捉所有特征。什么是 …

DC与DCT DCG的区别

先进工艺不再wire load model进行静态时序分析&#xff0c;否则综合结果与后端物理电路差距很大&#xff0c;因此DC综合工具也进行了多次迭代&#xff0c;DC工具有两种模式&#xff0c;包括wire load mode和Topographical Mode&#xff0c;也就是对应的DC Expert和DC Ultra。 …

JavaScript从零写网站《一瞬》开发日志20240223

产品介绍 一个无需注册能随时发布图片并配一段文字介绍的app&#xff0c;有时间线&#xff0c;用户在主页面向下滑动&#xff0c;可以看到被发布的若干图片&#xff0c;并且能够在每一个发布处做基本互动——评论&#xff0c;点赞 编程语言 本产品使用htmlcssJavaScript开发…

【数据结构】每天五分钟,快速入门数据结构(二)——链表

目录 一 构建一个单向链表 二 特点 三 时间复杂度 四 相关算法 1.判断链表是否成环及成环位置 2.链表反转 五 Java中的LinkedList 类 1.使用 2.LinkedList 方法 一 构建一个单向链表 // 设计链表结构class ListNode {int val;ListNode next;ListNode(){}ListNode(int…

《UE5_C++多人TPS完整教程》学习笔记24 ——《P25 完善菜单子系统(Polishing The Menu Subsystem)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P25 完善菜单子系统&#xff08;Polishing The Menu Subsystem&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&…