C语言技巧之有条件的累加

什么叫有条件的累加?

 主要是依靠循环,一般形式是一个在循环里面遍历,另一个只有达到一定的条件才会累加(移动到下一个变量),从言语也能看出来,主要是用在字符串和数组里面的,毕竟链表都是一块一块的随便拆,达到条件拆出来就行,干嘛有条件的累加呢?没办法,谁让数组在内存栈里面是连续的(谁让人家是爷呢),还是不懂也不要着急,后面一看例子你就懂了

具体实现:

一般就是给一个条件,然后是两个数组,一个负责保存输入的值,一个负责保存符合条件的值,还有两个循环变量,一个遍历输入的,一个负责向保存符合条件的值输入那个值

适合解决什么问题?

 数组、字符串等连在一起的东西,如果需要拆分或者进行一些所谓的缩进处理

练习

一个针对数字数组,一个针对字符串

练习1

 本关任务:从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素。

这里连带着讲解定义数组、用循环处理数组

定义数组,我们说过,C是老登,不能自己生成动态数组,所以开辟的空间(中括号里面的数)不能是变量,必须是固定的(但是现在编译器以C++为准,这么干也行,但是考试会扣分😅)

所以有一个解决办法,就是在开头定义一个量为一个长度,这样方便修改(伪变量)

然后确保n<N就行了,可以是100或者更大的数,取一部分开辟的空间填入内容,其余开辟出来了内容为空就行

然后就是循环输入,给要用的每一个位置的数组填上输入的内容(比较固定)

然后就是条件循环,也是比较固定,先给答案

#include<stdio.h>
#define N 100
int main()
{/*********Begin*********/int i,j=0,n;int a[N];int b[N];int count=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i = 0; i < n; i++) {if(a[i] != 0) {b[j++] = a[i];count++; }}printf("%d\n",count);for(i=0;i<count;i++){printf("%d ",b[i]);}/*********End**********/ return 0;
}

这又是i又是j的在干什么,李在赣神魔?

i就是那个管遍历输入的数组的

j就是管把符合条件的输入到另一个数组的

这就是有条件的累加,是不是有点入门了,有内味了?经典的死活想不出来但十分简单的逻辑,其实正常,一九八几年有的c语言,四十年左右C语言早被玩明白了,所以不要自己和自己较劲“这么简单(其实并不),怎么我就是想不出来”,太正常了,这都是几代人的指智慧结晶,所以你只要见过理解记下来就行,至于在什么时刻去用,这就要练习练出那种感觉

这里有个容易犯得错误,打印的时候i<count,不能i<n,因为符合条件的值可能小于n,那我第二个数组都没有n个数,哪给你找去?(电脑:哎!我给你来一碗铁牛数据面!)然后就开始乱弄了。

i<n(错误的)

i<count(正确的)

这里的count就是计数器,用来记录几次变化,代表着输入了几个符合条件的值

练习2

 删除一个字符串里面的所有空格

直接上答案

#include <stdio.h>
#include <string.h>#define N 100 int main() {char text[N]; char noSpaceText[N]; int i, j = 0; // 读取一行文本fgets(text,N, stdin);for (i = 0; text[i] != '\0'; i++) {if (text[i] != ' ') {noSpaceText[j++] = text[i]; }}noSpaceText[j] = '\0'; // 在字符串末尾添加空字符,标记字符串结束printf("%s\n", noSpaceText);return 0;
}

我们在bug专篇里面讲过,别忘了字符串的结尾要'\0',要不又是计算机乱填东西

不处理结尾下场

我还想问计算机怎么回事呢,结果计算机先问上我了(�)

总结

我们学习了(纯人机式总结)

1、怎么输入输出数组

2、有条件的累加

3、计数器用来记录变化次数

4、一堆梗

以上均是本人理解,如有不对欢迎各位大佬在评论区指出~

经典期末周经典期末周破防

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

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

相关文章

Python基于Django的web漏洞挖掘扫描技术的实现与研究(附源码,文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

数据结构-c++

数据结构 链表设计链表1.进制转换2.顺序表逆置3.链表转置 栈栈的实现 队列队列实现1.逆置队列 二叉树遍历顺序1.树的深度2.左右子树交换3.输出并求出非叶子节点个数 图1.邻接矩阵转换成临界表2.深度优先搜索 查找折半查找算法 排序快速排序 链表 设计链表 #include <iostr…

简单发布一个npm包

将自己封装的组件上传到 npm&#xff0c;并在其他项目中下载并使用&#xff0c;是一个非常有用的技能。看完下面这些你就可以自己完成从封装组件到上传 npm 并使用的全过程。 1: 封装组件 首先&#xff0c;你需要创建一个符合标准的 npm 包。假设你已经写好了组件代码&#xf…

24.try块怎么用 C#例子

这是一个用英语写的try-catch例子 简单来说就是一个try&#xff0c;try里面的代码可能会出错&#xff0c;然后有两个catch&#xff0c;规定了具体的错误是什么 如果发生相应的错误&#xff0c;就会把错误信息存到err里&#xff0c;err.Message是一个字符串格式的提示信息&…

记录命令行操作树莓派Wifi的方式

打开WiFi rfkill unblock wlan 关闭WiFi rfkill block wlan 设置可连接的WiFi 方法一&#xff08;bullseye及以前版本才可用&#xff0c;bookworm版本&#xff09; sudo nano /etc/wpa_supplicant/wpa_supplicant.conf network{ssid"wifi_name"psk"wifi_pas…

【Axure高保真原型】计时秒表

今天和大家分享计时原型模板&#xff0c;效果包括&#xff1a; 点击计时按钮&#xff0c;可以开始或者停止计时&#xff1b; 秒针会自动运转&#xff0c;时长会自动记录&#xff1b; 右侧表格会记录每一次开始和结束时间&#xff0c;并计算该段时长&#xff1b; 点击重置按钮…

随机变量是一个函数-如何理解

文章目录 一. 随机变量二. 随机变量是一个函数-栗子(一对一)1. 掷骰子的随机变量2. 掷骰子的随机变量&#xff08;求点数平方&#xff09;3. 抛硬币的随机变量4. 学生考试得分的随机变量 三. 随机变量是一个函数-理解(多对一) 一. 随机变量 随机变量就是定义在样本空间上的函数…

FOC软件 STM32CubeMX 使用

1、安装-及相关软件版本 展示版本注意事项&#xff1a;keil MDK和STM32CubeMX版本至少要大于等于图中版本。 2、 Motor Profiler 5.2.0使用方法 主要测试&#xff0c;电感、电流、最大速度等。 获得参数以后再使用控制台准确的控制。 3、MotorControl Workbench 5.2.0使用方法…

科技创新 数智未来|清科·沙丘投研院走进竹云

12月20日&#xff0c;清科沙丘投研院带领企投家团队走进竹云交流分享&#xff0c;聚焦技术创新、企业数字化管理、行业前沿应用案例等热点议题&#xff0c;深入探讨数字技术如何点燃企业高质量发展的澎湃动力&#xff0c;共话企业数字化、智能化发展之道。 达晨财智股权管理部…

Python机器学习笔记(十四、凝聚聚类和DBSCAN)

凝聚聚类 凝聚聚类&#xff08;agglomerative clustering&#xff09;指的是许多基于相同原则构建的聚类算法&#xff0c;这一原则是&#xff1a;算法首先声明每个点是自己的簇&#xff0c;然后合并两个最相似的簇&#xff0c;直到满足某种停止准则为止。 scikit-learn中实现…

题解:CF373B Making Sequences is Fun

思路 我们拿到这一题可以发现&#xff0c;可以使用二分查找。 bool check(ll x) {ll sum0;for(int im;i<mx;i){sumsumk*h(i);if(sum>n){return 0;}}return 1; }如果 check 函数这样写&#xff0c;那代码就算用了二分优化也一定会超时。那我们可以考虑如何优化 check 函…

v语言介绍

V 语言是一种多用途的编程语言&#xff0c;可以用于前端开发、后端开发、系统编程、游戏开发等多个领域。它的设计哲学是提供接近 C 语言的性能&#xff0c;同时简化开发过程并提高代码的安全性和可读性。接下来我会详细介绍 V 在前后端开发中的应用&#xff0c;并给出一个具体…

关于 K8s 的一些基础概念整理-补充【k8s系列之二】

〇、前言 本文继续整理下 K8s 的一些基础概念&#xff0c;作为前一篇概念汇总的补充。 前一篇博文链接&#xff1a;关于 K8s 的一些基础概念整理【k8s系列之一】_集群 master节点 控制节点 宿主机-CSDN博客 一、详情 1.1 Label Label 在 k8s 中是一个非常核心的概念&#xf…

php的zip扩展 先装libzip

【宝塔面板】php7.4 安装 zip 扩展 - PHP笔记网 在CentOS 7系统中&#xff0c;通过【宝塔Linux】安装了PHP7.4&#xff0c;运行业务系统时&#xff0c;报错&#xff1a; 1 it is missing from your system. Install or enable PHPs zip extension. 提示需要php的zip扩展&…

云效流水线自动化部署web静态网站

云效流水线部署静态网站 背景新建流水线配置流水线运行流水线总结 背景 配置流水线以前&#xff0c;每次更新导航网站都要登进去宝塔后台&#xff0c;删掉旧的目录和文件&#xff0c;再上传最新的文件&#xff0c;太麻烦啦 网上的博客基本都是分享vue项目&#xff0c;这一篇是…

Android MQTT关于断开连接disconnect报错原因

最近项目遇到一个需求&#xff0c;就是在登录状态的时候。才能接收到消息。所有我在上线&#xff0c;下线状态的时候。做了MQTT断开和连接的动作。然后就是发生了。我们标题的这关键点了。直接报错了。报错的内容如下&#xff1a; MqttAndroidClient unregisterRecevicer afte…

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库&#xff0c;失效了&#xff0c;上网查方法&#xff0c;都说是网络代理的问题&#xff0c;各种清理网络代理后都无效&#xff0c;去问同事&#xff1a; 先前都是直接复制的网页url当做远端url&#xff0c;或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…

我的秋招总结

我的秋招总结 个人背景 双非本&#xff0c;985硕&#xff0c;科班 准备情况 以求职为目的学习Java的时间大概一年。 八股&#xff0c;一开始主要是看B站黑马的八股文课程&#xff0c;背JavaGuide和小林coding还有面试鸭。 算法&#xff0c;250&#xff0c;刷了3遍左右 项目&…

VB.NET在 Excel 二次开发中的全面应用

摘要&#xff1a; 本文详细阐述了如何运用VB.NET进行 Excel 的二次开发。首先介绍了开发环境的搭建&#xff0c;包括安装 Visual Studio 及引用 Excel 对象库。接着深入探讨了各种基础操作&#xff0c;如创建 Excel 应用程序对象、打开与操作工作簿、处理工作表与单元格数据等。…

单例模式的写法

单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。常用于管理共享资源&#xff08;如数据库连接、配置文件、线程池等&#xff09;。在实际编码中&#xff0c;有多种实现单例模式的方法&…