C语言:用指针实现冒泡排序:void sort(struct Stu s[], int n)//请用指针实现 { struct Stu t,*p,*q,*k; /*3*/ /*3*/ }
时间: 2024-01-17 17:07:14 浏览: 117
可以将函数实现如下:
```
void sort(struct Stu s[], int n)
{
struct Stu t, *p, *q, *k;
for (p = s; p < s + n - 1; p++)
{
k = p;
for (q = p + 1; q < s + n; q++)
{
if (q->score > k->score)
{
k = q;
}
}
if (k != p)
{
t = *p;
*p = *k;
*k = t;
}
}
}
```
其中,`p`和`q`分别为结构体指针,`k`用于记录当前最大值的位置。通过指针实现,可以避免结构体的拷贝,提高排序效率。
相关问题
#include<stdio.h> struct Stu { int num; char name[20]; int score1,score2; float aver; }; void input(struct Stu s[], int n) { struct Stu *p; for(p=s;p<s+n;p++) scanf("%d%s%d%d",/*1*/ /*1*/); } void average(struct Stu s[], int n)//请用指针实现 { struct Stu *p; /*2*/ /*2*/ } void sort(struct Stu s[], int n)//请用指针实现 { struct Stu t,*p,*q,*k; /*3*/ /*3*/ } int main() { struct Stu s[3],*p; input(s,3); /*4*/ /*4*/;//调用average函数 sort(s,3); for(p=s;p<s+3;p++) printf("%d %s %.2f\n",/*5*/ /*5*/); return 0; }
好的,以下是使用指针实现的完整代码:
```c
#include<stdio.h>
struct Stu {
int num;
char name[20];
int score1, score2;
float aver;
};
void input(struct Stu s[], int n) {
struct Stu *p;
for (p = s; p < s + n; p++) {
scanf("%d%s%d%d", &p->num, p->name, &p->score1, &p->score2);
}
}
void average(struct Stu s[], int n) {
struct Stu *p;
for (p = s; p < s + n; p++) {
p->aver = (p->score1 + p->score2) / 2.0;
}
}
void sort(struct Stu s[], int n) {
struct Stu t, *p, *q, *k;
for (p = s; p < s + n - 1; p++) {
k = p;
for (q = p + 1; q < s + n; q++) {
if (q->aver > k->aver) {
k = q;
}
}
if (k != p) {
t = *p;
*p = *k;
*k = t;
}
}
}
int main() {
struct Stu s[3], *p;
input(s, 3);
average(s, 3);
sort(s, 3);
for (p = s; p < s + 3; p++) {
printf("%d %s %.2f\n", p->num, p->name, p->aver);
}
return 0;
}
```
在 `input` 函数中,使用 `p->` 来访问结构体成员,从标准输入中读入数据。在 `average` 函数中,同样使用 `p->` 来计算每个学生的平均分。在 `sort` 函数中,使用指针变量 `p` 和 `q` 遍历结构体数组,并使用指针变量 `k` 指向当前平均分最高的学生,然后进行冒泡排序。在 `main` 函数中,定义了结构体数组 `s` 和指针变量 `p`,然后分别调用 `input`、`average` 和 `sort` 函数进行输入、计算平均分和排序,并输出排序结果。
(C语言:用指针实现)结构类型struct Stu描述学生成绩记录;函数void input(struct Stu s[], int n)功能是输入n个学生的成绩记录(包括学号、姓名和两门课成绩);函数void average(struct Stu s[], int n)功能是计算每个学生2门课的平均成绩并存入对应记录的aver单元;函数void sort(struct Stu s[], int n)功能是按平均成绩的升序对学生记录进行排序。main函数调用以上函数,并输出结果,题目保证每个学生的平均分都不一样,请在五个空格之间填写内容。 输入格式: 输入为三行,每行包含学号,姓名,两门课成绩(以空格隔开)。 输出格式: 输出为三行,按平均成绩升序依次输出,每行包含学号,姓名,平均分(小数点后保留两位小数)。
```c
#include <stdio.h>
#include <string.h>
struct Stu {
char id[10];
char name[20];
float score1;
float score2;
float aver;
};
void input(struct Stu s[], int n) {
for (int i = 0; i < n; i++) {
scanf("%s%s%f%f", s[i].id, s[i].name, &s[i].score1, &s[i].score2);
}
}
void average(struct Stu s[], int n) {
for (int i = 0; i < n; i++) {
s[i].aver = (s[i].score1 + s[i].score2) / 2.0;
}
}
void sort(struct Stu s[], int n) {
struct Stu temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (s[j].aver > s[j + 1].aver) {
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
int main() {
struct Stu s[3];
input(s, 3);
average(s, 3);
sort(s, 3);
for (int i = 0; i < 3; i++) {
printf("%s %s %.2f\n", s[i].id, s[i].name, s[i].aver);
}
return 0;
}
```
阅读全文