摇啊摇儿歌小学三年级:C语言的问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 06:44:13
19. 下面程序应能够对两个整型变量的值进行交换。正确的说法( )
main()
{ int a=10 , b=20 ;
printf("(1)a=%d,b=%d\n",a,b) ;
swap(&a , &b);
printf("(2)a=%d,b=%d\n",a,b) ; }
swap( int p, int q)
{ int t;
t=p;
p=q;
q=t; }
A.该程序完全正确
B.该程序有错,只要将语句swap(&a, &b)中的参数改为a,b即可
C.该程序有错,只要将swap()函数的形参p和q以及t均定义为指针
(执行语句不变)即可。
D.以上说法都不正确
这题为什么选d,a哪里不对

是的,应该是D;
swap( int *p, int *q)
{ int t;
t=*p;
*p=*q;
*q=t; }
这才是正确的,要想让一个函数改变实参的值,必须把实参的地址传给函数,那函数接收的时候就得用指针了...
象scanf("%d",&i);中的变量前的&符号了吧.
再有:int a,b,*p;
b=10;
a=b;//这只是简单的赋值,之后a和b没关系了.
而p=&a;
(*p)=100;这个就把a的值给改了,这里的(*p)即使a.可以改变a的值。再好好的想想吧...

在c中指针是个关键..
如果不明白,你自己写个程序试一试,改变一下地址和指针,慢慢的琢磨一下,会明白的....

应该将swap函数的p,q定义成整型指针,t定义成整型变量
完整程序:
main()
{ int a=10 , b=20 ;
printf("(1)a=%d,b=%d\n",a,b) ;
swap(&a , &b);
printf("(2)a=%d,b=%d\n",a,b) ; }
swap( int *p, int *q)
{ int t;
t=*p;
*p=*q;
*q=t; }

swap( int *p, int *q)
{ int t;
t=*p;
*p=*q;
*q=t; }

main()
{ int a=10 , b=20 ;
printf("(1)a=%d,b=%d\n",a,b) ;
swap(&a , &b);
printf("(2)a=%d,b=%d\n",a,b) ;
}

以上正确。
自己比较比较。

我同意上楼的.

swap( int *p, int *q)
{ int t;
t=*p;
*p=*q;
*q=t; }

main()
{ int a=10 , b=20 ;
printf("(1)a=%d,b=%d\n",a,b) ;
swap(&a , &b);
printf("(2)a=%d,b=%d\n",a,b) ;
}
C语言函数只能单向传递,只能从主函数到只定义函数,
原题没有返回值.
另一定是;
swap( int p, int q)
{ int t;
t=p;
p=q;
q=t; }
定义在主函数前面.
或者是定义在主函数后面,在主函数里声明 :
int swap(int p,int q).

A是错的。A编的函数不能实现交换数值的目的。

应该选C