运用指针数组给国家名称排列,程序无法达到目的。
题目:编写程序用指针数组实现输入5个国家名称,并按字母顺序排列后输出。编译器: VC 6.0
运行结果:未达到排序效果.
源代码:
#include<stdio.h>
#include<string.h>
void px(char *mz[],int m);
void dy(char *mz[],int m);
void main()
{
char *mz[]={"CHINA","AMERICA","AUSTRALA","FRANCE","GERMAN"};
int m=5;
px(mz,m);
dy(mz,m);
}
void px(char *mz[],int m)
{
char *pt;
int i,j,min;
for(i=0;i<m-1;i++)
{
min=i;
for(j=i+1;j<m;j++)
{
if(strcmp(mz,mz)>0) min=j;
if(min!=i){pt=mz;mz=mz;mz=pt;}
}
}
}
void dy(char *mz[],int m)
{
int i;
for(i=0;i<m;i++)
printf("%s\n",mz);
}
px函数用于排序;
dy用于打印输出。
该题用选择排序。 本帖最后由 jackz007 于 2019-12-25 23:07 编辑
字符串赋值得用函数 strcpy() 不能用等号。
#include <stdio.h>
#include <string.h>
void px(char mz[] , int m)
{
char pt ;
int i , j ;
for(i = 1 ; i < m ; i ++) {
for(j = i ; j > 0 && strcmp(mz , mz) < 0 ; j --) {
strcpy(pt , mz) ;
strcpy(mz , mz) ;
strcpy(mz , pt) ;
}
}
}
void dy(char mz[] , int m)
{
for(int i = 0 ; i < m ; i ++) printf("%s\n" , mz) ;
}
int main(void)
{
char mz[] = {"CHINA","AMERICA","AUSTRALA","FRANCE","GERMAN"} ;
int m = 5 ;
px(mz , m) ;
dy(mz , m) ;
}
编译、运行实况:
C:\Bin>g++ -o x x.c
C:\Bin>x
AMERICA
AUSTRALA
CHINA
FRANCE
GERMAN
C:\Bin> jackz007 发表于 2019-12-25 23:05
字符串赋值得用函数 strcpy() 不能用等号。
编译、运行实况:
Emmm。但是我把我发的程序改一下:#include<stdio.h>
#include<string.h>
void px(char *mz[],int m);
void dy(char *mz[],int m);
void main()
{
char *mz[]={"CHINA","AMERICA","AUSTRALA","FRANCE","GERMAN"};
int m=5;
px(mz,m);
dy(mz,m);
}
void px(char *mz[],int m)
{
char *pt;
int i,j,min;
for(i=0;i<m-1;i++)
{
min=i;
for(j=i+1;j<m;j++)
{
if(strcmp(mz,mz)<0) min=j;//原本是大于,现在改为小于
if(min!=j) //原本是min!=i,现在i改成j
{
pt=mz;
mz=mz;
mz=pt;
}
}
}
}
void dy(char *mz[],int m)
{
int i;
for(i=0;i<m;i++)
printf("%s\n",mz);
}
它能达到目的,和你的运行结果一样。这是为什么。。。
我不明白这两个变动使得程序的运行发生了什么样的变化。。
这题规定用指针数组做,原先的选择排序我找不出问题。。 已解决。
#include<stdio.h>
#include<string.h>
void px(char *mz[],int m);
void dy(char *mz[],int m);
void main()
{
char *mz[]={"CHINA","AMERICA","AUSTRALA","FRANCE","GERMAN"};
int m=5;
px(mz,m);
dy(mz,m);
}
void px(char *mz[],int m)
{
char *pt;
int i,j,min;
for(i=0;i<m-1;i++)
{
min=i;
for(j=i+1;j<m;j++)
{
if(strcmp(mz,mz)>0) min=j;
if(min!=i)
{
pt=mz;
mz=mz;//此处j改为min
mz=pt; //j改为min
}
}
}
}
void dy(char *mz[],int m)
{
int i;
for(i=0;i<m;i++)
printf("%s\n",mz);
}
功能实现成功
页:
[1]