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