
下面这个程序,怎么修改才能使得 :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 ;
} 展开
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 ;
} 展开
5个回答
展开全部
#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;
展开全部
# 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]没有关系,新设的变量在内存中的位置是不同的,非要使用函数条用的话 需要用指针,不知道你学了没
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]没有关系,新设的变量在内存中的位置是不同的,非要使用函数条用的话 需要用指针,不知道你学了没
追问
指针学了,所以这道题我想用指针运算!!谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void fun (int & a, int & b),你应该这样定义你的形参,需要用引用,或者指针才会改变你原来的数组内容,不然你只是传进去一个数组的拷贝,不然会对原来的数组有任影响,你需要改变原来数组内数据的内存地址
更多追问追答
追问
改了之后,就有四个报错,一个警告!!为什么???
追答
报了什么错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
# 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 ] ) ; //这里取地址
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 ] ) ; //这里取地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以将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);
将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);
追问
这个运行起来了,谢谢!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询