コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Raro martini/B/No.9

/* rep12-4.c */
#include <stdio.h>

#define N 3             /* マクロ定義 */

union{
  float ab[N][N];       /* 列×3 */
  float xy[N][N];       /* 列×3 */
}op1,op2;               /* 行×3 */

void Initialization(int n)
{
  int i,j,k;           	/* roop counter */

  if(n==1)              /* 行列A(X),Bの初期化 */
    for(i=k=0;i<N;i++)
      for(j=0;j<N;j++,k++){
        op1.ab[i][j] = k+1;
        op2.ab[i][j] = k+4;
        if(op2.ab[i][j]>=10)
          op2.ab[i][j] = k-5;
      }
  else                  /* 行列(X,) Yの初期化 */
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
        if(op2.xy[i][j]>2)
          op2.xy[i][j]-=2;
        else
          op2.xy[i][j]+=7;
}

void function(int i,int f)
{
  if(i==1)              /* 関数記号を表示する */
    printf("%4c  ",f);
  else
    printf("%7c",NULL);

}

void put_plus(void)
{
  int i,j;              /* roop counter */

  for(i=0;i<N;i++){
    for(j=0;j<N;j++)
      printf("%2.0f",op1.ab[i][j]);
    function(i,'+');
    for(j=0;j<N;j++)
      printf("%2.0f",op2.ab[i][j]);
    function(i,'=');
    for(j=0;j<N;j++)   	/* 足し算 */
      printf("%2.0f ",op1.ab[i][j]+op2.ab[i][j]);
    printf("\n");
  }
}

void put_mult(void)
{
  int i,j,k;            /* roop counter */
  float sum=0;          /* 解答算出用 */

  for(i=0;i<N;i++){
    for(j=0;j<N;j++)
      printf("%2.0f",op1.xy[i][j]);
    function(i,'*');
    for(j=0;j<N;j++)
      printf("%2.0f",op2.xy[i][j]);
    function(i,'=');
    for(k=0;k<N;k++){  	/* 掛け算 */
      for(j=0;j<N;j++)
	sum+=(op1.xy[i][j]*op2.xy[j][k]);
      printf("%4.0f",sum);
      sum=0;
    }
    printf("\n");
  }
}

int main()
{
  Initialization(1);   	/* 初期化関数 1 */
  printf("%4c%6c%6c%6c%6c\n",'A','+','B','=','C');
  put_plus();           /* 足し算をする */
  Initialization(2);   	/* 初期化関数 2 */
  printf("\n%4c%6c%6c%6c%9c\n",'X','*','Y','=','Z');
  put_mult();           /* 掛け算をする */
  return 0;
}