学习c语言中的几道习题(小有难度)!

有兴趣的朋友可以看着题目自己做做,最后在和答案对比!相信能力会有所提升的。我现在只是刚刚开始学习c语言,如果有什么说的不对的地方,网路过的大佬,及时予以指正。多谢!

1、函数判断闰年
实现函数判断year是不是闰年。

函数判断闰年
实现函数判断year是不是闰年。
#include"stdio.h"

int panduan(int x) {
	if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0) {
		return 1;
	}
	else
		return 0;
}

int main() {
	int year = 2000;
	if (panduan(year)) {
		printf("%d年是闰年", year);
	}
	return 0;
}

2、交换两个整数
    实现一个函数来交换两个整数的内容。

/*
	交换两个整数
	实现一个函数来交换两个整数的内容。
*/

#include"stdio.h"

void jiaohuan(int *x, int *y) {
	int z = 0;
	z = *x;
	*x = *y;
	*y = z;
}

int main() {
	int a = 9, b = 5;
	printf("交换前 a=%d   b=%d\n", a, b);
	jiaohuan(&a, &b);
	printf("交换后 a=%d   b=%d\n", a, b);
	return 0;
}

3、乘法口诀表
    实现一个函数,打印乘法口诀表,口诀表的函数和列数自己制定
    如:输入9,输出9*9口诀表,输入12,输出12*12乘法口诀表

/*
	乘法口诀表
	实现一个函数,打印乘法口诀表,口诀表的函数和列数自己制定
	如:输入9,输出9*9口诀表,输入12,输出12*12乘法口诀表
	
*/


#include"stdio.h"

void print(int);    // 声明函数

int main() {
	int input = 0;
	printf("请输入你要打印的乘法口诀表的行数?\n");
	scanf("%d", &input);
	print(input);
	return 0;
}


void print(int x) {                // 此函数在主函数的调用之后,所以在前面要有声明。
	int i = 0, j = 0;
	for (i = 1; i <= x; i++) {
		for (j = 1; j <= i; j++) {
			printf("%2dX%2d = %3d ", j, i, j * i);
		}
		printf("\n");
	}

}

4、调用fun(2)返回值是多少?

int fun(int n) {
    if (n == 5) {
        return 2;
    }
    else
        return 2 * fun(n + 1);

}

int fun(int n) {
	if (n == 5) {
		return 2;
	}
	else
		return 2 * fun(n + 1);

}

5、打印一个数的每一位
递归的方式实现?

/*
打印一个数的每一位
递归的方式实现?
*/


#include"stdio.h"

void print(int a) {
	if (a > 9) {
		print(a / 10);
	}
	printf("%d ", a%10);
}

int main() {
	int a = 122456;
	print(a);
	return 0;
}

 6、求阶乘
       递归和非递归分别实现求n的阶乘

/*
	求阶乘
	递归和非递归分别实现求n的阶乘
*/

#include"stdio.h"

int jiecheng(int n) {
	int a = 1;
	int i = 1;
	for (i = 1; i <= n; i++) {
		a *= i;
	}
	return a;
}

int main() {
	int n = 0;
	scanf("%d", &n);
	int ret = jiecheng(n);
	printf("%d", ret);
	return 0;
}


下面是递归的方式实现阶乘:

#include"stdio.h"

int jiecheng(int n) {
	if (n <= 1)
		return 1;
	return n * jiecheng(n - 1);
}

int main() {
	int n = 0;
	scanf("%d", &n);
	int ret = jiecheng(n);
	printf("%d", ret);
	return 0;
}

 7、字符串逆序(递归实现)
    编写一个函数reverse_string(char * string)(递归实现)
    实现:
        将参数字符串中的字符反向排列,不是逆序打印。
    要求:
        不能使用c函数库中的字符串操作函数。
    比如:
        char arr[]="abcdef";
    逆序之后的数组内容变成fedcba。

#include"stdio.h"
// 下面是循环的方式实现功能
int my_strled(char* str) {  // 计算传入的字符串中的字符个数
	int count = 0;
	while (*str != '\0') {
		count++;
		str++;
	}
	return count;
}

//void reverse_string(char *pa){
//	int left = 0;
//	int right = my_strled(pa) - 1;  // 字符个数减1也就是最右边的下标
//	while(left<right){
//		char tmp = pa[left];
//		pa[left] = pa[right];
//		pa[right] = tmp;
//		left++;
//		right--;
//	}
//	}

void reverse_string(char* pa) {
	int left = 0;
	int right = my_strled(pa) - 1;  // 字符个数减1也就是最右边的下标
	while (left < right) {
		char tmp = *(pa+left);
		*(pa+left) = *(pa+right);
		*(pa+right) = tmp;
		left++;
		right--;
	}
}


int main() {
	char arr[] = "abcdefg";
	printf("调整之前的数组是:%s\n", arr);
	reverse_string(arr);                     // 数组名arr是数组首元素的地址
	printf("调整之后的数组是:%s\n", arr);
	return 0;
}

下面是递归的方式实现:

#include"stdio.h"

int my_strlen(char* arr) {
	int count = 0;
	while (*arr != '\0') {
		count++;
		arr++;
	}
	return count;
}

void diandao(char* arr) {
	int tem = *arr;            // 第一步
	int len = my_strlen(arr);  
	*arr = *(arr + len - 1);   // 第二步
	*(arr + len - 1) = '\0';   // 第三步
	if (my_strlen(arr+1) >= 2) {
		diandao(arr + 1);     // 第四步
	}
	*(arr + len - 1) = tem;    // 第五步
}

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

8、计算一个数的每位之和(递归实现)
       写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和。   

        例如,调用Digit(1729),则应该返回1+7+2+9,他的和是19
         输入:1729,输出:19

///*
//计算一个数的每位之和(递归实现)
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和。
//例如,调用Digit(1729),则应该返回1+7+2+9,他的和是19
//输入:1729,输出:19
//*/
#include"stdio.h"

int DigitSum(int n) {
	if (n > 9) {
		return n%10 + DigitSum(n / 10);
	}
	else
		return n;
}

int main() {
	int n = 1729;
	int ret = DigitSum(n);
	printf("%d", ret);
	return 0;
}

9、 递归实现n的k次方
        题目内容:
        编写一个函数实现n的k次方,使用递归实现

#include"stdio.h"

double Fang(int n, int k) {
	if (k > 0) {
		return n * Fang(n, k - 1);
	}
	else if (k == 0)
		return 1;
	else
		return 1.0 / Fang(n, -k);
}

int main() {
	int n = 0;
	int k = 0;
	scanf("%d%d", &n,&k);
	double ret = Fang(n, k);
	printf("%lf", ret);
	return 0;
}

 

以上就是今天早晨起来做的 9道题,主要是为了自己不忘记,或是忘记的时候看自己的代码熟悉的速度会更快,特此记录。

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

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

相关文章

flowable的流程任务统计sql(续)

继续之前的文章&#xff0c;我们这里还需要进行按月统计&#xff0c;同时为了适应jeecg的图形显示&#xff0c;所以做了一些调整如下&#xff1a; 1、按月统计任务数量 select DATE_FORMAT(c.days, %Y%m) months, count(num) num from (SELECT DATE_FORMAT(START_TIME_, %Y-%m…

Niagara—— Events and Event Handlers

目录 一&#xff0c;Events 二&#xff0c;Event Handlers 多数情况下&#xff0c;系统中的发射器需相互交互&#xff0c;才能创建所需效果&#xff1b;意味着&#xff0c;一发射器生成数据&#xff0c;另一发射器监听该数据&#xff0c;以执行相应行为&#xff1b;在Niagar…

CentOS 系统上安装 Jenkins

#######################注意我这里安装jenkins版本要求实际是要安装jdk11版本的~~~我一开始弄错了 您可以按照以下步骤在 CentOS 上安装 JDK&#xff1a; 1. 首先&#xff0c;打开终端并使用 yum 命令更新系统软件包列表。输入以下命令来执行此操作&#xff1a; sudo yu…

TimSort——最快的排序算法

TimSort——最快的排序算法 排序算法是每个程序员绕不开的课题&#xff0c;无论是大学课程还是日常工作&#xff0c;都离不开排序算法。常见的排序算法有&#xff1a;冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、基数排序等。下面是这些算法性能的概…

【源码解析】EasyExcel导入导出源码解析

EasyExcel介绍 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都…

动态规划-分割回文串 II

动态规划-分割回文串 II 1 题目描述2 示例2.1 示例 1&#xff1a;2.2 示例 2&#xff1a;2.3 示例 3&#xff1a;2.4 提示&#xff1a; 3 解题思路和方法3.1 解题思路3.1.1 确定状态3.1.2 转移方程3.1.3 初始条件和边界情况3.1.4 计算顺序3.1.5 回文串的判断方法 3.2 算法代码实…

华为OD机试真题B卷 Java 实现【最长子字符串的长度】

一、题目描述 给你一个字符串s,字符串s首尾相连组成一个环形,请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。 二、输入描述 输入一串小写字母组成的字符串。 三、输出描述 输出一个整数。 四、解题思路 题目要求在给定的环形字符串中找出字符’o’出现了…

软件测试之-测试用例写作规范

软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一个好的测试用例必须包含…

STL-queue和priority_queue的模拟实现

回顾 对于STL&#xff0c;我们已经知道了vector和list&#xff0c;而它们是STL中被称为六大组件之一的容器&#xff0c;我们还学习了模拟实现stack&#xff0c;而stack在STL中被称为六大组件之一的适配器&#xff0c;今天&#xff0c;我们来学习queue的模拟实现和priority_que…

java 课程信息管理系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java 课程信息管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使…

javascript基础五:深拷贝浅拷贝的区别?如何实现一个深拷贝?

一、数据类型存储 JavaScript中存在两大数据类型&#xff1a; 基本类型引用类型 基本类型数据保存在在栈内存中 引用类型数据保存在堆内存中&#xff0c;引用数据类型的变量是一个指向堆内存中实际对象的引用&#xff0c;存在栈中 二、浅拷贝 浅拷贝&#xff0c;指的是创建新…

( 数组) 209. 长度最小的子数组——【Leetcode每日一题】

❓209. 长度最小的子数组 难度&#xff1a;中等 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;…

在线Excel绝配:SpreadJS 16.1.1+GcExcel 6.1.1 Crack

前端&#xff1a;SpreadJS 16.1.1 后端&#xff1a; GcExcel 6.1.1 全能 SpreadJS 16.1.1此版本的产品中包含以下功能和增强功能。 添加了各种输入掩码样式选项。 添加了在保护工作表时设置密码以及在取消保护时验证密码的支持。 增强了组合图以将其显示为仪表图。 添加了…

Tugraph的设计和源码初步解析

1. Tugraph Tugraph是一款开源的性能优秀的图数据库&#xff0c;该图数据库使用多版本的BTree作为数据的存储引擎&#xff0c;同时设置了点边数据在这个存储引擎上的布局&#xff08;主要考虑数据的局部性&#xff09;&#xff0c;从而达到高性能查询的目的。本文主要从Tugrap…

研发工程师玩转Kubernetes——自动扩缩容

在《研发工程师玩转Kubernetes——使用Deployment进行多副本维护》一文中&#xff0c;我们通过Deployment实现了多副本维护——即维持在一个确定数量的副本个数。而在现实场景中&#xff0c;我们往往需要根据服务的压力&#xff0c;采用水平&#xff08;横向&#xff09;扩容的…

Springboot +spring security,前后端分离时的security处理方案(二)

一.简介 在前后端分离这样的开发模式下&#xff0c;前后端的交互都是通过 JSON 来进行数据传递的&#xff0c;无论登录成功还是失败&#xff0c;都不会有服务端跳转或者客户端跳转之类的操作。 也就是说无论登录成功还是失败&#xff0c;服务端都会返回一段登录成功或失败的 …

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub的…

解决dpdk reserve的内存返回的虚拟地址和iova地址一样的问题

1. 背景: 在ubuntu20.04上用dpdk API: rte_memzone_reserve_aligned("L1L2_PCIE_MEMORY", 1.5*1024*1024*1024, rte_socket_id(), RTE_MEMZONE_1GB|RTE_MEMZONE_IOVA_CONTIG, RTE_CACHE_LINE_SIZE); 分配1.5…

如何在 GNU Linux 上通过 Nvm 安装 Node 和 Npm?

Node.js 是一个流行的 JavaScript 运行时环境&#xff0c;用于开发服务器端和网络应用程序。它带有一个强大的软件包管理器 npm&#xff0c;可以方便地安装和管理 JavaScript 包和依赖项。在 GNU/Linux 系统上&#xff0c;使用 Nvm&#xff08;Node Version Manager&#xff09…

Framework开发环境搭建

Framework开发环境搭建 开启Android Framework之旅&#xff0c;一步步记录自己学习过程。 硬件配置 RAM&#xff1a;最低16GB&#xff0c;建议32GB&#xff0c;有条件64GB&#xff0c;内存越高&#xff0c;编译时间越短ROM&#xff1a;最低400GB&#xff0c;代码250GB构建15…