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

【C语言必知必会 | 第八篇】一文带你精通循环结构

引言

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它在编程语言中具有举足轻重的地位。
此文为【C语言必知必会】系列第八篇,进行C语言循环结构的专项练习,结合专题优质题目,带领读者从0开始,深度掌握知识点。

在这里插入图片描述

文章目录

    • 1️⃣ 前言
    • 2️⃣专项练习
    • 5️⃣总结


1️⃣ 前言

在上一讲中,带领读者掌握了循环结构的相关知识点,由于题目和实践是学习的核心,所以开展专项练习十分重要。

在本讲中,将深入剖析几个经典的C语言循环结构练习带领读者在理论结合实际的基础上更好地学习、吸收、掌握C语言。


2️⃣专项练习

在循环结构的学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用。

在这里插入图片描述

一个通用的解题思路如下:

在C语言中,循环结构通常用于重复执行一段代码,直到满足特定条件为止。下面是一种通用的解题思路,适用于很多循环问题:

1.首先需要明确何时应该终止循环。这个条件可以是一个比较表达式、逻辑表达式或其他能够计算为布尔值的表达式。

2.在进入循环之前,要初始化用于控制循环的变量。这个变量在循环的迭代过程中会不断更新。

3.循环体是被重复执行的代码块。它包含了解题的主要逻辑,并且会根据实际情况更新循环变量。

4.在每次循环迭代结束时,要对循环变量进行更新操作。这样可以使循环朝着终止条件逐渐演进。

下面是一个简单的示例,展示了如何使用循环结构计算1到10的累加和:

#include <stdio.h>int main() {int sum = 0; // 用于存储累加和的变量int i; // 控制循环的变量for (i = 1; i <= 10; i++) {sum += i; // 累加当前的数到sum变量}printf("1到10的累加和为:%d\n", sum);return 0;
}

在这个示例中,我们使用了for循环来重复执行累加操作。循环条件为i <= 10,即当i的值小于等于10时,继续循环。循环体中的代码是将当前的数累加到sum变量中。每次循环结束时,i会自增1,从而逐渐迭代到11,退出循环。

这个通用的解题思路可以帮助你处理很多循环问题,无论是求和、查找、遍历数组还是其他类型的算法。

以上是一个通用的解题思路,仍需根据具体问题的要求进行适当的调整和扩展。

接下来,让我们开始本节课程的专题练习,读者需要躬身实践来掌握。


第一题:求1!+2!+……+n!

解题思路如下:

使用二重循环做题,先使 i1 遍历到 n,再使 j1 遍历到 i ,进行相乘

下面是具体的代码实现:

#include <stdio.h>
int main()
{int n,i,j,sum=1,sum1=0;scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=i;j++){sum*=j;}sum1+=sum;}printf("%d",sum1);}

注意,上面这个代码块有一个致命的错误:没有将sum进行重置。

在每次内层循环前,要将sum变量重置为1,以确保每次内层循环都从1开始计算阶乘。否则,sum会一直累积上一次循环的结果。

修正后的代码如下:

#include <stdio.h>int main() {int n, i, j, sum = 1, sum1 = 0;scanf("%d", &n);for (i = 1; i <= n; i++) {sum = 1; // 重置sum为1for (j = 1; j <= i; j++) {sum *= j; // 计算阶乘}sum1 += sum; // 累加阶乘结果}printf("%d\n", sum1);return 0;
}

程序运行结果如下:

在这里插入图片描述

至此,第一题已解题结束。


第二题:计算

要求:(1)最后一项小于10的-6次方停止。(2) 用for语句实现循环。

解题思路

1/i 的形式,并且i以2为单位自增。同时要确保1进行正负交替。

代码实现:

#include <stdio.h>int main() {int i;
double a=-1.0,x,sum=0.0;for(i=1;;i+=2){a=-a;  //1进行正负交替x=a/i;if(x<1e-6)  //逻辑判断,跳出循环{break;}sum+=x;}printf("%lf",sum);return 0;
}

程序运行结果:

在这里插入图片描述

至此,第二题已解题完毕。


第三题:

在这里插入图片描述

解题思路

密码只允许输入3次,则使用循环来使用scanf;

如果在第3次或3次以内输入正确,则输出welcome,否则输出Bye

代码实现

#include <stdio.h>int main() {int x=11;  //正确密码int a,i;for(i=1;i<=3;i++)
{scanf("%d",&a);  //输入密码if(a==x){printf("Welcome!");  //如果正确,直接跳出循环break;}if(i==3)   //第三次还是不能达到if的条件时,输出break
{printf("break");
}	}return 0;
}

注意:判断数值是否相等时需要使用的运算符为== 而不是=

程序运行结果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

至此,第三题已解题完毕。


第四题:打印所示图形

要求:输入n代表图形所占的行数

在这里插入图片描述

解题思路

使用两个嵌套的 for 循环来控制每行的输出。外层循环控制行数,内层循环控制每行中的列数。

内层循环中的第一个循环用于输出空格,以对齐三角形。它根据当前行数和总行数之间的差值来确定需要打印的空格数。

内层循环中的第二个循环用于输出等边三角形的边。它打印 (2 * i - 1) 个星号,其中 i 是当前行数。

最后,使用 printf(“\n”) 来打印换行符,以继续下一行的输出。

代码实现

首先我们确保每一行的*能被打印出来:

#include <stdio.h>int main() {int hang;printf("请输入行数:");scanf("%d", &hang);for (int i = hang; i >= 1; i--) {for (int k = 1; k <= 2 * i - 1; k++) {printf("*"); // 打印三角形的边}printf("\n"); // 打印换行}return 0;
}

接着我们确保输出空格,以对齐三角形:

#include <stdio.h>int main() {int hang;printf("请输入行数:");scanf("%d", &hang);for (int i = hang; i >= 1; i--) {for (int j = 1; j <= hang - i; j++) {printf(" "); // 打印空格来对齐}for (int k = 1; k <= 2 * i - 1; k++) {printf("*"); // 打印三角形的边}printf("\n"); // 打印换行}return 0;
}

程序运行结果:

在这里插入图片描述

自此,第四题已解题完成。


现在让我们看看第五题:

第五题:计算

在这里插入图片描述

解题思路

分子/分母的形式,分子看成以1为增量的阶乘,分母看成以2为增量的阶乘。

代码实现

#include <stdio.h>int main() {int i = 1;double sum = 0.0;double fenzi = 1.0;double fenmu = 1.0;while (fenzi / fenmu >= 1e-6){sum += fenzi / fenmu;fenzi *= i;                   // 计算分子的阶乘fenmu *= (i * 2 + 1);       // 计算分母的阶乘i++;}printf("%lf", sum);return 0;
}

程序运行结果:

在这里插入图片描述

至此,第五题已解题完成。


5️⃣总结

此文为 【C语言你还没卷起来?】系列之第八篇 ,通过以题代练的形式带领读者掌握C语言的循环结构,带领读者从0开始,深度掌握知识点。

以题代练对于C语言的学习是十分重要的,专栏将持续提供优质C语言编程题与理论课的学习,带领读者全方位掌握C语言,读者可订阅专栏持续跟进。

相关文章:

【C语言必知必会 | 第八篇】一文带你精通循环结构

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第八篇&#xff0c;进行C语言循环结构的专项练习&#xff0c;结合专题优质题目&#xff0c;带领读者从0开始&#xff0…...

同一个线程池执行不同类型的任务

1、同一个线程池可以执行不同的任务类型&#xff0c;也可以带返回值&#xff0c;也可以不带返回值的 import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.vip.vman.result.BasicResult; import lombok.extern.slf4j.Slf4j; import org.springframewor…...

GEO生信数据挖掘(八)富集分析(GO 、KEGG、 GSEA 打包带走)

第六节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。第七节延续上个数据&#xff0c;进行了差异分析。 本节对差异基因进行富集分析。 …...

高校教务系统登录页面JS分析——华南理工大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…...

人工智能之PyTorch数据操作-Python版

PyTorch数据操作 # 导入PyTorch import torch [张量表示一个由数值组成的数组&#xff0c;这个数组可能有多个维度]。 具有一个轴的张量对应数学上的向量&#xff08;&#xff09;&#xff1b; 具有两个轴的张量对应数学上的矩阵&#xff08;matrix&#xff09;&#xff1b;…...

星环科技向量数据库Transwarp Hippo1.1发布:一库搞定向量+全文联合检索,提升大模型准确率

星环科技向量数据库Transwarp Hippo自发布已来,受到了众多用户的欢迎,帮助用户实现向量数据的存储、管理和检索,探索和实践大模型场景。在与用户不断地深入交流以及实践中,Hippo迎来了V1.1版本,一套系统即可支持向量与全文联合检索,提高文本数据的召回精度,从而提升大语…...

理解LoadRunner,基于此工具进行后端性能测试的详细过程(下)

5、录制并增强虚拟用户脚本 从整体角度看&#xff0c;用LoadRunner 开发虚拟用户脚本主要包括下面四步骤&#xff1a; 识别测试应用使用的协议 录制脚本 完善录制得到的脚本 验证脚本的正确性 识别被测应用使用的协议 如果明确知道了被测系统所采用的协议&#xff0c;可…...

K8s上的监控系统(Grafana)使用和理解说明

Grafana (集成Prometheus On K8s集成)主要步骤说明 客户端指标收集 —— K8s 集群资源等 —— Prometheus 监控数据收集 —— Grafana —— 通过PromQL 进行数据查询 —— 预警告警等通知 Kubernetes集群资源&#xff1a;这包括了CPU、内存、磁盘、网络等各种类型的资源。这些资…...

【netty从入门到放弃】netty转发tcp数据到多客户端

目录 创建数据库表xml实体类启动类线程类客户端代码handlecontroller类缓存tcp链接 接到一个需求&#xff0c;需要实现转发通讯模块tcp数据其他的服务器&#xff0c;也就是转发tcp数据到多客户端 任务拆解: 首先需要建立多客户端&#xff0c;每个客户端有一个独立的clientId和…...

Linux | gdb的基本使用

目录 前言 一、调试文件的生成 二、调试指令 1、选择调试文件 2、查看代码 3、运行代码 4、断点 5、打印与常显示 6、其他 总结 前言 前面我们学习了如何使用gcc/g来进行对代码进行编译&#xff0c;本章我们将使用gdb来对代码进行调试&#xff0c;学习本章的前提是有…...

C++之this指针

前言 C中对象模型和this指针是面向对象编程中的重要概念。对象模型描述了对象在内存中的布局和行为&#xff0c;包括成员变量、成员函数的存储方式和访问权限。this指针是一个隐含的指针&#xff0c;指向当前对象的地址&#xff0c;用于在成员函数中引用当前对象的成员变量和成…...

大模型,重构自动驾驶

文&#xff5c;刘俊宏 编&#xff5c;王一粟 大模型如何重构自动驾驶&#xff1f;答案已经逐渐露出水面。 “在大数据、大模型为特征&#xff0c;以数据驱动为开发模式的自动驾驶3.0时代&#xff0c;自动驾驶大模型将在车端、云端上实现一个统一的端到端的平台管理。”毫末智…...

Jmeter执行接口自动化测试-如何初始化清空旧数据

需求分析&#xff1a; 每次执行完自动化测试&#xff0c;我们不会执行删除接口把数据删除&#xff0c;而需要留着手工测试&#xff0c;此时会导致下次执行测试有旧数据我们手工可能也会新增数据&#xff0c;导致下次执行自动化测试有旧数据 下面介绍两种清空数据的方法 一、通过…...

dashboard报错 错误:无法获取网络列表、dashboard报错 错误:无法获取云主机列表 解决流程

文章目录 错误说明dashboard上报错底层命令报错查看日志message日志httpd报错日志错误日志分析开始解决测试底层命令dashboard错误说明 dashboard上报错 首先,dashboard上无论是管理员还是其他项目,均无法获取云主机和网络信息,具体报错如下...

C语言中的3种注释方法

C语言中的3种注释方法 2021年8月28日星期六席锦 在用C语言编程时&#xff0c;常用的注释方式有如下几种&#xff1a; (1)单行注释 // … (2)多行注释 /* … */ (3)条件编译注释 #if 0…#endif (1)(2)在入门教程中比较常见。 对于(1) 【单行注释 // …】&#xff0c;注释只能显示…...

20款VS Code实用插件推荐

前言&#xff1a; VS Code是一个轻量级但功能强大的源代码编辑器&#xff0c;轻量级指的是下载下来的VS Code其实就是一个简单的编辑器&#xff0c;强大指的是支持多种语言的环境插件拓展&#xff0c;也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…...

攻防世界web篇-robots

打开网址后&#xff0c;发现是一个空白页面的网页 但是&#xff0c;这个题目是robots&#xff0c;所以就联想到robots.txt这个目录&#xff0c;于是我就试了一下 注意&#xff1a;这里有个php的文件&#xff0c;这个应该就是一个目录文件 当输入后&#xff0c;直接回车&#…...

6 个可解锁部分 GPT-4 功能的 Chrome 扩展(无需支付 ChatGPT Plus 费用)

在过去的几个月里&#xff0c;我广泛探索了 ChatGPT 的所有可用插件。在此期间&#xff0c;我发现了一些令人惊叹的插件&#xff0c;它们改进了我使用 ChatGPT 的方式&#xff0c;但现在&#xff0c;我将透露一些您需要了解的内容。 借助 Chrome 扩展程序&#xff0c;所有 Chat…...

centos 7.9 安装sshpass

1.作用 sshpass是一个用于非交互式SSH密码验证的实用程序。它可以用于自动输入密码以进行SSH登录&#xff0c;从而简化了自动化脚本和批处理作业中的SSH连接过程。 sshpass命令可以与ssh命令一起使用&#xff0c;通过在命令行中提供密码参数来执行远程命令。以下是一个示例命…...

CompletableFuture多任务异步,获取返回值,汇总结果

线程池异步的基础知识 详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133039624 线程池执行多任务&#xff0c;获取返回值 线程池的 submit()方法&#xff0c;可以提交任务&#xff0c;并返回 Future接口。 而 future.get()&#xff0c;可以获取…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...