すべてのカテゴリ » 知識・教養・学問 » 知識・学問 » 数学・サイエンス

質問

終了

その年の元日から占う年までの日数を計算するプログラムを作ることになりまして、作ってみましたが、わけがわからなくなりました。
分かる方教えてください。
#include<stdio.h>
int main(void){
int date[]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,hi;
double sum;
printf("月を入力;");
scanf("%d",&date);
printf("日を入力:");
scanf("%d",&hi);
date[0]= 0;
date[1]= 0;
date[2]= 31;
date[3]= 59;
date[4]= 90;
date[5]= 120;
date[6]= 151;
date[7]= 181;
date[8]= 212;
date[9]= 243;
date[10]=273;
date[11]=304;
date[12]=334;
sum=0;
if((date>=0)&&(date<=12)){
switch(date){
case 1:
sum=hi+date[1];
printf("%lf\n",sum);
break;
case 2:
sum=hi+date[2];
printf("%lf\n",sum);
break;
case 3:
sum=hi+date[3];
printf("%lf\n",sum);
break;
case 4:
sum=hi+date[4];
printf("%lf\n",sum);
break;
case 5:
sum=hi+date[5];
printf("%lf\n",sum);
break;
case 6:
sum=hi+date[6];
printf("%lf\n",sum);
break;
case 7:
sum=hi+date[7];
printf("%lf\n",sum);
break;
case 8:
sum=hi+date[8];
printf("%lf\n",sum);
break;
case 9:
sum=hi+date[9];
printf("%lf\n",sum);
break;
case 10:
sum=hi+date[10];
printf("%lf\n",sum);
break;
case 11:
sum=hi+date[11];
printf("%lf\n",sum);
break;
case 12:
sum=hi+date[12];
printf("%lf\n",sum);
break;
default:
printf("エラー1\n");
break;
}
}else{
printf("エラー2");
}
}

  • 質問者:匿名
  • 質問日時:2011-12-31 18:45:37
  • 0

回答してくれたみんなへのお礼

無事に仕上げることができました。

ありがとうございました。

並び替え:

閏年も考慮したプログラムにして見ました。

#include <stdio.h>

int main(void){
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,year,month,day,bit;
int sum;
printf("年を入力:");
scanf("%d",&year);
printf("月を入力:");
scanf("%d",&month);
printf("日を入力:");
scanf("%d",&day);

if(year<2000){
printf("年エラー\n");
exit(1);
}
if((month<1)||(month>12)){
printf("月エラー\n");
exit(1);
}
if(day<1){
printf("日エラー\n");
exit(1);
}
if(year%4){ //閏年判定
bit=0;
}else{
if(year%100){
bit=1;
}else{
if(year%400){
bit=0;
}else{
bit=1;
}
}
}
//printf("bit=%d\n",bit);
if(month==2){
if(day>(days[1]+bit)){
printf("日エラー\n");
exit(1);
}
}else{
if(day>days[month-1]){
printf("日エラー\n");
exit(1);
}
}
sum=0;
for (i=1;i<month;i++){
if(i==1){
sum+=(days[i]+bit);
}else{
sum+=days[i];
}
}
sum=sum+day;
printf("%d日です\n",sum);
}

  • 回答者:匿名 (質問から2日後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

プログラミングで重要なのは、入力と期待する出力を明確にすることです。
作成方法も色々考えられますが、匿名さんの作成中のプログラムをベースに、少しだけ変更してみます。

分からなくなってしまった点を明確に書いてくるれると的を射た回答を得られる気がします。
ざっとプログラムを見た感じで1次回答してみます。

質問は、入力された月日を元旦から数えて、日数変換するでよろしいでしょうか?

まず、
①入力:入力された月日⇒占う日?
②出力:元旦から占う日?までの日数

int date[]={31,28,31,30,31,30,31,31,30,31,30,31};
⇒dateを月毎の日数にしたいようなので、配列の一番最初は、0を入力。

int date[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

date[0]= 0;
date[1]= 0;
date[2]= 31;
date[3]= 59;
date[4]= 90;
date[5]= 120;
date[6]= 151;
date[7]= 181;
date[8]= 212;
date[9]= 243;
date[10]=273;
date[11]=304;
date[12]=334;
⇒既に初期化宣言がされているので不要。
以下に、for文で加算する方法を記すので、削除してください。

//sum=0以下を記します。
//日数を入力
sum=hi;

if((date>0)&&(date<=12)){

for(i=1; i<date; i++)
sum += date[i];

}

else
{
printf("入力された月をチェックしてください。1~12が有効です\n");
return 0;
}

printf("%d\n",sum);
return 0;

}

日数もありえない数字が入る可能性もあるので、チェック機能を入れるのがいいと思いますが、変更している間に占う年が、うるう年って気もしてきて、力尽きました。
実家のため、コンパイラ、開発環境がないので、メモ帳でべた打ちです。構文エラーあるかもしれません。

  • 回答者:コゼニゲバ (質問から6時間後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る