#头歌C语言结构体练习

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

任务描述

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

相关知识

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

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

int a,b;

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

typedef int INTEGER;

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

INTEGER a,b;

它等效于:

int a,b;

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

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

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)现有结构体类型和结构体类型变量abc,定义如下:

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 a;
    scanf("%d %d %d",&a.year,&a.month,&a.day);
    int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(a.year%4==0&&a.year%100!=0||a.year%400==0){
        month[1]++;
    }
    int d=0;
    for(int i=0;i<a.month-1;i++){
        d+=month[i];

    }
    d+=a.day;
    printf("它是%d年的第%d天",a.year,d);

    /********** End **********/
    return 0;
}

 

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值