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…

【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中实现…

关于 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;这一篇是…

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遍左右 项目&…

找到一个linux静态库动态库的好资料.2

# 正文 继续整理从这个页面学到的东西&#xff1a;https://tldp.org/HOWTO/Program-Library-HOWTO 这一篇主要参考这俩&#xff1a; https://tldp.org/HOWTO/Program-Library-HOWTO/introduction.html https://tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html 这…

uniapp实现为微信小程序扫一扫的功能

引言 随着微信小程序的快速发展,越来越多的开发者开始关注和学习微信小程序的开发。其中,微信小程序的扫一扫功能是非常常用且实用的功能之一。通过扫描二维码,用户可以获取到相关的信息或者实现特定的功能。 正文 在过去,开发者需要使用微信开发者工具以及相关的开发文档…

中科岩创边坡自动化监测解决方案

行业现状 由于边坡不稳定性因素&#xff0c;可能会造成斜坡上的岩土体沿着某个面不均匀向下向外滑动&#xff0c;形成滑坡&#xff1b;陡峭山坡上岩土体在重力作用下&#xff0c;发生陡然倾落运动&#xff0c;造成崩塌&#xff1b;在沟谷或山坡上产生的夹带大量泥沙、石块等固体…

uniapp使用live-pusher实现模拟人脸识别效果

需求&#xff1a; 1、前端实现模拟用户人脸识别&#xff0c;识别成功后抓取视频流或认证的一张静态图给服务端。 2、服务端调用第三方活体认证接口&#xff0c;验证前端传递的人脸是否存在&#xff0c;把认证结果反馈给前端。 3、前端根据服务端返回的状态&#xff0c;显示在…

Docker【初识Docker】

目录 为什么会出现Docker这门技术喃&#xff1f; 应用开发和部署的困境 容器技术的先兆 Docker 的出现&#xff1a;简化容器化 Docker 技术的关键创新&#xff1a; Docker 的广泛应用和变革 什么是 Docker&#xff1f; Docker的历史 早期背景&#xff1a;容器化和虚拟化…

探寻 OneCode 核心优势:MVVM 进阶与前后端协同之魅

在当今的软件开发领域&#xff0c;高效、可维护且功能强大的架构是开发者们不懈追求的目标。OneCode 凭借其独特的增强版 MVVM 架构、前后端一体化特性&#xff0c;以及创新的技术如 OneCode DSM&#xff08;Domain-Specific Modeling&#xff0c;领域特定建模&#xff09;、视…

网络安全检测

实验目的与要求 (1) 帮助学生掌握木马和入侵的防护和检测方法、提高学习能力、应用能力和解决实际问题的能力。 (2) 要求学生掌握方法, 学会应用软件的安装和使用方法, 并能将应用结果展示出来。 实验原理与内容 入侵检测是通过对计算机网络或计算机系统中若干关键点收集信…

24.12.27 SpringMVCDay02

enctype必须是 multipart/form-data <form action"/mvc/book/doUpload1" method"post" enctype"multipart/form-data"><p><input type"file" name"img_url"></p><p><input type"subm…

Maven核心概念总结

Maven 介绍 Maven 官方文档是这样介绍的 Maven 的&#xff1a; Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a projects build, reporting and documentation from a ce…