質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

3126閲覧

1次元配列(全ての組み合わせの2組の数同士の掛け算)

Bordeaux

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/06/06 09:13

5つの整数a0〜a4をキーボードから入力し、すべての組み合わせの2組の数同士の掛け算ai×aj(i.j=0.1.2.3.4)を計算するプログラムを作成せよ

scanfを用いて値を入力することはできたんですが、掛け算の表示の仕方がわかりません。

よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

scanfは色んな意味で危険な関数なのでfgetsを使いましょう。

表示結果を表のようにしました。

C

1#include <stdio.h> 2#include <stdlib.h> 3 4#define BUFSIZE 256 5#define MAX_NUMBER 5 6 7int main(void) 8{ 9 char buf[BUFSIZE]; 10 int a[MAX_NUMBER]; 11 int i,j; 12 13 for(i = 0; i < MAX_NUMBER; i++){ 14 fgets(buf,sizeof(buf),stdin); 15 a[i] = atoi(buf); 16 } 17 18 for(i = 0; i < MAX_NUMBER + 1; i++){ 19 for(j = 0; j < MAX_NUMBER + 1; j++){ 20 if(i == 0 && j == 0){ 21 printf(" / "); 22 } 23 else if(i == 0){ 24 printf("%2d ",j); 25 } 26 else if(j == 0){ 27 printf("%2d ",i); 28 } 29 else{ 30 printf("%2d ",a[i - 1] * a[j - 1]); 31 } 32 } 33 printf("\n"); 34 } 35 36 return 0; 37}

<入力>

1 2 3 4 5

<結果>

/ 1 2 3 4 5 1 1 2 3 4 5 2 2 4 6 8 10 3 3 6 9 12 15 4 4 8 12 16 20 5 5 10 15 20 25

投稿2018/06/06 09:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「すべての組み合わせの2組の数同士の掛け算」とありますので、素直に二重ループを書くのが手っ取り早いかと思います。

C

1int a[ 5 ]; 2 3/* ここでa[0]~a[4]をscanfする */ 4 5for( int i = 0; i < 5; i++ ) { 6 7 for( int j = 0; j < 5; j++ ) { 8 9 printf( "a%d * a%d = %d\n", i, j , a[ i ] * a[ j ] ); 10 11 } 12 13}

a0~a4は配列にした方が書きやすかったので変更しました。
どうしても個別の変数にしたければ、a[ i ]やa[ j ]の部分を書き換える必要があります。

// 以下、補足です。

a0~a4を個別の変数にするなら、下記のようにすれば良いかと思います。

C

1int a0, a1, a2, a3, a4; 2 3/* ここでa0~a4をscanfする */ 4 5for( int i = 0; i < 5; i++ ) { 6 7 for( int j = 0; j < 5; j++ ) { 8 9 int x; 10 switch( i ) { 11 12 case 0: x = a0; break; 13 case 1: x = a1; break; 14 case 2: x = a2; break; 15 case 3: x = a3; break; 16 case 4: x = a4; break; 17 18 } 19 20 int y; 21 switch( j ) { 22 23 case 0: y = a0; break; 24 case 1: y = a1; break; 25 case 2: y = a2; break; 26 case 3: y = a3; break; 27 case 4: y = a4; break; 28 29 } 30 31 printf( "a%d * a%d = %d\n", i, j , x * y ); 32 33 } 34 35}

投稿2018/06/06 09:23

編集2018/06/06 09:40
rtr1950x

総合スコア298

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問