计算某天是某年的第几天
考察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 }
欢迎大神,指教错误或者更简单的方法。