zbdn 2021-02-22 21:16 采纳率: 64.3%
浏览 505
已采纳

为什么代码能生成成功却无法看见代码结果

对于最多由100名学生的姓名和成绩信息(如王洪、90)构成的线性表,采用顺序存储结构完成下面的问题

①统计成绩大于等于95分的人数,并输出这些学生的姓名

②删除成绩小于20分的成绩

③以60分为分界线,将表中所有小于60分的元素放在表的前半部分,大于和等于60分的元素放在表的后半部分。

#include "stdafx.h"
#include<iostream>
using namespace std;
int MAX=100;                //人数上限 
typedef void S;
typedef struct Student
{  int Grade[100000];
  int top;
 char a[100000];
  int length;}*student;
void judge(student s);
student Init_SeqList(student &s);
student excellent(student &s);
student deletebad(student &s);
student arrange(student &s);
student inti_Sq()
{ student s;
s=NULL;
s->length=0;
s->top=-1;
return s;}
void judge(student s)
{ if(s->length<0||s->length>100)
   cout<<"该表创建失败!"<<endl;
return;
if(s->length>0&&s->length<=100)
	cout<<"该表创建成功!"<<endl;}
student Init_SeqList(student&s)
{ 
cout<<"请输入学生的人数:"<<endl;
cin>>s->length;
cout<<"请输入学生的姓名:"<<endl;
for(int i=0;i<s->length-1;i++)
{cin>>s->a[i];}
cout<<"请依次输入学生的成绩:"<<endl;
for(int i=0;i<s->length-1;i++)
{ cin>>s->Grade[i];}
return s;}
student excellent(student& s)
{
int j=0;                                        //j代表成绩大于等于95的人数
for(int i=0;i<s->length-1;i++)
	if(s->Grade[i]>=95)
		{  j++;
cout<<j<<s->a[i];}
cout<<"以上是成绩大于等于95分的人数与学生姓名"<<endl;
return s;}
student deletebad(student& s)
{ 
for(int i=0;i<s->length;i++)
	if(s->Grade[i]<20)
	{ s->a[i]=s->a[i+1];
s->length--;
for(int i=0;i<s->length-1;i++)
{	cout<<s->a[i];}}
cout<<"以上是删除成绩小于20分后的信息表:"<<endl;
return s;}
student arrange(student& s)
{ int a=60,i=0,j=s->length-1;
int temp=0;
while(i<j)
	{if(s->Grade[i]<a)
      i++;
    if(s->Grade[j]>=a)
	  j--;
	if(s->Grade[i]>=60&&s->Grade[j]<60)
		{temp=s->Grade[i];
	s->Grade[i]=s->Grade[j];
	s->Grade[j]=temp;}
}
for(int i=0;i<s->length;i++)
	cout<<s->Grade[i];
cout<<"以上是经过调整后的数组"<<endl;
return s;}

           
int main()
{ student S=inti_Sq();
Init_SeqList(S);
   judge(S);
 excellent(S);
 deletebad(S);
 arrange(S);

  
	return 0;
}

  • 写回答

1条回答 默认 最新

  • ProfSnail 2021-02-23 01:50
    关注

    1. 在初始化的时候,student s = null;这里不应该赋值为null,而应该生成一个对象,并获取其指针。student s = new Student();

    2. 学生姓名最好不要用char来存储,用字符串string来存储。这样读取的时候就不会发生错误。string a[100];

    3. 既然设置最大值是100,那么完全可以不用a[10000],弄个a[1000]就足够了。

    4. for循环过程中,只需要for(int i = 0; i < length; i++)即可,而不是<length-1;

    5. 删除一个学生之后,整个表格都需要向前移动,而不是只有被删除元素后面的被移动。

    调整之后就没错了。

    代码如下:

    #include<iostream>
    #include <string>
    using namespace std;
    int MAX=100;                //人数上限
    typedef void S;
    typedef struct Student{
        int Grade[1000];
        int top;
        string a[1000];
        int length;
    }*student;
    void judge(student s);
    student Init_SeqList(student &s);
    student excellent(student &s);
    student deletebad(student &s);
    student arrange(student &s);
    student inti_Sq()
    {
        student s;
        s=new Student();
        s->length=0;
        s->top=-1;\
        return s;
    }
    void judge(student s)
    {
        if(s->length<0||s->length>100)
            cout<<"该表创建失败!"<<endl;
        return;
        if(s->length>0&&s->length<=100)
            cout<<"该表创建成功!"<<endl;
    }
    student Init_SeqList(student& s)
    {
        cout<<"请输入学生的人数:"<<endl;
        cin>>s->length;
        cout<<"请输入学生的姓名:"<<endl;
        for(int i=0;i<s->length;i++){
            cin>>s->a[i];
        }
        cout<<"请依次输入学生的成绩:"<<endl;
        for(int i=0;i<s->length;i++){
            cin>>s->Grade[i];
        }
        return s;
    }
    student excellent(student& s)
    {
        int j=0;                                        //j代表成绩大于等于95的人数
        for(int i=0;i<s->length-1;i++)
            if(s->Grade[i]>=95){
                    j++;
            cout<<j<<" "<<s->a[i]<<endl;
            }
        cout<<"以上是成绩大于等于95分的人数与学生姓名"<<endl;
        return s;
    }
    student deletebad(student& s)
    {
        for(int i=0;i<s->length;i++)
            if(s->Grade[i]<20){
                for(int j = i; j < s->length-1; j++){
                    s->a[i]=s->a[i+1];
                }
                s->length--;
            }
        for(int i = 0; i < s->length; i++){
            cout<<s->a[i]<<" "<<s->Grade[i]<<endl;
        }
        cout<<"以上是删除成绩小于20分后的信息表:"<<endl;
        return s;
    }
    student arrange(student& s)
    {
        int a=60,i=0,j=s->length-1;
        int temp=0;
        while(i<j){
            if(s->Grade[i]<a)i++;
            if(s->Grade[j]>=a)j--;
            if(s->Grade[i]>=60&&s->Grade[j]<60&&i<s->length&&j>=0){
                temp=s->Grade[i];
                s->Grade[i]=s->Grade[j];
                s->Grade[j]=temp;
            }
        }
        for(int i=0;i<s->length;i++)
            cout<<s->a[i]<<" "<<s->Grade[i]<<endl;
        cout<<"以上是经过调整后的数组"<<endl;
        return s;
    }
    
    
    int main(){
        student S=inti_Sq();
        Init_SeqList(S);
        judge(S);
        excellent(S);
        deletebad(S);
        arrange(S);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 R语言单细胞测序 对seurat对象进行标准化时出现问题
  • ¥15 Anaconda navigator updateor一直更新
  • ¥15 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。
  • ¥15 求一个stm32串口控制程序
  • ¥20 Windows 驱动开发版本疑问相关
  • ¥15 MAC 未能打开磁盘映像
  • ¥15 fastcap使用,二维导体输入问题
  • ¥15 hosts修改后不能访问
  • ¥15 关于化学反应速率C++编译问题/FLUENT