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