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 应用或库…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

