#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 CCF-CSP 2023 第三题 解压缩(50%)
- ¥30 comfyui openpose报错
- ¥20 Wpf Datarid单元格闪烁效果的实现
- ¥15 图像分割、图像边缘提取
- ¥15 sqlserver执行存储过程报错
- ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
- ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
- ¥100 matlab2009 32位一直初始化
- ¥15 Expected type 'str | PathLike[str]…… bytes' instead
- ¥15 三极管电路求解,已知电阻电压和三级关放大倍数