动态内存分配函数

1、设计函数int * create(int n) ;,根据整数n创建一个长度为n的整型动态一维数组,并返回动态数组第一个元素的地址。

2、设计函数 void cal(int * array, int size) ;该函数可计算array 所指向的动态一维数组中存储的size个整数的和及平均值,同时寻找其中的最大值、最小值。

输入共两行,第一行为一个整数n(0<n<100)。第二行为n个用空格分隔的整数。第一行在主函数中输入,第二行需在函数cal中输入,并存储在 array 所指向的动态一维数组中。

输出共5行,前四行依次为和、平均值(精确到小数点后两位)、最大值、最小值。最后一行按原样输出输入的那n个整数。前四行需在函数cal中输出,最后一行由主函数输出。

测试数据保证所有整数可以用int型存储。出题者存储浮点数时用的是 float。

 

函数接口定义一:

int * create(int n) ;

其中 n 为整数数组的长度; 函数需返回动态数组第一个元素的地址。如果没有获得内存则返回NULL。

函数接口定义二:

void cal(int * array, int size) ;

其中 array 和 size 都是用户传入的参数。 array 为整数数组的首地址; size 是数组中所存储的整数的个数。函数没有返回值。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>


int * create(int n) ;
void cal(int * array, int size) ;

int main()
{
    int * array , n , i ;

    scanf( "%d", &n );

    array = create(n) ;
    if ( array == NULL )
        return -1 ; //这里的return是因为没有获得内存而直接结束程序。

    cal( array, n) ;
    for ( i = 0 ; i < n ; i++ )
    {
        printf("%d" , *(array+i) ) ;
        if ( i == n - 1 ) printf("\n") ;
        else printf(" ") ;
    }     

    free(array) ;

    return 0;
}

/* 请在这里填写答案 */

输入样例:

10
1 2 3 4 5 6 7 8 9 10

输出样例:

55
5.50
10
1
1 2 3 4 5 6 7 8 9 10

 答案:

int * create(int n) {
    int *array;
    array=malloc(sizeof(int)*n);
    int *location;
    location=array;
    for(int i=0;i<n;i++){
        scanf("%d",array);
        array++;
    }
    return location;
}
void cal(int * array, int size) {
    int *num;
    num=array;
    int max=*array,min=*array;
    float sum=0;
    for(int i=0;i<size;i++){
        if(max<*array){
            max=*array;
        }
        
        if(min>*array){
            min=*array;
        }
        sum+=*array;
        array++;
        
    }
    printf("%d\n",(int)sum);
    printf("%.2f\n",sum/size);
    printf("%d\n",max);
    printf("%d\n",min);
    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值