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

news2024/10/7 0:27:04

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;
	else
		return 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;
	else
		return 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);
	}
	else
		printf("没找到\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.coloradmin.cn/o/857089.html

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

相关文章

生信分析pandas数据处理 Python简明教程 | 视频17

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

ant design pro 中ModalForm的参数open无法控制的问题

根据antd自己的说明&#xff0c;visible这个参数在下个版本会被替换成open&#xff0c;所以今天我试着用open。 但是用了open之后发现这个model弹不出来&#xff0c;用visible是正常的。 那么问题在哪呢&#xff1f;又是在import的位置不对 open可以使用的是&#xff1a; imp…

在2023年及以后可以改善企业业务的五种软件

在当今互通互联的世界&#xff0c;依赖人工流程和传统方法的日子早已过去。目前&#xff0c;各种各样的软件解决方案有助于推动企业走向成功。这些解决方案是重塑客户关系、优化项目工作流程、革新财务管理实践以及通过沉浸式的培训体验增强员工能力的关键。 采用软件解决方案…

政府部门联合开展智能制造试点示范行动,对企业发展有哪些利好?

智能制造&#xff08;也称为工业 4.0 或工业物联网 (IIoT)&#xff09;的试点示范可以为业务发展带来诸多好处。主要优势体现在&#xff1a; 1.提高效率&#xff1a;智能制造集成了自动化、数据分析、人工智能和机器学习等先进技术。这些技术优化了生产流程&#xff0c;从而提…

Ubuntu 20.04 APT 方式安装 mysql 5.7

Ubuntu 20.04 直接 apt 安装的 mysql 是 8.0 &#xff0c;现在需要安装 5.7 版本&#xff0c;还颇费周章&#xff01;按照文档直接点进去那个 MySQL APT Repository 中&#xff08;https://dev.mysql.com/downloads/repo/apt/&#xff09;只显示了 8.0 &#xff0c;没有其他版本…

ClickHouse(十六):Clickhouse MergeTree系列表引擎 - CollapsingMergeTree

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

风丘科技将亮相 EVM ASIA 2023

风丘科技将首次亮相 EVM ASIA 2023 WINDHILL will debut EVM ASIA 2023 ——可持续移动的未来 —The Future of SUSTAINABLE Mobility EVM ASIA 2023是亚太地区电气化的国际性展会&#xff0c;专注于新能源汽车、充电技术及汽车零件制造等。展会致力于促进包括充电站、交通…

SpringBoot(十)SpringBoot自定义starter

一个月的时间&#xff0c;转眼已经到了我的SpringBoot系列的第十篇文章。还记得我的第二篇文章SpringBoot&#xff08;二&#xff09;starter介绍_springboot的starter_heart荼毒的博客-CSDN博客 曾经介绍过starter。starter除了官方提供的以外&#xff0c;我们也可以自定义。本…

【前端 | CSS】align-items与align-content的区别

align-items 描述 CSS align-items 属性将所有直接子节点上的 align-self 值设置为一个组。align-self 属性设置项目在其包含块中在交叉轴方向上的对齐方式 align-items是针对每一个子项起作用&#xff0c;它的基本单位是每一个子项&#xff0c;在所有情况下都有效果&…

面试热题(路径总和II)

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 在这里给大家提供两种方法进行思考&#xff0c;第一种方法是递归&#xff0c;第二种方式使用回溯的方式进行爆…

携程验证码

今日话题&#xff1a;凑字数水文章。大表哥们感兴趣可以看看。 携程验证类型总共有3种。无感&#xff0c;滑块&#xff0c;点选。 process_type&#xff1a;None为无感 验证接口&#xff1a;https://ic.ctrip.com/captcha/v4/risk_inspect process_type&#xff1a;JIGSAW为…

opencv带GStreamer之Windows编译

目录 1、下载GStreamer和安装2. GSTReamer CMake配置3. 验证是否配置成功 1、下载GStreamer和安装 下载地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安装目录无要求&#xff0c;主要是安装完设置环境变量 xxx\1…

无涯教程-Perl - getservbyport函数

描述 此功能转换协议PROTO的服务编号PORT,在标量context中返回服务名称,并在列表context中返回名称和相关信息- ($name,$aliases,$port_number,$protocol_name) 该调用基于/etc/services文件返回这些值。 语法 以下是此函数的简单语法- getservbyport PORT, PROTO返回值 …

科学家揭示:爱的能量是光——能够治愈一切!

当你和你的恋人食指相触时&#xff0c;指尖发出的辉光会产生闪电般绚烂的连结&#xff1b; 当你对着亲密的另一半说“我爱你”时&#xff0c;一团物质能量随即从你的胸口释出&#xff0c;飞向另一个人——这听起来像魔幻电影般的场景&#xff0c;却是实实在在的物理现象。 1、人…

uniapp input输入框placeholder文本右对齐

input输入框placeholder文本右对齐 给input标签加上placeholder-class&#xff0c;这个是给placeholder设置样式&#xff0c;右对齐这就是text-align:right;字体颜色之类依次编辑即可。

python——案例13:显示现在的时间

案例13&#xff1a;显示现在的时间import timefor i in range(1):print(time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time())))

GLSL用于图像处理

Pipeline 硬件处理顶点和片段的Pipeline 软件的输入 顶点着色器 顶点的glsl 输入–特殊全局变量 变量 类型 指定函数 描述 gl_ Vertex vec4 glVertex 顶点的全局空间坐标 gl_Color vec4 glColor 主颜色值 gl_SecondaryColor vec4 glSecondaryColor 辅助颜色值 gl_Normal …

布谷鸟配音:智能文字转语音配音软件

这是一款主打文字转语音功能的智能配音软件&#xff0c;它提供了数百种不同风格、具备真人发声效果的配音音效&#xff0c;包含沉稳的男声、温柔的女声、稚嫩的童声&#xff0c;还支持方言和外语配音&#xff0c;可以应用于多种场景&#xff0c;例如在线教育、广告宣传、电子书…

贡献超 10 万代码的新晋 committer,持续参与 Apache IoTDB 社区的“秘籍”是?

资深贡献者成为 Committer&#xff01; 2023 年 5 月 5 日&#xff0c;经 Apache IoTDB 社区投票&#xff0c;周沛辰成为 Apache IoTDB Committer。但其实这位新 committer 已经是 GitHub 代码贡献量突破 10 万&#xff0c;排名靠前的“资深贡献者”了。这位 Apache IoTDB 的“…

百度、NVIDIA、Intel……各大厂商集结,共话文心与飞桨共享生态下的大模型训推部署创新实践计划...

由深度学习技术及应用国家工程研究中心主办、百度飞桨和文心大模型承办的WAVE SUMMIT 2023峰会重磅来袭&#xff01;本届峰会聚焦AI技术、产业生态、未来趋势等主要方向&#xff0c;产、学、研、用各界大咖将围绕深度学习及大模型技术的发展与未来&#xff0c;带来行业前瞻洞察…