#Cprove39 动态数组

NO.1 动态数组分配空间

输入学生成绩,输出高于平均成绩的学生序号和成绩。
其中学生人数不定,可能10个,可能1000。在录入成绩之前,学生人数由键盘输入。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int num,i=0;
    int *score;
    int sum=0,ave;
    //输入学生人数,为动态数组score分配合适大小的空间
    printf("输入学生人数:");
    scanf("%d",&num);
    score=(int *)malloc(num*sizeof(int));

    //读入学生成绩,并求出成绩和
    printf("输入成绩:\n");
    while(i<num)
    {
        scanf("%d",score+i);
        sum+=score[i];
        i++;
    }

    //求平均成绩
    ave=sum/num;
    printf("平均分为:%d",ave);

    //输出高于平均分的学生的学号(即序号)和成绩
    printf("输出高于平均分的学号和成绩:\n");
    for(i=0;i<num;i++)
        if(score[i]>ave)
        printf("%d\t%d\n",i,score[i]);

    //释放动态分配的空间
    free(score);
    return 0;
}

在这里插入图片描述

NO.2 动态数组排序

编一个程序,输入某班某门课的成绩,进行排序后输出。成绩可能为小数。班级人数不定,要求采用动态数组完成。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int num,i,j;
    float *score;
    float t;
    //输入学生人数,为动态数组score分配合适大小的空间
    printf("输入学生人数:");
    scanf("%d",&num);
    score=(float *)malloc(num*sizeof(float));
    printf("输入成绩(无序):\n");
    for(i=0;i<num;i++)
        scanf("%f",score+i);

    //冒泡排序(从低到高)
    for(i=0; i<num-1; i++)
        for(j=0; j<num-1-i; j++)
            if(score[j]>score[j+1])
            {
                t=score[j];
                score[j]=score[j+1];
                score[j+1]=t;
            }
    printf("输出成绩(从低到高):\n");
    for(i=0;i<num;i++)
        printf("%f\n",score[i]);

    //释放动态分配的空间
    free(score);
    return 0;
}

在这里插入图片描述

NO.3 动态数组扩容

利用动态数组保存学生的成绩。当再有一批学生成绩需要保存时,要为之扩容(和吃自助一样,用多少,取多少,这好),编写程序,实现如图所示的功能。
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int num,ad,i;
    float *score,*adscore;
    //输入学生人数,为动态数组score分配合适大小的空间
    printf("输入学生人数:");
    scanf("%d",&num);
    score=(float *)malloc(num*sizeof(float));
    printf("输入成绩:\n");
    for(i=0;i<num;i++)
        scanf("%f",score+i);

    //增补存储空间
    printf("输入增加人数:");
    scanf("%d",&ad);
    adscore=(float *)malloc((ad+num)*sizeof(float));
    for(i=0;i<num;i++)
        adscore[i]=score[i];
    free(score);
    printf("输入成绩:\n");
    for(i=0;i<ad;i++)
        scanf("%f",adscore+num+i);
    printf("输出全部成绩:\n");
    for(i=0;i<num+ad;i++)
        printf("%f\n",adscore[i]);
    free(adscore);
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值