無題

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

無題

#1

投稿記事 by てる » 16年前

うるう年かどうかを判定するプログラムを作り、
動作を確認し正常に動いていることは確かなのですが、
プログラミングを始めたばかりなので、知識はあまりないのですが、
条件をしぼっていくのはこのような形でよろしいのでしょうか?
あと、見やすいプログラムへの改善点なども教えていただきたいです。

条件

4の倍数の年(4年毎)をうるう年
ただし100の倍数の年は平年
しかし400の倍数の年はうるう年

#include<stdio.h>

int main(void)
{
	int yy,a;
	do{

		printf("西暦を入力してください:");
		scanf_s("%d",&yy);

		if(yy<100){	
			if((yy % 4)==0)
				printf("%d年はうるう年です\n",yy);
			else 
				printf("%d年は平年です\n",yy);
		}
			else if((yy % 400)==0)
						printf("%d年はうるう年です\n",yy);
				 else if((yy % 100)==0)
							printf("%d年は平年です\n",yy);
					  else if((yy % 4)==0)
								printf("%d年はうるう年です\n",yy);
						   else	printf("%d年は平年です\n",yy);		

		printf("もう一度?Yes=1...No=0...");
		scanf_s("%d",&a);	//繰り返すか?

	}while(a);

	return 0;

}

hss12

Re:無題

#2

投稿記事 by hss12 » 16年前

良いと思いますが、最初のif(yy<100)はいらないような気がします。
見やすくするなら、else ifがどんどん右へ行ってしまっているので
縦をそろえたほうが良いです。また、このような場合は省略せず
すべてに{}をしっかり書いたほうが、見やすいかと思います。

冗長なので短くするなら、うるう年の場合をすべて書いてしまいます。
まず、400で割り切れるときは必ずうるう年なので||にします。
400で割り切れなくてうるう年の場合は、100で割り切れなく && 4で割り切れるときです。
それ以外はうるう年ではありません。
#include<stdio.h>

int main(void)
{
    int yy,a;
    do{
        printf("西暦を入力してください:");
        scanf_s("%d",&yy);

        if((yy % 400 == 0) || ((yy % 100 != 0) && (yy % 4 == 0)))
            printf("%d年はうるう年です\n",yy);
        else
            printf("%d年は平年です\n",yy);

        printf("もう一度?Yes=1...No=0...");
        scanf_s("%d",&a);	//繰り返すか?

    }while(a);
    return 0;
}

閉鎖

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