读书人

c语言指针的题搞得小弟我头大了求

发布时间: 2012-02-05 12:07:15 作者: rapoo

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是不一样的,看看书吧

读书人网 >C语言

热点推荐