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件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
細かいつっこみ
> double a[LINE][COLUMN] ;
> scanf("%f", &a[i][j]);
scanfは使用方法をよく読んで正しくお使いください。
scanfで検索するといろいろと見つかります。
グローバル変数は基本的に使わないのが最近の主流。使うなら、目的と利用方法をはっきりさせること。
No.4
- 回答日時:
何をグローバル変数(あまり使わない方がいいとは思うけど)にするかによって
関数の仕様は異なります。
何をグローバル変数にしたいですか?
C言語では、「サブルーチン」という言い方はしません。すべて「関数」といいます。
「プロトタイプ宣言」というものはありますが、「プロトタイプ定義」というものはありません。
No.3
- 回答日時:
ANo.1は、質問者さんが望む「グローバル変数」を使っていないので、題意にそった回答ではありません。
それに、二次元配列aがどこにも宣言されてないと言うミスを犯しているので、質問者さんが混乱するだけ。
No.2
- 回答日時:
単純化したサンプル。
#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);
}
No.1
- 回答日時:
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]);
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4の倍数を論理演算で表す。。
-
10個出力で改行したいのですが...
-
hit&bolwのプログラミングがで...
-
defineで定数が置き換えられな...
-
strcmp
-
c言語 プログラム ピラミッド
-
コンパイルすると『breakの位置...
-
パスカルの三角形についてのCプ...
-
C言語での、年複利の計算方法...
-
if文がコンパイルエラーを起こ...
-
Cでオセロゲームプログラム
-
コンパイルエラーについて
-
困ってます!Cプログラミングに...
-
error C2143: 構文エラー : ';'...
-
C言語です このプログラミング...
-
平均合計偏差値標準偏差の出し方
-
Cプログラミングのアルゴリズム...
-
C言語についてです学籍番号、名...
-
円の面積を求めるプログラミン...
-
コマンドプロンプトがすぐ消える
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報