当前位置:主页 > 查看内容

C语言进阶之旅(4)

发布时间:2021-07-09 00:00| 位朋友查看

简介:c语言进阶之旅4 循环和分支 拓展函数的基本 习题练习最大公约数、素数100200、打印闰年(1000~2000) 文章目录 最大公约数 思路1 思路2 素数 思路1 思路2 思路3 打印闰年 思路1 优化思路1 函数 最大公约数 ? ? ? ? ?先看最大公约数是啥意思俩数能被一个数整除……

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
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐