CPP2022-22-数组进阶-动态数组

i=0
STUDENT_NUM
p+i
*(p+i)
(sum*1.0)/(STUDENT_NUM*1.0)
*(p+i)
*(*(p+i)+j)
GetMemory(&str,N);
free(str);
*ptr=(char *)malloc(N *sizeof(char));
(p=(int *)malloc(n *sizeof(int)))==Null)
scanf("%d",p+i)
*(p+i)
int (*a)[3],int *b
int (*a)[3],int *b
tmp=0
(*(a+i)+j)
(b+i)
x
result
x
result
result
(x+i)
result++
(a+i)+j
p=a
i=0;i<m;i++
j=0;j<3;j++
*(p+i)+j
j=0;j<3;j++
i=0;i<m;i++
*(p+i)+j

 

6-1 实数数组 - 7. 数组的创建

分数 10

全屏浏览题目

切换布局

作者 李祥

单位 湖北经济学院

请编写函数,创建动态实数数组。

函数原型

 

void ArrayCreate(double **array, int size);

说明:array 为指向动态数组起始地址指针的二级指针,size 为数组尺寸。函数为动态数组分配内存空间,并将数组起始地址保存到 array 所指一级指针中。

若 size 的值不正确,具体包括以下两种情况:

  • size 的值过小,小于1,无意义,显示错误信息:“Incorrect size!”,程序强行结束,出口代码为 1。
  • size 的值过大,超出实际可用内存,显示错误信息:“Not enough memory!”,程序强行结束,出口代码为 1。

裁判程序

 

#include <stdio.h> #include <stdlib.h> void ArrayCreate(double **array, int size); void ArrayInput(double *array, int size); void ArrayOutput(const double *array, int size); double ArraySum(const double *array, int size); double ArrayMax(const double *array, int size); double ArrayMin(const double *array, int size); double ArrayAvg(const double *array, int size); int main() { double *a, sum, max, min, avg; int n; scanf("%d", &n); ArrayCreate(&a, n); ArrayInput(a, n); ArrayOutput(a, n); putchar('\n'); printf("%g\n", ArraySum(a, n)); printf("%g\n", ArrayMax(a, n)); printf("%g\n", ArrayMin(a, n)); printf("%g\n", ArrayAvg(a, n)); free(a); a = NULL; return 0; } /* 你提交的代码将被嵌在这里 */ ......

提示:调用 C 库函数中的 malloc 函数来分配内存。若成功,则函数值为得到的内存区域的起始地址,否则为 NULL。

void ArrayCreate(double **array, int size)
{
    if(size<1)
    {
        printf("Incorrect size!\n");
        exit(1);
    }
    *array=(double*)malloc(size *sizeof(double));
    if(*array==NULL)
    {
        printf("Not enough memory!\n");
        exit(1);
    }
    
    return 1;
}

 

6-2 动态数组

分数 10

全屏浏览题目

切换布局

作者 风林

单位 包头师范学院

本题要求实现一个函数:生成一个长度为n的数组,并把1~n的整数存放在里面。

函数接口定义:

 

int *getarray ( int n );

参数n是生成的数组长度,函数返回生成数组的首地址。

裁判测试程序样例:

 

//本程序输入n,生成动态数组,输出数组内容。 #include <stdio.h> #include <malloc.h> int *getarray ( int n ); int main() { int *a=NULL,n,i; scanf("%d",&n); if(n<=0) return 0; a=getarray(n); if(a!=NULL) { for(i=0;i<n;i++) printf("%d ",a[i]); free(a); } return 0; } /* 你的代码将被嵌在这里 */

输入样例:

5

输出样例:

1 2 3 4 5 
int *getarray ( int n )
{
    int *p=(int*)malloc(n *sizeof(int));
    for(int i=0;i<n;i++)
    {
        *(p+i)=i+1;
    }
    return p;
}

 

6-3 实数数组 - 8. 数组的销毁

分数 10

全屏浏览题目

切换布局

作者 李祥

单位 湖北经济学院

请编写函数,销毁动态实数数组。

函数原型

 

void ArrayDestroy(double **array);

说明:array 为指向动态数组起始地址指针的二级指针,size 为数组尺寸。函数回收 array 所指一级指针所指示的动态实数数组的内存空间,并将该指针置为空指针(NULL)。

裁判程序

 

#include <stdio.h> #include <stdlib.h> void ArrayCreate(double **array, int size); void ArrayDestroy(double **array); void ArrayInput(double *array, int size); void ArrayOutput(const double *array, int size); double ArraySum(const double *array, int size); double ArrayMax(const double *array, int size); double ArrayMin(const double *array, int size); double ArrayAvg(const double *array, int size); int main() { double *a; int n; scanf("%d", &n); ArrayCreate(&a, n); ArrayInput(a, n); ArrayOutput(a, n); putchar('\n'); printf("%g\n", ArraySum(a, n)); printf("%g\n", ArrayMax(a, n)); printf("%g\n", ArrayMin(a, n)); printf("%g\n", ArrayAvg(a, n)); ArrayDestroy(&a); return 0; } ...... /* 你提交的代码将被嵌在这里 */ ......

void ArrayDestroy(double **array)
{
    free(*array);
    *array=NULL;
}

 

6-4 使用动态内存分配的冒泡排序

分数 20

全屏浏览题目

切换布局

作者 李廷元

单位 中国民用航空飞行学院

编程实现冒泡排序函数int* bubble_sort(int n);。其中n为数组长度(1≤n≤1000)。
###函数接口定义如下:

 

int* bubble_sort(int n);/* 对长度为n的数组arr执行冒泡排序 */

请实现bubble_sort函数,使排序后的数据从小到大排列。要求在bubble_sort函数内使用动态内存分配方式分配一个大小为n的数组,再读入待排序数据,排序完成后返回数组。

###裁判测试程序样例:

 

#include <iostream> using namespace std; int* bubble_sort(int n);/* 对长度为n的数组执行冒泡排序 */ int main() { int n; cin >> n; int* a = bubble_sort(n); for (int i = 0; i < n; i++) { cout << a[i]; if (i < n - 1)cout << " "; } cout << endl; return 0; } /* 你的代码将嵌在这里 */

###输入样例:

10
15168 28139 13714 27801 22208 32524 21653 8353 28341 25922

###输出样例:

8353 13714 15168 21653 22208 25922 27801 28139 28341 32524
int* bubble_sort(int n)
{
    int *p=(int*)malloc(n *sizeof(n));
    for(int i=0;i<n;i++)
    {
        cin>>*(p+i);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(*(p+i)>*(p+j))
            {
                swap(*(p+i),*(p+j));
            }
        }
    }
    return p;
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值