动态数组-2015-7-21(简单题)

来源:互联网 发布:知乎联合创始人 编辑:程序博客网 时间:2024/05/28 15:07

/*动态数组的模板---动态申请一维数组*/

************************

#include<malloc.h>

*************************

double*shzu=(double*)malloc(sizeof(double)*n);

*************************

free(shzu);

*************************

/*

别忘了:#include<malloc.h>
malloc函数的参数为所需申请内存的大小:以字节为单位
malloc函数返回一个void*类型的地址,必须通过强制类型转换,才能赋值给特定的指针变量:
double* p= (double *) malloc( ... );
用malloc函数生成各种类型的动态数组,最好使用“sizeof(类型名) * 动态数组长度”形式确定分配内存的大小:
例如,整形的话:int * pint = (int *) malloc( sizeof(int) * 100);
分配的内存不再使用时一定要释放:
free(pint);*/
例题:百炼 《跳绳游戏》
代码如下:
#include<stdio.h>
#include<malloc.h>
int main()
{
int n,stop,i,j,end,time;
scanf("%d",&n);
while(n--)
{
scanf("%d",&stop);time=0;
int*shzu=(int*)malloc(sizeof(int)*stop);
if(stop==0)
printf("60\n");
else
{
for(i=0;i<stop;i++)
scanf("%d",&shzu[i]);
for(j=0;j<stop;j++)
{
time=time+3;
if(time+shzu[j]>60)
break;
}
if(j==stop)//最后一次停下没有超时
printf("%d\n",60-3*stop);
else if(shzu[j]+time-3<=60)//最后一次停下超时了,但停下之前没超时
printf("%d\n",shzu[j]);
else // 最后一次停下超时了,那前一次肯定没超时
{
//end=60-shzu[i-1]-(stop-1)*3;
printf("%d\n",60-3*(j+1-1));
}
}
free(shzu);
}
return 0;
}
 /*动态申请行数未知,列数已知的二维数组*/
例如:申请一个n行22列的字符型二维数组
代码如下:
#include<stdio.h>#include<malloc.h>int n,len;int main() {char (*p)[22];int i;while(scanf("%d",&len)!=EOF){scanf("%d",&n);p=(char (*)[22])malloc(n*22*sizeof(char)); for(i=0;i<n;i++){scanf("%s",p[i]);}for(i=0;i<n;i++)printf("%s\n",p[i]);free(p);}return 0;}

 
0 0
原创粉丝点击