多次元配列を用いたプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
獅音

多次元配列を用いたプログラム

#1

投稿記事 by 獅音 » 6年前

C言語の課題で、
2人の学生の3科目の点数をキーボードから入力し、学生と科目、各々の合計点を求めるプログラムを作りなさい。ただし、配列を用いた集計を使うこととして、3行4列の二次元配列t[3][4]を考えなさい。
集計のための繰り返し処理は、while文の前判定型を使い、それ以外の処理(キーボードからの入力、画面出力など)には、for文を使うこと。

それで、作ったプログラムが
#include<stdio.h>
int main(void)
{
int i,j,test[4][5]
for(i=0;i<3;i++)
{
printf("学生%d:\n",i+1);
for(j=0;j<3;j++)
{
printf("科目%dの点数を入力して下さい:",j+1);
scanf("%d",&test[j]);
}
}
for(i=0;i<3,i++)
test[4]=0;
for(j=0;j<=4;j++)
test[3][j]=0;

i=0
while(i<3)
{
j=0;
while(j<=4)
{
if(j!=4)
test[4]+=test[j];
j++;
}
i++;
}
for(i=0;i<3;i++)
printf("学生%dの合計点:%d\n",i+1,test[4]);
for(j=0;j<4;j++)
printf("科目%dの合計点:%d\n",j+1,test[3][j])
printf("全試験の合計点:%d\n",test[4][5]);
return0;
}
なのですが、コンパイルを行ったら、
11: error: expected ‘;’ before ‘)’ token
11: error: expected statement before ‘)’ token
17: error: ‘test’ undeclared (first use in this function)
17: error: (Each undeclared identifier is reported only once
17: error: for each function it appears in.)
20: error: expected ‘;’ before ‘)’ token
26: error: expected ‘;’ before ‘while’
41: error: expected ‘;’ before ‘printf’
42: error: ‘return0’ undeclared (first use in this function)
と出てしまいます。
どう直せばいいか教えてください。
お願いします。

box
記事: 1739
登録日時: 9年前

Re: 多次元配列を用いたプログラム

#2

投稿記事 by box » 6年前

そもそも、
獅音 さんが書きました: 配列を用いた集計を使うこととして、3行4列の二次元配列t[3][4]を考えなさい。
この条件に対して
獅音 さんが書きました:

コード:

	int i,j,test[4][5]
こうやっている時点でアウトですね。この行の最後に来るはずのセミコロンを追加したとしても。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 9年前

Re: 多次元配列を用いたプログラム

#3

投稿記事 by non » 6年前

確かに。

コード:

	for(i=0;i<3;i++)
	{
		printf("学生%d:\n",i+1);
		for(j=0;j<3;j++)
		{
			printf("科目%dの点数を入力して下さい:",j+1);
			scanf("%d",&test[i][j]);
		}
	}
これだと学生が3人ですね。
non

獅音

Re: 多次元配列を用いたプログラム

#4

投稿記事 by 獅音 » 6年前

プリントの表があるんですが、それを見ると縦4横5行だったんですが、やはりt[3][4]の条件で、int i,j,t[3][4];でしょうか?

獅音

Re: 多次元配列を用いたプログラム

#5

投稿記事 by 獅音 » 6年前

訂正したプログラムが、
#include<stdio.h>
int main(void)
{
int i,j,t[3][4]
for(i=0;i<2;i++)
{
printf("学生%d:\n",i+1);
for(j=0;j<3;j++)
{
printf("科目%dの点数を入力して下さい:",j+1);
scanf("%d",&test[j]);
}
}
for(i=0;i<2,i++)
test[3]=0;
for(j=0;j<=3;j++)
test[2][j]=0;

i=0
while(i<2)
{
j=0;
while(j<=3)
{
if(j!=3)
test[3]+=test[j];
j++;
}
i++;
}
for(i=0;i<2;i++)
printf("学生%dの合計点:%d\n",i+1,test[3]);
for(j=0;j<3;j++)
printf("科目%dの合計点:%d\n",j+1,test[2][j])
printf("全試験の合計点:%d\n",test[2][3]);
return0;
}
です。
コンパイルエラーが
c:11: error: expected ‘;’ before ‘)’ token
c:11: error: expected statement before ‘)’ token
c:17: error: ‘test’ undeclared (first use in this function)
c:17: error: (Each undeclared identifier is reported only once
c:17: error: for each function it appears in.)
c:20: error: expected ‘;’ before ‘)’ token
c:26: error: expected ‘;’ before ‘while’
です。訂正よろしくお願いします。

box
記事: 1739
登録日時: 9年前

Re: 多次元配列を用いたプログラム

#6

投稿記事 by box » 6年前

獅音 さんが書きました:プリントの表があるんですが、それを見ると縦4横5行だった
そのプリントにどんな風に書いてあったかは、こちらにはわかりません。
課題の条件から、二次元配列の要素数は[3][4]である必要がある、と
判断しただけです。

そのプリントに書いてある4行5列の内容を示すことは可能ですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
usao
記事: 1564
登録日時: 6年前

Re: 多次元配列を用いたプログラム

#7

投稿記事 by usao » 6年前

何箇所か行末のセミコロン(;)がないので全体を見直してみてはいかがでしょうか.

獅音

Re: 多次元配列を用いたプログラム

#8

投稿記事 by 獅音 » 6年前

画像のはり方が分からないので、そのままでw
セミコロン打ったのはこれで大丈夫ですか?
#include<stdio.h>
int main(void)
{
int i,j,t[3][4];
for(i=0;i<2;i++)
{
printf("学生%d:\n",i+1);
for(j=0;j<3;j++)
{
printf("科目%dの点数を入力して下さい:",j+1);
scanf("%d",&t[j]);
}
}
for(i=0;i<2,i++)
t[3]=0;
for(j=0;j<=3;j++)
t[2][j]=0;

i=0
while(i<2)
{
j=0;
while(j<=3)
{
if(j!=3)
t[3]+=t[j];
j++;
}
i++;
}
for(i=0;i<2;i++)
printf("学生%dの合計点:%d\n",i+1,t[3]);
for(j=0;j<3;j++)
printf("科目%dの合計点:%d\n",j+1,t[2][j]);
printf("全試験の合計点:%d\n",test[2][3]);
return0;
}

獅音

Re: 多次元配列を用いたプログラム

#9

投稿記事 by 獅音 » 6年前

すみません、直しました!
#include<stdio.h>
int main(void)
{
int i,j,t[3][4];
for(i=0;i<2;i++)
{
printf("学生%d:\n",i+1);
for(j=0;j<3;j++)
{
printf("科目%dの点数を入力して下さい:",j+1);
scanf("%d",&t[j]);
}
}
for(i=0;i<2;i++)
t[3]=0;
for(j=0;j<=3;j++)
t[2][j]=0;

i=0
while(i<2);
{
j=0;
while(j<=3);
{
if(j!=3)
t[3]+=t[j];
j++;
}
i++;
}
for(i=0;i<2;i++)
printf("学生%dの合計点:%d\n",i+1,t[3]);
for(j=0;j<3;j++)
printf("科目%dの合計点:%d\n",j+1,t[2][j]);
printf("全試験の合計点:%d\n",t[2][3]);
return 0;
}
あとは、26行目のwhileがおかしいようなのですが、どこか間違っていますか?

box
記事: 1739
登録日時: 9年前

Re: 多次元配列を用いたプログラム

#10

投稿記事 by box » 6年前

獅音 さんが書きました:

コード:

	i=0
この文の最後にセミコロンがなくて、大丈夫ですか?
反対に、
獅音 さんが書きました:

コード:

	while(i<2);
		while(j<=3);
これらの最後にセミコロンがあって、大丈夫ですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

獅音

Re: 多次元配列を用いたプログラム

#11

投稿記事 by 獅音 » 6年前

ご指摘された箇所のセミコロンをなおして、コンパイルができたのですが、科目の合計点が0になってしまいます。
どこか間違っていますか?
#include<stdio.h>
int main(void)
{
int i,j,t[3][4];
for(i=0;i<2;i++)
{
printf("学生%d:\n",i+1);
for(j=0;j<3;j++)
{
printf("科目%dの点数を入力して下さい:",j+1);
scanf("%d",&t[j]);
}
}
for(i=0;i<2;i++)
t[3]=0;
for(j=0;j<=3;j++)
t[2][j]=0;

i=0;
while (i<2)
{
j=0;
while(j<=3)
{
if(j!=3)
t[3]+=t[j];
j++;
}
i++;
}
for(i=0;i<2;i++)
printf("学生%dの合計点:%d\n",i+1,t[3]);
for(j=0;j<3;j++)
printf("科目%dの合計点:%d\n",j+1,t[2][j]);
return 0;
}

アバター
みけCAT
記事: 6224
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 多次元配列を用いたプログラム

#12

投稿記事 by みけCAT » 6年前

t[2][j]に加算している部分がありませんね。
コードはcodeタグで囲んでいただけるとありがたいです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

獅音

Re: 多次元配列を用いたプログラム

#13

投稿記事 by 獅音 » 6年前

修正して、無事に表示できました!ありがとうございます。
教わったことを参考にしつつ復習して学びたいと思います。
今回はありがとうございました^^
また、何かありましたらご回答のほどをよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る