PTA-数组进阶之动态数组

6-1 实数数组 - 创建

作者 李祥

单位 湖北经济学院

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

函数原型
void ArrayCreate(double **array, int size);

说明:array 为指向存储动态数组起始地址的指针的指针,size 为数组尺寸。函数为动态数组分配内存空间,若成功,则将动态数组起始地址保存到 array 所指的指针中。若失败,则报告错误,程序强行结束,程序的出口代码为 1。具体错误信息如下:

  • 若 size 的值过小(小于等于 0),则显示错误信息:“Incorrect size!”。
  • 若 size 的值过大(超出可用内存),则显示错误信息:“Not enough memory!”。
裁判程序

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

说明:ArrayInput 函数输入数组,ArrayOutput 函数输出数组。

提示:调用 C 库函数中的 malloc 函数来分配内存,调用 exit 函数强行结束程序。

输入样例1
3
18.2, 64.7, 39.5

输出样例1
18.2, 64.7, 39.5
Exit code: 0

输入样例2
0

注:“Exit code: 0” 表示检测到的程序出口代码为 0,不必理会(下同)。

输出样例2
Incorrect size!
Exit code: 1

输入样例3
1000000

输出样例3
Not enough memory!
Exit code: 1

关联习题:实数数组-销毁、实数数组-输入、实数数组-输出。

解答:

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 动态数组

作者 风林

单位 包头师范学院

本题要求实现一个函数:生成一个长度为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 实数数组 - 销毁

作者 李祥

单位 湖北经济学院

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

函数原型
void ArrayDestroy(double **array);

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

裁判程序

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

说明:ArrayCreate 函数创建动态数组,ArrayInput 函数输入数组,ArrayOutput 函数输出数组。

提示:调用 C 库函数中的 free 函数来回收内存。

输入样例
3
18.2, 64.7, 39.5

输出样例
18.2, 64.7, 39.5

关联习题:实数数组-创建、实数数组-输入、实数数组-输出。

解答:

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

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

作者 李廷元

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

编程实现冒泡排序函数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;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值