要求:输入年份输出这一年的日历
注意:公元1900年一月一日是星期一,这一年是平年
思路:获取输入的年份y,首先获取从公元1900年到(y-1)年
的天数,然后获得该年份的第一天是星期几,进行输出。
这次实例,我花费了很长的时间,最后发现错误的原因出在在求某一年是闰年还是平年的时候,我没有田间return语句,也就是没有返回值,真是醉了。
我感觉这次我写代码的时候一点感觉都没有。哎,真是的,一颗老鼠屎,坏了一锅粥啊。
下面是我的代码:
~~~
#include <stdio.h>
//从1900年开始计算天数
#define BEGIN 1900
/**
* 要求:输入年份输出这一年的日历
* 注意:公元1900年一月一日是星期一,这一年是平年
* 思路:获取输入的年份y,首先获取从公元1900年到(y-1)年
* 的天数,然后获得该年份的第一天是星期几,进行输出。
*
* @brief main
* @return
*/
int isRun(int year);
int main(void)
{
//获取用户输入的年数
int year;
//存放从公元1年到year-1年的天数
int days = 0;
//用于保存星期几
char **weeks[] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
//二维数组,第一行用于存放闰年的月份
//第二行用于存放平年的月份
int runPing[2][12] = {
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31},
};
printf("Please enter the year:\n");
scanf("%d",&year);
int m;
/**计算从1900年到(year-1)的天数 **/
for(m = BEGIN;m < year;m++){
if(isRun(m)){
days += 366;
}else{
days += 365;
}
}
int which = 0;
//判断year这一年是闰年还是平年
if(isRun(year)){
which = 1;
}else{
which = 0;
}
//进行输出
for(m = 0;m < 12;m++){
printf("MONTH:%d\n",m+1);
//对7进行取余就能求得某一天是星期几
int week = days % 7;
if(week == 0){
week = 7; //如果余数是0,则为星期日
}else{
week += 1; //如果余数不是0,则余数+1,就是星期几
}
int i;
//对上一个月的进行制表操作
for(i = 0;i < 7;i++){
printf("%s\t",weeks[i]);
}
printf("\n");
for(i = 1;i<week;i++){
printf("\t");
}
int n = 0;
//输入某一个月的日期
for(n = 0;n < runPing[which][m];n++){
//在需要的时候进行换行操作
if(n%7 == (7-week+1)){
printf("\n");
}
printf("%d\t",n+1);
}
printf("\n\n");
days += runPing[which][m];
}
return 0;
}
/**
* @brief isRun 用于判断年year是否是闰年
* @param year 被判断的那一年
* @return
* 0 - 表示是平年
* 1 - 表示是闰年
*/
int isRun(int year){
int run = 0;
/**
* 闰年的判断条件:
* 1:能够被400整除
* 2:能够被4整除,但是不能被100整除
*/
if(((year%4==0)&&(year%100!=0)) || (year%400==0)){
run = 1;
}else{
run = 0;
}
return run;
}
~~~
下面是我的程序的输出:
![这里写图片描述](https://box.kancloud.cn/2016-05-24_5743c074d11da.jpg "")
- 前言
- 实例一:HelloWorld
- scanf函数学习
- 实数比较
- sizeof()保留字获取类型的大小
- 自增/自减学习
- C学习if条件判断和for循环
- C实现的九九乘法表
- C实现一个比较简单的猜数游戏
- 使用C模拟ATM练习switch..case用法
- 记录一个班级的成绩练习一维数组
- C数组实现矩阵的转置
- C二维数组练习
- 利用数组求前n个质数
- C实现万年历
- C实现数组中元素的排序
- C实现任意进制数的转化
- C判断一个正整数n的d进制数是否是回文数
- C使用递归实现前N个元素的和
- 钢材切割问题
- 使用指针比较整型数据的大小
- 指向数组的指针
- 寻找指定元素
- 寻找相同元素的指针
- 整数转换成罗马数字
- 字符替换
- 从键盘读入实数
- C实现字符行排版
- C实现字符排列
- C实例--判断一个字符串是否是回文数
- 通讯录的输入输出
- 扑克牌的结构定义
- 使用“结构”统计学生成绩
- 报数游戏
- 模拟社会关系
- 统计文件中字符个数
- C实现两个文件的内容输出到同一个屏幕