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;//1int len = strlen(str);//字符串长度*str = *(str + len - 1);//str + len - 1这是最后一个字符f的位置  ,2*(str + len - 1) = '\0';//3if(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;//1int len = my_strlen(str);//字符串长度*str = *(str + len - 1);//str + len - 1这是最后一个字符f的位置  ,2*(str + len - 1) = '\0';//3if(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的个位数elsereturn 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;elsereturn 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;
}

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

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

相关文章

全面提升数据采集效率:亮数据产品的应用与评估详解

全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解 文章目录 全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解背景应用场景&#xff1a;平台首页信息抓取准备评测素材详细的产品使用和评测流程产品介绍亮数据的IP代理服务亮数据的爬虫工具及采集技术 注…

云商城系统源码,无后门,一站式系统Java源码

云商城系统&#xff0c;无后门&#xff0c;一站式系统Java源码&#xff0c;心权益商品数量不限数量 系统对接 手动发货 自动发货 兑 换 码 订单监控 商品监控 对象存储 邮箱提醒 加价模板 密价功能 三方支付 会员体系 财务明细 交易分析 售后服务 技术支持 【Java源码】云商…

Dubbo3.x 异步转同步源码

底层netty通信是异步的&#xff0c;那我们平时调用采取的同步是如何将底层的异步转为同步的呢&#xff1f; dubbo远程rpc协议和网络框架有多种&#xff0c;我们以默认的dubbo协议、网络框架netty作为切入点. 注意点&#xff1a;debug时将过期时间设置长一点&#xff1a; 调用…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…

java版数据结构:堆,大根堆,小根堆

目录 堆的基本概念&#xff1a; 如何将一个二叉树调整成一个大根堆&#xff1a; 转成大根堆的时间复杂度 根堆中的插入&#xff0c;取出数据&#xff1a; 堆的基本概念&#xff1a; 堆是一种特殊的树形数据结构&#xff0c;它满足以下两个性质&#xff1a; 堆是一个完全二叉…

【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 创建表查看表结构修改表删除表 创建表 语法&#xff1a; create table table_name(field1 datatype,field2 datatype,fiel…

JWT令牌技术实现登录校验

一.简单登录功能 在登录界面中&#xff0c;我们可以输入用户的用户名以及密码&#xff0c;然后点击 "登录" 按钮就要请求服务器&#xff0c;服务端判断用户输入的用户名或者密码是否正确。如果正确&#xff0c;则返回成功结果&#xff0c;跳转至系统首页面。 1.功能…

局域网路由器 交换机 ap模式

目录 路由器和交换机的区别 ap模式&#xff1a; ap模式查找ip登录路由器 路由器和交换机的区别 交换机&#xff08;Switch&#xff09;和路由器&#xff08;Router&#xff09;是网络中常见的两种设备&#xff0c;它们都承担着数据传输的任务&#xff0c;但它们的工作原理和…

[笔试训练](二十二)064:添加字符065:数组变换066:装箱问题

目录 064:添加字符 065:数组变换 066:装箱问题 064:添加字符 添加字符_牛客笔试题_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 枚举所有A&#xff0c;B字符串可能的对应位置&#xff0c;得出对应位置不同字符数量的最小情况 两字符串的字符数量差n-m&…

springboot月度员工绩效考核管理系统

摘要 本月度员工绩效考核管理系统采用java语言做为代码编写工具&#xff0c;采用mysql数据库进行系统中信息的存储与处理。框架采用springboot。 本系统的功能分为管理员和员工两个角色&#xff0c;管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&am…

微信小程序使用过程注意事项

整个页面的样式设置&#xff1f; 全局页面和单个页面设置整个页面的样式时都可以通过 page标签选择器来设置。 page {background:red; }给轮播图swiper设置圆角&#xff0c;使用border-radius:10rpx;不生效? 需要再加上overflow:hidden. swiper {border-radius: 10rpx;overflo…

“Linux”目录结构and配置网络

了解完命令格式和vi、vim编辑器后&#xff0c;我们来认识一下目录的结构&#xff1a; 一、目录 &#xff08;1&#xff09;目录的特点 windows特点&#xff1a; Windows中有C、D、E盘&#xff0c;每个都是一个根系统 Linux特点&#xff1a; linux中只有一个根&#xff08;单…

冯喜运:5.14黄金大幅度修正?原油价格下跌成拖累?

【黄金消息面分析】&#xff1a;本周重要的美国数据的发布可能会对美元以及黄金产生重大影响。周四将公布更多经济指标&#xff0c;包括新屋开工和许可证、费城联储指数、工业生产数据和每周初请失业金人数。对于黄金而言&#xff0c;人们的注意力集中在经济和劳动力市场疲软对…

B/S和C/S框架

一、B/S框架 B/S框架是指Browser/Server框架&#xff0c;即基于浏览器和服务器的应用程序开发框架。在B/S架构中&#xff0c;用户通过浏览器&#xff08;Browser&#xff09;访问服务器&#xff08;Server&#xff09;上的应用程序或网站&#xff0c;而无需在用户端安装额外的客…

【Python】理解分类变量和连续变量

凡是血肉的东西都难与灵魂一样高扬。 在数据分析和建模过程中&#xff0c;变量可以分为不同的类型&#xff0c;其中最常见的两种类型是分类变量和连续变量。理解这两种变量类型及其处理方法对于数据分析和建模的成功至关重要。本文将介绍分类变量和连续变…

DRF 纯净版创建使用

【一】介绍 &#xff08;1&#xff09;使用原因 在Django中&#xff0c;contrib 包包含了许多内置的app和中间件&#xff0c;如auth、sessions、admin等&#xff0c;这些app在创建新的Django项目时默认是包含在内的。然而&#xff0c;在开发RESTful API时&#xff0c;可能不需…

jenkis

文章目录 安装插件配置构建超时自动停止 安装插件 在线安装&#xff1a;安装jenkins后&#xff0c;初次启动的时候安装插件 在线安装&#xff1a;插件管理&#xff0c;可选插件中 离线安装&#xff1a;下载插件(.hpi格式) 使用该方法安装插件每次只能安装一个插件&#xff0c;…

基于RTL8710BN与天猫精灵的WIFI智能家居方案

0 项目简介 目的&#xff1a; 语音控制智能家居产品 基于阿里云的物联网产品 基于WiFi技术的嵌入式产品 主要技术&#xff1a; WiFi技术 常用的物联网协议 网络编程 云平台配置 MCU OPENSDK开发 阿里物联网操作系统 硬件&#xff1a; wifi开发板RTL8710BN 天猫精灵…

大数据可视化实验(五):Tableau数据可视化

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1&#xff09;打开数据源... 1 2&#xff09;进入工作簿... 2 3&#xff09;字段设置... 2 4&#xff09;数据筛选... 3 5&#xff09;绘制条形图... 3 四、思考问题... 4 五、总结与心得体会... 4 一、…

深入理解Qt的信号与槽机制

目录标题 第 1 部分&#xff1a;信号与槽概述1.1 信号与槽的定义1.2 信号与槽的优势 第 2 部分&#xff1a;使用信号与槽2.1 声明信号与槽2.2 定义信号与槽2.3 连接信号与槽2.4 发出信号 第 3 部分&#xff1a;信号与槽的高级用法3.1 自动连接1. 使用 QMetaObject::Connection …