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

2024-12-03 09:14:41
推荐回答(2个)
回答1:

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了

回答2:

#include
#include
#include

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();
}