ページ 11

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

Posted: 2013年7月03日(水) 22:26
by 獅音
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)
と出てしまいます。
どう直せばいいか教えてください。
お願いします。

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

Posted: 2013年7月03日(水) 22:32
by box
そもそも、
獅音 さんが書きました: 配列を用いた集計を使うこととして、3行4列の二次元配列t[3][4]を考えなさい。
この条件に対して
獅音 さんが書きました:

コード:

	int i,j,test[4][5]
こうやっている時点でアウトですね。この行の最後に来るはずのセミコロンを追加したとしても。

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

Posted: 2013年7月03日(水) 22:38
by non
確かに。

コード:

	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人ですね。

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

Posted: 2013年7月03日(水) 22:41
by 獅音
プリントの表があるんですが、それを見ると縦4横5行だったんですが、やはりt[3][4]の条件で、int i,j,t[3][4];でしょうか?

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

Posted: 2013年7月03日(水) 22:50
by 獅音
訂正したプログラムが、
#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’
です。訂正よろしくお願いします。

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

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

そのプリントに書いてある4行5列の内容を示すことは可能ですか?

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

Posted: 2013年7月03日(水) 22:53
by usao
何箇所か行末のセミコロン(;)がないので全体を見直してみてはいかがでしょうか.

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

Posted: 2013年7月03日(水) 23:00
by 獅音
画像のはり方が分からないので、そのままで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: 多次元配列を用いたプログラム

Posted: 2013年7月03日(水) 23:07
by 獅音
すみません、直しました!
#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がおかしいようなのですが、どこか間違っていますか?

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

Posted: 2013年7月03日(水) 23:12
by box
獅音 さんが書きました:

コード:

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

コード:

	while(i<2);
		while(j<=3);
これらの最後にセミコロンがあって、大丈夫ですか?

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

Posted: 2013年7月03日(水) 23:19
by 獅音
ご指摘された箇所のセミコロンをなおして、コンパイルができたのですが、科目の合計点が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;
}

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

Posted: 2013年7月03日(水) 23:29
by みけCAT
t[2][j]に加算している部分がありませんね。
コードはcodeタグで囲んでいただけるとありがたいです。

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

Posted: 2013年7月03日(水) 23:35
by 獅音
修正して、無事に表示できました!ありがとうございます。
教わったことを参考にしつつ復習して学びたいと思います。
今回はありがとうございました^^
また、何かありましたらご回答のほどをよろしくお願いします。