临近期末,这些题不来看看吗?(下)

news2025/1/13 15:37:24

目录

1、打印1~100之间所有3的倍数(三种方法)

2、写出3给整数从大到小输出

3、给定两个数,求这两个数的最大公约数

4、 递归实现n的k次方

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

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

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


1、打印1~100之间所有3的倍数(三种方法)

法一:

让所有3的倍数与3求余都为0

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
			printf("%d ", i);
	}
	return 0;
}

法二:

让调整部分每次循环+3

int main()
{
	int i = 0;
	for (i = 3; i <= 100; i += 3)
	{
		printf("%d ", i);
	}
	return 0;
}

法三:

让条件判断部分每次*3

int main()
{
	int i = 0;
	for (i = 1; i * 3 <= 100; i++)
	{
		printf("%d ", i * 3);
	}
	return 0;
}

2、写出3给整数从大到小输出

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	//输入
	scanf("%d %d %d", &a, &b, &c);
	//排序
	//最大放在a中,最小放在c中,剩余放在a中就行
	if (a < b)
	{
		int tmp = a;
		a = b;
		b = tmp;
	}
	if (a < c)
	{
		int tmp = c;
		c = a;
		a = tmp;
	}
	if (b < c)
	{
		int tmp = b;
		b = c;
		c = tmp;
	}
	
	//打印
	printf("%d %d %d", a, b, c);
	return 0;
}

3、给定两个数,求这两个数的最大公约数

法一:

解题思路:

首先最大公约数肯定不会超过两个数的最大值,所以先在a和b间找出最小值,再利用最小值分别对a、b求余,若两者余数都为0,说明就得到了最大公约数。

int main()
{
	int a = 0;
	int b = 0;

	//给定两个数
	scanf("%d %d", &a, &b);
	
	int k = (a > b ? b : a);//求a和b中最小值
	                                                //a     b
	while (1) //只要k不为0继续判断                   //18    24
	{												//18	18
		if (a % k == 0 && b % k == 0)				//17	17
		{											//6		6
			break; //a、b只要分别和k求余为0,就得到最大公约数
		}
		k--;
	}
	printf("%d ", k);

	return 0;
}

法二:

辗转相除法:

想了解辗转相除法可以看看这个链接:https://zhuanlan.zhihu.com/p/171623230


#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int k = 0;
	scanf("%d %d", &a, &b);
	while (k = a % b)
	{
		a = b;
		b = k;
	}
	printf("%d\n", b);

	return 0;
}

4、 递归实现n的k次方

解题思路:

代码实现:

#include <stdio.h>
double Pow(int n, int k)
{
	if (k == 0)
	{
		return 1.0;
	}
	else if (k > 0)
	{
		return n * Pow(n, k - 1);
	}
	else //k<0
	{
		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("%Lf\n", ret);
	return 0;
}

递归流程(画图)

递:递推(黑线)

归:回归(红线)

假设要计算2的3次方

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

例如:调用DigitSum(1729),则应该返回19

解题思路:

当n是一位数时,返回组成它的数字之和不就是n本身

当n是一位数以上时,可以想想是不是个位的数字非常好得到,只需让n%10即可,就举DigitSum(1729)可以传化成DigitSum(1729/10)+1729%10,接下来DigitSum(172/10)+172%10,这样以此类推下来不就是个递归吗

这题类似于按顺序打印每一位

https://blog.csdn.net/Weraphael/article/details/127831828

代码实现:

#include <stdio.h>    
int DigitSum(int n)
{
	if (n <= 9) //若输入一位数,则返回对应的值
	{
		return n;
	}

	else //n>9
	{
		return DigitSum(n / 10) + n % 10;
	}
}
int main()
{
	int n = 0;
	//输入
	scanf("%d", &n);
	int ret = DigitSum(n);
	printf("%d\n", ret);
	return 0;
}

递归流程(画图)

递:递推(黑线)

归:回归(红线)

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

实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:char arr[]="abcdef"
逆序后数组内容变成:fedcba

解题思路:

代码实现: 

#include <stdio.h>
#include <string.h>
int Strlen(char* string)//计算字符串长度
{
	int count = 0;
	while (*string != '\0')
	{
		count++;
		string++;
	}
	return count;
}
void reverse_string(char* string)
{
	int left = 0;
	int right = Strlen(string) - 1;
	while (left <= right)
	{
		char tmp = string[left];
		string[left] = string[right];
		string[right] = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

程序结果:

 最后再给大家推荐一种写法

#include <stdio.h>
#include <string.h>
int Strlen(char* arr)//计算字符串长度
{
	int count = 0;
	while (*arr != '\0')
	{
		count++;
		arr++;
	}
	return count;
}
void reverse_string(char* arr)
{
	int left = 0;//左下标
	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_string(arr);
	printf("%s\n", arr);
	return 0;
}

中间部分代码解析:

数组名是首元素的地址,对于形参的arr,其实就指向了a的地址,接着arr+left,而left一开始为0,加0等于没加还是指向a的地址, 最后再进行解引用,就找到了a。*(arr+right)也是如此。这种写法和一开始写的没差,主要是为了方便大家理解。

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

实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:char arr[]="abcdef"

解题思路:

对于递归,可以拆成两步,第一步先交换a和f,第二步再调用reverse string(bcde),来逆序bcde。然后呢reverse string(bcde)又能拆成两步,第一步交换b和e。第二步再调用reverse string(cd),来逆序cd。接着reverse string(cd)又能拆成两步,第一步交换C和d,第二步调用reverse string(空字符串),调用空字符串时就能回归了,大概思路就是这样。

代码实现: 

#include <stdio.h>
int Strlen(char* string)//计算字符串长度
{
	int count = 0;
	while (*string != '\0')
	{
		count++;
		string++;
	}
	return count;
}
void reverse_string(char* string)
{
	int len = Strlen(string);//求字符串长度
	//交换
	char tmp = *string;                //*string = a 
	*string = *(string + len - 1);     //*(string + len - 1) = f
	*(string + len - 1) = '\0';		   //防止递归乱套
	if (Strlen(string + 1) >= 2)       //防止死递归
	{
		reverse_string(string + 1);
	}
	
	*(string + len - 1) =  tmp;
	
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

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

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

相关文章

二叉树模板套题——相同的树的应用

文章目录力扣100. 相同的树递归展开图力扣572. 另一棵树的子树递归展开图力扣101. 对称二叉树递归展开图力扣100. 相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xf…

四、nginx正向代理

一、正向代理 解释&#xff1a;正向代理指的是客户端通过访问目标服务端&#xff0c;再由目标服务端来转发流量访问互联网 结构图如下&#xff1a; 好处&#xff1a;这样做的好处是&#xff0c;当客户端通过服务端访问互联网某个网站时&#xff0c;该网站获得的IP地址是服务…

STEAM上的一款电路模拟神器 — CRUMB Circuit Simulator

摘要&#xff1a;这几天在逛steam商店时&#xff0c;发现了一款有意思的电路仿真软件CRUMB Circuit Simulator&#xff08;CRUMB电路模拟器&#xff09;&#xff0c;觉得挺有意思的&#xff0c;就下载了玩了一下。 这款模拟电路软件的东西不多&#xff0c;基础的元器件都有&…

关于赚钱这件事,必须做到「金钱场」、「认知场」和「人脉场」三场统一

每周末&#xff0c;我会将我付费星球内的精华文章&#xff0c;在每周六或周日以付费文章的方式在公众号分享给大家&#xff0c;如果你不想加入我的星球&#xff0c;还想看的话&#xff0c;可以在这里付费看。当然&#xff0c;加入星球会更划算&#xff0c;因为星球内内容更多&a…

ArcGIS基础:如何在大量数据里挑选随机样本(创建随机点工具)

【创建随机点】工具位于【采样】工具下&#xff0c;如下所示&#xff1a; 假如我们有一个需求&#xff0c;要在很多数据里随机选择10个数据&#xff0c;就可以使用该工具。 假如我这里有全国的县级数据&#xff0c;我想要在里面随机抽选10个县城。 原始数据如下&#xff1a; …

IPSec 基础介绍

IPSec是IETF&#xff08;Internet Engineering Task Force&#xff09;制定的一组开放的网络安全协议。它并不是一个单独的协议&#xff0c;而是一系列为IP网络提供安全性的协议和服务的集合&#xff0c;包括认证头AH&#xff08;Authentication Header&#xff09;和封装安全载…

【JavaScript高级】05-JavaScript中with、eval语句及严格模式的使用

with、eval及严格模式的使用with语句的使用&#xff08;了解&#xff09;eval函数严格模式了解严格模式开启严格模式严格模式的限制with语句的使用&#xff08;了解&#xff09; with语句的作用是将代码的作用域设置到一个特定的对象中。目的主要是为了简化多次编写同一个对象…

【学习笔记50】ES6的新增属性1

一、ES6 * ES6 * 其实就是JS发展过程中的某一个版本而已, 那个版本的版本号叫做ES6* JS* 在最初的时候, 是只有var关键可以声明变量* 随着版本的更新, 在某一个版本内推出了新的变量声明方式* * JS的更新* 在推出ES6的时候, 这个版本推出的新东西比较多…

[附源码]Python计算机毕业设计高校教材网上征订系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

SQL关键字详解

当前市场中&#xff0c;数据库在互联网整个技术链中的重要性是亘古不变的&#xff0c;站在实现业务功能的角度来说我们最常用的就是与数据库和缓存进行交互&#xff0c;而最终持久化存储最常见的依旧是关系型数据库。数据库中我们做常用的就是SQL基本查询语言&#xff0c;甚至有…

临近期末,这些题不来看看吗?(上)

目录 1、在屏幕上输入9*9乘法表 2、输入一个值&#xff0c;打印对应的乘法口诀表 3、求十个整数的最大值 4、分数求和&#xff1a;计算1/1 - 1/2 1/3 - 1/4 1/5 ... 1/99 - 1/100&#xff08;3种方法&#xff09; 5、编写程序数一下&#xff0c;1到100的所有整数中出现多…

ggrcs 包2.4绘图实际操作演示(1)

ggrcs 包2.4版本已经发布一段时间了&#xff0c;大概几个月了吧&#xff0c;收到不少好评&#xff0c; 没听说太大的问题&#xff0c;最主要的问题有两个&#xff1a; 1.是说变量不是数字变量。 2.是说数据超过10万&#xff0c;无法处理 第一个问题非常好处理&#xff0c;这…

【精品】k8s的存储PV与PVC详解

概述 PV(Persistent Volume)一般情况下PV由kubernetes管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。 PVC(Persistent Volume Claim)是用户对于存储需求的一种声明。换句话说,PVC其实就是用户向kubernetes系统发出的一种资源需…

vscode开发maven的javaweb项目,并部署到tomcat及配置

1、安装并配置JAVA环境 我的是用的jdk1.8.0_181&#xff08;安装自行解决&#xff0c;直接可以下载免安装配置环境&#xff09; 配置JAVA_HOME&#xff0c;设置路径为C:\Program Files\Java\jdk1.8.0_181, 添加bin到path环境变量&#xff1a; 2、安装Maven 1&#xff09;官网…

垃圾分类小程序系统毕业设计,垃圾分类小程序系统设计与实现,垃圾分类系统毕设参考

功能清单 【管理员功能】 会员管理&#xff1a;查看网站所有注册会员信息&#xff0c;支持删除 资讯录入&#xff1a;录入资讯标题、时间、资讯内容等 管理资讯&#xff1a;查看现有资讯列表&#xff0c;支持修改和删除功能 留言管理&#xff1a;查看小程序留言列表&#xff0…

Azide PEG2 Pyrene|2135330-58-2|Pyrene标记的PEG连接物

Pyrene-PEG2-azide是一种含有叠氮化物基团的Pyrene标记的PEG连接物&#xff0c;它可以用任何含炔分子进行点击化学标记&#xff0c;从而将任何分子转化为含Pyrene的探针。亲水性PEG连接剂可以增加水溶液中生物分子的溶解度并促进其附着。 西安凯新生物科技有限公司azide系列产品…

Python人工智能学习路线(万字长文)

前言 随着全球市场的饱和&#xff0c;以及模式创新的用尽&#xff0c;传统的互联网产业已经进入成熟阶段&#xff0c;不会再有突飞猛进的发展。 &#xff08;文末送读者福利&#xff09; 接下来&#xff0c;是人工智能和大数据展露锋芒的时候了&#xff0c;它们在未来 10 年…

欧拉公式-上帝创造的公式

欧拉公式&#xff1a; &#xff08;1&#xff09;分式里的欧拉公式&#xff1a;   a&#xff3e;r/(a-b)(a-c)b&#xff3e;r/(b-c)(b-a)c&#xff3e;r/(c-a)(c-b)   当r0,1时式子的值为0   当r2时值为1   当r3时值为abc   &#xff08;2&#xff09;复变函数论里的…

firefly3399专题1-uboot2022.10的移植

硬件信息&#xff1a; friefly3399一块&#xff0c;2GB内存/16Gemmc。 软件信息&#xff1a; ubuntu18.04虚拟机&#xff0c;内部有firefly的SDK包。 参考资料&#xff1a;[ROC-RK3399-PC Pro] 手把手教你移植主线U-Boot&#xff08;基于v2022.04-rc5版本&#xff09;_Neution…

数据库变更管理:Liquibase or Flyway

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 SpringBoot集成MybatisPlus项目实操 SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理&#xff1a;Li…