我测试,不想输入20个学生,就用6个学生测试,你把常量改成20就行。
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/0df3d7ca7bcb0a4697c66c9d6763f6246a60afaa?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
#include <stdio.h>
#include <malloc.h>
typedef struct student
{
int id;
int score;
}STU;
#define stuNum 6 //学生数量 我测试只用6个学生,你改成20就行
void printfStu(STU stu[],int len);
STU *moveStu1ToStu2ByScore(STU **stu1,int len,int score);//将成绩大于score的学生信息,从stu1中转移到stu2中,返回stu2首地址
int count;//大于指定分数的学生
int main()
{
STU *stu1=NULL,*stu2=NULL;
int i,se;
stu1=(STU *)calloc(stuNum,sizeof(STU));
printf("输入%d个学生的学号及成绩到数组1:\n",stuNum);
for(i=0;i<stuNum;i++)
scanf("%d%d",&stu1[i].id,&stu1[i].score);
printf("数组1的学生信息:\n");
printfStu(stu1,stuNum);
printf("输入要转移的学生分界成绩(大于该成绩):");
scanf("%d",&se);
stu2=moveStu1ToStu2ByScore(&stu1,stuNum,se);
printf("数组1的学生信息:\n");
printfStu(stu1,stuNum-count);
printf("数组2的学生信息:\n");
printfStu(stu2,count);
return 0;
}
STU *moveStu1ToStu2ByScore(STU **stu1,int len,int score)
{
int i,j=0,k=0;
count=0;
STU *stuSave=NULL,*stu2=NULL;
for(i=0;i<len;i++)
if((*stu1)[i].score>score)
count++;
stuSave=(STU *)calloc(stuNum-count,sizeof(STU));
stu2=(STU *)calloc(count,sizeof(STU));
for(i=0;i<len;i++)
if((*stu1)[i].score>score)
stu2[j++]=(*stu1)[i];
else
stuSave[k++]=(*stu1)[i];
free(*stu1);
*stu1=stuSave;
return stu2;
}
void printfStu(STU stu[],int len)//打印学生结构数组
{
int i;
printf("学号 成绩:\n");
for(i=0;i<len;i++)
printf("%d %d\n",stu[i].id,stu[i].score);
}本回答被提问者采纳