c语言矩阵怎么写?

Python07

c语言矩阵怎么写?,第1张

方法1:直接定义10*10的数组,读取全部数据,再根据选择的行列数打印输出部分数据。

方法2:通过文件流指针的移动,跨过不需要的内容。(这里控制文件流指针可利用ftell和fseek函数来移动指定字节数)我是利用fscanf读取需要的内容,遇到需要跳行就用fgets来跳过。(注意常量参数根据自己需求修改)。

说明:边读取边打印输出,就不需要变量存储。我的代码是把读取出来的内容存放在三维数组中(文件内容你没指定,如是单纯数字,二维数组即可,我是作为字符串处理,故用三维数组。),数组是根据实际大小,动态申请,写成两个独立函数。

下面是代码:

#include <stdio.h>

#include <string.h>

#include <malloc.h>

#define MAXR 10//文件中矩阵最大行

#define MAXC 10//文件中矩阵最大列

#define MS 3//矩阵中元素字符串最大字符数(包含结束符号,不可小于实际内容)

#define MBUF 100//文件中一行最大字符数,可设置大一点

char ***getMem(int r,int c,int len)//动态申请一个三维数组

void freeMem(char ***datas,int r,int c)//释放数组空间

void showDatas(char ***datas,int r,int c)//打印输出结果

int main()

{

  int r=MAXR+1,c=MAXC+1,i=0,j=0

  char ***datas=NULL,str[3],buf[MBUF]

  FILE *fp=NULL

  printf("请输入要获取的行数和列数:\n")

  while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c)

  datas=getMem(r,c,MS)

  fp=fopen("C:\\test.data","r")

  if(!fp) return 1

  while(fscanf(fp,"%s",str)!=-1)

  {

      if(i<c) strcpy(datas[j][i],str),i++

      if(i==c)

      {

          if(!fgets(buf,sizeof(buf),fp)) break

          i=0,j++

      }

      if(j==r) break

  }

  showDatas(datas,r,c)

  freeMem(datas,r,c)

  return 0

}

void showDatas(char ***datas,int r,int c)

{

  int i,j

  for(i=0i<ri++,printf("\n"))

      for(j=0j<cj++)

          printf("%s ",datas[i][j])

  printf("\n")

}

void freeMem(char ***datas,int r,int c)

{

  int i,j

  if(!datas)

  {

      for(i=0i<ri++,free(datas[i]))

          for(j=0j<cj++)

              free(datas[i][j])

      free(datas)

  }

}

char ***getMem(int r,int c,int len)

{

  int i,j

  char ***datas=NULL,**dr=NULL

  datas=(char ***)malloc(sizeof(char **)*r)

  if(!datas) return NULL

  for(i=0i<ri++)

  {

      dr=(char **)malloc(sizeof(char *)*c)

      if(!dr) return NULL

      else

      {

          for(j=0j<cj++)

          {

              dr[j]=(char *)malloc(sizeof(char)*len)

              if(!dr[j]) return NULL

          }

          datas[i]=dr

      }

  }

  return datas

}

int

a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}这完全是举一个例子而已,没特别的意思,这用的是一个二维数组,可用循环求出最大值tc中显示不出汉字没什么影响,win-tc有中文运行环境,不过有些amd的cpu不支持,如果用c-free或vc++6.0的话就可以显示了。