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

    技术2022-05-20  54

    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;

      }

     


    最新回复(0)