函数和数组的混合使用例子

目录

写两个函数,分别求两个数的最大公约数和最小公倍数

写一个函数,使一个3x3的整形二维数组转置(行列转换)

写一个函数打印杨辉三角

扫雷游戏


学习完了函数和数组,我们来进行简单的应用吧~

写两个函数,分别求两个数的最大公约数和最小公倍数

    一般我们求最大公约数可以使用辗转相除法,求出最大公约数之后,我们可以用最大公约数x最小公倍数==两个数的乘积来计算最小公倍数。

原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数

使用:在使用辗转相除法时,先用较大的数除以较小的数,算出余数。然后用除数继续除以余数,求出新的余数。接着再用这个除数除以新的余数,不停循环直到余数为零为止。此时的除数就是最大公因数。

代码如下:

//写两个函数,分别求两个数的最大公约数和最小公倍数
#include<stdio.h>
int greatest_common_divisor(int a, int b)
{
	while (a % b != 0)
	{
		int k = a % b;
		a = b;
		b = k;
		//错误写法
		//a=b;
		//b=a%b;
		//这个时候a的值已经发生改变
	}
	return b;
}
int least_common_multiple(int mul, int gcd)
{
	return mul / gcd;
}
int main()
{
	int m = 0;
	int n = 0;
	printf("请输入两个数:\n");
	scanf("%d %d", &m, &n);
	int mul = m * n;
	if (m < n)
	{
		int tmp = m;
		m = n;
		n = tmp;
	}//保证m为较大数
	int gcd = greatest_common_divisor(m, n);
	int lcm = least_common_multiple(mul,gcd);
	printf("最大公约数为%d\n最小公倍数为%d\n", gcd, lcm);
	return 0;
}

测试:

求最小公倍数的第二种方法:

    我们知道最小公倍数一定是两个数(a,b)任何一个数的倍数,我们可以把其中一个数a乘上i(2,3,4....)然后再与另外一个数b相除,如果余数为0,说明a*i就是最小公倍数。

局部代码如下:

int least_common_multiple(int a, int b)
{
	int i = 0;
	int mu = 0;
	for (i = 2; ; i++)
	{
		mu = i * a;
		if (mu % b == 0)
			break;
	}
	return mu;
}

全部代码:

#include<stdio.h>
int greatest_common_divisor(int a, int b)
{
	while (a % b != 0)
	{
		int k = a % b;
		a = b;
		b = k;
	}
	return b;
}
int least_common_multiple(int a, int b)
{
	int i = 0;
	int mu = 0;
	for (i = 2; ; i++)
	{
		mu = i * a;
		if (mu % b == 0)
			break;
	}
	return mu;
}
int main()
{
	int m = 0;
	int n = 0;
	printf("请输入两个数:\n");
	scanf("%d %d", &m, &n);
	int mul = m * n;
	if (m < n)
	{
		int tmp = m;
		m = n;
		n = tmp;
	}//保证m为较大数
	int gcd = greatest_common_divisor(m, n);
	int lcm = least_common_multiple(m, n);
	printf("最大公约数为%d\n最小公倍数为%d\n", gcd, lcm);
	return 0;
}

我们可以看到运行结果是正确的。

写一个函数,使一个3x3的整形二维数组转置(行列转换)

方法一:

使用一个二维数组进行接收

//写一个函数,使一个3x3的整形二维数组转置(行列转换)
#include<stdio.h>
void print_arr(int arr[][3])
{
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
void swap_arr(int arr[][3])
{
	int brr[3][3] = { 0 };
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			brr[j][i] = arr[i][j];
		}
	}
	printf("后\n");
	print_arr(brr);
}
int main()
{
	int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
	printf("前\n");
	print_arr(arr);
	swap_arr(arr);
	return 0;
}

当我们仔细观察这个结果,我们可以发现当i==j时,arr[i][j]的值没有发生改变,我们只需要把副对角线两端的值进行交换,也就是右下角和左上角的数进行交换就可以了。这个时候需要特别注意i和j的取值,取右下角或者左上角,如果依然是原来的取值的话,右下角和左上角的数交换了两次,就没有意义了。


#include<stdio.h>
void print_arr(int arr[][3])
{
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
void swap_arr(int arr[][3])
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 2; i++)
	{
		for (j = 1; j < 3; j++)
		{
			if (i != j)
			{
				int tmp = arr[i][j];
				arr[i][j] = arr[j][i];
				arr[j][i] = tmp;
			}
		}
	}
	printf("后\n");
	print_arr(arr);
}
int main()
{
	int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
	printf("前\n");
	print_arr(arr);
	swap_arr(arr);
	return 0;

写一个函数打印杨辉三角

通过观察我们发现:

第一行和第二行以及三角形两边都是1,从第三行开始,下面除了两边的数是上一行两个相对的数和,这里我们可以想到使用一个二维数组arr[i][j]

当i==1或者i==0或者i==j或者j==0时,arr[i][j]==1.

其他的时候arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]

我们以一个10行为例,代码如下:

//函数打印杨辉三角
#include<stdio.h>
void YH(int arr[][20], int n)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < n; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			if (i == 0 || i == 1 || j == 0 || j == i)
				arr[i][j] = 1;
			else
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
		}
	}
	for (i = 0; i < n; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	int arr[20][20] = { 0 };
	int n = 0;
	printf("请输入行数:\n");
	scanf("%d", &n);
	YH(arr, n);
	return 0;
}

扫雷游戏

这是一个比较复杂的应用,前面有一篇博客有详细的讲解,感兴趣的可以看看。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,我们可以使用不同的函数来读取和处理包含混合文字和数据的文本文件。 一种常用的方法是使用`textscan`函数。该函数可以按照指定的格式从文本文件中读取数据,并将其存储在MATLAB的变量中。通过在读取文件之前指定格式字符串,我们可以告诉MATLAB文件中数据的排列方式。 为了读取混合文字和数据的文本文件,我们需要创建一个格式字符串,该字符串描述了每个数据字段的类型和布局。 举个例子,假设我们有一个文本文件,包含了以下数据: ``` GDP: 45000 Population: 10000000 Year: 2021 ``` 我们可以使用以下代码读取这个文件: ```matlab fileID = fopen('data.txt', 'r'); % 打开文件 formatSpec = '%s %f'; % 指定格式字符串 data = textscan(fileID, formatSpec); % 读取数据 fclose(fileID); % 关闭文件 % 输出读取到的数据 disp(data); ``` 上述代码中,`formatSpec`指定了每一行的格式,`%s`表示字符串,`%f`表示浮点数。`textscan`函数将文本文件读取为一个单元数组,每个单元都包含了文件中相应格式的数据。最后,我们可以使用`disp`函数来输出读取到的数据。 需要注意的是,在使用`textscan`函数之前,我们需要使用`fopen`函数打开文件,并在读取完成后使用`fclose`函数关闭文件。 有了这种方法,我们可以方便地读取和处理混合文字和数据的文本文件,并将其用于后续的分析和计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值