5.14_练习

1、字符串逆序

编写一个函数reverse_string(char* string)(递归实现)

实现:将参数字符串中的字符反向排列,不是逆序打印

要求:不能使用C函数库中的字符串操作函数

比如:

char arr[ ]="abcdef";

逆序之后数组的内容变成:fedcba

第一次代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "abcdef";
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;//左下标
	//int right =sz-2 ;//右下标,要减去\0的个数,且下标是从0开始的,所以还得减一,所以是减2.
	int right = strlen(arr) - 1;
	while (left < right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
	printf("%s\n", arr);
	return 0;
}

sizeof计算字符串包含\0;strlen计算字符串不包含\0,且还要包含头文件string.h。

sizeof不可以用在主函数之外;strlen可以用在主函数之外。

写成函数的方式:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<string.h>
void reverse(char arr[])
{
	//int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;//左下标
	//int right =sz-2 ;//右下标,要减去\0的个数,且下标是从0开始的,所以还得减一,所以是减2.
	int right = strlen(arr) - 1;
	while (left < right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}

int main()
{
	char arr[] = "abcdef";
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}

递归实现:

可以看成拆成两部分,假设是逆序abcdef,首先交换a和f的位置,再逆序bcde,然后再把bcde看成一个字符串,也就是逆序字符串bcde,交换b和e,再把cd看成一个字符串。。。。。。

1、设置一个中间变量tmp,把a传给tmp,f传给a,此时本来应该是把tmp里面的a传给f,但是如果把tmp里面的a传给f,中间的部分bcde就不能看成一个字符串了,因为字符串是以\0结束的,所以,应该是先把\0传给f,那从b开始,看到的bcde\0就是一个字符串了,这个时候从中间开始的字符串就又可以用reverse把它逆序了,把中间的逆序成edcb的时候,再把tmp里面的a拿上来放到这最开始f的地方。

还差个停止递归的条件,其实就是看最后中间字符串的长度。

#include<stdio.h>
#include<string.h>
void reverse(char* str)
{
	char tmp = *str;//1
	int len = strlen(str);//字符串长度
	*str = *(str + len - 1);//str + len - 1这是最后一个字符f的位置  ,2
	*(str + len - 1) = '\0';//3
	if(strlen(str+1)>=2)
		reverse(str + 1);//4
	*(str + len - 1) = tmp;//最后
}

int main()
{
	char arr[] = "abcdef";
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}

题目中不能使用C函数,这里用了strlen,就自己实现一个。

参考答案:

#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
void reverse(char* str)
{
	char tmp = *str;//1
	int len = my_strlen(str);//字符串长度
	*str = *(str + len - 1);//str + len - 1这是最后一个字符f的位置  ,2
	*(str + len - 1) = '\0';//3
	if(strlen(str+1)>=2)
		reverse(str + 1);//4
	*(str + len - 1) = tmp;//最后
}

int main()
{
	char arr[] = "abcdef";
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}

如果参数给的多:

#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
void reverse(char arr[], int left, int right)
{
	char tmp = arr[left];
	arr[left] = arr[right];
	arr[right] = tmp;
	if (left+1 < right-1)
		reverse(arr, left+1 , right-1);
}

int main()
{
	char arr[] = "abcdef";
	int left = 0;
	int right = my_strlen(arr) - 1;
	reverse(arr,left,right);
	printf("%s\n", arr);
	return 0;
}

2、计算和

计算一个数的每位之和(递归实现)

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。

例如:调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

输入:1729 ,输出:19

假设输入1234

那DigitSum(1234)的话,这个4很容易得到,那就把4拆出来,先算DigitSum(123)然后再加上4,

然后算DigitSum(12)再加上3加上4,再拆成DigitSum(1)+2+3+4,这个时候1没法拆了,它的每一位数之和就是它自己,

#include<stdio.h>
int DigitSum(unsigned int n)//1234
{
	if (n > 9)//这个n是两位数
		return DigitSum(n / 10) + n % 10;  //n/10去掉个位数,n%10就是得到n的个位数
	else
		return n;
}
int main()
{
	unsigned int n = 0;
	scanf("%u", &n);
	int sum=DigitSum(n);
	printf("%d\n", sum);
	return 0;
}

3、次方

递归实现n的k次方

题目:

编写一个函数实现n的k次方,使用递归实现。

#include<stdio.h>
//Pow(n,k)  ->n*Pow(n,k-1)
//k=0  => n=1
//k>0  => n=Pow(n,k)  ->n*Pow(n,k-1)
//k<0  =>1.0/Pow(n,-k) 
double Pow(int n, int k)
{
	if (k > 0)
		return n * Pow(n, k - 1);
	else if (k == 0)
		return 1;
	else
		return 1.0 / Pow(n, -k);
}
int main()
{
	int n = 0;
	int k = 0;
	scanf("%d%d", &n, &k);
	double ret=Pow(n,k);
	printf("%f\n", ret);
	return 0;
}

4、交换数组

将数组A中的内容和数组B中的内容进行交换。(数组一样大)

#include<stdio.h>
int main()
{
	int arr1[] = { 1,3,5,7,9 };
	int arr2[] = { 2,4,6,8,0 };
	int i = 0;
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (i = 0; i < sz; i++)
	{
		int tmp=arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
	}
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

5、数组操作

创建一个整型数组,完成对数组的操作

1、实现函数init(),初始化数组全为0

2、实现print(),打印数组的每一个元素

3、实现reverse(),函数完成数组元素的逆置

要求:自己设计以上函数的参数,返回值

#include<stdio.h>
void init(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		arr[i] = 0;
	}
}
void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
void reverse(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	print(arr, sz);
	reverse(arr, sz);
	print(arr, sz);
	init(arr,sz);
	print(arr, sz);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue的学习 —— <vue事件处理>

前言 事件指的就是用户和网页交互的行为&#xff0c;这些行为&#xff0c;包括&#xff1a;鼠标单击、鼠标双击、键盘按下、抬起等。为了简化开发&#xff0c;Vue为开发者提供了事件修饰符&#xff0c;它可以与v-on配合使用&#xff0c;以便于对事件进行控制和处理&#xff0c…

最新的GPT4o文档解析能力实测

5.13日&#xff0c;openAI发布了最新的GPT模型-GPT4o&#xff0c;发布会虽短&#xff0c;但是带来的模型却提升很大&#xff0c;速度更快&#xff0c;推理能力更强&#xff0c;tokens更↓ 下面简单测一下他的文档解析能力如何&#xff1a; 1.我们使用国内某官方直连站&#xff…

momentjs

Moment.js 是一个用于处理日期和时间的 JavaScript 库&#xff0c;它提供了许多方便的函数和方法来操作、格式化和解析日期时间。官网 常见用法 格式化日期时间&#xff1a;可以使用format方法将日期时间格式化为指定的字符串格式&#xff0c;例如YYYY-MM-DD HH:mm:ss。获取日…

免费申请https证书

免费申请https证书 https域名证书对提高网站排名有一定的好处&#xff0c;所以当今很多企业为了给网站一个好的安全防护&#xff0c;就会去申请该证书。如今很多企业虽然重视网站的安全防护&#xff0c;但是也重视成本&#xff0c;所以为了节约成本会考虑申请免费的https证书。…

搭建Rust开发环境

Windows搭建 下载&#xff1a;https://www.rust-lang.org/zh-CN/tools/install Linux搭建 这里我更推荐基于Linux搭建。 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh等一会儿以后&#xff0c;会让你输入命令&#xff0c;这里输入1&#xff1a; 之后就…

【源码】2024全新多语言区块链交易所源码/期权交易/申购/币币秒合约交易所

全新ui&#xff0c;更新很多内容&#xff0c;具体看图&#xff0c;全部开源 全新多语言区块链交易所源码/期权交易/申购/币币秒合约交易所 - 吾爱资源网

LeetCode算法题:128. 最长连续序列

给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 …

3、用Vue快雕塑搭建一个管理系统的页面布局框架

3.2.顶部栏header 在el-header标签里对标签栏header进行样式定义 <template><div id"app"><el-container><el-header style"background-color: #4c535a"><img src"/assets/logo.png" alt"" style"w…

卷积网络项目:实现识别鲜花四分类对比LeNet5、VGG16、ResNet18、ResNet34分类网络

卷积四分类项目 Gitee传送门 分类目标选取 鲜花 杏花 apricot_blossom桃花 peach_blossom梨花 pear_blossom梅花 plum_blossom 模型选择 卷积 LeNet5VGG16ResNet18ResNet34 以图搜图 获取相似度前10的搜图结果 数据清洗 鲜花四分类 删除非图片文件 删除重复图片 整理…

FlyFlow:支持驳回后自动跨节点跳回

本周更新 新增&#xff1a;审批节点驳回&#xff08;拒绝配置的驳回&#xff09;支持自动跳回当前节点新增&#xff1a;修改数据节点新增&#xff1a;删除数据节点新增&#xff1a;子流程支持配置自动跳过发起人节点优化&#xff1a;两个项目合并一个单体项目优化&#xff1a;…

Springboot3 链接Redis遇到的报错(本文仅记录保存,优质文章移步springboot专栏)

出现的报错&#xff1a; cannot connect to Redisedis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is setredis wrong number of arguments for ‘auth’ command 其实上面的三个报错是不同界面显示的&#xff0c;后面两个是通过Ide…

BA112网关实现BACnet楼宇系统与OPC UA平台高效协同钡铼技术

在现代智能建筑领域&#xff0c;楼宇自动化控制系统&#xff08;BAS&#xff09;的高效运作是实现节能减排、提升居住与工作环境舒适度、增强设施管理效率的关键。BACnet协议作为楼宇自动化领域的国际标准&#xff0c;广泛应用于暖通空调、照明控制、安防系统等多个方面。然而&…

信创FTP替代的方案中,哪一个才是最适合航空行业的?

2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;我国科技尤其是上游核心技术受制于人的现状对我 国经济发展提出了严峻考验。在全球产业从工业经济向数字经济升级的关键时期&#xff0c;中国明确 “数字中国”建设战略&#xff0c; 抢占数字经济产业链制高点。 在…

Spring AOP(概念,使用)

目录 Spring AOPAOP是什么什么是Spring AOPAOP实际开发流程1. 引入依赖2. 编写AOP程序 Spring AOP详解Spring AOP中的核心概念Spring AOP的通知类型六种类型PointCutOrder(切面优先级) Spring AOP AOP是什么 Aspect Oriented Programminig(面向切面编程)切面指的是某一类特定…

信息管理系统升级改造项目:需求分析工具与实践

关键词&#xff1a;出入境信息管理系统、升级改造项目、需求分析实践、逆向工程、PowerDesigner、Axure Pro、信息系统优化策略 文章重点&#xff1a;本文以出入境信息管理系统的升级改造项目为背景&#xff0c;详细阐述了信息系统需求分析的实践过程&#xff0c;特别是如何通过…

海外媒体宣发:新加坡.马来西亚如何在海外媒体投放新闻通稿-大舍传媒

导言 随着全球化的进程加速&#xff0c;海外市场对于企业的发展越来越重要。而在海外媒体上宣传企业的新闻通稿&#xff0c;成为了拓展海外市场和提升企业知名度的重要手段之一。本文将介绍大舍传媒对于如何在海外媒体上投放新闻通稿的经验和策略。 准备工作&#xff1a;了解…

学习注意力机制并将其应用到网络中

什么是注意力机制 注意力机制的核心重点就是让网络关注到它更需要关注的地方。 当我们使用卷积神经网络去处理图片的时候&#xff0c;我们会更希望卷积神经网络去注意应该注意的地方&#xff0c;而不是什么都关注&#xff0c;我们不可能手动去调节需要注意的地方&#xff0c;…

OpenAI 推出 GPT-4o:实现多模态 AI 交互

一、前言 OpenAI 推出了其最新的 AI 模型——GPT-4o&#xff0c;此次发布的并非 GPT-4.5 或 GPT-5&#xff0c;而是一款全新的“全模态模型(Omnimodel)”。这是一个将文本、语音和视觉能力集成到单一无缝 AI 体验中的突破性发展。 GPT-4o 于 2024 年 5 月 14 日发布&#xff0…

北京玻色量子携手赛氪网举办长三角高校数学建模竞赛巡回讲座

2024年5月13日下午&#xff0c;一场聚焦数学建模与量子计算前沿的讲座在中国计量大学隆重举行。此次讲座作为第四届长三角高校数学建模竞赛的巡回宣讲活动之一&#xff0c;由北京玻色量子科技有限公司与竞赛组委会成员赛氪网共同举办&#xff0c;旨在向广大师生介绍量子计算的应…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第六套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第六套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff0c;每套四十题选择题&#xff09;获取&#xff08;WX:…