码迷,mamicode.com
首页 > 其他好文 > 详细

函数应用,在控制台输出用户的输入日历

时间:2016-12-12 01:34:34      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:;;   rom   tca   ntc   stdio.h   输出   某年   calendar   span   

#include<stdio.h>

//获取用户输入的年份(1900-2100

#include<stdio.h>

//获取用户输入的年份(1900-2100),如果用户输入不正确,则提示重新输入
int getUserInputYear(void){
printf("请你输入一个年份(1900-2100):");
int year;
while(scanf("%d",&year)==0 || year<1900 || year>2100){
printf("输入错误,请重新输入:");
fflush(stdin);
}
return year;
}

//获取用户输入的月份(1-12),如果用户输入不正确,则提示重新输入
int getUserInputMonth(void){
printf("请你输入一个月份(1-12):");
int yue;
while(scanf("%d",&yue)==0 || yue<1 || yue>12){
printf("输入错误,请重新输入:");
fflush(stdin);
}
return yue;
}

//判断一个年份是不是闰年
int isLeap(int year){
if((year%4==0&&year%100!=0) || year%400==0){
return 1; //是闰年
}
else{
return 0; //不是闰年
}
}

//得到某年的天数
int getDaysOfYear(int year){
int tianshu;
if(isLeap(year)==1){
tianshu=366;
}
else{
tianshu=365;
}
return tianshu;
}

//得到某年某月的天数
int getDaysOfMonth(int year, int month){
int day;
int a = month;
if(a==1|| a==3 || a==5 || a==7 || a==8 || a==10 || a==12){
day=31;
}
else if(a==2 && isLeap(year)==1){
day=29;
}
else if(a==2 && isLeap(year)!=1){
day=28;
}
else{
day=30;
}
return day;
}

//根据提供的年月日,得到这一天是这一年的第几天
int getDaysInYear(int year, int month, int day){
int sum=0;
for(int i=1;i<month;i++){
int num = getDaysOfMonth(year,i);
sum +=num;
}
return sum+day;
}

//根据提供的年月日,计算从1900-1-1号到这一天经过的天数
int getCrossDaysFrom1900(int year, int month, int day){
int Sum = 0;
for(int i=1900;i<year;i++){
Sum += getDaysOfYear(i);
}
Sum += getDaysInYear(year,month,day); //year当年的 这一天的天数
return Sum-1;
}

//计算某一天是星期几(已知1900-1-1号是星期一)
int getDayOfWeek(int year, int month, int day){
int W = getCrossDaysFrom1900(year,month,day)%7;
return W+1;
}

//在控制台中输出某个月的日历
void printCalendar(int year, int month){
printf("====================================================\n");
printf(" 一 \t 二 \t 三 \t 四 \t 五 \t 六 \t 日 \n");

for(int k=1;k<=(getDayOfWeek(year,month,1)-1);k++){ //前面空格显示;
printf("\t");
}
int a=getDaysOfMonth(year,month); //遍历输出天数;
for(int i=1;i<=a;i++){
printf(" %d\t",i);
if(getDayOfWeek(year,month,i)==7){ //换行;
printf("\n");
}
}
printf("\n");
printf("====================================================\n");
}

int main (void){


int a = getUserInputYear();
int b = getUserInputMonth();
printCalendar(a,b);

}

),如果用户输入不正确,则提示重新输入
int getUserInputYear(void){
printf("请你输入一个年份(1900-2100):");
int year;
while(scanf("%d",&year)==0 || year<1900 || year>2100){
printf("输入错误,请重新输入:");
fflush(stdin);
}
return year;
}

//获取用户输入的月份(1-12),如果用户输入不正确,则提示重新输入
int getUserInputMonth(void){
printf("请你输入一个月份(1-12):");
int yue;
while(scanf("%d",&yue)==0 || yue<1 || yue>12){
printf("输入错误,请重新输入:");
fflush(stdin);
}
return yue;
}

//判断一个年份是不是闰年
int isLeap(int year){
if((year%4==0&&year%100!=0) || year%400==0){
return 1; //是闰年
}
else{
return 0; //不是闰年
}
}

//得到某年的天数
int getDaysOfYear(int year){
int tianshu;
if(isLeap(year)==1){
tianshu=366;
}
else{
tianshu=365;
}
return tianshu;
}

//得到某年某月的天数
int getDaysOfMonth(int year, int month){
int day;
int a = month;
if(a==1|| a==3 || a==5 || a==7 || a==8 || a==10 || a==12){
day=31;
}
else if(a==2 && isLeap(year)==1){
day=29;
}
else if(a==2 && isLeap(year)!=1){
day=28;
}
else{
day=30;
}
return day;
}

//根据提供的年月日,得到这一天是这一年的第几天
int getDaysInYear(int year, int month, int day){
int sum=0;
for(int i=1;i<month;i++){
int num = getDaysOfMonth(year,i);
sum +=num;
}
return sum+day;
}

//根据提供的年月日,计算从1900-1-1号到这一天经过的天数
int getCrossDaysFrom1900(int year, int month, int day){
int Sum = 0;
for(int i=1900;i<year;i++){
Sum += getDaysOfYear(i);
}
Sum += getDaysInYear(year,month,day); //year当年的 这一天的天数
return Sum-1;
}

//计算某一天是星期几(已知1900-1-1号是星期一)
int getDayOfWeek(int year, int month, int day){
int W = getCrossDaysFrom1900(year,month,day)%7;
return W+1;
}

//在控制台中输出某个月的日历
void printCalendar(int year, int month){
printf("====================================================\n");
printf(" 一 \t 二 \t 三 \t 四 \t 五 \t 六 \t 日 \n");

for(int k=1;k<=(getDayOfWeek(year,month,1)-1);k++){ //前面空格显示;
printf("\t");
}
int a=getDaysOfMonth(year,month); //遍历输出天数;
for(int i=1;i<=a;i++){
printf(" %d\t",i);
if(getDayOfWeek(year,month,i)==7){ //换行;
printf("\n");
}
}
printf("\n");
printf("====================================================\n");
}

int main (void){


int a = getUserInputYear();
int b = getUserInputMonth();
printCalendar(a,b);

}

函数应用,在控制台输出用户的输入日历

标签:;;   rom   tca   ntc   stdio.h   输出   某年   calendar   span   

原文地址:http://www.cnblogs.com/wc789/p/6160981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!