当前位置: 代码迷 >> C语言 >> 我的代码错在什么地方
  详细解决方案

我的代码错在什么地方

热度:272   发布时间:2006-09-08 10:51:27.0
也可以!!
只要是用到主函数与自定义函数就可以
----------------解决方案--------------------------------------------------------
[CODE]

#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define N 5
void abc(char num[][N*2])
{
int i , j ;
char temp[N*2];
for(i = 0 ; i < N ; i++)
{
for(j = 0 ; j < N - i - 1 ; j++)
{
if(strcmp(num[j] , num[j+1])<0)//比较大小与交换
{
strcpy(temp , num[j]);
strcpy((num[j]) , (num[j+1]));
strcpy((num[j+1]) , temp);
}
}
}
}

void main()
{
char num[N][2*N]={"nanjing","xuzhou","guangzhou","beijing","shanghai"};
int i ;
printf("排序前5个地区城市的名称为:\n");
for(i = 0 ; i <N ; i ++)
{
puts(num[i]);
}

abc(num);//调用自定义函数
printf("排序后5个地区城市的名称为:\n");
for(i = 0 ; i <N ; i ++)
{
puts(num[i]);
}
}

[/CODE]

----------------解决方案--------------------------------------------------------
以下是引用未来的牛人在2006-9-8 8:38:55的发言:

这一题是比较字符串大小!
但是要用主函数与自定义函数来做!

帮小弟看看这是怎么错的!! 只能用这个方法!

小弟还有个问题,二维数组与二级指针有什么不同。。。。



/**********************
将5个地区的名称排序,用主函数与自定义函数
**********************/
#include <stdio.h>
#include <string.h>
#define N 5
void abc(char num[N]);
void main()
{
char *num[N]={"nanjing","xuzhou","guangzhou","beijing","shanghai"};
int i ;
printf("排序前5个地区城市的名称为:\n");
for(i = 0 ; i <N ; i ++)
{
puts(num[i]);
}

abc(num[N]);//调用自定义函数
printf("排序后5个地区城市的名称为:\n");
for(i = 0 ; i <N ; i ++)
{
puts(num[i]);
}
}
void abc(char num[N]) / /函数参数不一致,一个是数组指针,一个是一唯数组
{
int i , j ;
char **temp ;
for(i = 0 ; i < N ; i++) //冒泡排序的思想
{
for(j = 0 ; j < N - i - 1 ; j++)
{
if(strcmp(num[j] , num[j+1])<0)//比较大小与交换
{
strcpy(temp , num[j]); //弄懂你比较的是什么,交换的又是什么.
strcpy((num[j]) , (num[j+1]));
strcpy((num[j+1]) , temp);
}
}
}
}


#include <stdio.h>
#include <string.h>
#define N 5

void abc(char *num[]);
int main()
{
char *num[N]={"nanjing","xuzhou","guangzhou","beijing","shanghai"};
int i ;
printf("排序前5个地区城市的名称为:\n");
for(i=0;i<N;i ++)
{
puts(num[i]);
}

abc(num);//调用自定义函数
printf("排序后5个地区城市的名称为:\n");
for(i = 0 ; i <N ; i ++)
{
puts(num[i]);
}
return(0);
}

void abc(char *num[]) //函数参数不一致,一个是数组指针,一个是一唯数组
{
int i , j ;
char *temp ;
for(i =0;i <N-1;i++)
{
for(j =0;j<N-i;j++)
{
if(strcmp(num[j],num[j+1])<0)//比较大小与交换
{
temp=num[j]; //,比较指针指向的内容,即字符串,但交换的是指针
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
}


----------------解决方案--------------------------------------------------------
谢谢各位了!!!
大恩不言谢!!
他姥姥的!!
这一题整整烦我2天了!!
终于解决了
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-9-8 11:03:50的发言:


#include <stdio.h>
#include <string.h>
#define N 5

void abc(char *num[]);
int main()
{
char *num[N]={"nanjing","xuzhou","guangzhou","beijing","shanghai"};
int i ;
printf("排序前5个地区城市的名称为:\n");
for(i=0;i<N;i ++)
{
puts(num[i]);
}

abc(num);//调用自定义函数
printf("排序后5个地区城市的名称为:\n");
for(i = 0 ; i <N ; i ++)
{
puts(num[i]);
}
return(0);
}

void abc(char *num[]) //函数参数不一致,一个是数组指针,一个是一唯数组
{
int i , j ;
char *temp ;
for(i =0;i <N-1;i++)
{
for(j =0;j<N-i-1;j++) //这要多减1啊,不然num[j+1]越界了,还有我感觉冒泡冒反了
{
if(strcmp(num[j],num[j+1])<0)//比较大小与交换
{
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
}


----------------解决方案--------------------------------------------------------
,是我欠考虑了.
排序的顺序是由自己的需要而定,冒泡排序没有规定的.
----------------解决方案--------------------------------------------------------

  相关解决方案