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

C语言初阶--折半查找算法

目录

练习1:在一个有序数组中查找具体的某个数字n

练习2:编写代码,演示多个字符从两端移动,向中间汇聚

 练习3:简单编写代码实现,模拟用户登录情景,并且只能登录三次

练习4:猜数字游戏实现

总结


练习1:在一个有序数组中查找具体的某个数字n

//在一个有序数组中查找具体的某个数字n
#include <stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){if (arr[i] == k){printf("找到了,下标是:%d\n", i);break;}}if (i == sz){printf("找不到\n");}return 0;
}
//找到了,下标是:6

使用折半或二分查找算法(不考虑溢出):在一个有序数组中查找具体的某个数字n

//使用折半或二分查找算法(不考虑溢出)
//在一个有序数组中查找具体的某个数字n#include <stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);int left = 0; //最左边元素下标int right = sz - 1; //最右边元素下标while (left <= right){int mid = (left+right) / 2; //中间元素下标,此处不考虑溢出//若考虑溢出,则使用下面一行代码保证不越界//int mid = left + (right-left) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{printf("找到了,下标是:%d\n", mid);break;}}if (left > right){printf("找不到\n");}return 0;
}
//若考虑溢出,则使用下面一行代码保证不越界
int mid = left + (right-left) / 2;

 二分法可以改为函数的方法。直接进行调用,如下:

练习:写一个函数,实现一个整型有序数组的二分查找

练习2:编写代码,演示多个字符从两端移动,向中间汇聚

//编写代码,演示多个字符从两端移动,向中间汇聚
//welcome to china!!!!
//####################
//w##################!
//we################!!
//wel##############!!!
//···
//welcome to china!!!!//理解下面两种求数组元素个数的思路
char buf[] ="abc"; 
//[a b c \0]
// 0 1 2 3
int right = strlen(buf) - 1; //strlen(buf)求的字符串长度为3,它计算的是\0前面的元素个数
int right = sizeof(buf) / sizeof(buf[0]) - 2; //sizeof(buf) / sizeof(buf[0])求的数组元素为4   
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>int main()
{char arr1[] = "welcome to china!!!!";char arr2[] = "####################";int left = 0;int right = strlen(arr2) - 1; //前面已经解释,或int right = sizeof(arr1) / sizeof(arr1[0]) - 2;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(1000); //为了更好的观察打印流程,使用windows下面的Sleep函数睡眠1000毫秒,需引入头文件windows.h。1000毫秒=1秒//windows下面的cmd窗口使用cls命令,清空屏幕,每次观察一行打印流程system("cls"); //system是一个库函数,执行系统命令cls,需引入头文件stdlib.hleft++;right--;}//前面每次打印后都清理了屏幕,最后的打印结果也被清空,可再次执行打印printf("%s\n", arr2);return 0;
}

我运行清屏cls会导致程序运行的结果不是我想要的,编译器也未报错,百度查了暂时未找到问题。只找到大概的问题是因为清屏这段代码,这里我暂且先注释掉吧,要是有大佬可以指出错误点在哪。

 私下问了许多大佬,原因:我自己的编译器不支持

#include <stdio.h>
#include <windows.h>int main()
{char arr1[] = "welcome to china!!!!";char arr2[] = "####################";int left = 0;int right = strlen(arr2) - 1; //前面已经解释,或int right = sizeof(arr1) / sizeof(arr1[0]) - 2;while (left <= right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);Sleep(1000); //为了更好的观察打印流程,使用windows下面的Sleep函数睡眠1000毫秒,需引入头文件windows.h。1000毫秒=1秒left++;right--;}return 0;
}

 练习3:简单编写代码实现,模拟用户登录情景,并且只能登录三次

(只允许输入三次密码,如果密码正确,则提示登录成功;如果三次均输入错误,则退出程序)

//简单编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确,则提示登录成功;如果三次均输入错误,则退出程序)#include <stdio.h>
#include <string.h>
int main()
{int i = 0;char password[20] = { 0 };for (i = 0; i < 3; i++){printf("请输入密码:>");scanf("%s", password);//比较2个字符串是否相等,不能使用==,而应该使用库函数strcmp。如果函数返回值为0,表示2个字符串相等if (strcmp(password, "abcdef") == 0)  //需要引入string.h头文件{printf("登陆成功\n");break;}else{printf("密码错误\n");}}if (3 == i){printf("三次密码均输入错误,退出程序\n");}return 0;
}

基本形式strcmp(str1,str2),string compare(字符串比较)。若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

练习4:猜数字游戏实现

//1、电脑产生一个随机数(1-100)
//2、猜数字
//反馈猜大了、猜小了、猜对了
//建议:边写边测试,看是否能实现#include <stdio.h>
#include <stdlib.h>
#include <time.h>void menu()
{printf("**************\n");printf("****1.play****\n");printf("****0.exit****\n");printf("**************\n");  
}
void game()
{//1.生成随机数1-100//rand()%100 + 1;%100范围0-99--->+1范围1-100int ret = rand()%100 + 1; //rand()生成随机数的函数,取值范围0-RAND_MAX(32767)//printf("%d\n", ret); //用于测试//2.猜数字int guess = 0;while (1){printf("请猜数字:>");scanf("%d", &guess);if (guess < ret){printf("猜小了\n");}else if (guess > ret){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;}}
}
int main()
{int input = 0;//空指针int *p = NULL;srand((unsigned int) time(NULL)); //时间戳。NULL定义空指针。()强制类型转换do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game(); //猜数字的整个逻辑break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择!\n");break;}} while (input);return 0;
}

其中函数不明白的可以根据前篇的学习方法进行查阅资料进行学习。

C语言初阶--函数 中的 2.1 库函数

这里简单圈一下:

rand()

 

srand()

时间戳

 

总结

此篇主要针对折半查找算法进行例题解析,由于内容较少,添加了多道练习题。

今天就暂且更新至此吧,期待下周再会。如有错误还请不吝赐教。如果觉得对您学习有所帮助,还请留下你的支持,以防下次失踪了嗷。

作者更新不易,免费关注别手软。

相关文章:

C语言初阶--折半查找算法

目录 练习1&#xff1a;在一个有序数组中查找具体的某个数字n 练习2&#xff1a;编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 练习3&#xff1a;简单编写代码实现&#xff0c;模拟用户登录情景&#xff0c;并且只能登录三次 练习4&#xff1a;猜数字…...

Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应

前言 爬虫需要基础知识&#xff0c;HTTP协议只是个开始&#xff0c;除此之外还有很多&#xff0c;我们慢慢来记录。 今天的HTTP协议&#xff0c;会有助于我们更好的了解网络。 一、什么是HTTP协议 &#xff08;1&#xff09;定义 HTTP&#xff08;超文本传输协议&#xff…...

[ Spring ] Spring Cloud Gateway 2025 Comprehensive Overview

文章目录 Spring Gateway ArchitectureProject Level DependencyService CenterService ProviderGateway ServiceLaunch All Service Spring Gateway Architecture Service Center : register and find service providerService Provider : programs that provide actual serv…...

【项目初始化】自定义异常处理

我们在项目初始化的工作之一就是要自定义异常处理&#xff0c;用来处理项目中出现的各种异常&#xff0c;如业务异常、系统异常等等。 这些属于项目的通用基础代码&#xff0c;在任何后端中都可以复用。 1. 自定义错误码 自定义错误码&#xff0c;对错误进行收敛&#xff0c;…...

Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决

个人博客地址&#xff1a;Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决 | 一张假钞的真实世界 msvcp120.dll、msvcr120.dll、vcomp120.dll属于VC2013版中的动态链接库&#xff0c;如果丢失重新安装VC2013即可。下载地址&#xff1a;https://www.microsoft.com…...

【嵌入式】总结——Linux驱动开发(三)

鸽了半年&#xff0c;几乎全忘了&#xff0c;幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的&#xff0c;本篇与前两篇一样&#xff0c;重点在于使用、快速体验&#xff0c;uboot、linux、根文件系统不作深入理解&#xff0c;能用就行。 重新梳理一下脉络&#xff0c;本…...

计算机图形学:实验三 光照与阴影

一、程序功能设计 设置了一个3D渲染场景&#xff0c;支持通过键盘和鼠标控制交互&#xff0c;能够动态调整光源位置、物体材质参数等&#xff0c;具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体&#xff1a;代码中通过 openGLObject 结构体表示一个…...

「 机器人 」扑翼飞行器混合控制策略缺点浅谈

前言 将基于模型的控制与强化学习策略融合在扑翼飞行器中,虽然能够兼顾系统稳定性与极限机动能力,但也面临了更高的系统复杂性、对硬件算力与可靠性的额外要求,以及难以回避的能量效率等方面挑战。以下从四个方面进行归纳与分析。 1. 系统复杂性增加 1.1 两种控制方法的并存…...

蓝桥杯算法日常|c\c++常用竞赛函数总结备用

一、字符处理相关函数 大小写判断函数 islower和isupper&#xff1a;是C标准库中的字符分类函数&#xff0c;用于检查一个字符是否为小写字母或大写字母&#xff0c;需包含头文件cctype.h&#xff08;也可用万能头文件包含&#xff09;。返回布尔类型值。例如&#xff1a; #…...

每日十题八股-2025年1月24日

1.面试官&#xff1a;Kafka 百万消息积压如何处理&#xff1f; 2.面试官&#xff1a;最多一次、至少一次和正好一次有什么区别? 3.面试官&#xff1a;你项目是怎么存密码的? 4.面试官&#xff1a;如何设计一个分布式ID&#xff1f; 5.面试官&#xff1a;单点登录是怎么工作的…...

tomcat的accept-count、max-connections、max-threads三个参数的含义

tomcat的accept-count、max-connections、max-threads三个参数的含义 tomcat的accept-count、max-connections、max-threads三个参数的含义 max-connections&#xff1a;最大连接数 最大连接数是指&#xff0c;同一时刻&#xff0c;能够连接的最大请求数 需要注意的是&#x…...

【无标题】mysql python 连接

coding:utf8 import os import pymysql import yaml from common.log import logger class Mysql: # 处理.sql备份文件为SQL语句 def __read_sql_file(self,file_path): # 打开SQL文件到f sql_list = [] with open(file_path, ‘r’, encoding=‘utf8’) as f: # 逐行读取和…...

linux naive代理设置

naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统

一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础&#xff0c;它不仅为芯片本身提供稳定的电源&#xff0c;还通过多种电源管理功能优化功耗、延长电池寿命&#xff0c;并确保系统的可靠性和稳定性。 二、电源监控器 作用&#xff1a;保证STM32芯片工作在…...

DBO优化最近邻分类预测matlab

蜣螂优化算法&#xff08;Dung Beetle Optimizer&#xff0c;简称 DBO&#xff09;作为一种新兴的群智能优化算法&#xff0c;于 2022 年末被提出&#xff0c;其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…...

【深入理解FFMPEG】命令行阅读笔记

这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…...

图形化数据报文转换映射工具

目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代&#xff0c;数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛&#xff0c;格式多样&#xff0c;常见的数据格式包括XML&#xff08;可扩展标记语言&#xff09;和JSON&a…...

智能体0门槛开发

分享一个智能体开发流程。 2025 年啊&#xff0c;好多专家还有行业报告都觉得这是智能体&#xff08;AI Agent&#xff09;应用的头一年。相关的应用在商业、工业、消费等好些领域都到了关键的时候&#xff0c;这意味着从实验室走向大规模实际应用的重要转变。而且呢&#xff0…...

ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”

起因 环境&#xff1a;Windows10 背景&#xff1a;之前就是按照官方说明创建个rsa密钥&#xff0c;在git后台添加上&#xff0c;就行了&#xff0c;近期怎么添加怎么失败&#xff0c;总是“Error: Permission denied (publickey)”的提示&#xff01; 尝试 各种尝试&#xf…...

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用

全国地图json数据下载地址 目录 html加载全部代码 方式一&#xff1a;使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式&#xff0c;设置type加载数据类型 设置线条 鼠标移入改变颜色&#xff0c;设置图层属性&#xff0c;此处是fill-extru…...

Czkawka:智能存储管理的5个核心解决方案

Czkawka&#xff1a;智能存储管理的5个核心解决方案 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 1.0 现象剖析&#xff1a;数字存储管理的现实困…...

霞鹜文楷GB:开源楷体字体的国标规范解决方案

霞鹜文楷GB&#xff1a;开源楷体字体的国标规范解决方案 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB 在数字时代的中文排版领域&#xff0c;如何在保持视…...

基于cv_unet_image-colorization的Python爬虫实战:自动化图像数据集着色

基于cv_unet_image-colorization的Python爬虫实战&#xff1a;自动化图像数据集着色 为计算机视觉项目快速构建高质量的彩色图像数据集 在计算机视觉项目中&#xff0c;获取高质量的标注数据集往往是最耗时耗力的环节。特别是当我们需要大量彩色图像数据时&#xff0c;手动收集…...

5个核心功能让网盘用户彻底解决下载速度慢的问题

5个核心功能让网盘用户彻底解决下载速度慢的问题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 …...

LeetCode 11. Container With Most Water 题解

LeetCode 11. Container With Most Water 题解 题目描述 给你 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条…...

Qwen3-Reranker-0.6B一文详解:轻量0.6B参数如何实现SOTA级重排序性能

Qwen3-Reranker-0.6B一文详解&#xff1a;轻量0.6B参数如何实现SOTA级重排序性能 1. 引言&#xff1a;为什么你需要关注这个0.6B的小模型&#xff1f; 如果你用过搜索引擎&#xff0c;肯定有过这样的体验&#xff1a;输入一个问题&#xff0c;搜出来一堆结果&#xff0c;但真…...

Electron + Vue 3 + Vite 桌面应用开发:从零到打包的实战指南

1. 为什么选择Electron Vue 3 Vite组合 如果你正在寻找一种既能快速开发又能保证性能的桌面应用解决方案&#xff0c;Electron Vue 3 Vite的组合绝对值得考虑。这个组合最大的优势在于开发体验的提升&#xff0c;特别是对于那些已经熟悉Vue生态的开发者来说。 Vite带来的开…...

Benchmark.js 配置选项终极指南:如何优化你的 JavaScript 性能测试环境

Benchmark.js 配置选项终极指南&#xff1a;如何优化你的 JavaScript 性能测试环境 【免费下载链接】benchmark.js A benchmarking library. As used on jsPerf.com. 项目地址: https://gitcode.com/gh_mirrors/be/benchmark.js Benchmark.js 是一款专业的 JavaScript 性…...

nli-distilroberta-base参数解析与调优指南:关键配置项详解

nli-distilroberta-base参数解析与调优指南&#xff1a;关键配置项详解 1. 引言 如果你正在使用nli-distilroberta-base模型进行自然语言推理任务&#xff0c;可能会遇到这样的困惑&#xff1a;为什么同样的模型在不同机器上运行速度差异这么大&#xff1f;为什么有时候推理结…...

Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆

Qwen3-TTS快速部署教程&#xff1a;一键启动Web服务&#xff0c;3分钟开始声音克隆 1. 为什么选择Qwen3-TTS进行语音克隆 想象一下这样的场景&#xff1a;你需要为海外客户录制多语言产品介绍&#xff0c;但雇佣专业配音演员成本高昂&#xff1b;或者想为自己的视频内容添加个…...