Tsukinai的第六十七个程序
编写程序对读入的国家名称按字典顺序排序(最多20个国名,且长度不超过40)。要求:需排序的国家个数在主函数读入,调用Input函数读入需排序的国名,调用Sort函数对国名按字典顺序排序,调用Print函数打印按字典顺序排序的国名。Input、Sort、Print函数原型如下:
void Input(char *p[], int n);
void Sort(char *p[], int n);
void Print(char *p[], int n);
下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
#include<stdio.h>
void Input(char *p[], int n);
void Sort(char *p[], int n);
void Print(char *p[], int n);
int main()
{
char str[40][20];
int i, n;
printf("Input n(n<=20):\n");
scanf("%d", &n);
Input(str, n);
Sort(str, n);
printf("Results:\n");
Print(str, n);
return 0;
}
void Input(char *p[], int n)
{
int i;
for (i = 0; i < n; i++)
{
gets(p[i]);
}
}
void Sort(char *p[], int n)
{
char t;
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = 1; j < n; j++)
{
if (p[j] < p[i]) )
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
}
}
void Print(char *p[], int n);
{
int i;
for (i = 0; i < n; i++)
{
printf("%s\n", p[i]);
}
}
注意:
(1)请将修改正确后的完整源程序拷贝粘贴到答题区内
(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分
(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加分
(4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void Input(char *p[], int n);
void Sort(char *p[], int n);
void Print(char *p[], int n);
int main()
{
char str[20][40];
int i, n;
char *pstr[20];
printf("Input n(n<=20):\n");
scanf("%d", &n);
getchar();
for (i = 0; i < n; i++)
{
pstr[i] = str[i];
}
Input(pstr, n);
Sort(pstr, n);
printf("Results:\n");
Print(pstr, n);
system("pause");
return 0;
}
void Input(char *p[], int n)
{
int i;
for (i = 0; i < n; i++)
{
gets(p[i]);
}
}
void Sort(char *p[], int n)
{
char *t;
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(p[i], p[j]) > 0)
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
}
}
void Print(char *p[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%s\n", p[i]);
}
}