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;
}