c语言结构性数组

c语言结构性数组利用结构体数组编程。数组元素包含学生学号和成绩两个成员。要求从键盘输入20个学生的学号和成绩,将成绩大于90的学生放入到另外一个结构体数组中,并从键盘输出... c语言结构性数组利用结构体数组编程。数组元素包含学生学号
和成绩两个成员。要求从键盘输入20个学生的学号和成绩,将成绩大于90的学生放入到另外一个结构体数组中,并从键盘输出该数组
展开
 我来答
折柳成萌
高粉答主

推荐于2018-05-18 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:4.4万
采纳率:96%
帮助的人:6240万
展开全部
1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
注意:结构数组的成员也可以是数组变量。
自我编程
2018-05-18 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

我测试,不想输入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);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南城旧梦947
2018-05-18 · TA获得超过1197个赞
知道小有建树答主
回答量:674
采纳率:72%
帮助的人:158万
展开全部
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...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式