ページ 11

何が間違え?

Posted: 2007年12月16日(日) 12:02
by なな
はじめまして。
プログラムの勉強をはじめたのですが、以下のコードに問題があるようです。
#include <stdio.h>

int main(void) {
	int i,j,sum,avg;

	puts("第一数値入力");
	scanf("%d",&i);
	puts("第二数値入力");
	scanf("%d",&j);

	sum=0;
	sum=i+j;
	
	avg=0;
	avg=sum/2;

	printf("合計:%d\n",sum);
	printf("平均:%d\n",avg);

	return 0;
}
コンパイルすると警告が出てしまいます。
avgに代入した値は使われていない。
sumに代入した値は使われていない。と・・・なぜでしょうか?

Re:何が間違え?

Posted: 2007年12月16日(日) 12:12
by box
> 	sum=0;

ここで0を代入しても、

> 	sum=i+j;

i + jの値で上書きしています。
そのため、「0という、sumに代入した値を使っていない」という警告が出ます。
というわけで、

> 	sum=0;

この文は不要です。avgについても同じです。

Re:何が間違え?

Posted: 2007年12月16日(日) 13:16
by なな
#include <stdio.h>

int main(void) {
	int i,j,k,max;

	puts("整数入力");
	scanf("%d",&i);
	puts("整数入力");
	scanf("%d",&j);
	puts("整数入力");
	scanf("%d",&k);

	max=i;

	if(max<j){
		max=j;
	}else if(max<k){
		max=k;
	}

	printf("最大値は%d:",max);

	return 0;
}
正常に動きません。if文のブロックが微妙ですよね?

本では、
if(max<j) max=j;
if(max<k) max=k;
となっているのですが、ブロックを使って書くとどうなるのかと思ってやってみました。
どこがおかしいのかご指摘下さい。

Re:何が間違え?

Posted: 2007年12月16日(日) 13:22
by box
> 正常に動きません。

どういう風に、正常に動きませんか?


先ほどの問題は解決しましたか?
先ほどの問題とは全く別の話ですので、
新しいトピックを立てられた方がよかったと思います。

Re:何が間違え?

Posted: 2007年12月16日(日) 13:28
by はな
boxさん先ほどはありがとうございました。

> > 正常に動きません。
>
> どういう風に、正常に動きませんか?
数値をiに1、jに2、kに3を入れたのですが、最大値が2になってしまいます。
>
>
> 先ほどの問題は解決しましたか?
はい!解決しました!
> 先ほどの問題とは全く別の話ですので、
> 新しいトピックを立てられた方がよかったと思います。
そうですね。申し訳ありませんでした。

Re:何が間違え?

Posted: 2007年12月16日(日) 13:31
by Hermit
if(max<j){       // ここが TRUE で、
		max=j;  // ここに来たら、
	}else if(max<k){ // else なので、次の if(max<k) は評価されない
		max=k;  // だからここに来ることはない
	}

if(max<j) が FALSE だったら if(max<k) は、評価されますが

Re:何が間違え?

Posted: 2007年12月16日(日) 13:36
by box
>ななさん


	if (max < j) max = j;
	if (max < k) max = k;

と、

	if (max < j) {
		max = j;
	}
	if (max < k) {
		max = k;
	}

とは等価です。しかし、

	if (max < j) {
		max = j;
	}
	else if (max < k) {
		max = k;
	}

とは等価ではありません。

Re:何が間違え?

Posted: 2007年12月16日(日) 16:48
by なな
Hermit、boxさんありがとうございます。無事解決しました。

今他のプログラムでまた悩んでいます・・・・。

三つの整数を読み込んで、三つとも等しいとき、「全て等しい」
二つの値が等しいとき「二つ等しい」、全て等しいとき「全て違う」
と表示するプログラムですが、if文のところがなんか違うような気がします。
一応プログラムは動いているのですが、どこかおかしいでしょうか?又、
もっとこうした方がいいというアドバイスがありましたら宜しくお願いします。
#include <stdio.h>

int main(void) {
	int i,j,k;
	
	puts("数値入力");
	scanf("%d",&i);
	puts("数値入力");
	scanf("%d",&j);
	puts("数値入力");
	scanf("%d",&k);

	if(i==j && j==k && j==i){
		puts("全て等しい");
	}else if(i==j || j==k){
		puts("二つ等しい");
	}else{
		puts("全て違う");
	}

	return 0;
}

Re:何が間違え?

Posted: 2007年12月16日(日) 17:11
by box
> 一応プログラムは動いているのですが、どこかおかしいでしょうか?

例えば、iが1, jが0, kが1のとき、本来は「二つ等しい」と
出力すべきところ、「全て違う」と出力してしまいます。

> 	}else if(i==j || j==k){

ここを修正する必要がありそうです。
それから、

> 	if(i==j && j==k && j==i){

最後の j==i は不要ですね。
最初の i==j と同じですから。

Re:何が間違え?

Posted: 2007年12月16日(日) 17:23
by なな
ず~と考えていますが、
}else if(i==j || j==k){
の部分が分かりません・・・・・。

Re:何が間違え?

Posted: 2007年12月16日(日) 17:27
by なな
ひらめきました!!
boxさんありがとうございます!!