C言語で閏年を拾い出すプログラムを作成する方法
- C言語初心者の方に、1900年から2100年の間で閏年を拾い出し表示するプログラムの作成方法について解説します。
- 閏年とは、西暦年が4で割り切れる年であり、ただし100で割り切れる年は平年となります。さらに、しかし400で割り切れる年はまた閏年です。
- プログラムでは、forループを使用して1900年から2100年までの年を順番に調べます。条件式を使って4で割り切れる年と400で割り切れる年をピックアップし、結果を表示します。
- ベストアンサー
C言語で以下のようなプログラムを組むには
C言語で以下のようなプログラムを組むには C言語初心者です。 1900年~2100年で閏年になる年を拾い出し表示するプログラムを作成するにはどのようにすればよろしいのでしょうか? 1.西暦年が4で割り切れる年は閏年 2.ただし、西暦年が100で割り切れる年は平年 3.ただし、西暦年が400で割り切れる年は閏年 4で割り切れて100で割り切れない年と400で割り切れる年をピックアップすればよいので #include <stdio.h> int main(void) { int i, a, b; for(i = 1900; i<=2100; i++) !i % 4; printf("%d ", i); putchar('\n'); return (0); } ここまでは何となく思いついたのですが進めなくなっちゃいました。 よろしくお願いします。
- shorinji36
- お礼率83% (1150/1380)
- C・C++・C#
- 回答数2
- ありがとう数8
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じ? #include<stdio.h> int main(void) { int i; for(i = 1900; i<=2100; i++){ if(i%4 == 0){ if(i%100 == 0){ if(i%400 == 0){ printf("%d\n", i); } }else{ printf("%d\n", i); } } } return (0); }
その他の回答 (1)
- magicalpass
- ベストアンサー率58% (378/648)
コードを組む前に、日本語でフローチャートなりなんなり使ってロジックを考えてみましょう。 漠然と「4で割り切れて100で割り切れない年と400で割り切れる年」とかいうのじゃなく、それを実現するためにもっと細かくどう処理すれば良いかです。 ロジックが出来てからコードに置き換えてみましょう。 それから、上のコードでは「2101」が出力されるだけですよ。何故かは自分で考えてください。 あと、 > !i % 4; は何をしようとしているのか意味不明です。上のコードでは何の意味もなく、空文を書いてるのと同じで、単にループしてるだけです。
お礼
アドバイス有難うございます。 いまいちフローチャートとプログラムの関連性が見えてないんですよね。 頭のなかでプログラムの外観を作ってそれを行うにはって感じでプログラムを組むからいけないのかもしれません。
関連するQ&A
- C言語でこのプログラムを完成させるには
C言語でこのプログラムを完成させるには C言語初心者です。 1~6の乱数を100回発生させて、それぞれの出現回数をカウントし、ヒストグラムとして表示するプログラムを作成したいのですが上手くいきません。 #include <stdio.h> #include <time.h> #include <stdlib.h> int rnd(int m, int n) { return (int)(n-m+1)*(rand()/(RAND_MAX+0.1))+m; } int main(void) { int i, j, r; int hist[7]; for (i=1; i<7; i++) hist[i]=0; srand((unsigned)time(NULL)); for (i=0; i<100; i++) { r=6; while (6-- > 0) putchar('*'); putchar('\n'); } for (i=1; i<7; i++) { printf("%2d:", i); for (j=0; j<hist[i]; j++) printf("*"); printf("\n"); } return 0; } 何がいけないのでしょうか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語で分からないことがあります。
私は初心者で、ある参考書で下記の例が載っていたのですが、このプログラムで分からないことがあります。 #include<stdio.h> void nchar(int ch,int no) { while(no-->0) putchar(ch); } int main(void) { int i,ln; printf("何段ですか:");scanf("%d",&ln); for(i=1;i<=ln;i++){ nchar(' ',ln-i); nchar('*',i); putchar('\n'); } return 0; } まず、 ・nchar関数のnoは何を表しているのか? ・nchar関数のputchar(ch)は一体何を表しているのか? 参考書にはこのプログラムについてあまり説明が無くこの2点がよく分かりません。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語の代入についての質問です
C言語の代入についての質問です 下のプログラムを見て下さい #include<stdio.h> int x[2]; x[0] = x[1] = 1; int main(void) { for(int i = 0 ; i < 2 ; i++) printf("%d",x[i]); putchar('\n'); return 0 ; } このプログラムをコンパイラすると3行目の代入にエラーが出されます (当たり前ですがmainの中に3行目の代入文を入れると上手くいきます) まぁそれがなぜかというのが知りたいのですが、 それはC言語をつくった人が決めたことなのでしょうか? ちなみに異なる実行環境でやってみたらどれも駄目だったので これが上手くいくことはない?のだと思います そういうもんなのだったら、そういうものだと理解しますが もし理由を知っている方がいらっしゃったら教えて下さい
- ベストアンサー
- C・C++・C#
- C言語の問題です!!
C言語の問題です。次の問題でプログラムを作ってみたのですがどうでしょうか?もし小さな間違いであったら訂正をお願いします。全然違う場合はそのように回答してください。初心者なものでよろしくお願いします。 ・1~100までの整数値を画面に表示せよ. ただし,数値を10個表示するごとに改行すること. #include<stdio.h> int main(void){ int i,j; for(i=1;i<=100;i++){ for(j=1;j<=9;j++) printf("%3d",i+j); i=i+9; putchar("\n"); } return(0); }
- ベストアンサー
- C・C++・C#
- 2つのプログラムの違い
どうしても分からなかったので投稿しました。よろしくお願いします。 #include<stdio.h> int main(void) { int c; while((c=getchar())!=EOF){ putchar(c); } return 0; } のプログラムをコマンドプロンプトで入力すると、 abc abc なんですが、 #include<stdio.h> int main(void) { int c,i; i=0; while ((c=getchar())!=EOF) { putchar(c); i++; printf("%d\n",i); } return 0; } の場合、 abc a1 a2 a3 4 になります。 自分は abc a1 a2 a3 になると思ったのですが、a3と4の隙間と4は何故出て来たのでしょうか?
- ベストアンサー
- C・C++・C#
- C言語プログラムが理解できなくて…
C言語で中抜きの正方形を作れという問題だったのですが 解答を見ても解説は無く ちんぷんかんぷんで どこでどういう処理をして、こういった解答になるのかが分からないのです 特に教えていただきたいのが何故この文で白抜きの部分ができるのかという事です 初歩的な所だと思うのですがお恥ずかしながら質問させていただきます ちなみに解答はこうありました #include<stdio.h> void main() { int hen,i,j; do { printf("2~9の数字を入力"); scanf("%d",&hen); if(hen<2||hen>9) printf("エラー\n"); } while(hen<2||hen>9); for(i=1;i<=hen;i++) { for(j=1;j<=hen;j++) { if(i==1||i==hen) putchar('*'); else { if(j==1||j==hen) putchar('*'); else putchar(' '); } } putchar('\n'); } }
- ベストアンサー
- C・C++・C#
- 現在、私はC言語を学んでいます。
現在、私はC言語を学んでいます。 プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?
- ベストアンサー
- その他(インターネット・Webサービス)
- 基本的なプログラム
基本的なプログラム 学校の教科書に載っている問題がわかりません。 是非教えて下さい。 Cによる基本的な条件分岐(if,else if文)のプログラムです。 西暦年(4けたの整数)を入力し、その年がうるう年かどうかを判断するプログラムを作りなさい。 4で割り切れるときはうるう年であるが、100で割り切れるときはうるう年ではない。 しかし、400で割り切れればうるう年である。 ・・・とゆう問題文です。 #include<stdio.h> int main(void) { int x; printf("西暦を入力して下さい¥n"); scanf("%d",&x); if(x%4==0) printf("うるう年である¥n"); else if(x%400==0) printf("うるう年である¥n"); else if(x%100!==0) printf("うるう年でない¥n"); else printf("うるう年でない¥n"); return 0; } ・・・とりあえず自分で考えてみたのですがどうでしょうか; 間違ってると思いますが頑張って考えました・・・;; 4けたの整数ってゆうのはどう書けばいいんでしょうか? 実際にこのプログラムは動くのでしょうか? もっと省略して書くことができるのでしょうか? 等、色々わからないことばかりです。 プログラミングの授業自体に苦手意識を持っているので得意ではありません。 間違いなど指摘していただけたらと思います!! よろしくお願いします!
- ベストアンサー
- その他(インターネット・Webサービス)
- C言語習いはじめです
大学の講義でC言語を習い始めたのですが、if文でコンパイルするとどうしても解決できないエラーが起こってしまいます。 文の意味は 「4で割り切れる年は”閏年”また、400でも割り切れる年も”閏年”と表示する。100で割り切れる年は”平年”と表示する」 というものです。値は2100で指定しています。 #include <stdio.h> main() { int y; printf(" y=2100; "); { if(y%400:0) { printf("a leap year \n"); {/* 閏年 */} } else if(y%100:0) { printf("a common year \n"); {/* 平年 */} } else if(y%40:0) { printf("a leap year \n"); {/* 閏年 */} } else { printf("a common year \n"); {/* 平年 */} } } return 0; } これをコンパイルすると、どうしても 「エラー E2377 ”ファイル名” 5: If文に ) がない(関数 main)」 と出てきてしまいます。 残るこのエラーだけが解決できません。どなたか、間違っている点がわかる方はいませんでしょうか。お願いします。
- 締切済み
- C・C++・C#
お礼
回答有難うございます。 解答を見て初めてこうするのかと気付かされました。