🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

Q&A

解決済

2回答

1555閲覧

Aizu Oneline JudgeでPEからぬけだせない

Courange

総合スコア17

C

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

0グッド

0クリップ

投稿2019/10/24 13:19

前提・実現したいこと

Aizu oneline judgeの問題Lesson - ITP1 ITP1_7_DでPEからぬけだせません

発生している問題・エラーメッセージ

PEからぬけだせない

該当のソースコード

C

1#include<stdio.h> 2int main(){ 3 int n,m,l; 4 int i,j,k; 5 int a[101][101],b[101][101],c[101][101]={0}; 6 /*入力部*/ 7 scanf("%d %d %d",&n,&m,&l); 8 for(i = 0;i < n;i++){ 9 for(j = 0;j < m;j++){ 10 scanf("%d",&a[i][j]); 11 } 12 } 13 for(i = 0;i < m;i++){ 14 for(j = 0;j < l;j++){ 15 scanf("%d",&b[i][j]); 16 } 17 } 18 /*出力部*/ 19 for (i = 0; i < n; i++){ 20 for(j = 0;j < l;j++){ 21 for(k = 0;k < m;k++)c[i][j] += a[i][k] * b[k][j]; 22 printf("%d",c[i][j]); 23 printf(" "); 24 } 25 printf("\n"); 26 } 27 return 0; 28} 29

補足情報(FW/ツールのバージョンなど)

Windows 10

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

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

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

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

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

guest

回答2

0

ベストアンサー

PE(Presentation Error)となるのは、各行の最後の要素の後に余計な空白文字が付いてしまっているのが原因と思います。
また、データc[][]がint型ですが、後半のテストパタンだと不十分なようです。

とりあえず、通ったコードを貼っておきます。

C

1#include<stdio.h> 2int main(){ 3 int n,m,l; 4 int i,j,k; 5 long int a[101][101],b[101][101],c[101][101]={0}; 6 /*入力部*/ 7 scanf("%d %d %d",&n,&m,&l); 8 for(i = 0;i < n;i++){ 9 for(j = 0;j < m;j++){ 10 scanf("%ld",&a[i][j]); 11 } 12 } 13 for(i = 0;i < m;i++){ 14 for(j = 0;j < l;j++){ 15 scanf("%ld",&b[i][j]); 16 } 17 } 18 /*出力部*/ 19 for (i = 0; i < n; i++){ 20 for(j = 0;j < l;j++){ 21 for(k = 0;k < m;k++)c[i][j] += a[i][k] * b[k][j]; 22 printf("%ld",c[i][j]); 23 printf((j + 1 < l)? " ": ""); 24 } 25 printf("\n"); 26 } 27 return 0; 28}

投稿2019/10/24 14:02

編集2019/10/24 14:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Courange

2019/10/24 14:39

#include<stdio.h> int main(){ int n,m,l; int i,j,k; int a[101][101],b[101][101]; long c[101][101]={0}; /*入力部*/ scanf("%d %d %d",&n,&m,&l); for(i = 0;i < n;i++){ for(j = 0;j < m;j++){ scanf("%d",&a[i][j]); } } for(i = 0;i < m;i++){ for(j = 0;j < l;j++){ scanf("%d",&b[i][j]); } } for (i = 0; i < n; i++){ for(j = 0;j < l;j++){ for(k = 0;k < m;k++)c[i][j] += a[i][k] * b[k][j]; printf("%ld",c[i][j]); if(j == n)break; printf(" "); } printf("\n"); } return 0; }
Courange

2019/10/24 14:40

こんな感じに直しました(インデントがなくてめちゃくちゃ見ずらいですね・・・) for (i = 0; i < n; i++){ for(j = 0;j < l;j++){ for(k = 0;k < m;k++)c[i][j] += a[i][k] * b[k][j]; printf("%ld",c[i][j]); if(j == n)break; printf(" "); } printf("\n"); } この部分で余計な空白はなくなっているはずなのですがどこかおかしいのでしょうか・・・
Courange

2019/10/24 15:15

えっと・・・ ()? と : の解説ってお願いできますか?
退会済みユーザー

退会済みユーザー

2019/10/24 15:24

三項演算子と呼ばれるやつで、(条件式)? 値1 : 値2 の形で書いて、条件式が真であれば値1を、偽であれば値2を使用することができます。
Courange

2019/10/24 15:52

丁寧に教えてくださり、ありがとうございました!
guest

0

n、m、l は整数ですが、行列の要素 A、B、C は、
整数とは限らないのではありませんか?
a, b, c を double の配列にして、scanf の %lf で
読み込み、printf の %g で出力すればどうなりますか?

投稿2019/10/24 13:52

kazuma-s

総合スコア8224

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

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

Courange

2019/10/24 14:03

行列にはサンプルインプットを見た感じすべて整数でした・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問