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

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.lryc.cn/news/511160.html

相关文章:

  • 解释为什么fetch(JavaScript)无法将读取的数据存入外部变量
  • Windows Subsystem for Linux (WSL)
  • Go的Slice如何扩容
  • 使用云计算开发App 有哪些坑需要避免
  • ARM 架构--通用寄存器状态寄存器控制寄存器特殊用途寄存器
  • 最新SQL Server 2022保姆级安装教程【附安装包】
  • 学习C++:运算符
  • pdf有密码,如何实现pdf转换word?
  • AI发展新态势:从技术突破到安全隐忧
  • 王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图
  • 若依框架之简历pdf文档预览功能
  • 酷瓜云课堂(内网版)v1.1.8 发布,局域网在线学习平台方案
  • python语音机器人(青云客免费api)
  • 使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图
  • 5.系统学习-PyTorch与多层感知机
  • AIGC与虚拟身份及元宇宙的未来:虚拟人物创作与智能交互
  • 基于大模型LLM 应用方案
  • 实用技巧:关于 AD修改原理图库如何同步更新到有原理图 的解决方法
  • 区块链平台安全属性解释
  • 1228作业
  • Machine-learning the skill of mutual fund managers
  • Windows下Python+PyCharm的安装步骤及PyCharm的使用
  • Anaconda+PyTorch(CPU版)安装
  • 第 28 章 - ES 源码篇 - Elasticsearch 启动与插件加载机制解析
  • 机床数据采集网关在某机械制造企业的应用
  • 美团Android开发200道面试题及参考答案(上)
  • MQTT协议的应用场景及特点和常见的概念03
  • 电脑缺失sxs.dll文件要怎么解决?
  • 数据处的存储与处理——添加数组
  • 24-12-28-pytorch深度学习CUDA的GPU加速环境配置步骤