#include<iostream>
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<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;
}
}
float sort(Student*p){
int i,j,m;
Student temp;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(*(p+j+1).score<*(p+j).socre)
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
输入学生数据然后按成绩从高到低的顺序排序然后输出,排序要求函数实现
函数里我想把结构体数组传过来排序后实现交换但是不行,是哪里出问题呢?
c++结构体函数传递
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- Leodong. 2023-04-14 09:50关注
该回答通过自己思路及引用到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[]释放了动态分配的内存。
希望这可以帮助您解决问题!
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 PADS Logic 原理图
- ¥15 PADS Logic 图标
- ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
- ¥20 气象站点数据求取中~
- ¥15 如何获取APP内弹出的网址链接
- ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
- ¥50 STM32单片机传感器读取错误
- ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
- ¥15 机器人轨迹规划相关问题
- ¥15 word样式右侧翻页键消失