何が間違え?

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

何が間違え?

#1

投稿記事 by なな » 16年前

はじめまして。
プログラムの勉強をはじめたのですが、以下のコードに問題があるようです。
#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に代入した値は使われていない。と・・・なぜでしょうか?

box

Re:何が間違え?

#2

投稿記事 by box » 16年前

> 	sum=0;

ここで0を代入しても、

> 	sum=i+j;

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

> 	sum=0;

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

なな

Re:何が間違え?

#3

投稿記事 by なな » 16年前

#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;
となっているのですが、ブロックを使って書くとどうなるのかと思ってやってみました。
どこがおかしいのかご指摘下さい。

box

Re:何が間違え?

#4

投稿記事 by box » 16年前

> 正常に動きません。

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


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

はな

Re:何が間違え?

#5

投稿記事 by はな » 16年前

boxさん先ほどはありがとうございました。

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

Hermit

Re:何が間違え?

#6

投稿記事 by Hermit » 16年前

if(max<j){       // ここが TRUE で、
		max=j;  // ここに来たら、
	}else if(max<k){ // else なので、次の if(max<k) は評価されない
		max=k;  // だからここに来ることはない
	}

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

box

Re:何が間違え?

#7

投稿記事 by box » 16年前

>ななさん


	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:何が間違え?

#8

投稿記事 by なな » 16年前

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;
}

box

Re:何が間違え?

#9

投稿記事 by box » 16年前

> 一応プログラムは動いているのですが、どこかおかしいでしょうか?

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

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

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

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

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

なな

Re:何が間違え?

#10

投稿記事 by なな » 16年前

ず~と考えていますが、
}else if(i==j || j==k){
の部分が分かりません・・・・・。

なな

Re:何が間違え?

#11

投稿記事 by なな » 16年前

ひらめきました!!
boxさんありがとうございます!!

閉鎖

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