有 N个国家名,要求按字母先后顺序排列(用起泡排序法)后输出。
#define N 20
#include
#include
void main()
{ int a[N][30],t[30],i,j,s;
printf("\n初始数组:\n");
for (i=0;igets(a[i]);
for (i=0;i< (1) ;i++) //N-1
for(j=0;j< (2) ;j++) //N-i-1
if( (3) ) //strcmp(a[ j ] , a[ j + 1 ] ) > 0
{ strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
printf("\n排序后:\n");
for (i=0;iprintf("%s\n",a[i]);
}
第1和第2空肯定没问题,第3空该填啥,我想了两个小时了也写不出来,我用的strcmp,但测试不成功。而且奇怪的是gets()参数使用整型指针也能成功,而且还能正确输出,求高人解答!
strcmp(a[j], a[j+1]) > 0
```c
#define N 20
#include <stdio.h>
#include <string.h>
void main()
{ char a[N][30],t[30];
int i,j;
printf("\n初始数组:\n");
for (i=0;i<N;i++)
gets(a[i]);
for (i=0;i< N - 1 ;i++) //N-1
for(j=i+1;j< N ;j++) //N-i-1
if(strcmp(a[i], a[j])> 0 ) //strcmp(a[ j ] , a[ j + 1 ] ) > 0
{ strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
printf("\n排序后:\n");
for (i=0;i<N;i++)
printf("%s\n",a[i]);
}
```
每轮j都与i进行比较,最小的放到i的位置;
当然可以加个优化,如果一轮都没有交换,那就说明已经排好序了,可以结束排序
冒泡排序算法就好
参考GPT。这是一个使用冒泡排序算法对字符串数组进行排序的C语言程序。
程序中的#define N 20定义了数组a的行数为20。
程序中的主函数main()中,首先使用gets()函数读入20个字符串,然后使用冒泡排序算法对这些字符串进行排序,最后输出排序后的字符串数组。
程序中的冒泡排序算法中,外层循环i从0到N-1,内层循环j从0到N-i-1, 每次比较相邻两个字符串,如果前一一个字符串大于后一一个字符串,则交换它们的位置。这里使用了strcmp)函数对字符串进行比较,如果返回值大于0,则表示前一个字符串大于后一个字符串。
程序中的strcpy()函数用于字符串的复制,将-一个字符 串复制到另一个字符串中。
程序中的printf()函数用于输出字符串数组中的字符串。
//(1) N-1
// (2) N-i-1
// (3) a[j][0] > a[j + 1][0]
#define N 20
#include <stdio.h>
#include <string.h>
void main()
{ char a[N][30],t[30];
int i,j;
printf("\n初始数组:\n");
for (i=0;i<N;i++)
gets(a[i]);
for (i=0;i< N - 1 ;i++) //N-1
for(j=i+1;j< N ;j++) //N-i-1
if(strcmp(a[i], a[j])> 0 ) //strcmp(a[ j ] , a[ j + 1 ] ) > 0
{ strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
printf("\n排序后:\n");
for (i=0;i<N;i++)
printf("%s\n",a[i]);
}
在第3个空中,应该填写strcmp(a[j], a[j + 1]) > 0,因为这是判断a[j]和a[j+1]的字母顺序是否正确的条件,如果不正确则进行交换。
关于gets()函数,它的参数应该是一个字符型数组(字符串)的地址,用于接收用户输入的字符串,而不是整型指针。可能是因为在你的编译环境下,这个错误没有被编译器检测出来,但是在其他环境下可能会报错。正确的写法应该是char a[N][30],这样就能正确接收用户输入的字符串了。
(1)N-1
(2)N-i-1
(3)strcmp(a[j],a[j+1])>0
//解析第三问:意思就是,a[j]这个字符串大于a[j+1]返
回值就是大于0的,那就执行交换,里面的比较,就是按第
一个字符开始比较的,相等的话依次进行比较下去,碰到
相等就返回一个数值,两个字符串相等返回0,第一个大于
第二个就返回正数,第一个小于第二个旧返回负数。
不知道你这个问题是否已经解决, 如果还没有解决的话:可以直接比较的呀
a[j][0] > a[j + 1][0]
第3空应该填写:strcmp(a[j], a[j+1]) > 0。