Switch语句是C语言的几个分支结构
本次编程练习,是根据输入的今年的第几天,输出是 几月几日,星期几。
实现思路大致如下:
1.先读取系统时间,得知今年的年号,
2.根据年号获得今年的第一天是星期几
3.得知今年是否闰年
4.switch语句初始化今年每个月的天数(注意是否闰年对二月单独处理)
5 .for循环查询月份和当月的日期
6.计算星期几
7. 输出月日
8.switch 输出星期几
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
int leapYear(int y)
{
//return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
int r = 0;
if (y % 100 == 0)
{
//整百年数
if (y % 400 == 0) r = 1;
else r = 0;
}
else
{
//非整百年数
if (y % 4 == 0)r = 1;
else r = 0;
}
return r;
}
long firstDayOfYear(int y)
{
long n;
int i = 1;
n = y * 365;
for (i = 1; i < y; i++) {
if (leapYear(i))n += 1;
}
return n %= 7;//n=n%7;
}
int main()
{
int year;
char szCurrentDateTime[32];
time_t nowtime;
struct tm ptm;
int monthdays[12];
int isleapyear;
int diyitianxingqiji;
time(&nowtime);
localtime_s(&ptm,&nowtime);
sprintf_s(szCurrentDateTime, "M-%.2d-%.2d %.2d:%.2d:%.2d",
ptm.tm_year + 1900, ptm.tm_mon + 1, ptm.tm_mday,
ptm.tm_hour, ptm.tm_min, ptm.tm_sec);
//printf(szCurrentDateTime);
//得到当前年号
year = ptm.tm_year + 1900;
//一般方法是用4或400去除这一年的年份数,如果除得的商是整数而没有余数,那么这一年是闰年
isleapyear=leapYear(year);
diyitianxingqiji = firstDayOfYear(year);
printf("今年第一天是星期几=%d\n", diyitianxingqiji);
for (int i = 0; i < 12; i++)
{
switch (i)
{
case 0: monthdays[i] = 31;
break;
case 1: if (isleapyear==1)monthdays[i] = 29;
else monthdays[i] = 28;
break;
case 2: monthdays[i] = 31;
break;
case 3: monthdays[i] = 30;
break;
case 4: monthdays[i] = 31;
break;
case 5: monthdays[i] = 30;
break;
case 6: monthdays[i] = 31;
break;
case 7: monthdays[i] = 31;
break;
case 8: monthdays[i] = 30;
break;
case 9: monthdays[i] = 31;
break;
case 10: monthdays[i] = 30;
break;
case 11: monthdays[i] = 31;
break;
}
}
int dijiday;
printf("请输入需要查询的是今年第多少天\n");
scanf_s("%d", &dijiday);
int ztsh = 365;
if (isleapyear == 1)ztsh = 366;
if (dijiday < 1 || dijiday>ztsh)
{
printf("err input\n");
exit(0);
}
int monthx=0,dayx=0;
int weekx=0;
int sum = 0;
int oldsum = 0;
for (int i = 0; i < 12; i++)
{
sum = sum + monthdays[i];
if (sum >= dijiday)
{
monthx = i + 1;
dayx = dijiday - oldsum;
break;
}
oldsum = sum;
}
weekx = (diyitianxingqiji + dijiday-1) % 7;
printf("今年第%d天是 %d 月 %d 日 星期 ", dijiday, monthx, dayx);
switch (weekx)
{
case 0:printf("日\n");
break;
case 1:printf("一\n");
break;
case 2:printf("二\n");
break;
case 3:printf("三\n");
break;
case 4:printf("四\n");
break;
case 5:printf("五\n");
break;
case 6:printf("六\n");
break;
}
_getch();
}