下面这个程序,怎么修改才能使得 :1和2互换位置,3和4 互换。。。。类推,求解惑!!急!!

#include<stdio.h>voidfun(inta,intb){intt;t=a;a=b;b=t;}intmain(void){intc[10]={1,2,3,4... # include <stdio.h>
void fun( int a , int b )
{
int t ;
t = a ; a = b ; b = t ;
}
int main (void)
{
int c[ 10 ]= { 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ;
int i ;

for ( i=0 ; i<10 ; i += 2 )
fun ( c[ i ] , c[ i +1 ] ) ;

for ( i=0 ; i<10 ; i ++ )
printf ( "%d " , c[ i ] ) ;

printf ("\n") ;

return 0 ;

}
展开
 我来答
汐日南莘
2013-09-08 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.6万
采纳率:45%
帮助的人:8017万
展开全部
#include <stdio.h>
void fun( int  &a , int  &b ) //要用引用
{
   int  t ;
   t =  a ; a = b ; b = t ;
}
 int main (void)
{
  int c[ 10 ]= { 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ;
  int i ; 
 
  for ( i=0 ; i<10 ; i += 2 )
      fun ( c[ i ] , c[ i +1 ] ) ;
for ( i=0 ; i<10 ; i ++ ) 
      printf ( "%d   " , c[ i ] ) ;
printf ("\n") ;
return 0 ;
}

如果fun函数你不用引用的话就会交换不了,因为fun函数中的a ,b并不是主函数中的a, b当fun函数运行完后,主函数中的a ,b是没有变化的,但是用引用的话,fun函数中的a,b就和主函数中的a,b是相同的,具体的解释建议你去看书上的。当然用指针也可以!

还有疑问的话可以追问!

更多追问追答
追问
我改了之后,就有四个报错了,一个警告???为什么你运行起来了!!我用的是vc6.0
追答
能把错误警告贴出来吗?也可能是楼下讲的那样!将t=a; a=b; b=t;改为t=(*a); (*a)=(*b); (*b)=t;
小希425
2013-09-08 · TA获得超过110个赞
知道小有建树答主
回答量:70
采纳率:0%
帮助的人:46万
展开全部
# include <stdio.h>
int main (void)
{
int c[ 10 ]= { 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ;
int i ;
int t ;
for ( i=0 ; i<10 ; i += 2 )
{
t = c[i] ; c[i] = c[i+1] ; c[i+1] = t ;
}
for ( i=0 ; i<10 ; i ++ )
printf ( "%d " , c[ i ] ) ;

printf ("\n") ;

return 0 ;

}

你在调用函数的时候搞错了,交换了a和b的值,跟c[i]和c[i+1]没有关系,新设的变量在内存中的位置是不同的,非要使用函数条用的话 需要用指针,不知道你学了没
追问
指针学了,所以这道题我想用指针运算!!谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
10...2@qq.com
2013-09-09
知道答主
回答量:8
采纳率:0%
帮助的人:5.9万
展开全部
void fun (int & a, int & b),你应该这样定义你的形参,需要用引用,或者指针才会改变你原来的数组内容,不然你只是传进去一个数组的拷贝,不然会对原来的数组有任影响,你需要改变原来数组内数据的内存地址
更多追问追答
追问
改了之后,就有四个报错,一个警告!!为什么???
追答
报了什么错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cpucash
2013-09-09 · TA获得超过1585个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:990万
展开全部
# include <stdio.h>
void fun( int *a , int *b ) //这里用指针
{
int t ;
t = *a ; *a = *b ; *b = t ; //这里也是指针
}

for ( i=0 ; i<10 ; i += 2 )
fun ( &c[ i ] , &c[ i +1 ] ) ; //这里取地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-09-09 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3959万
展开全部
可以将void fun(int a,int b)改为void fun( int *a,int *b)
将t=a; a=b; b=t;改为t=(*a); (*a)=(*b); (*b)=t;
将fun( c[i],c[i+1] );改为fun( &c[i],&c[i+1] );或fun(c+i,c+i+1);
追问
这个运行起来了,谢谢!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式