ページ 11

質問です

Posted: 2009年9月17日(木) 03:01
by HAL
URLのが宿題です。

大学の宿題なのですが、水道料金の使用料金について

一応プログラムを作成しました。

添付ファイルです。しかし

if文の使い方がいまいち分からなく、うまく起動しているか分かりません。

大学ではC言語について変数やifや演算式を習いました。

よろしくお願いします。

Re:質問です

Posted: 2009年9月17日(木) 06:53
by でんすけ
なにをどうする宿題なんですか?

Re:質問です

Posted: 2009年9月17日(木) 07:07
by toyo
y = x / 2 + 0.5 ; //使用量の分割//
z = x / 2 - 0.5 ;
分割するのはなぜでしょうか
xが18だとyが9.5でzが8.5になるのでどのif文にもあてはまらなくなります

Re:質問です

Posted: 2009年9月17日(木) 07:28
by でんすけ
#include <stdio.h>
int main(void)
{
	int  x,a,b,ryokin1,ryokin2,ryokin;	//xが使用量 ryoukin が最終的な料金//
	double y,z;
	while( 1 )
	{
		printf("使用量は?");
		scanf("%d",&x);

		y = x / 2 + 0.5 ;		//使用量の分割//
		z = x / 2 - 0.5 ;
		
		if(y<=9 , z<=9){			//使用料が9以下のとき//
			a=0;
			b=0;
		}	

		else if( ( 9<=y && y<=15 ) , ( 9<=z && z <=15) )
		{				//使用料が9以上15以下のとき//
			a = (15 - (int)y) * 75;
			b = (15 - (int)z) * 75;
		}

		else if( (16<=y && y<=20 ) , (16<=z && z<=20 ) )
		{				//使用料が16以上20以下のとき//
			a = 525 + ((int)y - 15) ;
			b = 525 + ((int)z - 15) ; 
		}

		else if( ( 21<=y && y<=30) , ( 21<=z && z<=30 ) )
		{				//使用料が21以上30以下のとき//
			a = 525 + 400 + ((int)y - 20) ;
			b = 525 + 400 + ((int)z - 20) ; 
		}
		
		else if( ( 31<=y && y<=50 ) , ( 31<=z && z<=50) )
		{				//使用料が31以上50以下のとき//
			a = 525 + 400 + 900 + ( (int)y - 30);
			b = 525 + 400 + 900 + ( (int)z - 30); 
		}

		else if( ( 51<=y && y<=100 ) , ( 51<=z && z<=100 ) )
		{				//使用料が51以上100以下のとき//
			a = 525 + 400 + 900 + 2000 + ( (int)y - 50  );
			b = 525 + 400 + 900 + 2000 + ( (int)z - 50  ); 
		}

		else if( ( 101<=y && y<=300 ) , ( 101<=z && z<=300 ) )
		{				//使用料が101以上300以下のとき//
			a = 9825 + ( (int)y - 100);
			b = 9825 + ( (int)z - 100); 
		}

		else if( ( 301<=y && y<=1000 ) , ( 301<=z && z<=1000 ) )
		{				//使用料が301以上1000以下のとき//
			a = 35825 + ( (int)y - 300);
			b = 35825 + ( (int)z - 300); 
		}

		else if( y>=1000 , z>=1000 )
		{				//使用料が1001以上//
			a = 144325 + ( (int)y - 1000);
			b = 144325 + ( (int)z - 1000); 
		}
		
		ryokin1 =  500 + a;		//料金半分1//
		ryokin2 =  500 + b;		//料金半分2//

		ryokin1 = (int)(ryokin1*1.05);	//消費税計算//
		ryokin2 = (int)(ryokin2*1.05);	//消費税計算//

		ryokin = ryokin1 + ryokin2;
		printf("水道料金は%d円です。\n",ryokin);
	}
	return 0;
}

Re:質問です

Posted: 2009年9月17日(木) 12:54
by non
使用量が、整数値に限るとは題意にないのですが、例からすれば、整数として考えろと言うことなのでしょうか?
さて、分割の式ですが、
int y,z; にして
y = x / 2.0 + 0.5 ;
z = x / 2 ;
ですね。
こういうのもありですか。
y = x / 2;
z = y + (x % 2);

さて、ifについては、少し、教科書を読んで、条件演算子を勉強した方がいいですね。
また、yとzの計算を一度にやってしまおうというのに、無理があります。
同じ事を、2回やるのだから、関数を習ったなら、使った方がいいし、習ってないなら、
同じ事を2回やるようにすべきでしょう。

Re:質問です

Posted: 2009年9月17日(木) 17:18
by HAL
ありがとうございます
if文では、yとzは一つ一つ考えた方がいいんですね。

ご指導がなかったら永久に分かりませんでした。

ほんとうに感謝です。