博文
求两数的最大公约数和最小公倍数(2006-01-15 20:44:00)
摘要: 从今天开始,我决心利用寒假把谭浩强的《C程序设计》(从第6章到第13章)的所有习题做一遍,发表在我的blog上。
算法思路: 可以有三种方法求两数的最大公约数。设m>n。
1. 让k从1变到n,能同时整除m和n的最大的k即为所求。
2. 让k从n变到1,第一个能同时整除m和n的k即为所求。
3. 使用辗转相除法。辗转相除法的算法为:首先将 m除以 n(m>n)得余数 r,再用余数 r 去除原来的除数,得新的余数,重复此过程直到余数为 0时停止,此时的除数就是m 和 n的最大公约数。 经常使用的算法是辗转相除法。 求 m和 n的最小公倍数: m和 n的积除以 m和 n 的最大公约数。我的程序使用的是辗转相除法。由于程序比较简单,所以没有加注释。程序运行环境:Windows2000, VC++6.0。
#include
void MaxandMin(long Num1,long Num2){ long Temp=0; if(Num1>=Num2) { Temp=Num2; while((Num1%Num2)!=0) { Num2=Num1%Num2; } printf("最大公约数为%d\n",Num2); Temp=( Num1*Temp )/Num2; printf("最小公倍数为%d\n",Temp); } else { Temp=Num1; while((Num2%Num1)!=0) { Num1=Num2%Num1; } printf("两数的最大公约数为%d\n",Num1);&nbs......
已知三点坐标,求圆心的坐标和半径(2005-09-09 12:50:00)
摘要:朱金灿
这是一个值得探讨一下的程序。一般实现同一程序功能往往有不同的思路。这个程序也是如此。一般的思路是:1、先判断三点能否构成一个圆,具体来说就是看其中一点是否在另外两点连成的直线上,三点共线的话就输出“error”;2、如果三点不共线,接下来就是求圆心,即三点构成的三角形的其中两边的垂直平分线交点;3、最后随便找一点与圆心即可求出半径。 实际上用两条弦的垂直平分线的交点确定圆心的方法并不好,理由如下:假设现在假设三点为(x1,y1),(x2,y2),(x3,y3),求它们的中垂线要使用的点斜式,这样一来,要考虑的情况比较多:1.(x1,y1),(x2,y2)连线和(x2,y2),(x3,y3)连线的斜率为0和无穷大都要考虑,二者组合就是4种,再加上某一连线斜率为0或无穷大,而另一斜线斜率不为0和无穷大,考虑的情况更多了。 一个更为简单的方法是首先判断三点是否一线,这里分为两种情况:1.三点连成的直线没有斜率,判断条件(y1==y2)&&(y2==y3)2.判断任意两点连成的直线斜率是否相等。3.解方程组,设圆心坐标为(x,y)圆心到任意两点的距离相等,由此求出x,y的表达式,代入程序。4.求出圆心,半径迎刃而解。 有些同学用圆心到点的距离来定圆心,速度低。其实大可不必。用圆心到点的距离来定圆心速度低,这只是一个简单的计算问题,而计算能力强正是电脑的特长。 下面是我的源程序,在vc6.0编译通过。#include<iostream.h>#include<math.h>int main(){ int x1,y1,x3,y3; double a,b,c,d,e,f; double r,k1,k2,x,y,x2,y2; cout<<"请输入x1,y1,x2,y2,x3,y3"<<endl;&n......
