•  题目来源:《The C programming language》中的习题P92
  •  练习5-8: 一个日期转换的问题,把某月某日这种日期表示形式转换为某年中第几天的表示形式,反之亦然。例如,3月1日是非闰年的第60天,是闰年的第61天。在这里,我们定义下列两个函数以进行日期转换:函数day_of_year将某月某日的日期表示形式转换为某一年中的第几天的表示形式,函数month_day则执行相反的转换。

  代码实现:

#include<stdio.h>int daytab[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  // 平年的月份{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  // 闰年的月份
                    };
/* 把某月某日这种日期表示形式转换为某年中第几天 */
int day_of_year(int year, int month, int day){int result = 0;int flag = year%4 == 0 && year%100 != 0 || year%400==0; //判断是否为闰年。是则返回1,否则返回0int i = 0;// 错误检查if (year < 1752 || month < 1 || month > 12 || day < 1)return -1;if(day > daytab[flag][month]){return -1;}// 循环for(; i < month; i++){result += daytab[flag][i];}result += day;return result;
}/* 把某年中第几天表示形式转换为某月某日这种日期形式 */
int month_day(int year, int theDays, int *pmonth, int *pday){int flag = year%4 == 0 && year%100 != 0 || year%400==0; //判断是否为闰年。是则返回1,否则返回0int i = 0;// 错误检查if (year < 1752 || theDays < 1){return -1;}if ((flag && theDays > 366) || (!flag && theDays > 365)){return -1;}for(; theDays > daytab[flag][i] && i <= 12 ; i++){theDays -= daytab[flag][i];}*pmonth = i;*pday = theDays;return 0;
}/* 主函数 */
void main(){int month, day;printf("%d\n",day_of_year(1988, 3, 1));month_day(1988, 61, &month, &day);printf("month = %d, day = %d\n", month, day);
}

【C语言】练习5-8相关推荐

  1. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  2. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

  3. gcc 自动识别的文件扩展名,gcc/g++ -x 选项指定语言,不同 gcc 版本 -std 编译选项支持列表

    对于执行 C 或者 C++ 程序,需要借助 gcc(g++)指令来调用 GCC 编译器. 对于以 .c 为扩展名的文件,GCC 会自动将其视为 C 源代码文件 对于以 .cpp 为扩展名的文件,GCC ...

  4. OpenCV 笔记(07)— Mat 对象输出格式设置(Python 格式、CSV 格式、NumPy 格式、C 语言格式)

    首先是下面代码中将要使用的 r 矩阵的定义.需要注意,我们可以通过用 randu 函数产生的随机值来填充矩阵, 需要给定一个上限和下限来确保随机值在期望的范围内. Mat r = Mat(2, 3, ...

  5. 利用牛顿法求平方根-Go语言实现

    牛顿法解释 百度的解释如下: 通俗的解释就是:多数方程不存在求根公式,牛顿提出了一种用迭代来求方程近似根的方法.思路就是不断取切线,用线性方程的根逼近非线性方程f(x)=0f(x)=0f(x)=0的根 ...

  6. 翻转二叉树 c语言实现 递归 栈 队列

    前言 题目比较好理解,就是翻转二叉树 代码 c语言实现 #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  7. 字符串全排列的问题 python和c语言实现

    前言 这是一个的经典的问题 设计一个算法,输出一个字符串字符的全排列. 比如,String = "abc" 输出是"abc","bac",& ...

  8. 快速排序的递归和非递归实现 c语言版本

    代码 挖坑法 解释 选取一个关键字(key)作为枢轴,一般取整组记录的第一个数/最后一个,这里采用选取序列第一个数为枢轴,也是初始的坑位. 设置两个变量i = l;j = r;其中l = 0, r = ...

  9. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

  10. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

最新文章

  1. Selenium+PhantomJS使用时报错原因及解决方案
  2. angular具体用法及代码
  3. python弹幕代码_只需3 行代码就可以获取B站(弹幕、评论、用户)数据
  4. 84. Largest Rectangle in Histogram
  5. SAP One Order redesign里的WebUI advanced search重构
  6. Spring集成JavaMail并利用线程池发送邮件
  7. python处理一亿条数据_Python基础数据处理库
  8. 利用ldirectord实现lvs后端realserver健康状态检查
  9. 火星探险 (Mars)
  10. 强化学习9——贝尔曼方程
  11. 投影仪亚马逊审核标准FCC认证
  12. firefox控制台打开方法
  13. 什么是 DNS 故障?常见原因和解决方案
  14. PC微信聊天记录数据迁移恢复
  15. 新收集的WAPPUSH代码,并经过改造
  16. 【深度学习】Pytorch chunk函数
  17. iPhone连接mac电脑连接时反复连接与断开情况的处理
  18. LKJ基础数据源文件固定径路编制软件
  19. Java项目:SSH自来水公司水费缴费管理系统
  20. 计算机主板风扇安装,详解电脑风扇插在主板哪里怎么安装

热门文章

  1. VTK:图片之NegativeIndices
  2. Qt Creator管理会议
  3. C语言durand kerner算法求近似根roots(附完整源码)
  4. QT的QQmlIncubationController类的使用
  5. C++Opengl三维列表堆罗汉源码
  6. python游戏程序中游戏对象是什么_练习项目21:使用python制作游戏(下)
  7. 31. 如何计算对象已死(引用计数器算法、可达性分析算法)32.对象是否可 GC?33. Minor GC 和 Full GC
  8. 安装单机版RabitMQ,java操作rabitmq案例(来自同学给的资料,并做升级到最新版本修改,补充问题修改)
  9. RocketMQ特性、专业术语(Producer,Producer Group,Consumer Group,Topic,Message,Tag,Broker,Name Server)等
  10. Solr单集代码调用案例