首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-05 
c语言指针的题,搞得我头大了,求侠哥侠姐帮忙。#include stdio.hmain(){inta,b,c,dscanf( %d%d ,&a,&b)

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


        cccc   dddd               dddd
  C)   aaaa                     D)   aaaa   bbbb
        bbbb                           cccc
        cccc   dddd                 dddd
        eeee
问大家这个为什么是A呢?


[解决办法]
原来是公倍数啊
27 和63的公倍数不是189吗? 这不是对的啊?
[解决办法]

第二个是传址与传址的问题
你这个程序等价于:


#include <stdio.h>

void fun(float *p1l, float *p2, float *s)

{
float *k;
k=s;
k=( float * )calloc( 1, sizeof(float));
*k=*p1+ *(p2++);
}
//你相当于对一个临时变量k操作, 不影响到s

main()
{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
fun(a, b, s)
printf( "%f\n ",*s);
}
[解决办法]
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;//这两句是找a,b的最大公约数啊
return(c/a);//返回他们的最小公倍数
}


[解决办法]
第三个:aabb送入s1,bbbb送入s2, <CR> 送入s3,cccc dddd送入s4
注意,scanf和gets是不一样的,看看书吧

热点排行