C語言練習-動態分配數組

1.malloc 初試


#include<stdio.h>
#include<malloc.h>
int main()
{
    int number;        //学生人数
    int *score;        //动态数组的首地址
    int sum=0,ave;     //成绩和、均分
    //输入学生人数,为动态数组score分配合适大小的空间
    printf("Enter the number of students:\n");
    scanf("%d",&number);
    score=(int*)malloc(sizeof(int)*number);
    //读入学生成绩,并求出成绩和
    int i;
    for(i=0;i<number;i++)
    {
        scanf("%d",&score[i]);
        sum += *(score+i);
    }
    //求平均成绩
    ave = sum/number;
    //输出高于平均分的学生的学号(即序号)和成绩
    printf("average score is %d.\n",ave);
    for(i=0;i<number;i++)
        if(*(score+i)>ave)
            printf("%d %d\n",i, *(score+i));
    //释放动态分配的空间
    free(score);
    return 0;
}

2.指針的值排序-冒泡法

#include<stdio.h>
#include<malloc.h>
int main()
{
    int count, i,j;
    float *pf,tmp;
    scanf("%d", &count);   //输入班级人数
    //分配空间,用动态数组存储全班同学成绩
    pf = (float*)malloc(sizeof(float)*count);
    //输入同学们的成绩
    for(i=0;i<count;i++)
    {
        scanf("%f",&pf[i]);
    }
    //排序
    for(i=0;i<count-1;i++)
    {
        for(j=0;j<count-i-1;j++)
        {
            if(*(pf+j)<*(pf+j+1))
            {
                tmp = *(pf+j);
                *(pf+j)=*(pf+j+1);
                *(pf+j+1)=tmp;
            }
        }
    }
    //输出排序后的成绩
    for(i=0;i<count;i++)
        printf("%d is %f.\n",i,*(pf+i));
    free(pf);
    return 0;
}

3.為動態數組擴容

#include <stdio.h>
#include <malloc.h>
int main( )
{
    int num,i,addNum;  //num是小组人数
    printf("enter the number of students: ");
    scanf("%d", &num);
    float *score = (float*)malloc(num*sizeof(float));
    printf("Enter the student's score : ");
                                         //输入num名同学的成绩
    for(i=0; i<num; i++)
        scanf("%f", score+i);            //&score[i]
    printf("how many students you'd like to add? ");
    scanf("%d", &addNum);                //addNum是需要增加的人数
                                         //下面的程序完成对数组的扩容,并输入另外的成绩
    float *score1 = (float*)malloc((addNum+num)*sizeof(float));
    for(i=0;i<num;i++)
        *(score1+i)=*(score+i);
    printf("Enter the student's score : ");
    for(i=num;i<num+addNum;i++)
        scanf("%f",score1+i);
    for(i=0; i<num+addNum; i++)
        printf("%.f\t", *(score1+i));
    free(score1);
    free(score);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_38486169/article/details/86629179