定义日期结构体类型(包括年、月、日),实现输入一个日期显示它是该年第几天任务描述 本关任务:定义一个结构类型变量(包括年、月、日),实现输入一个日期显示它是该年第几天。 相关知识 C 语言不仅提供

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

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

1)现有整型量a、b,定义如下:

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

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

INTEGER a,b;
它等效于:

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

2)现有字符数组a1、a2、s1,定义如下:

char a1[20],a2[20],s1[5][20];
可把长度为20的字符数组用typedef定义为:

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

NAME a1,a2,s1[5];
完全等效于:

char a1[20],a2[20],s1[5][20];
3)有函数的指针p1,p2定义如下:

int (*p1)(char [],int );
int (*p2)(char [],int);
用typedef定义如下:

typedef int (*Pointer)( char [],int);
这以后就可用Pointer同时定义多个同类型的函数指针变量。如下:

Pointer p1,p2;
完全等效于:

int (*p1)(char [],int);
int (*p2)(char [],int);
4)现有结构体类型和结构体类型变量a、b、c,定义如下:

struct stu //定义 struct stu的结构类型
{
int num;
char name[20];
char sex;
float score;
};
struct stu a,b,c; //定义 struct stu的结构类型的变量a,b,c
用typedef 定义struct stu 的别名如下:

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

student a,b,c;
完全等效于:

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

typedef struct stu
{
int num;
char name[20];
char sex;
float score;
} 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 today;
    int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int i,sum=0;
    scanf("%d%d%d",&today.year,&today.month,&today.day);
    if(today.year%4==0&&today.year%100!=0||today.year%400==0){
        m[2]=29;
    }
    for(i=1;i<today.month;i++){
        sum +=m[i];
    }
    sum +=today.day;
    printf("它是%d年的第%d天\n",today.year,sum);
    /********** End **********/
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值