プロが教える店舗&オフィスのセキュリティ対策術

ポインタを使って3×3の行列の足し算を行いたいです。mallocは習っていなくて、
関数宣言の形は
void add(int* a,int* b,int* result,int n);
の形で行いたいです。
また演算は一行ごとに行います。
関数の中では index syntax は使ってはいけません。
ー------------------
コードがわかりません。。
関数の中とはメイン関数も含めてなのでしょうか??
メイン関数でindex syntaxを使わずに、mallocも習った状態でできるのでしょうか。
コードの例と解説をお願いしたいです

A 回答 (2件)

3x3ってサイズがきまってるのに


何故nを渡すのだろう?

固定サイズなら

void(int *a, int *b, int * result)
{
int i;
for(i=0; i < 3*3; i++)
*(restlt + i) = *(a+i)+*(b+i);
}

で十分。

それとも正方行列のみのnxnの可変サイズ版を作れって話?
いや3x3=9=n かな?

要件曖昧。

>関数の中とはメイン関数も含めてなのでしょうか??

こんなこと聞くってことは
これ、宿題か演習?

そんなこと聞かれても解るわけないから
教官だか先生に聞こう。
そもそもaddの外の実装も必要?
    • good
    • 0

#include <stdio.h>


#include <stdlib.h>

void add(int* a, int* b, int* result, int n) {
 for (int i = 0; i < n * n; i++) {
  *(result + i) = *(a + i) + *(b + i);
 }
}

int main(void) {
 int x[9] = {0}, y[9] = {0}, result[9] = {0}, n = 3;
 char s[5];

 puts("input first Matrix:");
 for (int i = 0; i < n * n; i++) {
  scanf("%4s%*[^\n]", s);
  getchar();
  *(x + i) = strtol(s, NULL, 10);
 }

 puts("input second Matrix:");
 for (int i = 0; i < n * n; i++) {
  scanf("%4s%*[^\n]", s);
  getchar();
  *(y + i) = strtol(s, NULL, 10);
 }

 add(x, y, result, n);

 for (int i = 0; i < n * n; i++) {
  if (i != 0 && i % 3 == 0) { puts(""); }
   printf("%d ", *(result + i));
 }
 puts("");

 return EXIT_SUCCESS;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!