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