分支和循环语句(2)(C语言)
目录
do...while()循环
do语句的语法
do语句的特点
do while循环中的break和continue
练习
goto语句
do...while()循环
do语句的语法
do
循环语句;
while(表达式);
do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
#include <stdio.h>
int main()
{int i = 10;do{printf("%d\n", i);} while (i < 10);return 0;
}
do while循环中的break和continue
int main()
{int i = 0;do{if (i == 5)break;printf("%d ",i);i++;} while (i <= 10);return 0;
}
int main()
{int i = 0;do{if (i == 5)continue;printf("%d ",i);i++;} while (i <= 10);return 0;
}
do while循环中break和continue和在while循环中一模一样。
break都是用于终止循环,continue是跳过本次循环后边的代码,直接去判断部分。
练习
1. 计算 n的阶乘。
#include<stdio.h>
int main()
{int n = 0;scanf("%d",&n);int i = 0;int ret = 1;//得到1-n的数字,累乘for (i = 1; i <= n; i++){ret *= i;}printf("%d\n",ret);return 0;
}
.2.计算 1!+2!+3!+……+10!
效率太低,循环次数多
#include<stdio.h>
int main()
{int n = 0;int i = 0;int ret = 1;int sum = 0;//让n变起来,从1-10for (n = 1; n <= 10; n++){//得到1-n的数字,累乘for (i = 1; i <= n; i++){ret *= i;}sum += ret;ret = 1;}printf("%d\n",sum);return 0;
}
对上述代码改进,提升效率 ↓
#include<stdio.h>
int main()
{int n = 0;int i = 0;int ret = 1;int sum = 0;//让n变起来,从1-10for (n = 1; n <= 10; n++){ret *= n;//直接用上次得到的结果乘新的nsum += ret;}printf("%d\n", sum);return 0;
}
3. 在一个有序数组中查找具体的某个数字n。
此题用到了二分查找(折半查找)
这种方法效率很高,但条件苛刻,需要数组有序。
思路:

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int k = 0;scanf("%d",&k);int sz = sizeof(arr) / sizeof(arr[0]);int left = 0;int right = sz - 1;int flag = 0;while (left <= right){int mid = (left + right) / 2;if (arr[mid] < k)left = mid + 1;//右下标不变else if (arr[mid] > k)right = mid - 1;//左下标不变else{printf("找到了,下标是%d\n", mid);flag = 1;break;}}if (flag == 0){printf("找不到了\n");}return 0;
}
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include<stdio.h>
#include <windows.h>
int main()
{char arr1[] = "**********************";char arr2[] = "welcome to bit!!!!!!!!";int sz = sizeof(arr2) / sizeof(arr2[0]);int left = 0;int right = sz - 2;//减去/0,求出的是下标// int right = strlen(arr2)-1;//包含string.hwhile (left <= right){arr1[left] = arr2[left];arr1[right] = arr2[right];left++;right--;printf("%s\n",arr1);Sleep(500);//休眠0.5s,需要包含<windows.h>system("cls");//清空屏幕}printf("%s",arr2);return 0;
}
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
补充:比较字符串时,不能直接用 == 比较,strcmp函数是比较字符串的大小的,头文件是string.h
如果>,返回 >0
如果==,返回0
如果< ,返回<0
#include <stdio.h>
#include <string.h>
int main()
{int i = 0;for (i = 0; i < 3; i++){char password[20] = { 0 };scanf("%s", password);if (strcmp(password, "123456") == 0){printf("登陆成功\n");break;}else{printf("密码错误\n");}if (i == 3){printf("三次密码错误,退出程序\n");}}return 0;
}
goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
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 (strcmp(input, "我是猪") == 0){system("shutdown -a");printf("你很配合,已取消关机\n");}else{goto again;}return 0;
}
而如果不使用goto语句,则可以使用循环:
#include <stdio.h>
int main()
{char input[10] = { 0 };system("shutdown -s -t 60");while (1){printf("电脑将在1分钟内关机,如果输入我是猪,就取消关机\n");scanf("%s", input);if (strcmp(input, "我是猪") == 0){system("shutdown -a");printf("你很配合,已取消关机\n");break;}}return 0;
}
相关文章:
分支和循环语句(2)(C语言)
目录 do...while()循环 do语句的语法 do语句的特点 do while循环中的break和continue 练习 goto语句 do...while()循环 do语句的语法 do 循环语句; while(表达式); do语句的特点 循环至少执行一次,使用的场景有限,所以不是经常使用。 #inc…...
Flutter: A RenderFlex overflowed by 42 pixels on the bottom.
Flutter:渲染活动底部上方溢出了42个像素 Flutter 控件超出异常:A RenderFlex overflowed by 42 pixels on the bottom. 解决方案 1.Scaffold内添加 resizeToAvoidBottomInset 属性,缺点是软键盘下面的控件被挡住 Scaffold( resizeToAvoidBot…...
第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解
第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解 一个基本的方法求 A − 1 B A^{-1}B A−1BLU分解例1,求矩阵A的LU分解:例12,LU分解解线性方程组: 玩转线性代数(19)初等矩阵与初等变换的相关应用的笔记&a…...
STM32F429IGT6使用CubeMX配置SPI通信(W25Q256芯片)
1、硬件电路 需要系统性的看一下W25Q256芯片手册 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置SPI 4、生成工程配置 5、相关代码 #define sFLASH_ID 0XEF4019 // W25Q256#define SPI_FLASH_PageSize 256 #define SPI_FLASH_PerWritePageSize 256#def…...
C++11异步与通信之 packaged_task
概念简介 packaged_task 用于包装可调用目标(Callable)为一个对象,如lambda,普通函数,小括号重载等,用于异步调用。 其返回值或所抛异常被存储于能通过 std::future 对象访问的共享状态中,和promise类似。 将函数的调用与函数返…...
磁盘的管理
一、磁盘的分区 查看磁盘 lsblk fdisk -l 2、分区 没有e扩展,则都是主分区,已经有三个主分区了,剩下的全设置为扩展 查看分区结果: 二、格式化 三、挂载...
数据结构:完全二叉树的性质
完全二叉树的性质: 具有 n n n个结点的完全二叉树的深度为 [ l o g 2 n ] 1 ( [ x ] 表示不大于 x 的最大整数 ) [log_2n]1([x]表示不大于x的最大整数) [log2n]1([x]表示不大于x的最大整数) 对于任意一个结点 ( 1 < i < n ) &…...
【数据结构】‘双向链表’冲冲冲
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
Linux 编译CEF源码详细记录
Linux CEF(Chromium Embedded Framework)源码下载编译 背景 由于CEF默认的二进制分发包不支持音视频播放,需要自行编译源码,将ffmpeg开关打开才能支持。这里介绍的是Linux平台下的CEF源码下载编译过程。 Windows平台参考&#…...
LeetCode 2810. Faulty Keyboard【模拟,双端队列,字符串】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
两个数组的交集-C语言/Java
描述 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序。(1 < nums1.length, nums2.length < 1000,0 < nums1[i], nums2[i] < 1000) 示例1 输入…...
Arduino+esp32学习笔记
学习目标: 使用Arduino配置好蓝牙或者wifi模块 学习使用python配置好蓝牙或者wifi模块 学习内容(笔记): 一、 Arduino语法基础 Arduino语法是基于C的语法,C又是c基础上增加了面向对象思想等进阶语言。那就只记录没见过的。 单多…...
计算机网络-专业术语
计算机网络-专业术语 实体 实体:任何可发送或接收信息的硬件或软件进程 对等实体:收发双方相同层次中的实体 协议 控制两个对等实体进行逻辑通信的规则的集合 协议三要素 语法 定义所交换的信息的格式 是用户数据与控制信息的结构和格式 语义 定义收发双方所需要完成的操作…...
E. Maximum Monogonosity
You are given an array aa of length nn and an array bb of length nn. The cost of a segment [l,r][l,r], 1≤l≤r≤n1≤l≤r≤n, is defined as |bl−ar||br−al||bl−ar||br−al|. Recall that two segments [l1,r1][l1,r1], 1≤l1≤r1≤n1≤l1≤r1≤n, and [l2,r2][l2,…...
已解决Excel file format cannot be determined, you must specify an engine manually
问题 我使用以下语句时出现错误 data pd.read_excel(temp_inputc.csv, headerNone)出现错误: Excel file format cannot be determined, you must specify an engine manually有很多人说添加engine,但接下来会出现这个错误: File is not…...
Centos yum命令大全
1.使用YUM查找软件包 $ yum search python 2.列出所有可安装的软件包 $ yum list | grep python 3.列出所有可更新的软件包 $ yum list updates 4.列出所有已安装的软件包 $ yum list installed | grep python...
内网横向移动—ARP攻击图片捕捉数据劫持DNS劫持
内网横向移动—ARP攻击&图片捕捉&数据劫持&DNS劫持 1. ARP1.1. APR介绍1.1.1. ARP工作原理1.1.2. APR欺骗工作原理 1.2. 环境准备1.3. 适用场景 2. ARP断网攻击演示2.1. 使用kali进行演示2.1.1. nmap判断存活2.1.2. 安装工具2.1.3. 攻击Windows 10虚拟机2.1.3.1. 查…...
react之Hooks的介绍、useState与useEffect副作用的使用
react之Hooks的介绍、useState与useEffect副作用的使用 一、Hooks的基本介绍二、useState的使用2.1 简单使用2.2 数组结构简化2.3 状态的读取和修改2.3 组件的更新过程 三、useEffect的使用3.1 副作用介绍3.2 基本使用3.3 依赖3.4 不要对依赖项撒谎3.5 依赖项可以是空数组3.6 清…...
django——创建 Django 项目和 APP
2.创建 Django 项目和 APP 命令: 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中,…...
== 和 equals 的对比 [面试题]
和 equals 的对比[面试题] 文章目录 和 equals 的对比[面试题]1. 和 equals 简介2. Object 类中 equals() 源码3. String 类中 equals() 源码4. Integer 类中 equals() 源码5. 如何重写 equals 方法 1. 和 equals 简介 是一个比较运算符 :既可以判断基本数据类型…...
Qwen3-ASR-0.6B实战案例:使用Qwen3-ASR-0.6B构建智能语音笔记工具
Qwen3-ASR-0.6B实战案例:使用Qwen3-ASR-0.6B构建智能语音笔记工具 1. 引言:语音转文字的新选择 你有没有遇到过这样的情况:开会时忙着记录要点却总是漏掉重点,听课录音后还要花大量时间整理成文字,或者想快速把语音想…...
SQLAlchemy进阶:高级特性与性能优化
前言 昨天我们学习了数据库基础和ORM入门,今天我们将深入学习SQLAlchemy的高级特性,包括复杂查询、关联映射、性能优化等。 一、SQLAlchemy核心概念 1.1 架构组件 SQLALCHEMY_COMPONENTS = {"Engine": "数据库连接引擎,管理连接池","Connection…...
从录制到执行:利用Scripting Tracker与Python实现SAP GUI自动化操作
1. 为什么需要SAP GUI自动化? 每天重复点击几十次相同的按钮,填写上百个雷同的表单——这是很多SAP用户的真实工作状态。作为企业级ERP系统,SAP的操作往往需要大量人工交互,效率低下且容易出错。我曾在某制造业客户现场见过这样的…...
别再死磕卡尔曼滤波了!用RBPF粒子滤波搞定机器人SLAM建图(附避坑指南)
粒子滤波实战:用RBPF突破SLAM建图瓶颈的工程指南 当你在ROS中运行gmapping节点时,是否遇到过地图突然扭曲变形的情况?或是发现粒子群在重采样后迅速退化,导致定位完全失败?这些正是传统卡尔曼滤波方法在复杂环境中暴露…...
文墨共鸣应用场景解析:智能客服、内容审核、论文查重等实战案例分享
文墨共鸣应用场景解析:智能客服、内容审核、论文查重等实战案例分享 你是否遇到过这样的困扰:面对海量的用户咨询,客服团队疲于奔命,回答却总是不尽人意?或者,在审核社区内容时,难以快速准确地…...
手把手教你用YOLOv11和PyAutoGUI实现屏幕目标自动追踪(附完整Python代码)
基于YOLOv11与PyAutoGUI的屏幕目标自动化追踪技术实战 在数字化办公与自动化测试领域,屏幕目标识别与自动化操作正成为提升效率的关键技术。本文将深入探讨如何利用YOLOv11这一前沿目标检测算法,结合PyAutoGUI这一轻量级自动化工具,构建一个高…...
FanControl风扇控制终极指南:5分钟告别电脑噪音烦恼
FanControl风扇控制终极指南:5分钟告别电脑噪音烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...
Eigen 3.4.90 矩阵操作实战 | C++高效线性代数指南(一)
1. Eigen库基础入门:从安装到第一个矩阵 第一次接触Eigen时,我完全被它的简洁性震惊了——不需要链接任何库文件,只需要包含头文件就能开始高性能的线性代数计算。作为C中最受欢迎的矩阵运算库之一,Eigen 3.4.90版本在保持轻量级的…...
MAVLink 飞控通讯协议实战:从零构建无人机通信系统
1. MAVLink协议:无人机通信的"普通话" 第一次接触无人机开发时,最让我头疼的就是飞控和地面站之间的通信问题。直到发现了MAVLink这个轻量级协议,就像找到了无人机界的"普通话"——所有设备只要会说这门语言就能互相沟通…...
【仅剩72小时公开】奇点大会独家披露:AI审查工具的“可信度衰减曲线”——上线第37天后误报率激增210%,你用的工具在第几天崩盘?
第一章:奇点大会“可信度衰减曲线”现象级发现与行业警讯 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上,跨机构联合研究组首次系统性披露了模型输出可信度随推理步长呈指数级衰减的实证规律——即“可信度衰减曲线”&#x…...
