アプリ版:「スタンプのみでお礼する」機能のリリースについて

2つの行列の計算をサブルーチン関数とグローバル変数を使って行いたいのですが、サブルーチン関数を宣言する為の、プロトタイプ宣言やプロトタイプ定義や、グローバル変数など、
調べてもよく理解できません。

とりあえず、二次元配列を用いたソースコードを書いてみました。

(1)14行目と23行目からのfor文、(2)40行目と51行目と62行目からのfor文を1つにまとめて、最初のプロトタイプ宣言は
void 関数(double a[LINE][COLUMN] , double b{LINE][COLUMN] , double c[LINE][COLUMN]) ;
にすればいいと思うのですが、

その後は、どのようにすればいいのでしょうか?

あと、scanfも使って、aとbも入力できるようにしたいです。

1 #include <stdio.h>
2
3 #define LINE 3
4 #define COLUMN 3
5
6 int main(int argc, char *argv[])
7 {
8 double a[LINE][COLUMN] ;
9 double b[LINE][COLUMN] ;
10 double c[LINE][COLUMN] ;
11 int i ;
12 int j ;
13
14 for(i= 0;i < LINE ; i++)
15 {
16 for(j = 0 ; j<COLUMN ; j++)
17 {
18 printf("A[%d][%d]=", i+1 , j+1 );
19 scanf("%f", &a[i][j]);
20 }
21 }
22
23 for(i =0;i < LINE ; i++)
24 {
25 for(j = 0 ; j<COLUMN ; j++)
26 {
27 printf("B[%d][%d]=", i+1 , j+1 );
28 scanf(" %f", &b[i][j]);
29 }
30 }
31
32 for(i =0;i < LINE ; i++)
33 {
34 for(j = 0 ; j<COLUMN ; j++)
35 {
36 c[i][j] = a[i][j] + b[i][j] ;
37 }
38 }
39
40 printf("\n行列A:\n");
41 for(i =0;i < LINE ; i++)
42 {
43 for(j = 0 ; j<COLUMN ; j++)
44 {
45 printf("%10.5f" , a[i][j]) ;
46 }
47
48 printf("\n");
49 }
50
51 printf("\n行列B:\n");
52 for(i= 0;i < LINE ; i++)
53 {
54 for(j = 0 ; j<COLUMN ; j++)
55 {
56 printf("%10.5f" , b[i][j]) ;
57 }
58
59 printf("\n");
60 }
61
62 printf("\nC(和):\n");
63 for(i= 0;i < LINE ; i++)
64 {
65 for(j = 0 ; j<COLUMN ; j++)
66 {
67 printf("%10.5f" , c[i][j]) ;
68 }
69
70 printf("\n");
71 }
72 return 0 ;
73 }

A 回答 (5件)

細かいつっこみ


> double a[LINE][COLUMN] ;
> scanf("%f", &a[i][j]);

scanfは使用方法をよく読んで正しくお使いください。

scanfで検索するといろいろと見つかります。



グローバル変数は基本的に使わないのが最近の主流。使うなら、目的と利用方法をはっきりさせること。
    • good
    • 0

何をグローバル変数(あまり使わない方がいいとは思うけど)にするかによって


関数の仕様は異なります。
何をグローバル変数にしたいですか?

C言語では、「サブルーチン」という言い方はしません。すべて「関数」といいます。

「プロトタイプ宣言」というものはありますが、「プロトタイプ定義」というものはありません。
    • good
    • 0

ANo.1は、質問者さんが望む「グローバル変数」を使っていないので、題意にそった回答ではありません。



それに、二次元配列aがどこにも宣言されてないと言うミスを犯しているので、質問者さんが混乱するだけ。
    • good
    • 0

単純化したサンプル。



#include <stdio.h>

void sub1(void);
void sub2(void);

int a;
int b;

int main(int argc, char *argv[])
{
  sub1();
  sub2();
  return 0;
}

void sub1(void)
{
  printf("a,b?");
  scanf("%d,%d",&a,&b);
}

void sub2(void)
{
  printf("\na=%d,b=%d\n",a,b);
}
    • good
    • 0

void sub( double p[][COLUMN] ); // プロトタイプ宣言



int main(int argc, char *argv[])
{

sub( a );

}

void sub( double a[][COLUMN] ) // サブルーチン本体
{
for(i= 0;i < LINE ; i++)
{
for(j = 0 ; j<COLUMN ; j++)
{
printf("A[%d][%d]=", i+1 , j+1 );
scanf("%f", &a[i][j]);
}
}
}
    • good
    • 0

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