学习-定义日期结构体类型(包括年、月、日),实现输入一个日期显示它是该年第几天

文章介绍了typedef在C语言中的作用,如何用它来为数据类型创建别名,包括整型、数组、指针和结构体。接着,给出一个编程任务,要求使用typedef定义的DATE结构体类型,根据输入的年、月、日计算出日期在当年的第几天,并输出结果。
摘要由CSDN通过智能技术生成

任务描述

本关任务:定义一个结构类型变量(包括年、月、日),实现输入一个日期显示它是该年第几天。

相关知识

C 语言不仅提供了丰富的数据类型,而且还允许由用户自己定义类型说明符,也就是说允许用户为数据类型取“别名”,通过类型定义符typedef即可完成此功能。下面,来看一下几个类型定义符typedef的使用方法举例。

1)现有整型量ab,定义如下:

 
 
  1. int a,b;

其中int是整型变量的类型说明符。int的完整写法为integer,为了增加程序的可读性,可把整型说明符用typedef定义为:

 
 
  1. typedef int INTEGER;

这以后就可用INTEGER来代替int作整型变量的类型说明了。 例如:

 
 
  1. INTEGER a,b;

它等效于:

 
 
  1. int a,b;

typedef定义数组、指针、结构体等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。

2)现有字符数组a1a2s1,定义如下:

 
 
  1. char a1[20],a2[20],s1[5][20];

可把长度为20的字符数组用typedef定义为:

 
 
  1. typedef char NAME[20];

这以后就可用NAME表示数组长度为20的字符数组类型。用NAME 定义变量和数组,如:

 
 
  1. NAME a1,a2,s1[5];

完全等效于:

 
 
  1. char a1[20],a2[20],s1[5][20];

3)有函数的指针p1,p2定义如下:

 
 
  1. int (*p1)(char [],int );
  2. int (*p2)(char [],int);

typedef定义如下:

 
 
  1. typedef int (*Pointer)( char [],int);

这以后就可用Pointer同时定义多个同类型的函数指针变量。如下:

 
 
  1. Pointer p1,p2;

完全等效于:

 
 
  1. int (*p1)(char [],int);
  2. int (*p2)(char [],int);

4)现有结构体类型和结构体类型变量abc,定义如下:

 
 
  1. struct stu //定义 struct stu的结构类型
  2. {
  3. int num;
  4. char name[20];
  5. char sex;
  6. float score;
  7. };
  8. struct stu a,b,c; //定义 struct stu的结构类型的变量a,b,c

typedef 定义struct stu 的别名如下:

 
 
  1. typedef struct stu student;

这以后就可用student表示struct stu类型。用student 说明变量,如:

 
 
  1. student a,b,c;

完全等效于:

 
 
  1. struct stu a,b,c;

进一步可以将定义结构体类型和为结构体类型取别名合二为一,如下:

 
 
  1. typedef struct stu
  2. {
  3. int num;
  4. char name[20];
  5. char sex;
  6. float score;
  7. } student;

此时,student为结构体类型struct stu的别名。

使用typedef时,应注意以下三点:

  • typedef只是对已经存在的类型指定一个新的类型名,而没有创造新的类型;
  • typedef定义数组类型、指针类型,结构体类型、共用体类型、枚举类型等类型的别名,使得编程更加方便;
  • 使用typedef名称有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef类型便于移植。

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,利用给定的别名DATE定义变量,从后台依次获取年、月、日,根据年月日,计算出它是该年第几天,并按照指定格式输出结果。

测试说明

平台会对你编写的代码进行测试。

测试输入: 2020 9 13 预期输出: 它是2020年的第256天


开始你的任务吧,祝你成功!

#include<stdio.h>
typedef struct date
{
	int year;
	int month;
	int day;
}DATE;

int main()
{
    /********** Begin **********/
    DATE p;
    scanf("%d%d%d",&p.year,&p.month,&p.day);
    int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int sum,i;
    sum=p.day;//当前月的天数先算入总数
    for(i=0;i<p.month-1;i++)//之前所有月份总天数累加
    	sum+=m[i];
    //考虑闰年2月多一天
    if(((p.year%4==0&&p.year%100!=0)||p.year%400==0)&&p.month>2)
        printf("它是%d年的第%d天",p.year,sum+1);
    else
        printf("它是%d年的第%d天",p.year,sum);
    return 0;

    /********** End **********/
    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IcarusCPU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值