《C语言及程序设计》实践参考——日期结构体

返回:贺老师课程教学链接

【项目6-日期结构体】

(1)定义一个结构体变量(包括年、月、日),要求输入年、月、日,计算输出该日是该年的第几天。

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
};
int main()
{
    struct Date date;
    printf("input year,month,day:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    int days;
    //计算days

    printf("%d月%d日是%d年的第%d天.\n", date.month, date.day, date.year, 

days);
    return 0;
}

[参考解答]
参考解答1:

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
};
int main()
{
    struct Date date;
    printf("input year,month,day:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    int days;
    //计算days
switch(date.month)
    {
    case 1: days=date.day;      break;
    case 2: days=date.day+31;   break;
    case 3: days=date.day+59;   break;
    case 4: days=date.day+90;   break;
    case 5: days=date.day+120;  break;
    case 6: days=date.day+151;  break;
    case 7: days=date.day+181;  break;
    case 8: days=date.day+212;  break;
    case 9: days=date.day+243;  break;
    case 10: days=date.day+273; break;
    case 11: days=date.day+304; break;
    case 12: days=date.day+334; break;
    }
    if ((date.year %4== 0 && date.year % 100 != 0
        ||date.year % 400 == 0) && date.month >=3)
        days+=1;

    printf("%d月%d日是%d年的第%d天.\n", date.month, date.day, date.year, days);
    return 0;
}

参考解答2:

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
};
int d[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    struct Date date;
    printf("input year,month,day:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    //计算days
    int days=0,i;
    for(i=1; i<date.month; ++i)
        days+=d[i];     //当月之前的天数
    days+=date.day;     //加上本月天数
    if (((date.year %4== 0 && date.year % 100 != 0)
            ||date.year % 400 == 0) && date.month >=3)
        days+=1;        //闰年的2月要加1天

    printf("%d月%d日是%d年的第%d天.\n", date.month, date.day, date.year, days);
    return 0;
}

参考解答3: 函数版1——用结构体的分量当形参

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
};
int d[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int days(int,int,int);
int main()
{
    struct Date date;
    printf("input year,month,day:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    //计算days
    int d=days(date.year,date.month,date.day);
    printf("%d月%d日是%d年的第%d天.\n", date.month, date.day, date.year, d);
    return 0;
}

int days(int yy,int mm,int dd)
{
    int n=0,i;
    for(i=1; i<mm; ++i)
        n+=d[i];        //当月之前的天数
    n+=dd;      //加上本月天数
    if (((yy %4== 0 && yy % 100 != 0)
            ||yy % 400 == 0) && mm >=3)
        n+=1;       //闰年的2月要加1天
    return n;
}

参考解答4:函数版2——用结构体整体作为参数

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
};
int d[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int days(struct Date);
int main()
{
    struct Date date;
    printf("input year,month,day:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    printf("%d月%d日是%d年的第%d天.\n", date.month, date.day, date.year, days(date));
    return 0;
}

int days(struct Date ymd)
{
    int n=0,i;
    for(i=1; i<ymd.month; ++i)
        n+=d[i];        //当月之前的天数
    n+=ymd.day;     //加上本月天数
    if (((ymd.year %4== 0 && ymd.year % 100 != 0 )
            ||ymd.year % 400 == 0) && ymd.month >=3)
        n+=1;       //闰年的2月要加1天
    return n;
}


(2)输入两个人的生日,求出他们相差多少天。
[参考解答]

#include <stdio.h>
struct Date
{
    int year;
    int month;
    int day;
} ;
int daysOfMonth[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int day(struct Date);  //计算出日期d和1900年1月1日差多少天
int main()
{
    struct Date date;
    int d1=0,d2=0,t;//d1和d2分别代表两个人的生日和1900年1月1日相差多少天
    printf("第一个人的出生日期:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    d1=day(date);
    printf("第二个人的出生日期:");
    scanf("%d %d %d", &date.year, &date.month, &date.day);
    d2=day(date);
    //对两个人的生日,求出了和1900年1月1日相差多少天(d1和d2),下面相减
    t=d2-d1;
    if(t<0)
    {
        t=-t;//若出现负数,则将其化为正数
    }
    printf("两人生日相差%d天.\n", t);
    return 0;
}
int day(struct Date d)
{
    int days=0,i;
    for(i=1900; i<d.year; i++)//算出这年1月1日到1900年1月1日共多少天
    {
        days+=365;
        if(i%400==0||(i%4==0&&i!=0))
        {
            days++;
        }
    }
    for(i=1; i<d.month; ++i)
        days+=daysOfMonth[i];       //加上当年当月之前的天数
    days+=d.day;        //再加上本月天数
    if (d.month >=3 && ((d.year %4== 0 && d.year % 100 != 0) ||d.year % 400 == 0))
        days+=1;        //当年为闰年且进入了3月,还要加1天
    return days;  //生日到1900年1月1日共多少天
}
时间: 2024-11-09 00:17:10

《C语言及程序设计》实践参考——日期结构体的相关文章

2014秋C++第17周 项目4参考 日期结构体

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目4 - 日期结构体](1)定义一个结构体变量(包括年.月.日),要求输入年.月.日,计算输出该日是该年的第几天. #include <iostream> using namespace std; struct Date { int year; int month; int

《C语言及程序设计》实践参考——点结构体

返回:贺老师课程教学链接 [项目3-点结构体] 下面定义了一个表示平面上一点的结构体类型: struct Point { float x; //横坐标 float y; //纵坐标 }; (1)请编写程序,输入一点的横纵坐标,输出该点到原点的距离 [参考解答] #include <stdio.h> #include <math.h> struct Point { float x; float y; }; int main() { struct Point p; float d; p

《C语言及程序设计》实践参考——复数结构体

返回:贺老师课程教学链接 [项目1-复数结构体] 编写一个程序,首先定义一个复数数据类型,即结构类型.然后按照复数的运算规则进行计算,并按照复数表示的格式进行输出,请将程序补充完整. #include <stdio.h> struct complex { int re; int im; }; int main() { struct complex x,y,s,p; scanf("%d%d",&x.re,&x.im); scanf("%d%d&quo

C语言及程序设计进阶例程-12 结构体成员的引用

贺老师教学链接  C语言及程序设计进阶 本课讲解 结构体作函数参数 #include <stdio.h> struct Student { int num; char name[20]; char sex; int age; double score; char addr[30]; }; void print(struct Student s) { printf("%d %s %c\n", s.num, s.name, s.sex); //可再加-- return; } i

C语言及程序设计进阶例程-13 结构体数组及其应用

贺老师教学链接  C语言及程序设计进阶 本课讲解 结构体数组应用举例 #include <stdio.h> #include <string.h> typedef struct { char name[20]; int count; } Person; int main( ) { Person person[3]= {{"Li",0},{"Zhang",0},{"Fun",0}}; int i,j; char name[2

go语言通过反射获取和设置结构体字段值的方法_Golang

本文实例讲述了go语言通过反射获取和设置结构体字段值的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: type MyStruct struct {         N int } n := MyStruct{ 1 } // get immutable := reflect.ValueOf(n) val := immutable.FieldByName("N").Int() fmt.Printf("N=%d\n", val) // prints

《C++语言基础》实践参考——点、圆的关系

返回:贺老师课程教学链接  项目要求 [项目4 - 点.圆的关系](1)先建立一个Point(点)类,包含数据成员x,y(坐标点):(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心:(3)编写上述两类中的构造.析构函数及必要运算符重载函数(本项目主要是输入输出):(4)定义友元函数int locate,判断点p与圆的位置关系(返回值<0圆内,==0圆上,>0 圆外): int main( ) { Circle c1(3,2,4),c2(4,5,

C++程序设计-第2周结构体应用

第一部分 程序阅读 下面的程序建立起了如图所示的动态链表.阅读程序,在草稿纸上画出链表建立的过程,借此学会如何建立链表.可以通过单步执行以辅助理解 #include <iostream> using namespace std; struct Student { long num; float score; struct Student *next; }; int main( ) { Student *head=NULL,*p,*q; //下面的程序建立起一个有三个节点的动态链表 for(in

C++第1周项目2——日期结构体

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-日期结构体]定义一个结构体变量(包括年.月.日),要求输入年.月.日,计算输出该日是该年的第几天? /* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: date.cpp * 作 者: * 完成日期: 年 月 日 * 版本号: v1.0 * 输入描述:年月