当前位置: 首页 > news >正文

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)+关机程序

欢迎点赞支持 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 目录 前言 一、for循环的补充 二、循环的嵌套 1、嵌套的介绍 1.1 练习&#xff1a; 题目解析&#xff1a; 优化&#xff1a; 三、goto语句 1、go…...

cnVcXsrv 21.1.13.1—VcXsrv 21.1.13中文版本简单说明~~

对于VcXsrv的使用目的和用途相信大家都很了解。前不久VcXsrv做了更新&#xff0c;并且将项目托管到github上了。链接如下&#xff1a; VcXsrv: Windows X-server based on the xorg git sourceshttps://github.com/marchaesen/vcxsrv也可以简单查看如下链接&#xff1a; VcXs…...

心链2---前端开发(整合路由,搜索页面,用户信息页开发)

心链——伙伴匹配系统 接口调试 说书人&#x1f4d6;&#xff1a;上回书说到用了两种方法查询标签1.SQL查询&#xff0c;2.内存查询&#xff1b;两种查询效率是部分上下&#xff0c;打的是难解难分&#xff0c;是时大地皴裂&#xff0c;天色聚变&#xff0c;老祖斟酌再三最后决…...

wordpress主题模板兔Modown 9.1开心版附送erphpdown v17.1插件

Modown 9.1开心版是一款模板兔开发的wordpress主题可&#xff0c;持续更新多年&#xff0c;优秀的资源下载类主题该模板基于Erphpdown&#xff0c;可以销售软件、视频教程、文章等等&#xff0c;通过主题和插件结合可以实现付费下载、付费阅读等功能&#xff0c;配合模板兔的一…...

openai api的初次尝试

不懂已经不去百度了&#xff0c;现在直接问chatgpt就解决绝大多数问题了。 OpenAI API目前还没有官方支持的npm库&#xff0c;但是您可以使用现有的第三方npm库进行OpenAI API的访问和使用。这里提供一个npm库 openai-node 的安装和使用方法&#xff1a; 在命令行或终端中使用…...

Distributed Transactions Mit 6.824

Topic1&#xff1a;distributed transactions concurrency control atomic commit 传统计划&#xff1a;事务 程序员标记代码序列的开始/结束作为事务。 事务示例 x 和 y 是银行余额——数据库表中的记录。x 和 y 位于不同的服务器上&#xff08;可能在不同的银行&#x…...

Redis可视化工具:Another Redis Desktop Manager下载安装使用

1.Github下载 github下载地址&#xff1a; Releases qishibo/AnotherRedisDesktopManager GitHub 2. 安装 直接双击exe文件进行安装 3. 连接Redis服务 先启动Redis服务&#xff0c;具体启动过程可参考&#xff1a; Windows安装并启动Redis服务端&#xff08;zip包&#xff09…...

Parquet文件格式详解(含行、列式存储区别)

Parquet文件格式详解 Parquet 是一种列式存储格式&#xff0c;旨在高效地存储和处理大规模数据集。它被设计用于在大数据生态系统中进行数据存储和分析&#xff0c;如 Apache Hadoop 和 Apache Spark。 行式存储 vs 列式存储 在了解 Parquet 文件格式之前&#xff0c;先来对…...

一文了解https为什么是安全的

目录 前言一、https和http二、http为什么不安全&#xff1f;2.1 http的工作原理2.2 http的明文传输 三、https3.1 加密3.2 身份验证 四、总结 前言 目前绝大多数网站都已经切换到了https&#xff0c;切换的原因很简单&#xff0c;因为它更安全&#xff0c;https未来会完全取代…...

[‘column‘]和[:,‘column‘]的区别

之前&#xff0c;关于numpy和pandas的操作一直不熟悉&#xff0c;对于获取数据中的行&#xff0c;列一直混淆。 df[column] df[column]是 Pandas DataFrame 切片的常用语法&#xff0c;用于选择名为 column 的单个列。它返回一个 Pandas Series 对象。 df.loc[:,column] df[:,…...

icloud如何高效利用

iCloud是Apple提供的一项云存储和云计算服务&#xff0c;能够帮助用户在不同的Apple设备之间同步和共享数据。要高效利用iCloud&#xff0c;可以参考以下几个方面&#xff1a; 自动备份&#xff1a;确保所有重要的Apple设备都开启了iCloud备份功能&#xff0c;这样可以自动将设…...

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>’错误

错误如下图所示&#xff1a; 代码如下&#xff1a; 问题点&#xff1a;module_param的其他用户的权限参数上。 在Linux中&#xff0c;文件权限由读(r)、写(w)、执行(x)权限组成&#xff0c;分别对应数值4、2、1。 第一位0是占位符&#xff0c;在这里没有意义&#xff0c;因为…...

Go语言的命名规范是怎样的?

文章目录 Go语言的命名规范详解一、标识符命名规范示例代码 二、包名命名规范示例代码 三、变量命名规范示例代码 四、常量命名规范示例代码 五、函数命名规范示例代码 总结 Go语言的命名规范详解 在Go语言中&#xff0c;代码的命名规范对于项目的可读性、可维护性和可扩展性至…...

Vue3骨架屏(Skeleton)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传animated是否展示动画效果booleantruefalsebutton是否使用按钮占位图boolean | SkeletonButtonPropsfalsefalseavatar是否显示头像占位图boolean | SkeletonAvatarPropsfalsefalseinput是否使用输入框占位图boolea…...

【文末附gpt升级方案】亚马逊与Hugging Face合作:定制芯片低成本运行AI模型的创新探索

亚马逊与Hugging Face合作&#xff1a;定制芯片低成本运行AI模型的创新探索 摘要 本文探讨了亚马逊云部门与人工智能初创公司Hugging Face的合作&#xff0c;旨在通过定制计算芯片Inferentia2在亚马逊网络服务&#xff08;AWS&#xff09;上更低成本地运行数千个AI模型。文章首…...

二叉树的链式实现

目录 一、二叉树的基础操作 二、二叉树代码图解 2.1 遍历 2.2 求大小 2.3 创建与销毁 2.4 与队列结合解决问题 三、二叉树C语言源码汇总 二叉树的代码实现运用了函数递归的思想&#xff0c;了解函数递归的知识请见博主的另一篇博客&#xff1a; http://t.csdnimg.cn/Po…...

STM32中断编程入门

文章目录 一、 理论部分1.中断系统2.中断执行流程3.NVIC的基本结构4.EXTI介绍5.AFIO复用IO口 二、实验目的&#xff1a;学习stm32中断原理和开发编程方法。使用标准完成以下任务&#xff1a;&#xff08;一&#xff09;实验一 开关控制LED的亮灭1.代码部分2.运行结果 &#xff…...

《我的阿勒泰》读后感

暂没时间写&#xff0c;记录在此&#xff0c;防止忘记&#xff0c;后面补上!!! 【经典语录】 01、如果天气好的话&#xff0c;阳光广阔地照耀着世界&#xff0c;暖洋洋又懒洋洋。这样的阳光下&#xff0c;似乎脚下的每一株草都和我一样&#xff0c;也把身子完全舒展开了。 02、…...

Android.mk简单介绍、规则与基本格式

文章目录 Android.mk与makefile区别Android.mk规则Android.mk基本格式 Android.mk与makefile区别 Android.mk 和 Makefile 都是用于构建代码项目的构建脚本文件&#xff0c;但是它们在特定上下文中有一些区别&#xff1a; Android.mk: Android.mk 是用于构建 Android 应用或库…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...