C语言学习笔记(3)

这篇博客记录了C语言的学习笔记,重点介绍了使用递归方法解决常见问题,如找素数、判断闰年、交换数、打印乘法口诀表、实现strlen、计算阶乘、斐波那契数列等,适合初学者巩固递归编程技巧。
摘要由CSDN通过智能技术生成

C语言学习笔记

笔记内容:
1.找素数
2.找闰年
3.交换两个数
4.打印任意两个数的乘法口诀表
5.输出整数的每一位(递归实现)
6.递归与非递归实现strlen
7.求n的阶乘(递归实现)
8.求n的斐波那契数(递归与非递归实现)
9.反向输出字符串(递归实现)
10.输入一个整数,输出组成数字之和(递归实现)
11.求n的k次方(递归实现)

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)

int IsPrimeNumber(int n)
{
	for (int i = 2; i < n;i++){
		if (n%i==0){
			return 0;
		}
	}
	return 1;
}

void IsLeapYear(int year)
{
	if (((year%4)==0&&(year%100)!=0)||(year%400)==0){
		printf("%d年是闰年\n",year);
	}
	else{
		printf("%d年不是闰年\n", year);
	}
}

int Exchange(int *ap,int *bp)
{
	int temp = *ap;
	*ap = *bp;
	*bp = temp;
}

void MulList(int n)
{
	for (int col = 1; col <= n;col++){
		for (int row = 1; row <= col;row++){
			printf("%d*%d=%d ",row,col,col*row);
		}
		printf("\n");
	}
}

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

int Strlen1(char *str)
{
	if (*str == '\0'){
		return 0;
	}
	else
		return 1 + Rec(str + 1);
}

int Strlen2(char *str)
{
	int i = 0;
	while (*str!='\0'){
		str++;
		i++;
	}
	return i;
}

int Fact(int n)
{
	if (n>=2){
		return n*Fact(n - 1);
	}
	else{
		return 1;
	}
}

int RecFib(int n)
{
	if (n>2){
		return RecFib(n - 1) + RecFib(n - 2);
	}
	else{
		return 1;
	}
}
int Fib(int n)
{
	int first = 1;
	int second = 1;
	int third = 1;
	while (n>2){
		third = first + second;
		first = second;
		second = third;
		n--;
	}
	return third;
}

void ReverseString(char *p)
{
	if (*p != '\0'){
		ReverseString(p + 1);
	}
	printf("%c\n",*p);
}
void ReversePrint(char *arr, int num)
{
	char *start = arr;
	char *end = arr + num - 1;
	while (start<end){
		char temp = *start;
		*start = *end;
		*end = temp;
		start++;
		end--;
	}
}
void Show(char arr[], int num)
{
	for (int i = 0; i < num; i++){
		printf("%c ", arr[i]);
	}
	printf("\n");
}

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

int Power(int x, int y)
{
	if (y==1){
		return x;
	}
	return x*Power(x, y - 1);
}
int main()
{
	//输出n的k次方
	printf("请分别输入n和k的值:");
	int n = 0, k = 0;
	scanf("%d %d",&n,&k);
	printf("%d",Power(n,k));

	//输出组成数字之和
	printf("%d\n", DigitSum(1729));

	//反向打印字符串
	char *p = "lvreny";
	ReverseString(p);
	//反向存储并打印
	char arr[] = "abcd1234";
	int num = sizeof(arr) / sizeof(arr[0]) - 1;
	Show(arr, num);
	ReversePrint(arr, num);
	Show(arr, num);

	//求第n个斐波那契数
	int n = 0;
	scanf("%d",&n);
	printf("%d\n", RecFib(n));
	printf("%d\n", Fib(n));

	//递归方式求n的阶乘
	printf("你要求几的阶乘:");
	int n = 0;
	scanf("%d",&n);
	printf("%d!=%d\n",n,Fact(n));
	//普通方式求n的阶乘
	int n = 5;
	int mul = 1;
	for (int i = 1; i <= n; i++){
		mul *= i;
	}
	printf("%d!=%d",n,mul);
	//计算1!+2!+...+10!
	int n = 10;
	int mul = 1;
	int sum = 0;
	for (int i = 1; i <= n; i++){
		mul *= i;
		sum += mul;
	}
	printf("%d",sum);

	//递归与非递归实现strlen
	char *p = "1901210139";
	int len = Strlen1(p);
	printf("递归strlen:%d\n",len);
	len = Strlen2(p);
	printf("非递归strlen:%d\n", len);

	//递归方式打印整数的每一位
	int n = 1901210139;
	Bit(n);

	//打印任意个数的乘法口诀表
	printf("你想打印几的乘法口诀表:");
	int num = 0;
	scanf("%d",&num);
	MulList(num);

	//交换两个数
	int a = 23, b = 47;
	printf("交换前:a=%d,b=%d\n",a,b);
	Exchange(&a, &b);
	printf("交换后:a=%d,b=%d\n", a, b);

	//判断是否是闰年
	printf("请输入要判断的年份:");
	int year = 0;
	scanf("%d",&year);
	IsLeapYear(year);

	//判断并打印素数
	for (int i = 100; i < 200;i++){
		if (IsPrimeNumber(i)){
			printf("%d ",i);
		}
	}
	system("pause");
	return 0;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值