一.练习题
1.给定两个数,求这两个数的最大公约数,如求24与18的最大公约数
方法:
假设m=24 n=18
1.将24与18进行取模,得到的结果是商1,余数为6,有余数证明并没有被整除
2.将18再模6,可以得到商3余0,所以我们可以得到6是我们的最大公约数
3.如果声明一个变量r来接收数据,如果r=0则代表n为最大公约数,如果r不等于0,我们则继续需要进行取模,将r的值赋值给n,将n的值赋值给m,也就是n=6 m=18,随后再让m与n进行取模运算,得到商3余0,这时候n就为最大公约数
这种方法称为:辗转相除法
所以可以将代码写成以下形式:
#define _CRT_SECURE_NO_WARNINGS 1
#include<windows.h>
#include<stdio.h>
int main(void)
{
int m=24, n=18;
int r;
while (m%n){
r = m%n;
m = n;
n = r;
}
printf("最大公约数是:%d\n",n);
system("pause");
return 0;
}
对上面的代码进行修改,让用户来输入两个值,则代码可以写成如下形式:
#define _CRT_SECURE_NO_WARNINGS 1
#include<windows.h>
#include<stdio.h>
int main(void)
{
int m, n;
int r;
scanf("%d%d", &m, &n);
while (m%n){
r = m%n;
m = n;
n = r;
}
printf("最大公约数是:%d\n",n);
system("pause");
return 0;
}
程序运行的结果如图所示:
2.写一段代码输出从1900~2023年的闰年
我们知道闰年是4年一次,能被400整除,且不能被100整除,则我们可以用取模的方法,将年数能被4与400整除与不能被100整除的年份输出,根据这个思路我们可以得出以下代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<windows.h>
#include<stdio.h>
int main(void)
{
for (int year = 1900; year <= 2023; year++){
if (year % 4 == 0 && year % 100 != 0){
printf("%d ",year);
}
else if (year % 400 == 0){
printf("%d ",year);
}
}
system("pause");
return 0;
}
以下是程序运行的截图:
3.写一段代码输出100-200之间的素数
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<windows.h>
#include<stdio.h>
int main(void)
{
int j = 0;
for (int n = 100; n <= 200;n++){
for ( j = 2; j < n; j++){
if (n % j == 0){
break;
}
}
if (j == n){
printf("%d ", n);
}
}
system("pause");
return 0;
}