请用指针数组编程实现按奥运会参赛国国名,在字典中的顺序对其入场次序进行排序。 假设参赛国不超过150个。 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。 注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。 对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 经教师手工核对后,如果未用指针数组做函数参数编程,那么即使做对也不给分。 改错时不能改变程序原有的意图,不能改变函数原型。 #include <stdio.h> #define MAX_LEN 10 #define N 150 void SortString(char *ptr[], int n); main() { int i, n; char *pStr[N]; printf("How many countries?\n"); scanf("%d",&n); printf("Input their names:\n"); for (i=0; i<n; i++) { gets(pStr[i]); } SortString(pStr[i], n); printf("Sorted results:\n"); for (i=0; i<n; i++) { puts(pStr[i]); } } void SortString(char *ptr[], int n) { int i, j; char temp; for (i=0; i<n-1; i++) { for (j = i+1; j<n; j++) { if (ptr[j] < ptr[i]); { temp = ptr[i]; ptr[j] = ptr[i]; ptr[j] = temp; } } } } C语言
时间: 2023-06-27 13:04:31 浏览: 451
程序改正如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10
#define N 150
void SortString(char *ptr[], int n);
int main() {
int i, n;
char str[N][MAX_LEN];
char *pStr[N];
printf("How many countries?\n");
scanf("%d", &n);
getchar(); // 消耗掉scanf留下的换行符
printf("Input their names:\n");
for (i = 0; i < n; i++) {
fgets(str[i], MAX_LEN, stdin); // 使用fgets获取字符串输入
if (str[i][strlen(str[i])-1] == '\n') { // 如果输入的字符串最后一个字符是换行符,将其替换为'\0'
str[i][strlen(str[i])-1] = '\0';
}
pStr[i] = str[i]; // 将指针数组指向每个字符串
}
SortString(pStr, n);
printf("Sorted results:\n");
for (i = 0; i < n; i++) {
puts(pStr[i]);
}
return 0;
}
void SortString(char *ptr[], int n) {
int i, j;
char *temp; // temp的类型应该是char*,用来暂存指针
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (strcmp(ptr[j], ptr[i]) < 0) { // 使用strcmp函数来比较字符串大小
temp = ptr[i];
ptr[i] = ptr[j];
ptr[j] = temp;
}
}
}
}
```
经过修改后的程序可以正确地按照字典顺序对国家名称进行排序。