您现在的位置是:首页 >技术交流 >【C语言】编程练习(三)网站首页技术交流

【C语言】编程练习(三)

君落华 2024-08-21 12:01:03
简介【C语言】编程练习(三)

打印无符号整数

输入一个无符号整数,按顺序打印每一位。
如输入1234输出1234

解题思路

假设输入的是1234这个数,可以通过%10得到4 可以通过/10%10得到3以此类推。

代码如下

#include<stdio.h>

void Print(unsigned int n)
{
	if (n>9)
	{
		Print(n / 10);
	}
	printf("%d", n % 10);
}

int main()
{
	unsigned int num = 0;
	scanf("%d", &num);
	Print(num);
	return 0;
}

运行结果

image.png

注意

image.png
红色的线是调用的过程,绿色的线是回调的过程。

函数计算字符的长度

不使用临时变量求字符串的长度和使用临时变量求字符串的长度

解题思路

字符串是以’’为结束的,所以我们只要判断是否是‘’。

代码如下

创建临时变量来求字符串长度

#include<stdio.h>

int Strlen(char* p)
{
	int count = 0;
	while (1)
	{
		if (*(p++) != '')
		{
			count++;
		}
		else
		{
			break;
		}
	}
	
	return count;
}

int main()
{
	char* p = "abced";
	int len = Strlen(p);
	printf("%d", len);
	return 0;
}

不创建临时变量来求字符串长度

#include<stdio.h>
int Strlen(char* p)
{
	if (*p=='')
	{
		return 0;
	}
	else
	{
		return 1 + Strlen(p+1);
	}
}


int main()
{
	char* p = "abced";
	int len = Strlen(p);
	printf("%d", len);
	return 0;
}

运行结果

image.png
image.png

注意

不要把传值调用和传址调用搞混淆了。

求n的阶乘

输入一个数,然后输出这个数的阶乘

解题思路

如果输入的数是5的话,那么它的阶乘就是54321

代码如下

使用递归的方式实现:

#include<stdio.h>

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

int main()
{
	int n = 0;
	scanf("%d", &n);
	//调用函数返回最终的结果
	int ret=factorial(n);
	printf("%d",ret);
	return 0;
}

使用循环的方式实现:

#include<stdio.h>

int factorial(int n)
{
	int i = 0;
	int sum = 1;
	for ( i = n; i >= 1; i--)
	{
		sum = sum * i;
	}
	return sum;
}


int main()
{
	int n = 0;
	scanf("%d", &n);
	//调用函数返回最终的结果
	int ret=factorial(n);
	printf("%d", ret);
	return 0;
}

运行结果

使用递归的方式运行结果
image.png
使用循环的方式运行结果
image.png

计算斐波那契数

什么是斐波那契数
1 1 2 3 5 8 13 21 34 55…
就是前两项之和等于第三项

解题思路

image.png

代码如下

#include<stdio.h>

int Fac(int n)
{
	if (n<=2)
	{
		return 1;
	}
	else
	{
		return Fac(n - 1) + Fac(n - 2);
	}
}

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

运行结果

image.png

递归实现n的k次方

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

代码如下

//递归实现n的k次方
#include<stdio.h>

int Pow(int n, int k)
{
	if (k==0)
	{
		return 1;
	}
	else
	{
		return n * Pow(n, k-1);
	}
}

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

运行结果

image.png

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。