#include
using namespace std;
struct Student{
int num;
float score;
char name[20];
};
int n;
float sort(Student*);
int main()
{ int i=0,j=0,m;
cout<<"请输入学生个数"<<endl;
cin>>i; n=i;
Student student[i];
for(j=0;j"请输入学生的学号"<<endl;
cin>>student[j].num;
cout<<"请输入学生的姓名"<<endl;
cin>>student[j].name;
cout<<"请输入学生的成绩"<<endl;
cin>>student[j].score;
}
Student*pt=&student[0];
sort(pt);
cout<<"将学生按成绩从高到低的成绩排序后的结果为"<<endl;
for(m=0;m'/t';
cout<name<<'/t';
cout<score<<'/t';
cout<<endl;
}
}
float sort(Student*p){
int i,j,m;
Student temp;
for(i=0;i1;i++){
for(j=0;j1;j++){
if(*(p+j+1).score<*(p+j).socre)
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
输入学生数据然后按成绩从高到低的顺序排序然后输出,排序要求函数实现
函数里我想把结构体数组传过来排序后实现交换但是不行,是哪里出问题呢?
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您的代码存在一些错误。首先,您在定义学生数组时使用了变量i,但是i的值并未在此时确定,这会导致编译错误。您可以使用动态内存分配或者使用常量或宏来定义学生数组的大小。
另外,在sort函数中,您使用了指针操作符->来访问结构体成员,但是指针变量p是Student类型的指针,应该使用指针变量名加点号来访问结构体成员。
此外,您的排序算法也有问题,排序应该根据成绩从高到低进行排序。下面是修改后的代码示例:
#include <iostream>
using namespace std;
struct Student {
int num;
float score;
char name[20];
};
int n;
void sort(Student*);
int main() {
int i = 0, j = 0, m;
cout << "请输入学生个数" << endl;
cin >> i;
n = i;
Student* student = new Student[i];
for (j = 0; j < i; j++) {
cout << "请输入学生的学号" << endl;
cin >> student[j].num;
cout << "请输入学生的姓名" << endl;
cin >> student[j].name;
cout << "请输入学生的成绩" << endl;
cin >> student[j].score;
}
sort(student);
cout << "将学生按成绩从高到低的成绩排序后的结果为" << endl;
for (m = 0; m < n; m++) {
cout << student[m].num << '\t';
cout << student[m].name << '\t';
cout << student[m].score << '\t';
cout << endl;
}
delete[] student;
}
void sort(Student* p) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if ((p + j + 1)->score > (p + j)->score) {
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
在这个示例中,我们使用了动态内存分配来定义学生数组,使用new操作符在堆上分配内存。在sort函数中,我们使用了指针变量名加点号来访问结构体成员,并根据成绩从高到低进行排序。最后,我们在main函数结束前使用delete[]释放了动态分配的内存。
希望这可以帮助您解决问题!
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
在函数sort的实现中,对于变量temp、i、j和m应该放在函数内部定义,而不能与全局变量混用。此外,在进行比较和交换时,应该把if语句的条件括号括起来,否则if语句只会执行第一行,而不是整个if代码块。
修改后的代码如下所示:
#include<iostream>
using namespace std;
struct Student{
int num;
float score;
char name[20];
};
int n;
void sort(Student*);
int main()
{
int i=0,j=0,m;
cout<<"请输入学生个数"<<endl;
cin>>i;
n=i;
Student student[i];
for(j=0;j<i;j++){
cout<<"请输入学生的学号"<<endl;
cin>>student[j].num;
cout<<"请输入学生的姓名"<<endl;
cin>>student[j].name;
cout<<"请输入学生的成绩"<<endl;
cin>>student[j].score;
}
Student*pt=&student[0];
sort(pt);
cout<<"将学生按成绩从高到低的成绩排序后的结果为"<<endl;
for(m=0;m<n;m++){
cout<<student[m].num<<'\t';
cout<<student[m].name<<'\t';
cout<<student[m].score<<'\t';
cout<<endl;
}
return 0;
}
void sort(Student* p) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if ((p + j + 1)->score > (p + j)->score) {
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
这样就可以按照成绩从高到低的顺序将所有学生信息输出了。