はじめての C

以前 UNIX MAGAZINE 2002年11月号の「Cプログラミングの基礎」(山口英氏)をノートに書き写していたのを思い出した。
そのときは よくわからなかったが、今は 半分ぐらいなら理解できる。
それには 小さなプログラムコードが載っているので ちょっと いじってみることに . . .

  1. /* yoobi */
  2. #include
  3. int week_day(int yr, int mo, int dy);
  4. int mday[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  5. /* 各月の日数を初期化 */
  6. char *wday[7] = {"月","火","水","木","金","土","日"};
  7. /* 各曜日の初期化 */
  8. main()
  9. {
  10. int year, month, day;
  11. int x;
  12. char buf[64];
  13. printf("これは入力した年月日の曜日を表示するプログラムです。\n");
  14. printf("西暦で'年'を入力して下さい year = ");
  15. for ( ; scanf("%d", &year) != 1 ; ) {
  16. printf("整数で入力してネ year = ");
  17. scanf("%s", buf);
  18. }
  19. printf("'月'を入力して下さい month = ");
  20. for ( ; scanf("%d", &month) != 1 ; ) {
  21. printf("整数で オ ネ ガ イ(はあと) month = ");
  22. scanf("%s", buf);
  23. }
  24. printf("'日'を入力して下さい day = ");
  25. for ( ; scanf("%d", &day) != 1 ; ) {
  26. printf("整数だってば !! day = ");
  27. scanf("%s", buf);
  28. }
  29. x = week_day(year, month, day);
  30. printf("%d年 %d月 %d日は %s曜日になります。\n", year, month, day, wday[x]);
  31. }
  32. int week_day(int yr, int mo, int dy)
  33. {
  34. /* 1970年 1月 1日木曜日を起点として トータルの日数を計算 */
  35. int days /* 総日数 */
  36. int i;
  37. days = (yr - 1970) * 365 + (yr - 1968) / 4;
  38. /* 入力年までの日数を計算 */
  39. /* ウルウ年分の日数を加算 */
  40. if (yr % 4 == 0 && mo <= 2) {
  41. days = days - 1;
  42. }
  43. /*
  44. * 入力年がウルウ年の場合で 日付が 2月28日以前なら
  45. * 通常年と等しいので 1日分減らしておく
  46. */
  47. for (i = 1; i < mo; i++) {
  48. days = days + mday[i-1];
  49. }
  50. /* 入力月分を加算 (添字に注意) */
  51. days = days + dy - 1 + 3;
  52. /* 入力日数を加算 */
  53. /* 起点が 1日なので 1日分減らしておく */
  54. /* 起点が木曜日なので 3日分を加算 */
  55. return (days % 7);
  56. /* 関数の返り値は 配列 wday の添字 */
  57. }