1~4维数组的动态构建实例

来源:互联网 发布:淘宝卖家小二电话 编辑:程序博客网 时间:2024/05/21 18:49

1~4维数组的动态构建实例
一维
  #include <stdio.h>

  #include <stdlib.h>

  int main()

  {

  int n1,i;

  int *array;

  puts("输入一维长度:");

  scanf("%d",&n1);

  array=(int*)malloc(n1*sizeof(int));//第一维

  for(i=0;i<n1;i++)

  {

  array[i]=i+1;

  printf("%d/t",array[i]);

  }

  free(array);//释放第一维指针

  return 0;

  }

二维
  #include <stdlib.h>

  #include <stdio.h>

  int main()

  {

  int n1,n2;

  int **array,i,j;

  puts("输入一维长度:");

  scanf("%d",&n1);

  puts("输入二维长度:");

  scanf("%d",&n2);

  array=(int**)malloc(n1*sizeof(int*)); //第一维

  for(i=0;i<n1; i++)

  {

  array[i]=(int*)malloc(n2* sizeof(int));//第二维

  for(j=0;j<n2;j++)

  {

  array[i][j]=i+j+1;

  printf("%d/t",array[i][j]);

  }

  puts("");

  }

  for(i=0;i<n1;i++)

  {

  free(array[i]);//释放第二维指针

  }

  free(array);//释放第一维指针

  return 0;

  }

三维
  #include <stdlib.h>

  #include <stdio.h>

  int main()

  {

  int n1,n2,n3;

  int ***array;

  int i,j,k;

  puts("输入一维长度:");

  scanf("%d",&n1);

  puts("输入二维长度:");

  scanf("%d",&n2);

  puts("输入三维长度:");

  scanf("%d",&n3);

  array=(int***)malloc(n1*sizeof(int**));//第一维

  for(i=0; i<n1; i++)

  {

  array[i]=(int**)malloc(n2*sizeof(int*)); //第二维

  for(j=0;j<n2;j++)

  {

  array[i][j]=(int*)malloc(n3*sizeof(int)); //第三维

  for(k=0;k<n3;k++)

  {

  array[i][j][k]=i+j+k+1;

  printf("%d/t",array[i][j][k]);

  }

  puts("");

  }

  puts("");

  }

  for(i=0;i<n1;i++)

  {

  for(j=0;j<n2;j++)

  {

  free(array[i][j]);//释放第三维指针

  }

  }

  for(i=0;i<n1;i++)

  {

  free(array[i]);//释放第二维指针

  }

  free(array);//释放第一维指针

  return 0;

  }

四维
  #include <stdlib.h>

  #include <stdio.h>

  int main()

  {

  int n1,n2,n3,n4;

  int ****array;

  int i,j,k,m;

  puts("输入一维长度:");

  scanf("%d",&n1);

  puts("输入二维长度:");

  scanf("%d",&n2);

  puts("输入三维长度:");

  scanf("%d",&n3);

  puts("输入四维长度:");

  scanf("%d",&n4);

  array=(int****)malloc(n1*sizeof(int***));//第一维

  for(i=0; i<n1; i++)

  {

  array[i]=(int***)malloc(n2*sizeof(int**)); //第二维

  for(j=0;j<n2;j++)

  {

  array[i][j]=(int**)malloc(n3*sizeof(int*)); //第三维

  for(k=0;k<n3;k++)

  {

  array[i][j][k]=(int*)malloc(n4*sizeof(int));//第四维

  for(m=0;m<n4;m++)

  {

  array[i][j][k][m]=i+j+k+m+1;

  printf("%d/t",array[i][j][k][m]);

  }

  puts("");

  }

  puts("");

  }

  puts("");

  }

  for(i=0;i<n1;i++)

  {

  for(j=0;j<n2;j++)

  {

  for(k=0;k<n3;k++)

  free(array[i][j][k]);//释放第四维指针

  }

  }

  for(i=0;i<n1;i++)

  {

  for(j=0;j<n2;j++)

  {

  free(array[i][j]);//释放第三维指针

  }

  }

  for(i=0;i<n1;i++)

  {

  free(array[i]);//释放第二维指针

  }

  free(array);//释放第一维指针

  return 0;

  }

动态扩充数组案例
  #include <stdio.h>

  #include <stdlib.h>

  int main()

  {

  int*n,*p;

  int i;

  n=(int*)calloc(1,sizeof(int));

  for(i=0;i<5000;i++)

  {

  n[i]=i+1;

  printf("%d/t",n[i]);

  p=(int*)realloc(n,(i+2)*sizeof(int));//动态扩充数组

  if(p!=NULL)

  n=p;

  else

  {

  puts("error!");

  return 0;

  }

  }

  free(n);

  return 0;

  }

消字母游戏精简版中的应用
预备知识
  (1)getch()

  函数原型: int getch(void);

  函数功能: 从控制台读取一个字符,但不显示在屏幕上。

  函数返回: 读取的字符。

  (2)rand()

  函数原型: int rand(void);

  函数功能: 随机函数, 产生0到32767间的随机整数(0到0x7fff之间)。

  函数返回: 随机整数

  所属文件: <stdlib.h>

  (3)srand()

  函数原型: void srand(unsigned seed);

  函数功能: 该函数和rand随机函数配合使用,产生随机数的起始发生数据。

  参数说明: seed为无符号整数。

  所属文件: <stdlib.h>

  (4)time()

  函数原型: time_t time(time_t *timer)

  函数功能: 得到机器的日历时间或者设置日历时间。

  函数返回: 机器日历时间。

  参数说明: timer=NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,

  time_t是一个long类型。

  所属文件: <time.h>

  (5)'/b'实现退格,即当前光标后退一格。

  (6)'/a'实现响铃,即执行时计算机会嘟一声。

  (7)得到随机数值范围在a~b(包含b)的方法:rand()%(b-a+1)+a;

代码
  #include <stdio.h>

  #include <conio.h>//getch()函数所需头文件

  #include <stdlib.h>//随机函数所需头文件

  #include <time.h>//time()函数所需头文件

  void clear(void)//此函数用以清除当前行

  {

  printf("/r /r");

  }

  void start(void)

  {

  puts("这是消单词游戏的精简版,还不会图像编程的人可以看一看");

  puts(" 由于没有引人数据库,所以此单词是模拟的。");

  puts("按任意键开始,按Esc键结束,按tab键重新开始:");

  puts(" 一旦输错,将发出声音警告,你必须重新输入。");

  puts(" 按任意键开始,按Esc键结束:");

  getch();

  }

  int main()

  {

  char*c_rand,*c_input;

  int i,j,N,n,space,N_rand;

  start();

  printf("/r你想消最多由多少个字母组成的单词?(输入数字(1-9)");

  n=getch();

  N=n-'0';//将输入的字符转换为整型数字

  clear();//清除当前行

  if(!((N>=1&&N<=9)||n==27))//27是键Esc的ASII值

  {

  printf("/r范围错误,请重新开始:");

  getch();

  exit(1);//异常退出

  }

  if(n==27)

  return 0;

  srand(time(NULL));//用来对随机函数初始化

  c_rand=(char*)malloc(N+1);

  c_input=(char*)malloc(N+1);

  while(1)

  {

  N_rand=rand()%N+1;//实现单词长度随机定义

  for(i=0;i<N_rand;i++)

  {

  c_rand[i]=(rand() ==0)?(rand()&+'A'):(rand()&+'a');//随机取个字母

  }

  c_rand[N_rand]='/0';

  //下面四行代码实现单词位置随机出现

  space=rand()P;

  putchar('/r');

  for(i=0;i<space;i++)

  putchar(' ');

  printf("%s",c_rand);

  for(i=0;i<N_rand;i++)

  {

  c_input[i]=getch();//用户输入

  if(c_input[i]=='/x1b')//"/x1b"代表的是Esc键

  break;

  //下面五行代码实现字母消失效果

  putchar('/r');

  for(j=0;j<space;j++)

  putchar(' ');

  for(j=0;j<=i;j++)

  putchar(' ');

  if(c_input[i]!=c_rand[i])

  {

  i=-1;

  putchar('/a');

  //下面四行代码代码字母重现效果

  putchar('/r');

  for(j=0;j<space;j++)

  putchar(' ');

  printf("%s",c_rand);

  }

  }

  if(c_input[i]=='/x1b')//"/x1b"代表的是Esc键

  break;

  }

  free(c_rand);

  free(c_input);

  return 0;

  }

 

原创粉丝点击