前言

🍀作者简介:在校学生,为全栈方向努力拼搏的一名小学生。

🍁个人主页:吉师职业混子博客

🫒题目来源:C程序设计(第五版)

🍂相应专栏:清览题库--C语言程序设计第五版编程题解析

因为python和C同时学,现在混得差不多了(悲


题目一:求最大公约数和最小公倍数

求两数的最大公约数和最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数

输入示例:

3 6

输出示例:

最大公约数:3 最小公倍数:6

 思路:

首先要明确我们需要的数字是什么,就是二者共有的因数。

既然要求最大公约数,自然要用到循环

因为在本题中我们要通过循环来不断试错,最终找寻到最大公约数,也就是除数,所以设该除数的变量名为c,那么这个c就一定要不为0,因此for循环中第一个表达式就应该是

for (c=1;;)

针对于for循环中第二个表达式,我个人不喜欢在for中的表达式规定,所以在for循环的内部语句中再细说。

关于第三个表达式,我们要求的是最大的公约数,所以与其从0开始向上不断叠加相乘,不如把该除数的初始值设为一个极大的数字,从而由上至下向下减,虽然这样设置会大大增加对内存的占用(相对来说),但这只是一个简单的小作业,只要老师不故意找茬,就无伤大雅。

所以经过一系列思路分析,最终的for语句应该是

for (c=1000000000000;;c--)

那么接下来,针对for循环的内部语句进行分析

我第一次去思考这里的代码时,想的是只有当除到最后的两个数互质才可以结束循环,结果就是我花费了一点时间去思考如何判断两个数互质,实际上压根一点用没有。这对于初学者来说应该是个坑吧(悲)

完整代码

#include <stdio.h>
int main()
{
  int i,s,m,n;
  scanf("%d %d",&i,&s);
  m=10;
  for (;;m--)
  {
    if (i%m==0&&s%m==0){
  
      n = i/m*s;
      break;
    }
  }
  printf("最大公约数:%d\n",m);
  printf("最小公倍数:%d\n",n);


  return 0;
}

题目二

输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数字本身。例如,153是一个水仙花数,因为

输入示例:

输出示例:

153 370 371 407

 思路解析

没啥好解析的,注意范围是三位数,分别用除数和余数来分离出三个位数上的数字、幂的形式和引用的文件就可以了。

这是源代码

#include <stdio.h>
#include <math.h> 
int main()
{
	int a,b,s,g;
	for (a = 100;a >= 100;a++)
	{

		s = a%100/10;
		b = a/100;
		g = a%100%10;
	
		if (pow(s,3)+pow(b,3)+pow(g,3) == a)
		{
		
			printf("%d\n",a);

		}
		else if (a==999)
			break; 
		else
			continue;
	}
	return 0;
} 

 烦了,毁灭吧

更多推荐

清览题库--C语言程序设计第五版编程题解析(3)