3.1 最大公约数和最小公倍数,用全局变量和函数

方法一:穷举

#include<stdio.h>
int Max, Min;
int main()

{
    int max(int a, int b);//可以声明为void,因为不需要返回值。 
    int min(int a, int b);
    
    int a, b;
    scanf("%d %d", &a, &b);
    printf("\n");
    
    max(a,b);//这里直接调用函数即可,如果让全局变量赋值会变0 。 
    min(a,b);//也就是,如果有Max = max(a,b),会导致Max的值变为0 。 
    printf("Max is %d and Min is %d\n", Max, Min);
    return 0;
 } 
 int max(int x, int y)
 {
     int i, c;
     for(i = x > y? y : x; i > 0; i--){
         if(x % i == 0 && y % i == 0){
             Max = i;
             break;
         }
     }
     return 0;//既然是全局变量,那么不需要返回值 这句可以0也可以不写 。 
     
 }
 int min(int x, int y)//我使用的并非辗转相除,而是穷举。 
 {
     int i, c;
     for(i = x > y? x : y; i > 0; i++){
         if(i % x == 0 && i % y == 0){
             Min = i;
             break;
         }
     }
     return 0;
 }

方法二:辗转相除

#include<stdio.h>
int Hcf,Lcd;
int main()
{
    void hcf(int, int);//由于只是借用函数,捎带全局变量,故不需要返回值 
    void lcd(int, int);
    
    int u, v;
    scanf("%d,%d", &u, &v);
    hcf(u,v);
    lcd(u,v);
    printf("H.C.F = %d\n", Hcf);//切记,两个全局变量要分开嵌套函数,比如这里嵌套了printf 
    printf("L.C.D = %d\n", Lcd);//否则,值会错误 
    return 0;
 } 
 
 void hcf(int u, int v)//辗转相除法 
 {
     int t, r;
     if(v > u) {
         t = u; u = v; v = t;
     }
     while((r = u % v) != 0)
     {
         u = v;
         v = r;
     }
     Hcf = v;
 }
 
 void lcd(int u, int v)
 {
     Lcd = u * v / Hcf;
 }

来自学习辅导

posted @ 2017-01-06 15:51  VRednow  阅读(690)  评论(0编辑  收藏  举报