只要是用到主函数与自定义函数就可以
----------------解决方案--------------------------------------------------------
[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]);
}
}
----------------解决方案--------------------------------------------------------
这一题是比较字符串大小!
但是要用主函数与自定义函数来做!
帮小弟看看这是怎么错的!! 只能用这个方法!
小弟还有个问题,二维数组与二级指针有什么不同。。。。
/**********************
将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天了!!
终于解决了
----------------解决方案--------------------------------------------------------
#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;
}
}
}
}
----------------解决方案--------------------------------------------------------
,是我欠考虑了.
排序的顺序是由自己的需要而定,冒泡排序没有规定的.
----------------解决方案--------------------------------------------------------