-
归档
- 2011 年九月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年十月
- 2007 年九月
- 2007 年八月
- 2007 年七月
- 2007 年六月
- 2007 年五月
- 2007 年四月
- 2007 年三月
- 2007 年二月
- 2007 年一月
- 2006 年十二月
- 2006 年十一月
- 2006 年十月
- 2006 年九月
- 2006 年八月
- 2006 年七月
- 2006 年六月
- 2006 年五月
- 2006 年四月
- 2006 年三月
- 2006 年二月
- 2006 年一月
- 2005 年十二月
- 2005 年十一月
- 2005 年十月
- 2005 年九月
- 2005 年八月
- 2005 年七月
- 2005 年六月
- 2005 年二月
- 2004 年十月
- 2004 年九月
- 2004 年八月
-
杂项
日归档:2004 九月-11
求三个数中最大者的几种方法
方法1:根据基本算法编制函数 算法请参阅“基本算法:求最大数”专题。下面直接给出程序。 int my_max(int x,int y,int z) { int max; max=x; if(y>max)max=y; if(z>max)max=z; return max; } 方法2: 用条件运算符 假设三个数存放在三个变量x,y,z中,可用下面的条件运算符求得最大数。 (1) 不用中间变量 x>y ? (x>z?x:z): ( y>z?y:z) 算法说明:先将x和y比较,若x>y,则最大数必定在x和z中间,因此再取x和z中的最大者;否则,最大数必定在y和z中间,因此就取y和z中的最大者。 (2) 用一个中间变量m (m=x>y?x:y)>z?m:z 算法说明:先取x和y的最大者并赋值给m,然后求m和z中的最大者 (3) 不用中间变量 (x>y&&x>z)?x:(y>z?y:z) 算法说明:先看x是否比y和z都大,若是,x即为最大者,否则,最大者必定在y和z中间,因此就取y和z的最大者。 方法3:用宏 (1)定义带三个参数的宏 先定义如下带参数的宏 #define MAX(x,y,z) (((x)>(y)&&(x)>(y))?(x):((y)>(z)?(y):(z))) 然后在程序中使用上述宏替换即可。 注意:(1)上述宏定义中的每个形参及整个宏体都要加上小括号,原因请参阅“定义带参数的宏时,宏体中的形参为什么一定要加小括号?”专题。(2)该宏定义中使用了方法2中(3)的算法。也可以使用其中的(1)或(2)的算法来定义宏体。 … 继续阅读
发表在 Uncategorized
留下评论
基本算法:求最大数
具体要求:给定若干数,编程求出其中最大数。 算法: 先定义一个变量max,用于存放最大数。具体算法如下: (1)首先假设第一个数为最大数:将第一个数的值赋给max; (2)然后将后面的数逐个与max比较,若大于max,则将值赋给max,否则继续下一个数的比较。 例程1:从键盘输入三个整数,求最大数并输出。 main() { int x,y,z,max; scanf("%d%d%d",&x,&y,&z); max=x; if(y>max) max=y; if(z>max) max=z; printf("max=%d\n",max); } 例程2:从键盘输入若干个整数(以0表示结束输入),求最大数并输出。 main() { int x,n=0,max; scanf("%d",&x); /* 读入第一个数 */ max=x; /* 假设第一个数为最大数 */ while(x!=0) { n++; /* 对读入的数进行计数 */ if(x>max) max=x; /* 与max比较,并作相应处理 */ scanf("%d",&x); … 继续阅读
发表在 Uncategorized
留下评论
基本算法:求最小数
具体要求:给定若干数,编程求出其中最小数。 算法:(与求最大数的算法完全类似) 先定义一个变量min,用于存放最小数。具体算法如下: (1)首先假设第一个数为最小数:将第一个数的值赋给min; (2)然后将后面的数逐个与min比较,若小于min,则将值赋给min,否则继续下一个数的比较。 例程1:从键盘输入三个整数,求最小数并输出。 main() { int x,y,z,min; scanf("%d%d%d",&x,&y,&z); min=x; if(y<min) min=y; if(z>min) min=z; printf("min=%d\n",min); } 例程2:从键盘输入若干个整数(以0表示结束输入),求最小数并输出。 main() { int x,n=0,min; scanf("%d",&x); /* 读入第一个数 */ min=x; /* 假设第一个数为最小数 */ while(x!=0) { n++; /* 对读入的数进行计数 */ if(x<min) min=x; /* 与min比较,并作相应处理 */ scanf("%d",&x); … 继续阅读
发表在 Uncategorized
留下评论
基本算法:求两个整数的最小公倍数
假设两个整数为x和y。 算法1: (1)先求出x和y的最大公约数,并赋给变量r; (2)x和y的最小公约数即为:x*y/r 程序如下: int getm(int x,int y) { int r; r=getcd(x,y); return x*y/r; } 该方法需调用求最大公约数函数。 算法2: (1)将两数中较小的数放在x中,较大数保存在y中。 (2)判断y是否为x的整数倍,若是,则y就是最小公倍数,返回y;否则,继续。 (3)判断y的2倍数是否为x的整数倍,若是,则y的2倍数就是最小公倍数,返回y的2倍数;否则,继续将y的倍数逐步加大并进行判断,直到将y扩大x倍为止。 程序如下: int getm(int x,int y) { int i,r; if(x>y){r=x; x=y; y=r;} for(i=1;i<=x;i++) if((i*y)%x==0) break; return i*y; }
发表在 Uncategorized
留下评论
基本算法:求两个正整数的最大公约数
假设两个正整数用u和v表示,算法采用辗转相除法,具体描述如下: (1) 求出u%v的值并赋给变量r:r=u%v (2) 进行迭代:u=v;v=r; (3) 看v是否为0,若是,则u即为所要求的值,否则,转到(1)。 程序如下: int getcd(int u,int v) { int r; while(v!=0) { r=u%v; u=v; v=r; } return u; }
发表在 Uncategorized
留下评论