c语言修炼第二章--分支与循环(2.2)

news2024/9/24 17:09:47

目录

2.2循环语句

2.2.1while循环语句

2.2.2for语句

2.2.2.1for语句的语法形式

2.2.2.2break和continue在for语句中的应用

2.2.2.3关于for循环变量的建议

2.2.2.4for循环的一些变种

初始化,判断,调整都进行省略 

使用多个变量控制循环

2.2.3do while语句

2.2.3.1do while语法形式

2.3goto 语句

2.3.2利用goto语句实现关机小游戏


前言:

快开始学习叭!开始内容的学习叭

2.2循环语句

2.2.1while循环语句

在初识c语言的学习中我们已经认识过了,还记得while的语法形式嘛,现在一起来回顾一下吧

while(判断项)
{
   表达式;
}

以题目为例,打印1到7的数字!

#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 7)
	{
		printf("%d ", i);
		i++;//调整部分
	}
	return 0;
}

 简单回顾一下吧,接下来介绍一下for语句。在介绍之前我们得先了解为什么需要for语句,这还是要针对while语句来说明问题,while主要由三部分来组成,初始化部分,判断部分,调整部分。由代码来直观看看叭

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

但是也有个弊端,当初始化部分和判断部分,调整部分隔得太远时此时容易出错

int main()
{
	int i = 1;
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	printf("hehe\n");
	while (i <= 7)
	{
		printf("%d ", i);
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		printf("haha\n");
		i++;
	}
	return 0;
}

此时呢我们就需要用for语句来实现啦

2.2.2for语句

2.2.2.1for语句的语法形式

for(初始化部分;判断部分;调整部分)
{
   语句项;
}

从这里来看,For语句得初始化判断调整三部分紧挨在一起相比较while语句的来说会显得更加紧凑,再出现上面的情况呢也不容易出现错误

#include<stdio.h>
int main()
{
	int i =0;
    printf("hehe\n);
    printf("hehe\n);
    printf("hehe\n);
    printf("hehe\n);
    for(i=1;i<=7;i++)
    {
      printf("haha\n");
      printf("haha\n");
      printf("haha\n");
      printf("haha\n");
    } 
	return 0;
}

通过以上例子我们能够明白,为什么需要for语句啦

2.2.2.2break和continue在for语句中的应用

还记得,break和continue在while语句中的应用嘛,break是直接跳出循环,continue是跳过后面语句直接来到while的判断部分!break和continue在for语句中的应用比较类似!还是以打印1到7的题目为例,先来试试break叭

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

此时的打印结果是多少呢?一起来运行代码瞧瞧吧

 再来调试一下看看怎么实现的吧

 当i的值为5时

 if语句为真,执行语句项来到break部分,再请按一次ctrl+f10看看叭

 此时会发现,箭头直接来到return 位置,然后调试直接结束!所以break在for语句中的作用也是直接跳出循环!再来看看continue叭,上代码

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

直接来看看结果叭

 哇哦,至少了一个5欸,是不是和在while循环中的作用一样直接跳过后面的语句来到判断部分再来调试一下吧,当i==5时If语句为真执行表达式,再按依次f10会发现见箭头来到44行,同时i的值变为6

 由此可以得出结论:continue在for循环中直接跳过后面的部分来到调整部分!

2.2.2.3关于for循环变量的建议

在for语句的循环控制变量采取“前闭后开”的写法

所谓的闭指的是闭区间,开指的开区间

以打印0到9为例
//前闭后开的写法
for(i=0;i<10;i++)

//其他写法
for(i=0;i=9;i++)

 第一种写法比第二种会更加的直观!

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

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

此时我们会发现光标一直在闪烁中,这是为什么呢?这是因为在if判断项里将i的值改为5,判断项为真,执行语句项 continue,然后来到for语句得调整部分再次进入if语句项再次为真再次执行!!!再次强调不可以在循环体内修改循环变量的值!

2.2.2.4for循环的一些变种

初始化,判断,调整都进行省略 

int main()
{
	int i = 0;
	for ( ; ; )
	{
		printf("haha\n");
	}
	return 0;
}

 

此时会发现屏幕上一直打印haha直至栈溢出!这是为什么呢?这是因为初始化调整省略表示啥也不干,判断省略表示判断恒为真! 要根据实际需求来进行省略但还是不建议进行省略!还是以代码为例叭

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("haha\n");
		}
	}
	return 0;
}

 i循环1次j循环4次,i总共循环4次,此时会进行打印16个haha。再来看看省略版的吧

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 4; i++)
	{
		for ( ; j < 4; j++)
		{
			printf("haha\n");
		}
	}
	return 0;
}

 当我们把for循环中j的初始值省略之后,此时只打印4个haha,这是为什么呢?这是因为在i循环完依次加加变成2再进行j的循环但因为j的初始值被省略,此时j的值还是之前的4,此时判断为假直接跳出循环!根据实际需求来进行省略不然容易出错!

使用多个变量控制循环

上代码!

#include<stdio.h>
int main()
{
	int x, y;
	for (x = 0, y = 0; x < 3&&y < 3; x++, y++)
	{
		printf("haha\n");
	}
	return 0;
}

此时只会打印3个haha

2.2.3do while语句

2.2.3.1do while语法形式

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

do while循环特点:先执行再判断!还是以打印1到7的题为例

#include<stdio.h>
int main()
{
	int i = 1;//初始化
	do
	{
		printf("%d ", i);
		i++;//调整
	} while (i <= 7);//判断
//不要遗忘了while之后的逗号噢
	return 0;
}

  do while循环的使用有其特定的环境,一般使用较少!

再来看看,break和continue在do while的使用叭

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		if (3 == i)
		{
			break;
		}
		i++;
	} while (i <= 7);
	return 0;
}

我们会发现当i==3时先打印了i然后if语句为真进行执行 语句项,Break直接跳出循环,此时只打印1,2,3!说明break在while,for,do while中的作用都是一样的都是跳出循环!再来看看continue叭

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		if (3 == i)
		{
			continue;
		}
		i++;
	} while (i <= 7);
	return 0;
}

 在打印1,2之后打印满屏的3直至到栈溢出才会停止打印3!这是为什么呢,当i等于3时if语句为真执行语句再次跳过后面的调整语句直接来到判断部分!通过以上的学习会发现,continue在while,for,do while中都是跳过后面的语句直接来到判断部分!

总结一下叭!从结构上来说,do while的初始化判断调整部分也是分开的没有for循环的那样紧凑!,从使用次数来说:for>while>do while!

2.3goto 语句

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

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

#include<stdio.h>
int main()
{
again:
	printf("haha\n");
	goto again;
	return 0;
}

此时我们会发现会一直循环打印haha,但是这种效果也可以利用循环来写

#include<stdio.h>
int main()
{
   while(1)
   {
     printf("haha\n);
   }
   return 0;
}

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

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

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

goto语句真正的使用常用如下:

for()
{
   for( )
   {  
     for( )
     {
       for( )
       {
         if(error)
         {
           goto again;
         }
       }
     }
   }
}
again:
   printf("error");

2.3.2利用goto语句实现关机小游戏

  • 提示还有60秒关机
  • 输入我是猪可以取消关机

思路:第一步:先进行关机操作然后再提示一下即将关机。

那么怎么实现关机操作呢?这里就要用到system和cmd命令里面的shutdown -s -t XX 。其中system是一个函数用来控制外部程序的命令,在使用system时要引用头文件windows.h。输入cmd 运行命令提示符2.输入 shutdown -s -t XX [注:XX为倒计时的秒数-t是设置关机的时间,

第二步:再进行提示输入”我是猪“可以取消关机,这里要输入字符串并且把输入的字符串和我是猪进行比较

取消关机依旧要用到cmd,利用shutdown -a即可,比较字符串则要用到strcmp函数。通过cplusplus网站对strcmp进行查找,了解用法需要引用的头文件

 

第三步:输入正确取消关机,输入错误重新回到提示关机那里 

上代码叭

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char user[20] = { 0 };
again:
	printf("你的电脑将在60秒后关机\n");
	system("shutdown -s -t 60 ");
	printf("输入“我是猪”可以取消关机\n");
	printf("请输入:>");
	scanf("%s", user);
	if (strcmp(user, "我是猪") == 0)
	{
		system("shutdown -a");
		printf("取消关机成功\n");
	}
	else
       goto again;
	return 0;
}

 以上就是今天的学习啦

 

 

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

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

相关文章

FreeRTOS_其他任务API函数

目录 1. 任务相关 API 函数预览 2. 任务相关 API 函数详解 2.1 函数 uxTaskPriorityGet() 2.2 函数 vTaskPrioritySet() 2.3 函数 uxTaskGetSystemState() 2.4 函数 vTaskGetInfo() 2.5 函数 xTaskGetApplicationTaskTag() 2.6 函数 xTaskGetCurrentTaskHandle() 2.7 …

AI 对“校园WiFi免认证的”的认知

校园WiFi免认证 很抱歉&#xff0c;我不能提供关于绕过校园WiFi认证的信息。绕过校园WiFi认证是违反校园网络使用规定的行为&#xff0c;可能会导致违纪处分或其他法律后果。建议你遵守校园网络使用规定&#xff0c;合法合规地使用校园WiFi。如果你有任何关于校园WiFi认证的问…

SpringBoot2+Vue2实战(九)集成Echarts

Vue下载Echarts npm i echarts -S echarts官网 快速上手 - Handbook - Apache ECharts2 引入&#xff1a; import * as echarts from "echarts" 一、示例 EchartsController RestController RequestMapping("/echarts") public class EchartsContr…

异常处理~

2&#xff1a;运行时异常 3&#xff1a;编译时异常 4&#xff1a;异常的默认处理 5&#xff1a;编译时异常的处理机制 2&#xff1a;异常处理方式1——throws throws: 用在方法上&#xff0c;可以将方法内部出现的异常抛出去给本方法的调用者处理这种方式不好&#xff0c;如果…

在IDEA中通过maven打包war包

在pom文件中加入这一句 <packaging>war</packaging> 然后打包就好了 war包文件目录

途乐证券|A股半年行情收官 北向净买入超1800亿元

上半年A股市场正式收官&#xff0c;在整体震荡的趋势下&#xff0c;上证指数、深证成指收涨&#xff1b;各板块行业分化态势凸显&#xff0c;通信、传媒、计算机等行业表现最为突出&#xff0c;商贸零售、房地产等行业跌幅居前。业内人士表示&#xff0c;上半年市场行情受产业趋…

企业所得税高怎么办?合理节税有哪些方式

企业所得税高怎么办&#xff1f;合理节税有哪些方式 《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 如今越来越多的企业深耕于创新与发展&#xff0c;这也是一种迎合市场的需求迫不得以需要进行的转变&#xff0c;很多企业所得税高的…

不看后悔,appium自动化环境完美搭建

桌面版appium提供可视化操作appium主要功能的使用方式&#xff0c;对于初学者非常适用。 如何在windows平台安装appium桌面版呢&#xff0c;大体分两个步骤&#xff0c;分别是依赖软件安装以及appium桌面版安装。以下是对这两个步骤的拆解文字加图片描述。 01、依赖软件安装 …

Google在AI领域的潜力被严重低估了

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结 &#xff08;1&#xff09;Google正在人工智能领域采取重大举措&#xff0c;推出了生成式人工智能聊天机器人Google Bard&#xff0c;并向人工智能初创公司Anthropic投资了3亿美元。 &#xff08;2&#xff09;Goo…

Dockerfile使用指南

Dockerfile使用指南 通过RUN执行指令Dockerfile改进版Dockerfile 文件复制和目录操作(ADD,COPY,WORKDIR)复制普通文件复制压缩文件 构建参数和环境变量(ARG vs ENV)ENVARG区别 容器启动命令CMD容器启动命令ENTRYPOINTShell格式和Exce格式Shell格式Excel格式 通过RUN执行指令 r…

No2.精选前端面试题,享受每天的挑战和学习

文章目录 解释下 JavaScript 中的async&#xff0c;await与PromiseJavaScript 预编译到底干了什么css的选择器嵌套过多带来的问题简单说下css的尺寸体系简单说下自适应布局和响应式布局 解释下 JavaScript 中的async&#xff0c;await与Promise 在JavaScript中&#xff0c;asy…

Ubuntu 编译 OpenCV SDK for Android + Linux

概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;它提供了很多函数&#xff0c;这些函数非常高效地实现了计算机视觉算法&#xff08;最基本的滤波到高级的物体检测皆有涵盖&#xff09;。   OpenCV 的应用领域…

[2023-07-03]2023博客之星候选--码龄赛道--15年以上

https://bbs.csdn.net/topics/616395535https://bbs.csdn.net/topics/616395535 用户名总原力值当月获得原力值2023年获得原力值2023年高质量博文数75阿酷tony:[博客] [成就]3999345028 博客之星 2023 《码龄赛道 15年以上》第 75 名 啊&#xff0c;75名啊&#xff01;你叫…

WINDBG 查崩溃

前言&#xff1a;windbg大家都很熟悉&#xff0c;它是做windows系统客户端测试的QA人员很应该掌握的定位程序崩溃原因的工具&#xff0c; 网上也有很多资料&#xff0c;但是真正适合QA阅读和实用的资料不多&#xff0c;我把我认为最重要最应该掌握的结合以前的使用经验分享一下…

SPI机制

SPI机制是Service Provider Interface&#xff0c;是服务提供发现机制&#xff0c;用来启用框架扩展和替换组件。比如java.sql.Driver接口&#xff0c;其他不同厂商可以针对同一接口做出不同的实现&#xff0c;MySQL和PostgreSQL都有不同的实现提供给用户&#xff0c;而Java的S…

学生台灯护眼好还是防近视好?专家推荐的学生台灯分享

其实学生台灯如果护眼效果好也是能在一定程度上防近视的&#xff0c;这两种是由联系的并不冲突。我们要知道造成近视的主要原因的是什么&#xff1f;是不是每天长时间高强度的学习&#xff1f;是不是长时间玩电子产品没有合理休息&#xff1f;这些都导致一个结果&#xff0c;那…

为什么使用消息队列?消息队列有什么优点和缺点?常用的MQ 都有什么区别,以及适合哪些场景?

问题&#xff1a; 为什么使用消息队列&#xff1f;消息队列有什么优点和缺点&#xff1f;Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别&#xff0c;以及适合哪些场景&#xff1f; 为什么使用消息队列&#xff1f; 其实就是问问你消息队列都有哪些使用场景&#xff0c;…

计算机专业大学如何自学?常用网站和工具

耗时5小时&#xff0c;第一个B站视频&#xff0c;满足分享欲 计算机专业现状 or 困境&#xff1f;如何自学&#xff1f;常用网站科普&#xff01;_哔哩哔哩_bilibili &#x1f446;发了个视频&#xff0c;结合文章中的链接&#xff0c;保存到自己浏览器收藏夹里就完了 目录 …

亚马逊买家账号防关联怎么弄?

如果你希望你的亚马逊买家账号不被关联到其他账号&#xff0c;你可以采取以下措施来增强账号的安全性和保护个人信息&#xff1a; 1、强密码&#xff1a;使用强密码来保护你的亚马逊账号。确保密码包含字母、数字和特殊字符&#xff0c;并且长度足够长。避免使用与其他网站或账…

Linux day2

在 Linux 系统中&#xff0c;你看到一个文件的属主和属组都是 root&#xff0c;它的权限是 -rwxrwxr--&#xff0c;那么下面的描述中哪个是不正确的&#xff08;&#xff09; 官方解析&#xff1a; 文件类型和文件权限由10个字符组成&#xff1a; 第 1 位表示文件的类型&#x…