Xuan的C语言学习之旅——(4)循环

我突然觉得带着问题来学习是最高效的,今天就来试一试吧。


循环

首先引入一个问题:输入两个正整数,计算这两个数的最大公约数。

一般的思路是将两个数都各自拆分称为若干个质数的积,比如16和24:
在这里插入图片描述
那么最大公约数就是取222=8(取共同拥有的部分)。

但这是大脑的思维方法,这种颇有些灵光乍现的思维方式是计算机无法做到的(至少是我们这种新手写的程序无法做到的)。计算机最擅长的事情是穷举,也就是将所有可能列出来并找到正确答案。

我们发现所大公约数一定小于等于两个数之间较小的那个数,且大于零。那么我们将这个区间范围内的数都列举出来找出其中最大的公约数就行了。

因为我们的思路是每列举出一个可能性就去判断一次是否为公约数,做这种大量重复操作时,循环语法再适合不过了。

三种基本的循环语法为:while循环,do-while循环,for循环。

这里以以每一次循环变量都比上一次加一举例:

#include <stdio.h>

int main()
{
	
	int i=0;
	while(i<10){
		i++;//while 循环;循环10次
	}
	
	return 0;
 } 
#include <stdio.h>

int main()
{
	int i=0;
	
	do{
		i++;
	}while(i<10);//do-while循环;此类循环先执行后判断,所以至少会执行一次
	
	return 0;
 } 
int main()
{
	int i,t=0;
	
	for(i=0;i<10;i++){
		t++;
	}//for循环;每次加一的是t,i主要用来计算循环次数
	
	return 0;
 } 

了解了循环的语法,我们很快就可以实现对于最开始那个问题的解决方案:

  1. 将两个数中较小的数的值赋予i
  2. 用两个数分别除以i取余数,余数为零表示i为该数的约数
  3. i减1
  4. 循环步骤3和4直到余数第一次都为0,此时的i为最大公约数
  5. 应为在跳出循环前i会多减一次1,所以最大公约数为i+1

写出代码:

#include <stdio.h>

int main()
{
	int A, B;
	printf("请输入两个正整数\n");
	scanf("%d%d", &A, &B);

	int x, y;
	if (A >= B) { x = A, y = B; }
	else { x = B, y = A; }//保证x被赋值为较大的那个数,y为较小的数

	int i = y;//i用于储存每次要除以的数
	int j=1, k=1;//j与k用来储存余数

	while (j != 0 || k != 0) //“||”表示逻辑“或”,这里意为只要i不等于0或k不等于0,只要满足其中之一就能继续循环
	{
		j = x % i;
		k = y % i;
		i--;
	}

	printf("最大公约数为%d", i + 1);

	return 0;
}

这里用了简单的while循环,有兴趣的话可以试试其他循环体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值