C语言方面的

shaonianchucheng 2010-03-04 11:14:33
我是c语言的初学者,我想对一个数组进行排序输出
#include <stdio.h>
#define N 5
void swap1(float i,float j)
{
float temp;
temp=i;
i=j;
j=temp;
}

void swap2(float *stu)
{
int i=0,j;
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
swap1(stu[i],stu[j]);
}
}
}

void main()
{
float stu[N],*p=stu;
for(int i=0;i<N;i++)
{
printf("stu[%d]=\n",i);
scanf("%f",stu[i]);
}
swap2(p);
for(int j=0;j<N;j++)
{
printf("%f",stu[j]);
}

}
...全文
192 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复
#include<stdio.h>
void swap(int *i, int *j)
{
int *temp;
temp=i;
i=j;
j=temp;
}
void main()
{
int i=3,j=7;
printf("交换前:i=%d,j=%d\n",i,j);
swap(&i,&j);
printf("交换后:i=%d,j=%d\n",i,j);

}

?????????????
prophetluo 2010-03-06
  • 打赏
  • 举报
回复
引用 11 楼 shaonianchucheng 的回复:
数值交换和地址交换在实现的作用上有什么区别??


void swap1(float *i,float *j) //这边要指针或者引用才能实现交换
{
float temp;
temp=*i;
*i=*j;
*j=temp;
}
void swap1(float i,float j)

第一个是传地址
第2个是传值


函数在运行的时候 会建立 栈
|.... |
|float j|
|float i|
swap1的栈 |retunn |

传值就是把 i j的值传入栈中, 这个 i,j 其实栈内2个地址上的变量 你交换实际上是 栈内的值
当return的时候, 栈地址消亡 i,j就无意义了

传地址 就是把你要修改的变量的地址传入 程序直接对非 栈内的地址进行操作




cj83111 2010-03-06
  • 打赏
  • 举报
回复
要想在子函数内完成交换,函数参数最好传的是变量的地址,好好看看谭浩强的C语言书吧
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复
数值交换和地址交换在实现的作用上有什么区别??
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复
哪怎样才能交换?你改一下……
stardust20 2010-03-06
  • 打赏
  • 举报
回复
void swap(int x, int y) //这边改了下形参名。。看起来比较不会那么混乱。。不过不影响程序
{
int temp;
temp=x;
x=y;
y=temp;
}

int i=3,j=7;
swap(i,j); //让形参等于实参,相当x=i y=j然后swap中你交换了x,y的值。。这样会影响到i和j的值吗?不会
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复
这个算冒泡排序吗?编译没问题,但实现不了想要的功能
#include <stdio.h>
#define N 8
void swap1(float *i,float *j)
{
if(i>j)
{
float temp;
temp=*i;
*i=*j;
*j=temp;
}
}

void swap2(float *stu)
{
int i=0,j;
for(i=0;i <N-1;i++)
{
for(j=0;j <N-1-i;j++)
{
swap1(&stu[j],&stu[j+1]);
}
}
}

void main()
{

float stu[N],*p=stu;
printf("输入的若干数\n");

for(int i=0;i <N;i++)
{
printf("stu[%d]=\n",i);
scanf("%f",&stu[i]);
}
swap2(p);
printf("对输入的若干数进行排序\n");
for(int j=0;j <N;j++)
printf("%f\t",stu[j]);

}
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复
这个程序为什么实现不了交换???

#include<stdio.h>
void swap(int i, int j)
{
int temp;
temp=i;
i=j;
j=temp;
}
void main()
{
int i=3,j=7;
printf("交换前:i=%d,j=%d\n",i,j);
swap(i,j);
printf("交换后:i=%d,j=%d\n",i,j);

}
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复
引用 13 楼 prophetluo 的回复:
引用 11 楼 shaonianchucheng 的回复:数值交换和地址交换在实现的作用上有什么区别??

void swap1(float *i,float *j) //这边要指针或者引用才能实现交换
{
    float temp;
    temp=*i;
    *i=*j;
    *j=temp;
}
void swap1(float i,float j)

第一个是传地址
第2个是传值


函数在运行的时候 会建立 栈
              |....  |
              |float j|
              |float i|
swap1的栈    |retunn |
     
传值就是把 i j的值传入栈中, 这个 i,j 其实栈内2个地址上的变量 你交换实际上是 栈内的值
当return的时候, 栈地址消亡 i,j就无意义了

传地址 就是把你要修改的变量的地址传入 程序直接对非 栈内的地址进行操作



谢谢,,呵呵,,受益匪浅
litauel 2010-03-06
  • 打赏
  • 举报
回复
#include <stdio.h>
void swap(int &i, int &j)
{
int temp;
temp=i;
i=j;
j=temp;
}
void main()
{
int i=3,j=7;
printf("交换前:i=%d,j=%d\n",i,j);
swap(i,j);
printf("交换后:i=%d,j=%d\n",i,j);

}
shaonianchucheng 2010-03-06
  • 打赏
  • 举报
回复

这样没问题了::
#include<stdio.h>
#define N 4 8
void swap1(int *x,int *y)
{
if(*x>*y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
}

void swap2(int *stu)
{
int i=0,j;
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{

swap1(&stu[j],&stu[j+1]);
}
}
}

void main()
{
int score[N],*p=score;
printf("input N scores:\n");
for(int i=0;i<N;i++)
{
printf("score[%d]=",i);
scanf("%d",&score[i]);
putchar('\n');
}
printf("排序后的结果 :\n");
swap2(p);
for(int j=0;j<N;j++)
{
printf("%d\t",score[j]);
}

}


void swap2(int *stu)
{
int i=0,j;
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{

swap1(&stu[j],&stu[j+1]);
}
}
}

void main()
{
int score[N],*p=score;
printf("input N scores:\n");
for(int i=0;i<N;i++)
{
printf("score[%d]=",i);
scanf("%d",&score[i]);
putchar('\n');
}
printf("排序后的结果 :\n");
swap2(p);
for(int j=0;j<N;j++)
{
printf("%d\t",score[j]);
}

}
kumufengcun 2010-03-05
  • 打赏
  • 举报
回复
你这个是排序函数吗?有两个问题
1、swap1函数并不能实现数据交换。
2、swap2函数进行数据交换的条件没有写正确。

正确写法可以参考楼上解答
lovesi3344 2010-03-05
  • 打赏
  • 举报
回复
#include <stdio.h> 

#define N 5

void swap1(float *i,float *j) //这边要指针或者引用才能实现交换
{
float temp;
temp=*i;
*i=*j;
*j=temp;
}

void swap2(float *stu)
{
int i=0,j;
for(i=0;i <N-1;i++) //排序的算法小改了下。。还是冒泡排序
{
for(j=0;j <N-1-i;j++)
{
if(stu[j]>stu[j+1])
{
swap1(&stu[j],&stu[j+1]);
}
}
}
}

void main()
{

float stu[N] ,*p=stu;
for(int i=0;i <N;i++)
{
printf("stu[%d]=\n",i);
scanf("%f",&stu[i]); //这边要&stu[i] double or nothing
}
swap2(p);
for(int j=0;j <N;j++)
{
printf("%f\t",stu[j]);
printf("%d\n",(int)stu[j]);

}

}
不知名小ITer 2010-03-05
  • 打赏
  • 举报
回复
//问题1:这个函数并不能实现数据的交换,建议你看下函数参数传递的两种方式:值传递和地址传递.
不知名小ITer 2010-03-05
  • 打赏
  • 举报
回复
引用楼主 shaonianchucheng 的回复:
我是c语言的初学者,我想对一个数组进行排序输出
#include <stdio.h>
#define N 5
void swap1(float i,float j)
{
float temp;
temp=i;
i=j;
j=temp;
}//问题1:这个函数并不能实现数据的交换,建议你看下函数参数传递的两种方式:值传递和地址传递.

void swap2(float *stu)
{
int i=0,j;
for(i=0;i <N;i++)
{
for(j=i+1;j <N;j++)
{
swap1(stu[i],stu[j]);
}
}
}

void main()
{
float stu[N],*p=stu;
for(int i=0;i <N;i++)
{
printf("stu[%d]=\n",i);
scanf("%f",stu[i]);
}
swap2(p);
for(int j=0;j <N;j++)
{
printf("%f",stu[j]);
}

}

先解决了那个问题再看吧..
lovesi3344 2010-03-05
  • 打赏
  • 举报
回复
printf("%f\t",stu[j]);
stardust20 2010-03-04
  • 打赏
  • 举报
回复
#include <stdio.h> 
#define N 5
void swap1(float *i,float *j) //这边要指针或者引用才能实现交换
{
float temp;
temp=*i;
*i=*j;
*j=temp;
}

void swap2(float *stu)
{
int i=0,j;
for(i=0;i <N-1;i++) //排序的算法小改了下。。还是冒泡排序
{
for(j=0;j <N-1-i;j++)
{
if(stu[j]>stu[j+1])
{
swap1(&stu[j],&stu[j+1]);
}
}
}
}

void main()
{
float stu[N],*p=stu;
for(int i=0;i <N;i++)
{
printf("stu[%d]=\n",i);
scanf("%f",&stu[i]); //这边要&stu[i]
}
swap2(p);
for(int j=0;j <N;j++)
{
printf("%f",stu[j]);
}

}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧