作业Day1:思维导图、堆区申请空间并释放
作业:思维导图:
作业:在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成
要求:用malloc和free完成
分析:
①malloc函数和free函数需要的头文件:#include <stdlib.h>
②malloc函数:堆区申请空间:int *p=(int *)malloc(sizeof(int)*5);
③free函数:释放申请的堆区空间:free(p);//p为指针,指向之前所申请的堆区空间地址
④避免野指针:释放空间后,指针置NULL
代码:
#include <stdio.h>
#include <stdlib.h>
void Display(int *p);
void Sort(int *p);
void Sort2(int *p);
int main(int argc, const char *argv[])
{//堆区申请5个int大小的空间int *p=(int *)malloc(sizeof(int)*5);//输入成绩printf("输入学生成绩: ");for(int i=0;i<5;i++)scanf("%d",p+i);//输出成绩Display(p);//排序并输出成绩Sort(p);Display(p);//释放指针并置空free(p);p=NULL;return 0;
}void Display(int *p)
{printf("学生的成绩为: ");for(int i=0;i<5;i++)printf("%d ",p[i]);printf("\n");
}
//冒泡排序
void Sort(int *p)
{int temp;for(int i=0;i<5;i++)//决定轮数{for(int j=0;j<4-i;j++)//每轮比较次数{//后面的数小,则交换,保证后面的数最大,此为升序if(p[j]>p[j+1])//每次与下一位比较{temp=p[j+1];p[j+1]=p[j];p[j]=temp;}}}printf("\n");
}//选择排序
void Sort2(int *p)
{int temp;int min=0;for(int i=0;i<5;i++)//假定当前位置最小{min=i;for(int j=i;j<5;j++)//依次与j比较{//后面的数小,则交换,保证后面的数最大,此为升序if(p[min]>p[j])//每次与下一位比较{min=j;}}temp=p[min];p[min]=p[i];p[i]=temp;}printf("\n");
}