写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
最大公约数:辗转相除法
欧几里得算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法。
扩展欧几里得算法可用于RSA加密等领域。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 ÷ 615 = 3 (余 152)
615 ÷ 152 = 4(余7)
152 ÷ 7 = 21(余5)
7 ÷ 5 = 1 (余2)
5 ÷ 2 = 2 (余1)
2 ÷ 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
最小公倍数
#define _CRT_SECURE_NO_WARNINGS 1
#include
int gcd(int x, int y)
{
int z = -1;
while (z != 0)
{
z = x % y;
x = y;
y = z;
}
return x;
}
int lcm(int x, int y)
{
int z = x * y / gcd(x, y);
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("最大公约数:%d\n", gcd(a, b));
printf("最小公倍数:%d\n", lcm(a, b));
return 0;
}
写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息
#define _CRT_SECURE_NO_WARNINGS 1
#include
int Is_prime(int n)
{
int i = 0;
int flag = 1;
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
flag = 0;
break;
}
}
return flag;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Is_prime(n);
if (ret == 1)
{
printf("是素数\n");
}
else
{
printf("不是素数\n");
}
return 0;
}
代码优化:
优化1:由于偶数都不是素数,我们可以只从奇数项开始,每个数加+2让下一个也是奇数
优化2:当一个数不是素数的时候,一定能下成下列的一个式子,且他是可以被一个因子整除的
例:m = a *b
16 = 4 * 4
16 = 2 * 8
a和b中一个数字是 <= sqrt(m) →[4]
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int Is_prime(int n)
{
int i = 0;
int flag = 1;
for (i = 3; i <= sqrt(n); i+=2)
{
if (n % i == 0)
{
flag = 0;
break;
}
}
return flag;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Is_prime(n);
if (ret == 1)
{
printf("是素数\n");
}
else
{
printf("不是素数\n");
}
return 0;
}
写一个函数,使给定的一个 3X3 的二维整型数组转置,即行列互换。
对角线的值不变,然后让对角线外的对称值进行互换,既然是互换,那么就会要有一个中间变量temp进行互换
#define _CRT_SECURE_NO_WARNINGS 1
#include
void Swap(int arr[3][3])
{
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < i; j++)
{
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
int i = 0;
int j = 0;
Swap(arr);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
写一个函数,使输入的一个字符串按反序存放,如输入"CANADA",输出"ADANAC"。在主函数中输入和输出字符串。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
void reverse(char ch[100], int sz)
{
int i = 0;
int temp = 0;
for (i = 0; i < sz /2; i++)
{
temp = ch[i];
ch[i] = ch[sz - 1 - i];
ch[sz - 1 - i] = temp;
}
}
int main()
{
char ch[100] = { '0' };
gets(ch);
int sz = strlen(ch);
reverse(ch, sz);
printf("%s", ch);
return 0;
}
写一个函数,将两个字符串连接,如字符串 1 是"BEI",字符串 2 是"JING”,连接起来是"BEIJING"
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
void my_link(char s1[100], char s2[100], int sz)
{
int i = sz;
int j = 0;
while (s2[j] != '\0')
{
s1[i] = s2[j];
i++;
j++;
}
s1[i] = '\0';
}
int main()
{
char s1[100] = { '0' };
char s2[100] = { '0' };
gets(s1);
gets(s2);
int sz = strlen(s1);
my_link(s1, s2, sz);
printf("%s", s1);
return 0;
}