尝试着优化了一下,不知道为什将基准时间1990-1-1改为0-1-1(都是周一)(此处错误,应该是1-1-1是周一,即公元元年是1年不是0年),输出结果都不对,查找了一下解决方案,有个函数可以计算出某天的是周几的返回值,就尝试使用函数传参调用了一下,竟然成功了,代码供大家参考一下:

#include <stdio.h>

int getWeekdayByYearday(int iY, int iM, int iD)
{
int iWeekDay = -1;
if (1 == iM || 2 == iM)
{
iM += 12;
iY--;
}
iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;
return iWeekDay;
}

void monthPrint(int year,int month){
int sum = 0;
int k,m;
int month_day=0;

if(month==1 || month==3 ||month==5 ||month==7 ||month==8 ||month==10 ||month==12)
month_day=31;

else if(month==4 ||month==6 ||month==9 ||month==11)
month_day=30;
else
{
if( (year%400==0) || ((year%100!=0) && (year%4==0)) )
month_day=29;
else
month_day=28;
}
printf("%d-%d\n",year,month);
printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n");
for(k=1;k<getWeekdayByYearday(year,month,1);k++)
printf("\t");
for(m=1;m<=month_day;m++)
{
if((m+k-1)%7==0)
printf("%d\n",m);
else
printf("%d\t",m);
}
putchar('\n');
return;
}

void yearPrint(int year){
int i;
for(i=1;i<=12;i++){
monthPrint(year,i);
}
return;
}

int main(int argc, const char *argv[]){
int year,month;
int check_year,check_month;
printf("*******************please choose********************\n");
printf("************1.print a year's calendar***************\n");
printf("************2.print a month's calendar***************\n");
printf("*****************************************************\n");

int choose = 0;
printf("your choose is:");
scanf("%d",&choose);

/*
while((choose != 1) || (choose != 2)){
getchar();
printf("error input,choose again:");
scanf("%d",&choose);
 }

*/

switch(choose){
case 1 :printf("input year(xxxx):");
check_year = scanf("%d",&year);
while(year<0)
{
getchar();
printf("year error,input again:");
check_year = scanf("%d",&year);
}
yearPrint(year);
break;

case 2 :printf("input year-month(xxxx-xx):");
check_month = scanf("%d-%d",&year,&month);
while(2 > check_month || month < 1 || month > 12)
{
getchar();
printf("error,input again:");
check_month = scanf("%d-%d",&year,&month);
}
monthPrint(year,month);
break;
}
return 0;
}

转载于:https://www.cnblogs.com/huiji12321/p/11117016.html

step1 . day5 C语言基础练习之日历(使用函数调用,优化至元年开始时间)相关推荐

  1. step1 . day4 C语言基础练习之日历

    学习完基础循环.选择语句,写一个日历检验水准. 日历核心: 1.选择基础参照,用来计算总天数和周几的参照(since 1900.1.1,这天是周一) 2.闰年平年的判断条件及循环结构 3.计算需要打印 ...

  2. step1 . day3 C语言基础

    C语言还挺杂乱,很多细节知识,不仅要知道理论,还得从编程中慢慢体会,今天天写了一个简单的加减乘除取余程序,慢慢捡起以前学的知识,不过最大的进步是最近用VI慢慢的熟练了起来. #include < ...

  3. step1.day11 C语言基础练习之指针和二级指针

    梳理了好长时间,总是分不清为什么一级指针能干的事儿为啥引入二级指针,据一个驱动工程师说还是挺常用的,忍者难受尝试使用了一下二级指针. 遇到一个问题是,如果想让一级指针指向移动,二级指针需要的格式是(* ...

  4. step1 . day10 C语言基础练习之指针和函数

    最近指针和字符串.函数一系列的结合整的有点蒙,梳理了一下终于有点眉目了,用代码练习了一下 1,指针函数(返回值是指针的函数) #include <stdio.h> char * fun(c ...

  5. step1 . day8 C语言基础练习之指针和函数

    今天继续复习指针,还是很深奥的,两点注意事项: 1. int型数据可以强制类型转化赋值给指针变量,然后对该地址赋值(用在裸机上): 2.指针数组是数组,存放的是指针,数组指针是数组的指针,存放的是行指 ...

  6. step1 . day7 C语言基础练习之指针和函数

    今天复习之指针即使用指针进行的函数传参,优化一下昨天写的strcpy strcmp strlen strcat,添加了strstr.atoi函数,算是熟悉之前的知识汇总,顺便练习一下封装函数和书写函数 ...

  7. step1 . day6 C语言基础练习之数组和字符串

    今天复习之数组即字符串相关知识,贴几个小练习,体会一下数组细节知识点: 1.冒泡排序 #include <stdio.h> #define N 10 int main(int argc, ...

  8. C语言基础之素数判定的sqrt优化

    Problem:将试除法判断素数时间复杂度优化到O(n^1/2) 配置环境:Visual Studio Enterprise 2019 #define _CRT_SECURE_NO_WARNINGS ...

  9. [R语言基础]——数据处理实例

    [R语言基础]--数据处理实例 前言 问题 Step1:建立数据框 Step2:计算综合得分 Step3:对学生进行评分 Step4:根据姓氏和名字排序 完整代码 前言 之前我们已经学习了R对数据预处 ...

最新文章

  1. docker操作大全
  2. Vue.js 源码分析(二十三) 指令篇 v-show指令详解
  3. 5号发工资和25号发工资,真能看出公司是否靠谱?
  4. NPM使用淘宝NPM镜像的使用方法汇总
  5. 第一章:1.1 信号表征
  6. AutoHotkey纯命令获取Chrome等浏览器的当前网址
  7. 调用toString()方法的注意事项
  8. [前台]---js重复上传一张图片两次,第二次失败的解决办法和思路
  9. 构建自己的服务器有什么好处呢?
  10. rust投递箱连接箱子_拆了的快递包装丢哪里?闵行试行24小时开放的网购包装回收箱...
  11. hive中统计某列数组的元素个数
  12. smarty capture使用
  13. 镶锆石、侧边指纹、双屏翻盖机,三星的这款2万块手机,只有土豪能懂
  14. python zlib_【python】使用zlib进行压缩解压
  15. 几款免费wordpress主题推荐
  16. Core dump去哪里了?
  17. 史上最全网络安全面试题总结
  18. 【2023年电工杯数学建模竞赛】选题分析+A题B题完整思路+代码分享
  19. 【看论文】之《番茄采摘机器人关键技术研究_王丽丽 》
  20. oppo2013笔试题-不全

热门文章

  1. qq飞车登陆服务器无响应,qq飞车手游进不去怎么回事 为什么进不去游戏
  2. 微信小程序接入腾讯地图sdk地图 用户自选位置。踩坑+代码实现
  3. 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
  4. 汇编语言:冒泡排序算法将10个数按从小到大顺序排列
  5. 剑指offer--求1+1+3+....n的和
  6. 小程序向Java传值,微信小程序 页面传值详解
  7. vue compile添加html,咱来聊聊 Vue - compile
  8. php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件
  9. 嵌入式Linux基础学习笔记-文件IO编程-文件锁(1)
  10. [BUUCTF-pwn]——ez_pz_hackover_2016