c语言,输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。

#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct
{
char cou[15];
}C;

void main()
{
/*定义结构数组*/
C p[5];
/*定义指针指向结构体变量*/
C* q=p;
int i,j,temp;
printf("input countries:\n");
/*循环输入国家名并存储在结构数组中*/
for(i=0;i<5;i++)
{
scanf("%s",&p[i].cou);
/* strupr(p[i].cou);*/
}
/*冒泡排序将国家名称排序*/
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
{
/*strcmp函数比较相邻两个国家名的Ascii码*/
if(strcmp(p[j].cou,p[j+1].cou)>0)
{
temp=*q[j].cou;
*q[j].cou=*q[j+1].cou;
*q[j+1].cou=temp;
}
}

printf("\n");
/*循环输出*/
for(i=0;i<5;i++)
printf("%s ",p[i].cou);

getch();
}

这个程序不能进行排序,还只是顺序输出,也没有提示错误,编译器Win-Tc。请问我这个哪里写的有问题?
if(strcmp(p[j].cou,p[j+1].cou)>0)
{
temp=*q[j].cou;
*q[j].cou=*q[j+1].cou;
*q[j+1].cou=temp;
}
这个地方有问题,指针间可以进行赋值,那我这样写为什么没有执行?
这里涉及到的交换只能用strcpy()函数么?

typedef struct
{
char cou[15];
}C;
C raw[5];
C *p[5];

void main()
{
/*定义结构数组*/
/*定义指针指向结构体变量*/
C* q;
int i,j;
printf("input countries:\n");
/*循环输入国家名并存储在结构数组中*/
for(i=0;i<5;i++)
{
scanf("%s",&raw[i].cou);
p[i]=&raw[i];
/* strupr(p[i].cou);*/
}
/*冒泡排序将国家名称排序*/
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
{
/*strcmp函数比较相邻两个国家名的Ascii码*/
if(strcmp(p[j]->cou,p[j+1]->cou)>0)
{
q=p[j];
p[j]=p[j+1];
p[j+1]=q;
}
}

printf("\n");
/*循环输出*/
for(i=0;i<5;i++)
printf("%s ",p[i].->cou);

getch();
}
想用指针的话利用指针数组排序就行了,
另外上面的比较的是p却对q进行了交换
字符串拷贝只能用strcpy了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-28
#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct
{
char cou[15];
}C;

void main()
{
/*定义结构数组*/
C p[5];
/*定义指针指向结构体变量*/
C* q=p;
int i,j,temp;
printf("input countries:\n");
/*循环输入国家名并存储在结构数组中*/
for(i=0;i<5;i++)
{
scanf("%s",p[i].cou);
/* strupr(p[i].cou);*/
}
/*冒泡排序将国家名称排序*/
for(i=0;i<5;i++)
for(j=0;j<4-i;j++)
{
/*strcmp函数比较相邻两个国家名的Ascii码*/
if(strcmp(p[j].cou,p[j+1].cou)>0)
{
strcpy(temp,p[j].cou);
strcpy(p[j].cou,p[j+1].cou);
strcpy(p[j+1].cou,temp);
}
}

printf("\n");
/*循环输出*/
for(i=0;i<5;i++)
printf("%s ",p[i].cou);

getch();
}
相似回答