首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言回旋函数解释下,该如何处理

2012-06-07 
C语言回旋函数解释下给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上

C语言回旋函数解释下
给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
  A B C D E F G H

  V W X Y Z A B I

  U J K L M N C J

  T I H G F E D K

  S R Q P O N M L




#include <stdio.h>

void main()
{
  int M;
  int N;
  int flag=0;
  int num1=0;
  int num2=1;
  int i=0;
  int j=0;
  char str='A';
  char Array[31][31];
  printf("请输入矩阵的行M和矩阵的列N:");
  scanf("%d%d",&M,&N);
  Array[0][0]=str;
  while(flag < M*N-1)
  {
  switch(num2%4)
  {
  case 1:
  ++j;
  if(j == N-num1-1)
  {
  num2++;
  }
  break;
  case 2:
  ++i;
  if(i == M-num1-1)
  {
  num2++;
  }
  break;
  case 3:
  --j;
  if(j == num1)
  {
  num2++;
  }
  break;
  case 0:
  --i;
  if(i == num1+1)
  {
  num2++;
  num1++;
  }
  break;
  }

  if(++str == 'Z'+1)
  str='A';

  Array[i][j]=str;
  flag++;
   
 }

  for(i=0;i<M;i++)
  {
  for(j=0;j<N;j++)
  {
  printf("%c ",Array[i][j]);
  }
  printf("\n");

  }

}



  为什么是这个是什么意思啊?解释 谢谢啊 给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
  A B C D E F G H

  V W X Y Z A B I

  U J K L M N C J

  T I H G F E D K

  S R Q P O N M L




#include <stdio.h>

void main()
{
  int M;
  int N;
  int flag=0;
  int num1=0;
  int num2=1;
  int i=0;
  int j=0;
  char str='A';
  char Array[31][31];
  printf("请输入矩阵的行M和矩阵的列N:");
  scanf("%d%d",&M,&N);
  Array[0][0]=str;
  while(flag < M*N-1)
  {
  switch(num2%4)
  {
  case 1:
  ++j;
  if(j == N-num1-1)
  {
  num2++;
  }
  break;
  case 2:
  ++i;
  if(i == M-num1-1)
  {
  num2++;
  }
  break;
  case 3:
  --j;
  if(j == num1)
  {
  num2++;
  }
  break;
  case 0:
  --i;
  if(i == num1+1)
  {
  num2++;
  num1++;
  }
  break;
  }

  if(++str == 'Z'+1)
  str='A';

  Array[i][j]=str;
  flag++;
   
 }

  for(i=0;i<M;i++)
  {
  for(j=0;j<N;j++)
  {
  printf("%c ",Array[i][j]);
  }
  printf("\n");

  }

}



这个是什么意思啊?解释 谢谢啊 给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
  A B C D E F G H

  V W X Y Z A B I

  U J K L M N C J

  T I H G F E D K

  S R Q P O N M L




#include <stdio.h>



void main()
{
  int M;
  int N;
  int flag=0;
  int num1=0;
  int num2=1;
  int i=0;
  int j=0;
  char str='A';
  char Array[31][31];
  printf("请输入矩阵的行M和矩阵的列N:");
  scanf("%d%d",&M,&N);
  Array[0][0]=str;
  while(flag < M*N-1)
  {
  switch(num2%4)
  {
  case 1:
  ++j;
  if(j == N-num1-1)
  {
  num2++;
  }
  break;
  case 2:
  ++i;
  if(i == M-num1-1)
  {
  num2++;
  }
  break;
  case 3:
  --j;
  if(j == num1)
  {
  num2++;
  }
  break;
  case 0:
  --i;
  if(i == num1+1)
  {
  num2++;
  num1++;
  }
  break;
  }

  if(++str == 'Z'+1)
  str='A';

  Array[i][j]=str;
  flag++;
   
 }

  for(i=0;i<M;i++)
  {
  for(j=0;j<N;j++)
  {
  printf("%c ",Array[i][j]);
  }
  printf("\n");

  }

}

这个是什么意思啊?解释 谢谢啊 为什么是对4求余??分情况什么意思?

[解决办法]
这算法主要是由switch中的4种情况来i实现的。
 case 1:
是对num1行从左往右顺序输入,当输入到N-num1-1列时,就转入case2.
case2 是对N-num1-1列从上往下顺序输入,直到第M-num1-1行,就转入case3;
case3就是对M-num1-1行从右往左顺序输入,直到回到num1列,然后转入case0,
case0是对num1列从下往上顺序输入,回到num1+1行,这样完成旋转一周。所以分了四种情况
case0中num2++是为了回到case1,num1++是在内一层继续实现旋转一周。
刚开始num1=0,然后随着num1的加1,逐渐沿着内层排列。
flag < M*N-1作为判断数组是否输完的条件

热点排行