1、输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{
int year, month, day, sum, leap;
printf("输入格式为:年-月-日\n");
scanf("%d-%d-%d", &year,&month,&day);
switch(month)
{
case 1:
sum = 0;
break;
case 2:
sum = 31;
break;
case 3:
sum = 59;
break;
case 4:
sum = 90;
break;
case 5:
sum = 120;
break;
case 6:
sum = 151;
break;
case 7:
sum = 181;
break;
case 8:
sum = 212;
break;
case 9:
sum = 243;
break;
case 10:
sum = 273;
break;
case 11:
sum = 304;
break;
case 12:
sum = 334;
break;
}
sum += day;
if(year%400 == 0 || (year%4 == 0 && year%100 != 0))
leap = 1;
else
leap = 0;
if(leap = 1 && month > 2)
sum++;
printf("这一天是这一年的第%d天" , sum);
return 0;
}
2、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母
#include<stdio.h>
int main()
{
char i,j;
printf("请输入第一个字母:\n");
scanf("%c",&i);
getchar();//scanf("%c",&j);的问题,第二次是读入的一个换行符,而不是输入的字符,因此需要加一个getchar() 吃掉换行符
switch(i)
{
case 'm':
printf("monday\n");
break;
case 'w':
printf("wednesday\n");
break;
case 'f':
printf("friday\n");
break;
case 't':
printf("请输入下一个字母\n");
scanf("%c",&j);
if (j=='u') {printf("tuesday\n");break;}
if (j=='h') {printf("thursday\n");break;}
case 's':
printf("请输入下一个字母\n");
scanf("%c",&j);
if (j=='a') {printf("saturday\n");break;}
if (j=='u') {printf("sunday\n"); break;}
default :
printf("error\n"); break;
}
return 0;
}
3、输入年号判断是否为闰年
/*
* .任意输入一个年份 判断是否为闰年
* 闰年:可以被400整除 或者 可以被4整除但是不能被100整除的年份
*/
#include <stdio.h>
int main(void)
{
int year;
printf("输入年号:");
scanf("%d",&year);
if(year<0)
{
printf("年号输入错误!\n");
return 1;
}
if(year%400==0 || (year%4==0&&year%100!=0))
{
printf("闰年.\n");
}
else
{
printf("非闰年.\n");
}
return 0;
}
4、从键盘上输入年份和月份,计算并输出这一年的这一月共有多少天
#include<stdio.h>
int main()
{
int y, n, s = 0;//定义变量
scanf("%d-%d", &y, &n);//输入年月
switch (n)//根据月份判断天数
{
case 1:s = 31; break;
case 2:s = 28; break;
case 3:s = 31; break;
case 4:s = 30; break;
case 5:s = 31; break;
case 6:s = 30; break;
case 7:s = 31; break;
case 8:s = 31; break;
case 9:s = 30; break;
case 10:s = 31; break;
case 11:s = 30; break;
case 12:s = 31; break;
}
if (n == 2)//判断闰年2月差异
{
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
s = 29;
else
s = 28;
}
printf("%d\n", s);
}
5、假设今天是星期日,编写一个程序,求2019天后是星期几
#include<stdio.h>
int main()
{
int n = 2019, d;//定义变量和常量
d = n % 7;//计算余数
switch (d)//选择星期
{
case 1:printf("星期一"); break;
case 2:printf("星期二"); break;
case 3:printf("星期三"); break;
case 4:printf("星期四"); break;
case 5:printf("星期五"); break;
case 6:printf("星期六"); break;
case 0:printf("星期日"); break;
}
}
6、计算两个日期之间的差值
#include<iostream>//主要头文件
#include<time.h>//包含struct tm 结构体,mktime 函数
using namespace std;
int main() {
int a, b, c, d, e, f, n;
struct tm y2k = { 0 };
struct tm y1k = { 0 };//初始化
double seconds;
cout << "请输入日期1:" << endl;
cin >> a >> b >> c;
cout << "请输入日期2" << endl;
cin >> d >> e >> f;
y2k.tm_year = a-1900;//年份必须是1900年之后
y2k.tm_mon = b-1;//月份的取值范围为【0,11】
y2k.tm_mday = c;//日期取值范围为【1,31】
y1k.tm_year = d-1900;
y1k.tm_mon = e-1;
y1k.tm_mday = f;
if (a > d)
seconds = difftime(mktime(&y2k), mktime(&y1k));//前面的时间戳要大于后面的时间戳作为end
if (a < d)
seconds = difftime(mktime(&y1k), mktime(&y2k));
if (a == d) {
if(b > e) seconds = difftime(mktime(&y2k), mktime(&y1k));
if(b < e) seconds = difftime(mktime(&y1k), mktime(&y2k));
if (b == e) {
if(c > f) seconds = difftime(mktime(&y2k), mktime(&y1k));
if(c < f) seconds = difftime(mktime(&y1k), mktime(&y2k));
if (c == f) seconds = difftime(mktime(&y2k), mktime(&y1k));
}
}
n = (int)seconds / 86400;//一天有86400秒
printf("%d", n);
return 0;
}
7、计算给定日期的周历(得到某天是周几)
#include "stdio.h"
void CaculateWeekDay(int y,int m, int d)
{
if(m==1||m==2) {
m+=12;
y--;
}
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
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;
}
}
int main()
{
int year=0,month=0,day=0;
printf("请输入日期:\n格式为:1900,1,1\n");
char temp = '1';
while (temp != '0')
{
scanf("%d,%d,%d",&year,&month,&day);
scanf("%c",&temp);
CaculateWeekDay(year,month,day);
printf("输入0退出,其他继续:");
scanf("%c",&temp);
}
}