C语言数组(下)
我希望各位可以在思考之后去看本期练习,并且在观看之后独立编写一遍,以加深理解,巩固知识点。
练习一:编写代码,演⽰多个字符从两端移动,向中间汇聚
我们依旧先上代码
//编写代码,演⽰多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr1) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(500);system("cls");left++;right--;}printf("%s\n", arr2);return 0;
}
第一步
对于这道题来说,我们要先搞清楚怎么样让字符从两端向中间移动。既然题目说的是多个字符,那就会用到数组去存放这些字符;移动是一个过程,所以这道题必定要使用循环。那我们先创建出所需要的数组:
#include<stdio.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };return 0;
}
这里英语句子是有意义的,各位感兴趣可以试着翻译,嘻嘻。
接着我们要创建循环体系,从两端开始,那就要左右各设置一个变量去满足题意。
#include<stdio.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr2) - 1;while (left <= right){}return 0;
}
注意,right的值应该是字符串长度-1,原因是我们要用的是数组下标,如果不明白可以去看上一篇知识点讲解。从两端开始,当 left 不再<= right 的时候,说明我们的移动也结束了。
第二步
多个字符移动汇聚
#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr2) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);left++;right--;}return 0;
}

怎么样,是不是体会到移动的感觉了,接下里我们就要去让他称为一个动态的移动过程了。
第三步
这一步有分两个点:一是在每次打印之间都要设置停顿。
二是在每下一次打印之前都要清理掉前一次的打印。
那我们就要用到新知识了:
第一个是Sleep函数,这个函数的作用是生成停顿,需要包含头文件(windows.h)
形式:Sleep(时间) 单位是毫秒
第二个是系统提供的清屏指令符cls,需要包含头文件(stdlib.h)
形式:stytem(“cls”);
写出代码就是
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = { "Learn arrays well, and suffer less in the future!!!" };char arr2[] = { "###################################################" };int left = 0;int right = strlen(arr1) - 1;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(500);system("cls");left++;right--;}printf("%s\n", arr2);return 0;
}
这里要注意你两个函数的位置,如果放到了printf 前面的话,就得不到想要的效果了。动态过程不便呈现,各位自行尝试效果。
练习二:二分查找
在有序数组中查找某个数的下标。
老样子,上代码:
#include<stdio.h>
int main()
{//创建数组int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//k就是我们要找的元素,这里也可以写成scanf输入变量int k = 7;//二分法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){right = mid - 1;}else if (arr[mid] < k){left = mid + 1;}else{printf("找到了,下标是%d\n", mid);flag = 1;break;}}if (flag == 0){printf("找不到\n");}return 0;
}
这道题的思路和上一道有相似之处,我们可以对比着来看。注意这道题是有序数组中的查找,在无序的数组中,这种方法不适用。
首先,创建数组和需要查找的变量是必不可少的,注释中也有相应的替换方法,这里不多讲了。
我着重讲一下二分法,根据上面的数组可知,元素下标最大的9,最小的是0,而我们要寻找的元素的下标是6,我们就可以通过(max+min)/2的方法先把所有的元素去掉一半,如果没找到,再重复上一步,这样的方式在数组元素非常多的时候可以极大的减少计算机的执行时间,提高了运行效率。
还有两个细节,第一,中间值mid必须在循环内部,因为在每次改变left 或者 right之后,我们也需要改变中间值。第二 flag 是用于找不到你想查找数时的必要办法。
本期到此就结束了,如果还有不太清楚的地方,欢迎在评论区讨论。
相关文章:
C语言数组(下)
我希望各位可以在思考之后去看本期练习,并且在观看之后独立编写一遍,以加深理解,巩固知识点。 练习一:编写代码,演⽰多个字符从两端移动,向中间汇聚 我们依旧先上代码 //编写代码,演⽰多个字…...
pytorch学习5-最大池化层的使用
系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换(ReLU和sigmoid)pytorc…...
在python中安装库,会有conda安装,也会有pip安装,conda与pip的区别是什么?
文章目录 一、Conda是什么?二、pip是什么?三、pip与conda的区别:总结 一、Conda是什么? Conda是一个开源的包管理系统,它是Anaconda公司为Python和其他编程语言开发的。它主要用于数据科学和机器学习领域,…...
算法-贪心思想
贪心的思想非常不好解释,而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来,但是非要解释一下怎么使用的贪心的话,就懵圈了。一般来说,贪心的题目没有固定的套路,一题一样,不过…...
STL源码剖析笔记——适配器(adapters)
系列文章目录 STL源码剖析笔记——迭代器 STL源码剖析笔记——vector STL源码剖析笔记——list STL源码剖析笔记——deque、stack,queue STL源码剖析笔记——Binary Heap、priority_queue STL源码剖析笔记——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…...
Mysql、Oracle区分大小写?
Mysql Windows 系统的文件名不区分大小写,所以运行在 Windows 系统上面的 MySQL 服务器也不用区分数据库名和表名的大小写。Linux 系统大小写规则: 数据库名与表名严格区分大小写表的别名严格区分大小写变量名严格区分大小写列名与列的别名忽略大小写 M…...
Java多线程并发(二)
四种线程池 Java 里面线程池的顶级接口是 Executor,但是严格意义上讲 Executor 并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是 ExecutorService。 newCachedThreadPool 创建一个可根据需要创建新线程的线程池,但是在以前…...
树莓派外接上显示器以后一直黑屏无画面显示
一般遇到这种情况都是因为没有强制支持热插拔引起的,先断电树莓派,确保显示器与树莓派连接正常,然后上电就可以正常显示了。 如果想要支持热插拔,可以修改配置文件。 sudo nano /boot/config.txt 修改如下配置 hdmi_force_hotpl…...
使用Ansible lineinfile模块进行行级别操作
Ansible是一种功能强大的自动化工具,它提供了各种模块来简化配置管理任务。其中,lineinfile模块是一种特别有用的模块,它允许我们在文件中插入、修改或删除行。本文将介绍Ansible的lineinfile模块,并演示如何使用它来进行行级别操…...
curl 18 HTTP/2 stream
cd /Users/haijunyan/Desktop/CustomKit/KeepThreadAlive/KeepThreadAlive //Podfile所在文件夹 git config --global https.postBuffer 10485760000 git config --global http.postBuffer 10485760000 pod install https://blog.csdn.net/weixin_41872403/article/details/86…...
5G+AI开花结果,助力智慧安检落地
“请带包的乘客过机安检!”,深圳地铁、腾讯共同打造的5GAI智慧安检辅助系统亮相福田枢纽站,进一步解放了人力,提高安检效率,为交通安全保驾护航,让智慧出行成为现实。 传统的安检设备均为人工肉眼辨识&…...
Swift 如何实现自定义 Tab Bar
前言 每个 UI 设计师都喜欢美丽而有动画效果的 Tab Bar。然而,对于开发人员来说,实现这种设计可能是一场噩梦。当然,使用 Apple 的原生 Tab Bar 组件并专注于更有趣的事情,比如业务逻辑的实现,会更容易。但如果我们必…...
mysql 语言学习
整理了一下 mysql 操作语言,不是很全,部分地方也许需要修改,先放上来,有时间再慢慢完善。 一、数据库操作 连接数据库 $ sudo mysql [-h ip] -u root -p [-P 3306] 初始化数据库 $ mysql_secure_installation备份数据库 # 备…...
微信小程序基础bug
1.苹果11手机小程序请求数据不显示 设置-》隐私-》分析与改进-》开启 ”与开发者共享“ 2.<navigator>组件回退delta不成功 tabBar 页面是不能实现后退的效果的. 因为, 当我们跳转到 tabBar 页面,会关闭其他所有非tabBar 页面,所以当处于 tabBar 页面时, 无…...
13、pytest为失败的断言定义自己的解释
官方实例 # content of ocnftest.py from test_foocompare import Foodef pytest_assertrepr_compare(op, left, right):if isinstance(left, Foo) and isinstance(right, Foo) and op "":return["Comparing Foo instances:",f" vals:{left.val} !…...
Flink优化——数据倾斜(二)
目录 数据倾斜 判断是否存在数据倾斜 数据倾斜的解决 KeyBy之前发生数据倾斜 KeyBy之后发生的数据倾斜 聚合操作存在数据倾斜 窗口聚合操作存在数据倾斜 数据倾斜 判断是否存在数据倾斜 相同 Task 的多个 Subtask 中,个别 Subtask 接收到的数据量明显大于其…...
Unity打包到Webgl平台以及遇到的问题
Unity打包到Webgl平台以及遇到的问题 参考网站 Unity打包WebGL的全过程及在打包和使用过程中会遇到的问题(本地测试)-CSDN博客 unity打包到Webgl 并配置能正常运行 这里我用的是Unity2022.3.3f1c1版本 有两种方法 1、配置本地web服务 2、安装vsCode>添加插件LiveServe…...
c语言编程题经典100例——(90~95例)
1,写一个函数,实现数字的加密和解密。 下面是一个简单的C语言函数,可以实现数字的加密和解密。这个函数采用简单的加密算法,将输入的数字乘以一个固定的密钥,然后加上一个固定的偏移量。解密过程就是将加密后的数字减去偏移量&am…...
Redis核心知识点总结
1.Redis介绍 Redis 是 NoSQL,但是可处理 1 秒 10w 的并发(数据都在内存中) 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql,有各类实现他的实现类,我们常用的是 druid 其中对 redis,我们通常用 J…...
stm32Flash操作
//G0B0 flash大小 0x08000000-0x0807FFFF 512K(0400 1K)//2k 1页 //初始化标记数据地址 放最前面 脱机烧写器可擦除掉 #define CONST_INITMARKDATA_ADDRESS (0x0807D000UL) //2k 1页 //射频数据地址 #define CONST_FREQDATA_ADDRESS (0x0807F000UL) //2…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
