C语言基础——循环(2)+关机程序
欢迎点赞支持
个人主页:励志不掉头发的内向程序员;
专栏主页:C语言基础;
文章目录
目录
前言
一、for循环的补充
二、循环的嵌套
1、嵌套的介绍
1.1 练习:
题目解析:
优化:
三、goto语句
1、goto介绍
2、使用方式
四、关机程序
1.、原理
2.、实现
总结
前言
对于上一章节的循环的学习,相信大家对于循环已经有了自己的一些理解,那么我们这一章节就来看看循环的嵌套吧,就是一个循环套着一个循环,本质上还是循环,但是在理解方面可能会更加的困难,我相信小伙伴们肯定已经跃跃欲试了吧,那就让我们来一起看看吧。
一、for循环的补充
上一节课讲了说for循环是建立在while循环的缺陷的基础上的,把while循环的三个关键点放在一起,这样就解决了关键点难以查找的问题,while循环的三个关键点并不是一定要存在的,而是可以缺少的,但是可能会使程序死循环,那么for循环呢,是不是也是这样的呢,我们来尝试一下吧。
int main()
{int i = 0;for (; i < 10; i++){printf("%d ", i);}return 0;
}
我们可以看到在这个地方初始化消失了,但是由于我们在前面已经定义了,所以说我们就可以不再定义一次而直接写判断条件和调整方式,和初始化直接写在for循环里面没有什么区别。

其他也是同理,但是要注意,如果把后面的调整或者判断条件删了,程序就有可能陷入死循环(判断部分缺失就意味着程序恒成立),所以如果要删除的话一定要谨记。
二、循环的嵌套
1、嵌套的介绍
我们之前学了for循环和while循环等,嵌套其实就是在这些循环的基础上,在其内部再次使用一个循环,其实在语法上,没有什么其他的用法,一般来说我们在使用循环时要用到这三种循环的嵌套才能更好的解决问题。所以说我们就从一些练习来看看循环的嵌套的使用方法和精妙之处吧。
1.1 练习:
找出1~100之间的素数???
我们都知道(可能)素数就是除了1和它本身就没有其他的数字能把它整除,所以我们应该怎么解决这一问题呢?
题目解析:
我们既然知道了原理那就应该有思路,不就是看看有没有除了1和它本身的数字可以和它整除嘛,这样我们是不是就可以去试试循环,假如我们要看看a是不是素数,那就看看从1到a有没有其他的数字可以和a整除嘛,如果有的话那就不是素数,如果没有的话就是素数了。但是我们要求的可不是一个数a啊,是要找到从1~100中的素数啊,那怎么办呢,我们想想要是再有一个循环就好了,所以说这时嵌套循环就来了,我们先写两个循环,一个实现找一个数的素数,再一个实现从1~100循环。
1.
int main()
{int a = 13;int flag = 1;for (int i = 2; i <= a - 1; i++){if (a % i == 0){flag = 0;break;}}if (flag){printf("%d ", a);}return 0;
}
这行代码表示的就是如何判断出是否是素数的代码,我想大家可能有一些地方看不懂,但是没有关系,我来给大家讲解一下,我们知道素数就是除了1和它本身之外没有其他的数可以将它整除的数字,所以说我们可以让a去取除了1和a以外的数字的余数,如果有余数为0的数字出现就证明它不是素数,反之则证明了它是素数。所以我们就可以用一个循环去一个一个的试,flat的作用是假设,假设a是素数,如果a不是素数的话就让flat = 0;这样我们跳出循环时就可以判断a到底是不是素数了。
2.
int main()
{for (int i = 1; i <= 100; i++){printf("%d ", i);}return 0;
}
这里很显然就是一个从1~100的遍历。
如果我们把这两个函数嵌套一下,那就即实现了1~100的遍历,也实现了求它们的素数,我们可以来尝试一下。
int main()
{for (int i = 1; i <= 100; i++){int flag = 1;for (int j = 2; j <= i - 1; j++){if (i % j == 0){flag = 0;break;}}if (flag){printf("%d ", i);}}return 0;
}
这里我们可以看到,将两个循环嵌套起来,既实现了找素数的功能,也可以一次性找很多个素数。

这样这一道题就解出来了啦,但是我们可以看看有没有什么办法能让我们的计算机轻松一点呢?就比如说少循环几次呢也就是我们所说的优化程序呢?
优化:
我们都知道,如果不是素数,那么必然是有可以整除的数的,就比如8 = 2 * 4;但是我们再想想,是不是只要找到前面的数就不需要找后面的数了呢,那么我们取中间值就可以了,中间值是取我们的平方根就好了。
#include<math.h>
int main()
{for (int i = 1; i <= 100; i++){int flag = 1;for (int j = 2; j < sqrt(i); j++){if (i % j == 0){flag = 0;break;}}if (flag){printf("%d ", i);}}return 0;
}
我们来看看取平方根的方式吧,本质上是一个sqrt函数,用法非常简单,就是这样

将我们要取平方根的数字放到它的括号里面就可以了,但是它是在一个math的头文件里的,所以要使用时我们得带上。
![]()

还可以优化吗?我们再想想,emmmmm~~,是不是只有奇数才可能是素数,而偶数是绝对不可能的呢?那我们来试试看吧
int main()
{for (int i = 1; i <= 100; i += 2){int flag = 1;for (int j = 2; j < sqrt(i); j++){if (i % j == 0){flag = 0;break;}}if (flag){printf("%d ", i);}}return 0;
}
好啦,现在应该不能再优化了,那么这个程序就写完啦。

我们要知道,一个题目的解法肯定是不止一种的,在面对很多种解法是应该怎么办呢,肯定就是选择最好的那种。
三、goto语句
1、goto介绍
goto从字面上看就是去哪里的意思,其实使用方式也差不多,就是去往自己指定的地方,如果指定的地方是在前面,那就会在走一次前面的程序,可能会导致死循环,如果是指定后面,那就会跳过一些程序直接到指定的位置,就是因为goto语句跳来跳去的,所以我们一般不频繁的使用它,因为很容易会导致直接思想混乱。
2、使用方式
1.
goto ***;
***:
2.
***:
goto ***;
使用方法很简单,就是goto后面用一个自己命名的内容然后再跳到自己命名的内容的地方去。
例如:
int main()
{printf("呵呵呵\n");goto next;printf("哈哈哈\n");
next:printf("好好好\n");return 0;
}
这一串代码就是我命名了一个next的地方让goto跳到next的程序去。所以说它会不输出哈哈哈而直接输出好好好。

如果让goto往回跳的话很容易产生死循环,所以说要尽量小心使用。
int main()
{
next:printf("呵呵呵\n");goto next;printf("哈哈哈\n");printf("好好好\n");return 0;
}

四、关机程序
在这里教大家一个非常有意思的程序,可以整蛊一下自己的朋友,那就是让他说自己是猪,不然就关机它的电脑,接下来我们来看看怎么实现吧。
1.、原理
其实在我们计算机中按Window+R后会出现一个窗口

在这个窗口输入cmd后回车就可以打开计算机的底层菜单。

在这个菜单中可以对计算机进行指令,比如说创建菜单啊,关机电脑啊之类的,大家可以自己研究研究,但是在这里输入shutdown -t 60就可以让计算机在60秒后关机,如果说输入shutdown -a就可以取消电脑关机,我们在知道这些以后如何在C语言中实现呢?这得依靠一个system的库函数来实现,它需要一个叫stdlib的头文件来使用。
2.、实现
#include<string.h>
#include<stdlib.h>
int main()
{char a[20] = { 0 };system("shutdown -s -t 60");
again:printf("你的电脑还有1分钟关机,如果不想关机,请输入:我是猪\n");scanf("%s", a);if (strcmp(a, "我是猪") == 0){system("shutdown -a");}else{goto again;}return 0;
}
实现起来还是蛮简单的,但是我们要注意,字符串的比较不是直接用==来比较,而是用一个strcmp的库函数来比较,而这个库函数在string的头文件之中,使用方式如下

将要比较的内容放在里面,如果它们相同,那返回值就为0。
总结
本节课主要是说明了循环的嵌套和对上一章节循环的完善,循环到此就全部结束啦,我们下一章节就来讲讲数组吧,数组部分也有蛮多内容的,期待小伙伴的前来关注,谢谢小伙伴们啦。如果有哪里写的不好请指出。感谢。
相关文章:
C语言基础——循环(2)+关机程序
欢迎点赞支持 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 目录 前言 一、for循环的补充 二、循环的嵌套 1、嵌套的介绍 1.1 练习: 题目解析: 优化: 三、goto语句 1、go…...
cnVcXsrv 21.1.13.1—VcXsrv 21.1.13中文版本简单说明~~
对于VcXsrv的使用目的和用途相信大家都很了解。前不久VcXsrv做了更新,并且将项目托管到github上了。链接如下: VcXsrv: Windows X-server based on the xorg git sourceshttps://github.com/marchaesen/vcxsrv也可以简单查看如下链接: VcXs…...
心链2---前端开发(整合路由,搜索页面,用户信息页开发)
心链——伙伴匹配系统 接口调试 说书人📖:上回书说到用了两种方法查询标签1.SQL查询,2.内存查询;两种查询效率是部分上下,打的是难解难分,是时大地皴裂,天色聚变,老祖斟酌再三最后决…...
wordpress主题模板兔Modown 9.1开心版附送erphpdown v17.1插件
Modown 9.1开心版是一款模板兔开发的wordpress主题可,持续更新多年,优秀的资源下载类主题该模板基于Erphpdown,可以销售软件、视频教程、文章等等,通过主题和插件结合可以实现付费下载、付费阅读等功能,配合模板兔的一…...
openai api的初次尝试
不懂已经不去百度了,现在直接问chatgpt就解决绝大多数问题了。 OpenAI API目前还没有官方支持的npm库,但是您可以使用现有的第三方npm库进行OpenAI API的访问和使用。这里提供一个npm库 openai-node 的安装和使用方法: 在命令行或终端中使用…...
Distributed Transactions Mit 6.824
Topic1:distributed transactions concurrency control atomic commit 传统计划:事务 程序员标记代码序列的开始/结束作为事务。 事务示例 x 和 y 是银行余额——数据库表中的记录。x 和 y 位于不同的服务器上(可能在不同的银行&#x…...
Redis可视化工具:Another Redis Desktop Manager下载安装使用
1.Github下载 github下载地址: Releases qishibo/AnotherRedisDesktopManager GitHub 2. 安装 直接双击exe文件进行安装 3. 连接Redis服务 先启动Redis服务,具体启动过程可参考: Windows安装并启动Redis服务端(zip包)…...
Parquet文件格式详解(含行、列式存储区别)
Parquet文件格式详解 Parquet 是一种列式存储格式,旨在高效地存储和处理大规模数据集。它被设计用于在大数据生态系统中进行数据存储和分析,如 Apache Hadoop 和 Apache Spark。 行式存储 vs 列式存储 在了解 Parquet 文件格式之前,先来对…...
一文了解https为什么是安全的
目录 前言一、https和http二、http为什么不安全?2.1 http的工作原理2.2 http的明文传输 三、https3.1 加密3.2 身份验证 四、总结 前言 目前绝大多数网站都已经切换到了https,切换的原因很简单,因为它更安全,https未来会完全取代…...
[‘column‘]和[:,‘column‘]的区别
之前,关于numpy和pandas的操作一直不熟悉,对于获取数据中的行,列一直混淆。 df[column] df[column]是 Pandas DataFrame 切片的常用语法,用于选择名为 column 的单个列。它返回一个 Pandas Series 对象。 df.loc[:,column] df[:,…...
icloud如何高效利用
iCloud是Apple提供的一项云存储和云计算服务,能够帮助用户在不同的Apple设备之间同步和共享数据。要高效利用iCloud,可以参考以下几个方面: 自动备份:确保所有重要的Apple设备都开启了iCloud备份功能,这样可以自动将设…...
k8s二进制安装与部署
目录 一、实验目的 二、实验环境 三、实验步骤 3.1 操作系统初始化配置 3.2 部署 docker引擎 3.3 部署 etcd 集群 3.3.1 在 master01 节点上操作 3.3.2 在 node01 节点上操作 3.3.3 在 node02 节点上操作 3.4 部署 Master 组件 3.4.1 在 mast…...
驱动编译报error: negative width in bit-field ‘<anonymous>’错误
错误如下图所示: 代码如下: 问题点:module_param的其他用户的权限参数上。 在Linux中,文件权限由读(r)、写(w)、执行(x)权限组成,分别对应数值4、2、1。 第一位0是占位符,在这里没有意义,因为…...
Go语言的命名规范是怎样的?
文章目录 Go语言的命名规范详解一、标识符命名规范示例代码 二、包名命名规范示例代码 三、变量命名规范示例代码 四、常量命名规范示例代码 五、函数命名规范示例代码 总结 Go语言的命名规范详解 在Go语言中,代码的命名规范对于项目的可读性、可维护性和可扩展性至…...
Vue3骨架屏(Skeleton)
效果如下图:在线预览 APIs 参数说明类型默认值必传animated是否展示动画效果booleantruefalsebutton是否使用按钮占位图boolean | SkeletonButtonPropsfalsefalseavatar是否显示头像占位图boolean | SkeletonAvatarPropsfalsefalseinput是否使用输入框占位图boolea…...
【文末附gpt升级方案】亚马逊与Hugging Face合作:定制芯片低成本运行AI模型的创新探索
亚马逊与Hugging Face合作:定制芯片低成本运行AI模型的创新探索 摘要 本文探讨了亚马逊云部门与人工智能初创公司Hugging Face的合作,旨在通过定制计算芯片Inferentia2在亚马逊网络服务(AWS)上更低成本地运行数千个AI模型。文章首…...
二叉树的链式实现
目录 一、二叉树的基础操作 二、二叉树代码图解 2.1 遍历 2.2 求大小 2.3 创建与销毁 2.4 与队列结合解决问题 三、二叉树C语言源码汇总 二叉树的代码实现运用了函数递归的思想,了解函数递归的知识请见博主的另一篇博客: http://t.csdnimg.cn/Po…...
STM32中断编程入门
文章目录 一、 理论部分1.中断系统2.中断执行流程3.NVIC的基本结构4.EXTI介绍5.AFIO复用IO口 二、实验目的:学习stm32中断原理和开发编程方法。使用标准完成以下任务:(一)实验一 开关控制LED的亮灭1.代码部分2.运行结果 ÿ…...
《我的阿勒泰》读后感
暂没时间写,记录在此,防止忘记,后面补上!!! 【经典语录】 01、如果天气好的话,阳光广阔地照耀着世界,暖洋洋又懒洋洋。这样的阳光下,似乎脚下的每一株草都和我一样,也把身子完全舒展开了。 02、…...
Android.mk简单介绍、规则与基本格式
文章目录 Android.mk与makefile区别Android.mk规则Android.mk基本格式 Android.mk与makefile区别 Android.mk 和 Makefile 都是用于构建代码项目的构建脚本文件,但是它们在特定上下文中有一些区别: Android.mk: Android.mk 是用于构建 Android 应用或库…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

