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

#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);

}

时间: 2024-12-17 03:02:28

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

python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。

重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则不能进行排序交换位置.通过索引的方式可以查看字符串中的每一个字符,双层for循环进行冒泡排序.for循环的倒序输出方式:for z in range(9,1,-1):.break直接跳出循环.通过标志位判断是否输出过奇数. 1 print("----------------------------") 2 num=input('请输入十个整数:')#通过input函数输入,这时返回值为行信息的字符串 3 for m

JavaScript-3.1--获取用户的输入,输出用户输入的两数之和---ShinePans

提示用户输入两个数,然后输出用户输入的两数之和 第一次输入 ,输入处为空 第二个输入,输入处为默认27  (这里强调语句的使用) <html> <head> <meta http-equiv="content-type" content="text/html;charset=GB2312"/> <title> 3.1 让用户输入两个数字,然后输出相加的结果 </title> </head> &l

_02_从键盘读入用户的输入,格式化输出hello+用户输入的信息

Hello.cs文件 using System; //引用了一个叫System的名空间 class easyInput //类的名字与文件名(Hello.cs)不同也 无所谓 { public static void Main() { string strName; //声明一个string类型的值变量 Console.Write("please input your name:"); //输出一句话,但不换行 strName = Console.ReadLine(); //从键盘读入

【Java】Eclipse新建的Java文件自动生成主函数、控制台输出行数不再受限制

一.新建的Java文件自动生成主函数 虽然只是一个很简单的事情,但应该还是有人不知道了,每次新建Java文件都要手动输入public static void main(String args[]){},非常麻烦,其实Eclipse可以自动生成这行,只是大多数的Java文件都是没有主函数的,所以这行默认关闭, 右击Java项目下的src可以选择New->Class也就可以新建类 然后在弹出的对话框上勾上自动产生主函数,点击确认,在生产的Java文件中就有主函数了 二.Eclipse控制台输出行数不

PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

Python 练习 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的数,屏幕显示"太大了,请重新输入"如果小于预设的数,屏幕显示"太小了,请重新输入"如此循环,直到猜中,显示"恭喜你,猜中了!共猜了N次"N为用户猜测次数. 答案: import random def guess_number(): true_num = random.randint(1, 100) user_n

Golang的交互模式进阶-读取用户的输入

Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出.我们如何读取用户的键盘(控制台)输入呢?从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数.

利用正则实现彩色控制台输出

近期忙了一阵less的二次开发的工作,期间遇到了不少须要向控制台输出彩色文字的需求.翻了下曾经同事的代码,发现要么自己拼转义字符串,要么使用一些不太好用的第三方库.总之都不是非常合自己的口味. 依照自己的口味,一个好的第三方库应该满足例如以下需求: 要支持丰富的颜色设置,同一时候设置颜色又不能太累赘,并且要支持console.log的通配符表示方法以降低拼字符串的工作.cli-color和colors的语法类似,都是採用方法来设定字符串颜色: // colors console.log("thi

控制台输出是什么回事

1.控制台输出,是指程序运行过程中,将一些信息,output出来,用输出流,可以输出到指定文件或者控制台. 2.日志信息,就是程序中的标准input/output stream,只是将i/o的目的地输出到console这个程序而已. 3.console是个单独的系统程序,console是单独的程序,否则怎么动态输出log信息?是的,console底层就是c语言的printf . 4.大部分ide开发环境也都提供了自己console程序,比如eclipse和tomcat.要打印程序的log信息,只

向控制台输出日历

上章也在文中举例过向控制台输出日历,那么这章我们就来具体的说说怎么实现: //第一步:提示并获取用户的输入 //第二步:根据用户输入的年月,创建集合 //第三步:向控制台显示输出 //第四步:等待用户指令,清屏重新输出 怎么实现呢? //第一步:提示并获取用户的输入,如果错误那么需要清屏提醒重新输入,前面一贴我们讲过,这种情况,我们就应该运用到while(true)和console.clear(),输入正确结束循环 int years, month; while (true) { Console