c语言结构性数组

c语言结构性数组利用结构体数组编程。数组元素包含学生学号
和成绩两个成员。要求从键盘输入20个学生的学号和成绩,将成绩大于90的学生放入到另外一个结构体数组中,并从键盘输出该数组

1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
注意:结构数组的成员也可以是数组变量。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-18

我测试,不想输入20个学生,就用6个学生测试,你把常量改成20就行。

#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);
}

本回答被提问者采纳
第2个回答  2018-05-18
C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义。如: struct st { int x,y; char str[10];};struct st *array ;int n;printf("input n: "); scanf("%d", &n);array=(struct st*)malloc(n*si...
相似回答