Vấn đề
Tìm giá trị lớn nhất và nhỏ nhất từ mảng dùng cấp phát bộ nhớ động trong C.
Giải pháp
Cấp phát động cho phép cấp phát bộ nhớ tại runtime.
Các hàm cấp phát động:
malloc()– cấp phát khối bộ nhớ byte tại runtime.calloc()– cấp phát khối bộ nhớ liên tục tại runtime.realloc()– thu hẹp/mở rộng bộ nhớ đã cấp phát.free()– giải phóng bộ nhớ đã cấp phát.
Tìm max/min trong mảng dùng cấp phát động
Logic tìm max:
p=(int*)malloc(n*sizeof(int)); //cấp phát động for(i=0;i<n;i++){ scanf("%d",p+i); if(*(p+i)>max) //tìm max max=*(p+i); }
Logic tìm min:
for(i=0;i<n;i++){ scanf("%d",p+i); if(*(p+i)<min) //tìm min min=*(p+i); }
Ví dụ
#include<stdio.h> int main(){ int *p,n,i,max=-32768,min=32767; printf("\n enter size:"); scanf("%d",&n); p=(int*)malloc(n*sizeof(int)); //cấp phát động printf("\n enter elements:"); for(i=0;i<n;i++){ scanf("%d",p+i); if(*(p+i)>max) //tìm max max=*(p+i); if(*(p+i)<min) //tìm min min=*(p+i); } printf("\n maximum=%d\n minimum=%d",max,min); free(p); }
Kết quả
enter size: enter elements: maximum=-32768 minimum=32767