Loading

计算某天是某年的第几天

考察C语言的结构体

  1 /**
  2  * Copyright (c) 1991 - 2016 Arvin Tang.
  3  * All rights reserved.
  4  *
  5  * 文件名称:谭浩强_C语言教程_第九章_用户自己建立数据类型_课后第1题
  6  * 简要描述:定义结构体变量,计算该日是本年中的第几天。注意闰年的问题
  7  *
  8  * 当前版本:1.0.0
  9  * 作    者:
 10  * 完成日期:2016-1-13
 11  * 修订说明:
 12  *
 13  * 取代版本:
 14  * 作    者:
 15  * 完成日期:
 16  * 修订说明:
 17  */
 18 
 19 /**
 20  * 版本说明:目前我们采用的版本号规则为:v x.y.z。如:v 1.2.43
 21  * x表示程序发生重大改动。通常为程序核心层的重大调整,程序极有可能不向后兼容。同时,y和z的数值会被重置为0。
 22  * y表示程序引入了新功能。
 23  * z表示修复程序的错误。
 24  */
 25 
 26 # include <stdio.h>
 27 //# include <malloc.h>
 28 # include <stdlib.h>//里含有exit()函数和malloc()函数
 29 
 30 typedef struct
 31 {
 32     int year;//
 33     int month;//
 34     int day;//
 35 }DATE;//定义日期结构体变量
 36 
 37 //函数声名
 38 int is_run(DATE);//闰年判断
 39 void date_export(int, DATE);//某天输出
 40 
 41 
 42 int main(int argc, char const *argv[])
 43 {
 44     DATE var;
 45 
 46     printf("请输入你要查询的日期:\n");
 47     printf("年:\n");
 48     scanf("%d", &var.year);
 49     printf("月:\n");
 50     scanf("%d", &var.month);
 51     printf("日:\n");
 52     scanf("%d", &var.day);
 53 
 54     int s = is_run(var);
 55     date_export(s, var);
 56 
 57     system("pause");
 58 
 59     return 0;
 60 }
 61 
 62 /**
 63  * 函数名称:闰年判断
 64  * 输入参数:
 65  * 输出参数:
 66  * 返 回 值:闰年返回真,平年返回假(闰年2月29天,平年2月28天)
 67  */
 68 int is_run(DATE var)
 69 {
 70     int temp = var.year;
 71 
 72     if ((temp % 4 == 0 && temp % 100 != 0) || temp % 400 == 0)
 73     {
 74         return 1;
 75     }
 76     else
 77     {
 78         return 0;
 79     }
 80 }
 81 
 82 /**
 83  * 函数名称:某天输出
 84  * 输入参数:
 85  * 输出参数:
 86  * 返 回 值:闰年返回真,平年返回假(闰年2月29天,平年2月28天)
 87  */
 88 void date_export(int s, DATE var)
 89 {
 90     int month = var.month;
 91     int day = var.day;
 92     int num;//定义天数
 93 
 94     if (s)
 95     {
 96         switch(month)
 97         {
 98             case 1 ://31天
 99             num = day;
100             break;
101             case 2 ://29天
102             num = 31 + day;
103             break;
104             case 3 ://31天
105             num = 60 + day;
106             break;
107             case 4 ://30
108             num = 91 + day;
109             break;
110             case 5 ://31
111             num = 121 + day;
112             break;
113             case 6 ://30天
114             num = 152 + day;
115             break;
116             case 7 ://31天
117             num = 182 + day;
118             break;
119             case 8 ://31天
120             num = 213 + day;
121             break;
122             case 9 ://30
123             num = 244 + day;
124             break;
125             case 10 ://31
126             num = 274 + day;
127             break;
128             case 11 ://30
129             num = 305 + day;
130             break;
131             case 12 ://31
132             num = 335 + day;
133             break;
134         }
135     }
136     else
137     {
138         switch(month)
139         {
140             case 1 ://31天
141             num = day;
142             break;
143             case 2 ://28天
144             num = 31 + day;
145             break;
146             case 3 ://31天
147             num = 59 + day;
148             break;
149             case 4 ://30
150             num = 90 + day;
151             break;
152             case 5 ://31
153             num = 120 + day;
154             break;
155             case 6 ://30天
156             num = 151 + day;
157             break;
158             case 7 ://31天
159             num = 181 + day;
160             break;
161             case 8 ://31天
162             num = 212 + day;
163             break;
164             case 9 ://30
165             num = 243 + day;
166             break;
167             case 10 ://31
168             num = 273 + day;
169             break;
170             case 11 ://30
171             num = 304 + day;
172             break;
173             case 12 ://31
174             num = 334 + day;
175             break;
176         }
177     }
178 
179     printf("你输入的日期是%d年中的第%d天\n", var.year,num);
180 }
View Code

欢迎大神,指教错误或者更简单的方法。

posted @ 2016-01-14 20:31  哈利路亚健儿奋起步伐  阅读(454)  评论(0编辑  收藏  举报