【C语言】经典题目(四)

HI,大家好~😝😝这是一篇C语言经典题目的博客。
更多C语言经典题目及刷题篇,可以参考:
🌸 【C语言】经典题目(一)
🌸 【C语言】经典题目(二)
🌸 【C语言】经典题目(三)
🌸 【C语言】字符串刷题篇

🍀🍀本篇文章主要利用函数完成所需的功能及程序的编写。
主要有:
①写一个函数判断一个数是不是素数。
②写一个函数判断一年是不是一年。
③写一个函数,实现一个整型有序数组的二分查找。
④写一个函数,每调用一次这个函数,num值就会增加1。

【C语言】经典题目四

  • 打印100~200之间的素数
  • 打印1000~2000之间的闰年
  • 写一个函数,实现一个有序数组的二分查找
    • 详解二分查找
    • 函数实现二分查找
  • 写一个函数,没调用一次这个函数,就会将num的值增加1

打印100~200之间的素数

思路首先,自定义函数,判断一个数是不是素数。在主函数中,对100~200个数依次利用所写的函数进行判断。如果是,则打印。如果是素数,则count+1,可以计算出100-200之间有多少个素数。
对于我们自定义的判断素数的函数,它的结果只有两种,是和不是。
①如果是素数,我们可以返回 1,如果不是素数,我们返回 0。
②对于判断一个数是不是素数这样的问题,它只有两种情况,是和不是,即True和False。所以这个题目,我们可以定义我们的函数类型是布尔类型,返回True或者False。但要注意,包含头文件<stdbool.h>

①代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int is_prime(int n)
{int i;for (i = 2; i <= sqrt(n); i++){if (n % i == 0)return 0;}return 1;
}
int main(void)
{int i;int count = 0;for (i = 101; i < 200; i = i + 2){if (is_prime(i)) {printf("%d ", i);count++;}}printf("\n");printf("count=%d", count);return 0;
}

运行结果:
在这里插入图片描述

②代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool is_prime(int n)
{int i;for (i = 2; i <= sqrt(n); i++){if (n % i == 0)return false;}return true;
}
int main(void)
{int i;int count = 0;for (i = 101; i < 200; i = i + 2){if (is_prime(i)){printf("%d ", i);count++;}}printf("\n");printf("count=%d", count);return 0;
}

打印1000~2000之间的闰年

思路首先先写一个自定义函数判断一年是不是闰年。对于主函数,遍历1000-2000,对每一个年份利用所编写的函数进行判断。如果是,则打印。如果是,count+1,可以计算1000~2000之间闰年年份的个数。
对于我们自定义的判断是否是闰年的函数,它的结果也只有两种,是和不是。如同上面的题目一样
①如果是闰年,我们可以返回 1,如果不是闰年,我们返回 0
②定义我们的函数类型是布尔类型,如果是闰年,返回True如果不是,返回False。要注意,包含头文件<stdbool.h>
**
①代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int is_leap_year(int year)
{if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)return 1;elsereturn 0;
}
int main()
{int i;int count = 0;for (i = 1000; i <= 2000; i ++){if (is_leap_year(i)){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

②代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>
bool is_leap_year(int year)
{if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)return true;elsereturn false;
}
int main()
{int i;int count = 0;for (i = 1000; i <= 2000; i ++){if (is_leap_year(i)){printf("%d ", i);count++;}}printf("\ncount=%d\n", count);return 0;
}

写一个函数,实现一个有序数组的二分查找

详解二分查找

首先,我们先抛开在函数中实现有序数组的二分查找这个问题。
我们先来探索一下如何用代码实现二分查找
假如我们给上一个如下的有序数组:

在这里插入图片描述
假设我们要查找的数字为5.
①我们要将5与这个有序数组的中间值进行比较:
在这里插入图片描述

而目标数5<7,下一步我们缩小二分查找的范围。
②缩小二分查找的范围
在这里插入图片描述
③进行下一次的二分查找:
在这里插入图片描述

而目标数5>3,接着我们再次缩小二分查找的范围。
④再次缩小二分查找的范围:
在这里插入图片描述
⑤进行二分查找
在这里插入图片描述
而目标数==mid,所以我们在这个有序数组中找到了。

总结:在一个有序数组中进行二分查找,我们是与中间值进行比较的,如果不相等,我们一步一步的缩小二分查找的范围。就像是一个数组的两个指针在进行一步一步移动,直到两个指针正好指的是同一个数时,那就必须要停止查找了,如果这时还没有找到,说明在这个数组中就没有了。
将上述的文字转化为代码描述:在数组中,将中间数mid和目标数进行比较,如果相等,则找到了,如果不相等,进一步更新修改缩小数组,对于新数组同样进行上述的过程…在产生新的数组,在进行判断…所以我们需要写一个循环,循环的条件就是left<=right
代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int n = 0;int right = 0, left = 0, mid = 0;int flag = 0;printf("你想要查找的数字:");scanf("%d", &n);//初始化left = 0; right = 9; mid = (left + right) / 2;while (left <= right){if (arr[mid] == n){printf("找到了\n");printf("下标是%d", mid);flag = 1;break;}else if (n < arr[mid]){right = mid - 1;    //left不变mid = (right + left) / 2;}else{left = mid + 1;  //right 不变mid = (right + left) / 2;}}if (flag = 0)printf("没找到");return 0;
}

在这里插入图片描述

函数实现二分查找

首先我们需要自定义一个函数,在函数内需要对一个数组实现二分查找。
函数参数我们需要一个数,即我们的目标数,和一个数组首元素的地址

对于函数的返回值,因为我们不仅仅是想知道在数组中有没有目标数,更想明确它的下标,所以函数的返回值,我们不妨返回的是下标。若是没有找到的话,那就返回一个负数-1即可。(因为不会有数组元素的下标为负数的。)
然后我们在主函数中调用函数,传递参数即可。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int binary_search(int n, int arr[],int sz)
{int left = 0, right = sz-1;int mid = (left + right) / 2;while (left <= right){if (arr[mid] == n)return mid;else if (arr[mid] > n){right = mid - 1;//left不变mid = (left + right) / 2;}else{left = mid + 1;//right不变mid = (left + right) / 2;}}return  -1;
}
int main()
{int n = 0;int arr[10] = { 1,4,6,7,9,11,14,16,18,19 };printf("你想要查找的数字:\n");int sz = sizeof(arr) / sizeof(arr[0]);scanf("%d", &n);int ret = binary_search(n, arr,sz);if (ret>-1){printf("找到了\n");printf("下标为%d", ret);}elseprintf("没找到\n");return 0;
}

运行结果:
在这里插入图片描述

写一个函数,没调用一次这个函数,就会将num的值增加1

因为每调用一次函数,就要将num的变化,而能使得num变化,我们需要向函数传递num的地址,使得每调用一次,就能使num的值发生变化。
代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Add(int* p)
{*p = *p + 1;
}
int main()
{int num = 3;Add(&num);printf("%d\n", num);Add(&num);printf("%d\n", num);Add(&num);printf("%d\n", num);return 0;
}

运行结果:
在这里插入图片描述

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

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

相关文章

vue3中的自定义指令用法

我们都知道vue2中自定义指令全局和局部是这样写的 局部&#xff1a; 全局&#xff1a; 可vue3写法发生改变&#xff0c;如下&#xff1a; 全局&#xff1a; 局部&#xff1a;

音视频 FFmpeg命令行搭建

文章目录 一、配置二、测试 一、配置 以FFmpeg4.2.1 win32为例 解压ffmpeg-4.2.1-win32-shared.zip 拷⻉可执⾏⽂件到C:\Windows拷⻉动态链接库到C:\Windows\SysWOW64 注&#xff1a;WoW64 (Windows On Windows64)是⼀个Windows操作系统的⼦系统&#xff0c;被设计⽤来处理许…

【网络】自定义协议 | 序列化和反序列化 | Jsoncpp

本文首发于 慕雪的寒舍 以tcpServer的计算器服务为例&#xff0c;实现用jsoncpp来进行序列化和反序列化 阅读本文之前&#xff0c;请先阅读 自定义协议 | 序列化和反序列化 | 以tcpServer为例 1.安装jsoncpp 我所用的系统是centos7.6&#xff0c;先用下面的命令查找相关的包 …

图的遍历之 深度优先搜索和广度优先搜索

深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search)&#xff0c;和树的先序遍历比较类似。 它的思想&#xff1a;假设初始状态是图中所有顶点均未被访问&#xff0c;则从某个顶点v出发&#xff0c;首先访问该顶点&#xff0c;然后依次从它的各…

Element组件浅尝辄止2:Card卡片组件

根据官方说法&#xff1a; 将信息聚合在卡片容器中展示。 1.啥时候使用&#xff1f;When? 既然是信息聚合的容器&#xff0c;那场景就好说了 新建页面时可以用来当做页面容器页面的某一部分&#xff0c;可以用来当做子容器 2.怎样使用&#xff1f;How&#xff1f; //Card …

分布式应用:Zabbix代理服务器与SNMP监控

目录 一、理论 1.分布式监控 2.Zabbix代理服务器部署 3.配置 agent 使用 proxy 4.设置 Zabbix-SNMP 监控 二、实验 1.Zabbix代理服务器部署 2.配置 agent 使用 proxy 3.设置 Zabbix-SNMP 监控 三、总结 一、理论 1.分布式监控 &#xff08;1&#xff09;作用&#x…

Docker安装Mysql、Redis、nginx、nacos等环境

相关系列文章&#xff1a; 1、DockerHarbor私有仓库快速搭建 2、DockerJenkinsHarbor 1、服务器 Ip部署内容说明192.168.88.7Docker、Mysql、redis、nacosnode1192.168.88.8Docker、Mysql、redis、nacosnode2192.168.88.9Docker、redis、nacos、nginxnode3 2、安装PXC8.0 Mys…

PHP实现在线进制转换器,10进制,2、4、8、16、32进制转换

1.接口文档 2.laravel实现代码 /*** 进制转换计算器* return \Illuminate\Http\JsonResponse*/public function binaryConvertCal(){$ten $this->request(ten);$two $this->request(two);$four $this->request(four);$eight $this->request(eight);$sixteen …

echarts 横向柱状图

<template><div ref"chart" style"height: 100%"></div> </template><script> import * as echarts from "echarts"; var cate ["质量通病1", "质量通病2", "质量通病3", "质…

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

数据结构——双向链表

双向链表实质上是在单向链表的基础上加上了一个指针指向后面地址 单向链表请参考http://t.csdn.cn/3Gxk9 物理结构 首先我们看一下两种链表的物理结构 我们可以看到&#xff1a;双向在单向基础上加入了一个指向上一个地址的指针&#xff0c;如此操作我们便可以向数组一样操作…

基于Crow的C++的WebSocket服务器

基于Crow的C的WebSocket服务器 一、WebSocket 1.1 什么是WebSocket WebSocket 是一种持久化的通讯协议。 很多网站为了实现推送技术&#xff0c;所用的技术都是轮询&#xff0c;这种解决方案是指由浏览器每隔一段时间向服务器发出 HTTP 请求&#xff0c;然后服务器返回最新的…

Qt自定义对话框

介绍 自定义框主要通过对现有对话框QDialog类的派生&#xff0c;根据需求编写成员函数、重载信号函数、槽函数&#xff0c;进而实现在主QWidget中点击某个按钮后&#xff0c;一个对话框的弹出 流程 简化创建派生类 最后点击完成即可。 自定义ui界面&#xff0c;编写成员函数…

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…

Git与Github常用方法

目录 1. Github基本使用方法2. Git使用方法3. git、VS code、Github联合使用方法4. Git配置Github远程仓库SSH密钥5. 常见问题 1. Github基本使用方法 仓库&#xff08;Repository&#xff09;&#xff1a;Github上用来存放代码的空间&#xff0c;包含代码、文档和其他文件。提…

逆向破解学习-经典贪吃蛇大作战_1.00

试玩游戏 有支付取消关键字 找静态代码 找到关键字 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5d9f3cc57d18477794197ea5fae8c5ba.png Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; import de.r…

Java 本地缓存之王:Caffeine 保姆级教程

一、Caffeine介绍 1、缓存介绍 缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存&#xff0c;到客户端的页面缓存&#xff0c;处处都存在着缓存的身影。缓存从本质上来说&#xff0c;是一种空间换时间的手段&#xff0c;通过对数据进行一定的空间安排&#xff0c;使得下…

vxe-grid\table 自定义动态列排序设置

实现动态加载的表格数据&#xff0c;根据设置动态控制指定的某些字段排序功能&#xff1b;如下图所示&#xff1b; 代码实现&#xff1a;标签内添加属性&#xff1b; :sort-config"{trigger:cell, defaultSort: {field: , order: desc}, orders:[desc, asc]}" sort-…

OneFlow 中的 Softmax

Softmax 是深度学习模型中的常见算子。PyTorch 的 Softmax 算子直接调用 cuDNN 的接口。而 OneFlow 内部针对输入数据的类别数量&#xff0c;采用3个 kernel 来分别处理&#xff0c;在多数情况下都可以获得比 cuDNN 更优的性能表现。下面对其实现进行介绍。OneFlow 的静态分层结…

快速修复应用程序中的问题的利器—— Android热修复

热修复技术在Android开发中扮演着重要的角色&#xff0c;它可以帮助开发者在不需要重新发布应用程序的情况下修复已经上线的应用程序中的bug或者添加新的功能。 一、热修复是什么&#xff1f; 热修复&#xff08;HotFix&#xff09;是一种在运行时修复应用程序中的问题的技术…