C语言-函数递归练习

1,输入三个整数,输出从大到小的序列

复制代码
#include<stdio.h>
//输入三个整数,输出从大到小的序列
//例如: 输入: 2 3 1  输出:3 2 1
//写法一
//int main() {
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	//输入
//	scanf("%d %d %d", &a, &b, &c);
//	//调整
//	int tmp = 0;
//	if (a < b) {
//		tmp = a;
//		a = b;
//		b = tmp;
//	}
//	if (a<c) {
//		tmp = a;
//		a = c;
//		c = tmp;
//	}
//	if (b<c) {
//		tmp = b;
//		b = c;
//		c = tmp;
//	}
//	//输出
//	printf("%d %d %d", a, b, c);
//	return 0;
//}
//写法二:函数版
void Swap(int* px, int* py) {
	int tmp = *px;
	*px = *py;
	*py = tmp;
}
int main() {
	int a = 0;
	int b = 0;
	int c = 0;
	//输入
	scanf("%d %d %d", &a, &b, &c);
	//调整
	int tmp = 0;
	if (a < b) {
		Swap(&a, &b);
	}
	if (a < c) {
		Swap(&a, &c);
	}
	if (b < c) {
		Swap(&b, &c);
	}
	//输出
	printf("%d %d %d", a, b, c);
	return 0;
}

2,写代码打印1-100之间的所有3的倍数的数字

复制代码
#include<stdio.h>
//写代码打印1-100之间的所有3的倍数的数字
int main() {
	int i = 0;
	//for ( i = 1; i <=100; i++)
	//{
	//	if (i%3==0)
	//	{
	//		printf("%d ", i);
	//	}
	//}
	//另一种写法
	for (i = 3; i <= 100; i+=3)
	{
			printf("%d ", i);
	}
	return 0;
}

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

复制代码
#include<stdio.h>
//给定两个数,求这两个数的最大公约数 
//写法一:暴力求解
//int main() {
//	int a = 0;
//	int b = 0;
//	//输入
//	scanf("%d %d", &a, &b);
//	//求最大公约数
//	int min = (a < b) ? a : b;
//	int m = min;
//	while (1) {
//		if (a%m==0&&b%m==0) {
//			break;
//		}
//		m--;
//	}
//	printf("%d\n", m);
//	return 0;
//}
//写法二:辗转相除法
int main() {
	int a = 0;
	int b = 0;
	int c = 0;
	//输入
	scanf("%d %d", &a, &b);
	//求最大公约数
	while (c=a%b) {
		a = b;
		b = c;
	}
	printf("%d\n", b);
	return 0;
}

4,编写程序数一下1-100的所有整数中出现多少个数字9

复制代码
#include<stdio.h>
//编写程序数一下1-100的所有整数中出现多少个数字9 
int main() {
	int i = 0;
	int count = 0;
	for ( i = 1; i <=100; i++)
	{
		//判断个位是不是9
		if (i%10==9)
			count++;
		//判断十位是不是9
		if (i / 10 == 9)
			count++;
	}
	printf("%d\n", count);
	return 0;
}

5,计算1/1-1/2+1/3-1/4+1/5......+1/99-1/100的值

复制代码
#include<stdio.h>
// 计算1/1-1/2+1/3-1/4+1/5......+1/99-1/100的值
//分子总是1
//分母是1-100
int main() {
	int i = 0;
	double sum = 0;
	int flag = 1;
	for ( i = 1; i <=100; i++)
	{
		sum = sum + flag*(1.0 / i);//全加(注意是1.0 , 而不是1)
		flag = -flag;
	}
	printf("%lf\n", sum);
	return 0;
}

6,求10个整数中的最大值

复制代码
#include<stdio.h>
////求10个整数中的最大值 
int main() {
    //准备10个整数
	/*int arr[10] = { 3,1,5,4,9,6,8,7,2,0 };*/
	//输入十个数字
	int arr[10] = { 0 };
	//int arr[] = { 0 };//会报错
	//这里没有指定数组的元素个数,就会根据初始化的内容来推算元素的个数
	int i = 0;
	for ( i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	
	//找出最大值
	int max = arr[0];//假设0号选手是最大值
	//int i = 0;
	for ( i = 1; i < 10; i++)
	{
		if (arr[i] > max) {
			max = arr[i];
		}
	}
	printf("%d\n", max);
	return 0;
}

7,在屏幕上打印输出9*9乘法口诀表

复制代码
#include<stdio.h>
//在屏幕上打印输出9*9乘法口诀表
// 1*1
// 2*1 2*2
// 3*1 3*2 3*3
//.........
int main() {
	int i = 0;
	//打印9行
	for ( i = 0; i <=9; i++)
	{
		//打印一行
		int j = 0;
		for ( j = 0; j <=i; j++)
		{
			printf("%d*%d=%2d ", i, j, i * j);
		}
		printf("\n");
	}
	return 0;
}

8,实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

复制代码
#include<stdio.h>
// 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
void print_table(int n) {
	int i = 0;
		for ( i = 0; i <=n; i++)
		{
			//打印一行
			int j = 0;
			for ( j = 0; j <=i; j++)
			{
				printf("%d*%d=%2d ", i, j, i * j);
			}
			printf("\n");
		}
}

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

9,(把函数处理结果的二个数据返回给主调函数)的可行方法

复制代码
#include<stdio.h>
// (把函数处理结果的二个数据返回给主调函数)的可行方法
//方法一:形参用数组
//void test(int arr[]) {    //int arr[] 的另一种写法 int *arr  本质就是指针变量
//	arr[0] = 3;   //arr[0]  --->  *(arr+0)
//	arr[1] = 4;   //arr[1]  --->  *(arr+1)
//}
//int main() { 
//	int arr[2] = { 0 };
//	test(arr);
//	return 0;
//}
// 
////方法二:形参用二个指针
//void test(int *px ,int *py) {   
//	*px = 3;
//	*py = 4;
//}
//int main() { 
//	int a=0;
//	int b=0;
//	test(&a,&b);
//	return 0;
//}
//
////方法三:用两个全局变量
int a = 0;
int b = 0;
void test(int *px ,int *py) {   
	a = 3;
	b = 4;
}
int main() { 
	test(&a,&b);
	printf("a=%d b=%d\n", a, b);
	return 0;
}
//错误方法,直接return这两个数
相关推荐
回敲代码的猴子1 小时前
2月18日打卡
算法
追随者永远是胜利者1 小时前
(LeetCode-Hot100)647. 回文子串
java·算法·leetcode·职场和发展·go
宇木灵2 小时前
C语言基础-六、指针
c语言·开发语言·学习·算法
苦藤新鸡2 小时前
64 搜索平移递增数组中的元素
数据结构·算法
Vic101012 小时前
链表算法三道
java·数据结构·算法·链表
再难也得平2 小时前
[LeetCode刷题]128.最长连续序列(从零开始的java题解)
java·算法·leetcode
xiaoye-duck2 小时前
《算法题讲解指南:优选算法-双指针》--05有效三角形的个数,06查找总价值为目标值的两个商品
c++·算法
ArturiaZ2 小时前
【day31】
开发语言·c++·算法
xiaoye-duck2 小时前
《算法题讲解指南:优选算法-双指针》--07三数之和,08四数之和
c++·算法