没吃饱呀 2022-08-16 19:54 采纳率: 83.3%
浏览 135
已结题

这个哪里错了啊,请各位同学帮我看看😭

img

img


请定义一个class 学生
数据成员包括:姓名、语文和数学两科成绩及它们的总分、均分;
函数成员包括
·构造函数、析构函数和复制构造函数
函数zfjf()计算某学生的总分和均分
函数 void ortave,按均分从小到大将数组元素排序;(另:定义函数 void ortname,按姓名从小到大将数组元素排序)
在主函数中定义学生类型的数组a[5],并为各自的数据成员:姓名、语文、数学赋值(初始化);完成测试。


```c++
#include <iostream>
#include <cstring>
using namespace std;
class student{
 private:
  char Name[20];
  float chinese,math,sum,ave;
 public:
  student(){
   cout<<"构造函数"<<endl;
  };
  student(student &a){
   strcpy(Name,a.Name);
   chinese=a.chinese;
   math=a.math;
   sum=a.sum;
   ave=a.ave;
   cout<<"复制构造函数"<<endl;
  }
  ~student(){cout<<"析构函数"<<endl;
  }
  void print(){
   cout<<"姓名:"<<Name<<" "<<"语文:"<<chinese<<" "<<"数学:"<<math<<" "<<"总分:"<<sum<<" "<<"均分:"<<ave<<endl;
  }
  void zfjf();
  friend void sortave(student b[],int n);
  friend void sortname(student b[],int n);
}; 
void student::zfjf(){
 sum=chinese+math;
 ave=sum/2;
}
void sortave(student b[],int n){
 student t;
 int i,j;
 for(i=0;i<5-1;i++)
  for(j=0;j<5-i-1;j++)
 if(b[j].ave>b[j+1].ave) {t=b[j];b[j]=b[j+1];b[j+1]=t;
 }
}
void sortname(student b[],int n){
 student t;
 int i,j;
 for(i=0;i<5-1;i++)
  for(j=0;j<5-i-1;j++)
 if(strcmp(b[j].Name,b[j+1].Name)>0){t=b[j];b[j]=b[j+1];b[j+1]=t;
 }
}
int main(){
 student a[5]={student("a",95,95),student("b",98,95),student("c",96,97),student("d",95,98),student("e",96,93)};
 int i;
 a[0].zfjf(a,5);
 for(i=0;i<N;i++) a[i].print();
 a[0].sortave(a,5); 
 for(i=0;i<N;i++) a[i].print();
 a[0].sortname(a,5);
 for(i=0;i<N;i++) a[i].print(); 
 return 0;
}

```

  • 写回答

5条回答 默认 最新

  • bjo656262 2022-08-17 10:16
    关注

    这个t的类型是int,然后name定义的是字符数组,这个没法将int和char[]直接相互赋值的,还有数组也是不能直接赋值的
    void sortname(student b[],int n){
    int i,j;
    char t[20];//t需要定义为字符串
    for(i=0;i<5-1;i++)
    for(j=0;j<5-i-1;j++)
    // if(strcmp(b[j].Name,b[j+1].Name)>0) { t=b[j].Name; b[j].Name=b[j+1].Name; b[j+1].Name=t; }
    if(strcmp(b[j].Name,b[j+1].Name)>0){strcpy(t,b[j].Name);strcpy(b[j].Name,b[j+1].Name);strcpy(b[j+1].Name,t);}//字符串无法直接赋值
    }

    #include <iostream>
    #include <cstring>3
    #define N 5 
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    class student{
        private:
            char Name[20];
            float chinese,math,sum,ave;
        public:
            student(){
                cout<<"构造函数"<<endl;         
            }
            student(student &a){
                strcpy(Name,a.Name);
                chinese=a.chinese;
                math=a.math;
                sum=a.sum;
                ave=a.ave;
                cout<<"复制构造函数"<<endl; 
            }
            ~student(){cout<<"析构函数"<<endl;
            }
            void input(){
                cout<<"请输入姓名、语成、数成:"<<endl;
                cin>>Name>>chinese>>math;
            }
            void print(){
                cout<<"姓名:"<<Name<<" 语文:"<<chinese<<" 数学:"<<math<<" 总分:"<<sum<<" 均分:"<<ave<<"\n"<<endl;
            }
            void zfjf();
            friend void sortave(student b[],int n);
            friend void sortname(student b[],int n);
    };
    
    void  student::zfjf(){
        sum=chinese+math;
        ave=sum/2;
    }
    
    void sortave(student b[],int n)
    {
        int i,j,t;
        for(i=0;i<5-1;i++)
            for(j=0;j<5-i-1;j++)
                if(b[j].ave>b[j+1].ave)
                    {
                        t=b[j].ave;b[j].ave=b[j+1].ave;b[j+1].ave=t;
                    }
    }
    
    void sortname(student b[],int n){
        int i,j;
        char t[20];//t需要定义为字符串 
        for(i=0;i<5-1;i++)
            for(j=0;j<5-i-1;j++)
            //    if(strcmp(b[j].Name,b[j+1].Name)>0)    {                    t=b[j].Name;                    b[j].Name=b[j+1].Name;                    b[j+1].Name=t;                }
                if(strcmp(b[j].Name,b[j+1].Name)>0){strcpy(t,b[j].Name);strcpy(b[j].Name,b[j+1].Name);strcpy(b[j+1].Name,t);}//字符串无法直接赋值 
    }
    
    int main(int argc, char** argv) {
        student a[N];
        int i;
        for(i=0;i<N;i++)
        {
                a[i].input();
                a[i].zfjf();
        }
        for(i=0;i<N;i++)a[i].print();
        sortave(a,N);
        for(i=0;i<N;i++)a[i].print();
        sortname(a,N);
        for(i=0;i<N;i++)a[i].print();
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月17日
  • 已采纳回答 8月17日
  • 修改了问题 8月17日
  • 创建了问题 8月16日

悬赏问题

  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊