《C语言及程序设计》实践参考——为动态数组扩容

来源:互联网 发布:nginx apache ssl配置 编辑:程序博客网 时间:2024/05/16 07:46

返回:贺老师课程教学链接


【项目3-为动态数组扩容】
下面的程序,利用动态数组保存学生的成绩。当再有一批学生成绩需要保存时,要为之扩容(和吃自助一样,用多少,取多少,这好),请补充完整下面的程序,实现如图所示的功能。

#include <stdio.h>#include <malloc.h>int main( ){    int num,i,addNum;  //num是小组人数    printf("输入学生人数: ");    scanf("%d", &num);    float *score = (float*)malloc(num*sizeof(float));    printf("请输入学生成绩: ");    //输入num名同学的成绩    for(i=0; i<num; i++)        scanf("%f", score+i); //&score[i]    printf("需要增加多少名学生? ");    scanf("%d", &addNum);   //addNum是需要增加的人数    //下面的程序完成对数组的扩容,并输入另外的成绩    free(score);    return 0;}
提示1:新增一个恰当长度的动态数组,将原数组中的数据“复制”到新数组,接着再输入新的数据。增加新数据后的数组,成为保存数据的新数组。
提示2:为保证系统的效率,要及时释放不再用的空间

[参考解答]
#include <stdio.h>#include <malloc.h>int main( ){    int num,i,addNum;  //num是小组人数    printf("输入学生人数: ");    scanf("%d", &num);    float *score = (float*)malloc(num*sizeof(float));    printf("请输入学生成绩: ");    //输入num名同学的成绩    for(i=0; i<num; i++)        scanf("%f", score+i); //&score[i]    printf("需要增加多少名学生? ");    scanf("%d", &addNum);   //addNum是需要增加的人数    //下面的程序完成对数组的扩容,并输入另外的成绩    float *addScore = (float*)malloc((num+addNum)*sizeof(float));    printf("请输入学生成绩: ");    //输入num名同学的成绩    for(i=0; i<num; i++)        addScore[i]=score[i];    for(i=0; i<addNum; i++)        scanf("%f", addScore+num+i);    free(score);  //    score = addScore;    num = num +addNum;    printf("现在共有%d名同学,他们的成绩是: \n" , num);    for(i=0; i<num; i++)        printf("%.2f  ", score[i]);    printf("\n");    free(score);    return 0;}  



0 0