题目:输入两个整数,用函数算出两个整数的最大公约数和最小公倍数。
最大公约数的求法用辗转相除法最方便。最小公倍数的求法直接用两数的积除以它们的最大公约数。
上代码:
</pre><p></p><pre class="plain" name="code">#include<stdio.h>
int gcd(int a, int b);//最大公约数
int lcm(int a, int b);//最小公倍数
void change(int d[3][3]);
int main()
{
int a = 0, b = 0;
int d[3][3] = { 1,2,3,4,5,6,7,8,9 };
int gcd_g, lcm_l;
printf_s("请输入两个整数:\n");
scanf_s("%d,%d", &a, &b);
gcd_g = gcd(a, b);
lcm_l = lcm(a, b);
printf_s("最大公约数是%d,最小公倍数是%d。", gcd_g, lcm_l);
change(d);
return 0;
}
int gcd(int a, int b)
{
int t = 0;
int gdc_g = 0;
while (b != 0)
{
t = a%b;
a = b;
b = t;
}
gdc_g = a;
return gdc_g;
}
int lcm(int a, int b)
{
int gdc_g = 0;
int lcm_l = 0;
gdc_g = gcd(a, b);
lcm_l = (a*b) / gdc_g;
return lcm_l;
}
题目二:用函数使3×3的二维数组行列互换。
不知道是不是因为困了,居然犯了许多低级错误,使得程序总是无法执行,主要还是死循环的问题,以后真的要多注意了。上面的代码包含了本题的一部分,下面就只贴函数部分了。
void change(int a[3][3])
{
//int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
int t = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 3; j > 1; j--)
{
t = a[j - 1][i];
a[j - 1][i] = a[i][j - 1];
a[i][j - 1] = t;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf_s("%d ", a[i][j]);
}
printf_s("\n");
}
}