c语言指针的题,搞得小弟我头大了,求侠哥侠姐帮忙

c语言指针的题,搞得我头大了,求侠哥侠姐帮忙。
#include <stdio.h>
main()
{   int   a,b,c,d;
    scanf( "%d%d ",&a,&b);
    c=gbs(a,b);
    d=gys(a,b);
    printf( "a=%d   b=%d   gbs=%d   gys=%d\n ",a,b,c,d);
}
gbs(a,b)
int   a,b;
{   int   c;
    a=a> 0?a:-a;
    b=b> 0?b:-b;
    c=a*b;
    if(c==0)   return(0);
    while(a!=b)   if(a> b)   a-=b;
    else   b-=a;
    return(c/a);
}
gys(a,b)
int   a,b;
{   if(a*b==0)   return(0);
    a=a> 0?a:-a;
    b=b> 0?b:-b;
    while(a!=b)   if(a> b)   a-=b;else   b-=a;
    return(a);
}
在输入27   63   结果是a=27     b=63     gbs=189     gys=9对gbs=189这个结果百思不得其果。
2.请读程序:
                    #include <stdio.h>
                    void   fun(float   *p1l,   float   *p2,   float   *s)
                    {   s=(   float   *   )calloc(   1,   sizeof(float));
                        *s=*p1+   *(p2++);
                      }
                        main()
                        {   float   a[2]={1.1,   2.2},   b[2]={10.0,   20.0},   *s=a;
                            fun(a,   b,   s)
                            printf( "%f\n ",*s);
                          }
        上面程序的输出结果是1.100000搞不懂啊
#include <stdio.h>
                        main()
                        {   char   s1[10],   s2[10],   s3[10],   s4[10];
                            scanf( "%s%s ",s1,s2);   gets(s3);   gets(s4);
                            puts(s1);   puts(s2);   puts(s3);   puts(s4);
                        }            
输入数据如下:(此处 <CR> 代表回车符)
                        aaaa     bbbb <CR>
                        cccc     dddd <CR>
  A)   aaaa                   B)   aaaa
        bbbb                         bbbb  
                                        cccc