#include<stdio.h> #include<string.h> int main() { void sort(const char *name[], int n); void print(const char **name[], int n); const char* name[] = { "Follow me","BASIC","Great Wall","FORTRAN","Computer design" }; int n = 5; sort(name, n); print(**name, n); return 0; } void sort(const char* name[], int n) { const char* temp; int i, j, k; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) if (strcmp(name[k], name[j]) > 0)k = j; if(k!=i) { temp = name[i]; name[i] = name[k]; name[k] = temp; } } } void print(const char ***name, int n) { int i; for (i = 0; i < n; i++) printf("%s \n", (*name)[i]); }
时间: 2024-04-03 13:33:43 浏览: 48
这段代码是一个简单的字符串排序程序,它使用了选择排序算法对一个字符串数组进行排序,并使用指针和函数进行了封装。
在程序中,sort函数使用了选择排序算法对字符串数组进行排序,print函数用于输出排序后的字符串数组。main函数定义了一个字符串数组name,调用sort函数进行排序,然后调用print函数输出排序后的结果。
需要注意的是,在调用print函数时,使用了三重指针(**name),这是因为print函数接收的参数是一个指向指针数组的指针,而在程序中,name是一个指向指针数组的指针,所以需要使用三重指针进行传递。
相关问题
#include<stdio.h> #include<string.h> int main() { void sort(const char *name[], int n); void print(const char** name[], int n); const char* name[] = { "Follow me","BASIC","Great Wall","FORTRAN","Computer design" }; int n = 5; sort(name, n); print(*name, n); return 0; } void sort(const char* name[], int n) { const char* temp; int i, j, k; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) if (strcmp(name[k], name[j]) > 0)k = j; if(k!=i) { temp = name[i]; name[i] = name[k]; name[k] = temp; } } } void print(const char **name, int n) { int i; for (i = 0; i < n; i++) printf("%s \n", name[i]); }
在调用print函数时,应该传递字符串数组的地址,而不是指向字符串数组的指针的地址。因此,修改后的main函数调用print函数的语句应该为:
```
print(&name, n);
```
同时,在print函数中,应该使用指向指针数组的指针,修改后的print函数如下:
```
void print(const char ***name, int n) {
int i;
for (i = 0; i < n; i++)
printf("%s \n", (*name)[i]);
}
```
这样修改之后,程序就能够正确地编译和运行了。
定义一个包含5个教师成员的结构体数组,教师信息包括职工号、姓名和工资。要求从键盘输入所有教师的信息,并设计一个sort函数实现结构体数组按教师工资由少到多排序。目前,已编辑完成main函数,请编程实现input函数、output函数和sort函数,分别实现教师信息的录入、输出与排序。 /* @Filename: ex701.c @Author: Ju Chengdong @Version: 1.0 @Date: 2021-03-18 @Description: Salary Management System */ #include <stdio.h> #include <string.h> typedef struct teacher{ int id; // 职工号 char name[100]; // 姓名 int salary; // 工资 }teacher; const int NUM = 5; int main(){ void input(teacher *t, int n); void output(teacher *t, int n); void sort(teacher *t, int n); teacher t[NUM]; //教师数组 teacher *pt = t; input(pt, NUM); //为教师数组元素赋值 printf("Before sorting:\n"); output(pt, NUM); //排序前输出 sort(pt, NUM); //按工资排序 printf("After sorting:\n"); output(pt, NUM); //排序后输出 return 0; }
好的,以下是实现代码:
```c
#include <stdio.h>
#include <string.h>
typedef struct teacher {
int id; // 职工号
char name[100]; // 姓名
int salary; // 工资
} teacher;
void input(teacher *t, int n) {
for(int i = 0; i < n; i++) {
printf("请输入第%d个教师的职工号、姓名和工资(用空格分开):", i+1);
scanf("%d %s %d", &(t+i)->id, (t+i)->name, &(t+i)->salary);
}
}
void output(teacher *t, int n) {
printf("职工号\t姓名\t工资\n");
for(int i = 0; i < n; i++) {
printf("%d\t%s\t%d\n", (t+i)->id, (t+i)->name, (t+i)->salary);
}
}
void sort(teacher *t, int n) {
teacher temp;
for(int i = 0; i < n-1; i++) {
for(int j = 0; j < n-i-1; j++) {
if((t+j)->salary > (t+j+1)->salary) {
temp = *(t+j);
*(t+j) = *(t+j+1);
*(t+j+1) = temp;
}
}
}
}
int main() {
teacher t[NUM]; //教师数组
teacher *pt = t;
input(pt, NUM); //为教师数组元素赋值
printf("Before sorting:\n");
output(pt, NUM); //排序前输出
sort(pt, NUM); //按工资排序
printf("After sorting:\n");
output(pt, NUM); //排序后输出
return 0;
}
```
在这个代码中,我们同样定义了一个结构体`teacher`,包含了三个成员变量:职工号、姓名和工资。然后我们输入了所有教师的信息,并将其存储在一个结构体数组中。最后,我们使用冒泡排序对结构体数组进行排序,排序的方式是按照教师工资由少到多排序。最后,我们输出排序后的结果。
阅读全文