任务描述
本关任务:定义一个结构类型变量(包括年、月、日),实现输入一个日期显示它是该年第几天。
相关知识
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 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 **********/
}