#include<stdio.h>
#include<stdlib.h>
int
main()
{
int
*a=NULL,n,i
scanf("%d",&n)
a=(int
*)malloc(n*sizeof(int))
for(i=0i<n++i)
a[i]=i
for(i=0
i<n
++i)
printf("%d
",a[i])
free(a)
a=NULL
return
0
}
1定义指针。
2
使用malloc函数分配内存。
3
对数组进行访问即可。
对于一维动态数组,直接定义一维指针,并分配内存空间即可。
比如int类型的10个元素动态数组,写作
int
*a
a
=
(int
*)malloc(sizeof(int)
*
10)
如果是多维数组,需要从高维向低维逐层分配。如二维数组10*100空间。
int
**a
int
i
a
=
(int
**)
malloc(sizeof(int
*)
*
10)
//
先分配10个int*的空间。
for(i
=
0
i
<
100
i
++)
a[i]
=
(int
*)malloc(sizeof(int)
*
100)
//
对于每个int*,分配100个元素的空间。
#include <stdio.h>#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#define RND_MAX 100
#define RND_MIN 50
#define MAX 200
/*用于产生随机数*/
void GenData()
{
FILE *fp = fopen("Random.txt", "w")
int i
int mod = RND_MAX - RND_MIN
int num
if(fp==NULL) return
srand(time(NULL))
num = rand() % mod + RND_MIN
for(i=0i<MAXi++)
{
num = rand() % mod + RND_MIN
fprintf(fp, "%d,", num)
}
fprintf(fp, "%d", num)
fclose(fp)
}
void GetData(int *a, int n)
{
FILE *fp = fopen("Random.txt", "r")
int i
char x
int *p = a
if(fp==NULL) return
for(i=0 i<n && !feof(fp) i++)
fscanf(fp, "%d%c", p++, &x)
fclose(fp)
}
void Display(int *a, int n)
{
int i
for(i=0i<ni++)
{
printf("%d", a[i])
if(i%8 == 7) printf("\n")
else printf("\t")
}
printf("\n")
}
double GetAverage(int *a, int n)
{
int count = 0
int i
for(i=0 i<n i++) count += a[i]
return (double)count / n
}
int GetIndex2(int *a, int n, double x)
{
int index = n-1, i
double min = (a[index] - x) * (a[index] - x), pc
for(i=n-2i >= 0i--)
{
pc = (a[i] - x) * (a[i] - x) /* 保证偏差都是正数,以便于比较 */
if(min > pc)
{
index = i
min = pc
}
}
return index
}
int GetIndex1(int *a, int n, double x)
{
int index = 0, i
double min = (a[index] - x) * (a[index] - x), pc
for(i=1i<ni++)
{
pc = (a[i] - x) * (a[i] - x)
if(min > pc)
{
index = i
min = pc
}
}
return index
}
void main()
{
int * a = NULL, n, readNum, index
double aver
char c
/*GenData()*/ /*用于生成一个随机数的文件*/
while(1)
{
printf("请输入元素个数(0退出):")
readNum = scanf("%d", &n)
if(readNum == 1)
{
if(n == 0) break
if(a)
{
free(a)
a = NULL
}
a = (int *)malloc(sizeof(int) * n)
GetData(a, n)
printf("原始数据:\n")
Display(a, n)
aver = GetAverage(a, n)
printf("平均值: %.6f\n", aver)
index = GetIndex1(a, n, aver)
printf("与平均值最接近的下标最小的元素:a[%d] = %d\n", index, a[index])
index = GetIndex2(a, n, aver)
printf("与平均值最接近的下标最大的元素:a[%d] = %d\n", index, a[index])
}
else
{
printf("输入错误,请输入一个数字!\n")
while((c = getchar()) != '\n' && c != EOF) /*清除输入缓冲*/
}
}
}