c语言进阶之旅(4)
循环和分支
拓展函数的基本
习题练习:最大公约数、素数(100~200)、打印闰年(1000~2000)
最大公约数
先看最大公约数是啥意思,俩数,能被一个数整除
列:24 18 最大公约数是(6)
思路(1)
思路(1):
那个最大公约数不可能大于最小数本身,那么就用最小的去和俩数去除,如果不是那个值就-1,继续去除,因为最小值就是那个最小值本身
实现想法
int main()
{
int a = 0;
int b = 0;
int max = 0;
scanf("%d%d", &a, &b);//最小公约数不可能超过那个最小值--->公约数的概论是一个数可以同时整除俩数
//赋值给最小值
if (a >b)
{
max = b;
}
else
max = a;
while (1)
{
if (a % max == 0 && b%max == 0)//根据最大公约数的理论来判断
{
printf("%d", max);
break;
}
max--;//max从最小值-1然后除-1除
}
return 0;
}
运行结果
思路(2)
辗转相除法,大致就是俩数相除得到的余数字,然后交换,列子 a %b = c ----->b%c=?就是交换然后在继续除,知道被整除!
看代码更好理解一些
实现想法
int main()
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
int max = 0;
while (max=m%n)//会一直除直到max=0,如果max=0那么循环就是假,进不去
//直接看余数是否为 0 --> 0的话那么这个最大公约数就是n
{
m = n;//n--->除了之后把n---->m
n = max;//---->除后的余数在给n
}
printf("最大公约数是:%d\n", n);
return 0;
}
如果还是迷迷糊糊的话哪看看这个图
素数
素数定义:只能被自身和1整除(题目要求100~200之间的素数)
思路(1)
就先写出100~200的数字,然后在用2~199之间的数去除,如果被整除了那么他就不是素数,应为素数只能被他自身和1整除
实现想法
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
break;
}
}
if (i == j)//上面被2~199(素数只能被1和自身整除)的数除完后都没有的话那么他们就是素数
{
printf("%d ", i);
}
}
return 0;
}
看看结果是否和我们预想的那样
意料之中哈哈哈
思路(2)
这个思路大致就是在思路(1)上的改进,大致就是设一个数,把它当作素数去判断,大致和做数学题一样设一个数x,来解方程的感觉差不多
实现想法
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//假设这个数就是质数,
int j = 0;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
flag = 0;//如果被整除了那么就重置0,
break;
}
}
if (flag== 1)//判断为1就是素数,0则不是
{
printf("%d ", i);
}
}
return 0;
}
温馨提示:这里的flag要写在里面哟,粗心额度博主,应为把它写外面去了,导致报错,浪费了好多时间,为啥要写里面不能写外面,设循环第一次进去是100%2能被整除,flag就赋值成0了,然后进行下面的判断……写外面就被永远赋值成0了,写循环里面,会重制,看个图吧比较好理解
思路(3)
这里也是在思路(1,2)基础上进行改进,一个数如果可以别一个数开平方或整除,那么就不需要在找下一个数了,那样就不需要找下一个数了那看看例子
一个数能被开平方那么他那么他一定不是素数,素数只能被他自身和1整除 m = ab 或者aa---->a或b 俩数一定是<=m16---->28–>44
介绍一个东西sqrt()是一个库函数[^1],他的用处就是用来开平方,用这个函数需要引头文件
实现想法
#include<math.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flong = 1;//假设这个数就是质数----->每次循环里面,下面赋值后就是fla就一直等于0
int j = 0;
for (j = 2; j < sqrt(i); j++)//这里试除的次数减少了
{
if (i%j == 0)
{
flong = 0;//如果被整除了那么就重置0,
break;
}
}
if (flong == 1)//判断为1就是素数,0则不是
{
printf("%d ", i);
}
}
return 0;
结果也是一样
打印闰年
闰年定义:只能被4整除且不能被100整除,或被400整除
思路(1)
思路打印10002000那么就需要生成10002000的数(循环),然后用生成的值去除如果被4整除且不被100整除,或被400整除
实现想法
int mian()
{
int i =0;
for(i=1000;1<=200;i++)
{
if(i%4==0&&i!=100)
{
printf("%d",i);
}
if(i%400=0)
{
printf("%d",i);
}
}
return 0 ;
}
结果
优化思路(1)
上面写的比较繁琐介绍下俩操作符&& ---->并且的意思||---->或者
实现想法
int main()
{
int i = 0;
for ( i = 1000; i <= 2000; i++)
{
if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) //&&并且 ||或者
{
printf("%d ", i);
}
}
printf("\n");
return 0;
}
这样看是不是简洁多了一目了然,哪结果会不会一样呢??
函数
函数的定义:
这里介绍个网页不知道可以直接搜www.cplusplus.com,这里有c语言库函数的使用,和讲解,不过需要点英语基础,不会就用软件翻译吧(博主就是用软件翻译了)哈哈哈哈!!!
[^1]:C语言中有自带的函数叫库函数用库函数就需要引头文,件,毕竟是别人的东西,用是要和他打招呼
持续更新……
转载:https://blog.csdn.net/Legwhite/article/details/115695705