描述
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。。
输入
年月日
输出
当年第几天
输入样例 1
2020 2 28
输出样例 1
59
输入样例 2
2022 9 5
输出样例 2
248
代码一(如下):采用if判断语句和for循环语句
#include <iostream>
using namespace std;
struct Date
{int year;int month;int day;
}riqi;
int main()
{cin >> riqi.year >> riqi.month >> riqi.day;int i,sum=0;if ((riqi.year % 4 == 0&&riqi.year%100!=0)||riqi.year%400==0){for (i = 1; i < riqi.month; i++){if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){sum += 31;}else if (i == 4 || i == 6 || i == 9||i==11){sum += 30;}else{sum += 29;}}}else{for (i = 1; i < riqi.month; i++){if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){sum += 31;}else if (i == 4 || i == 6 || i == 9||i==11){sum += 30;}else{sum += 28;}}}sum = sum + riqi.day;cout << sum;return 0;
}
代码二(如下):采用switch语句
#include <iostream>
using namespace std;
struct Date
{int year;int month;int day;
}riqi;
int main()
{cin >> riqi.year >> riqi.month >> riqi.day;int i,sum=0;if ((riqi.year % 4 == 0&&riqi.year%100!=0)||riqi.year%400==0){switch (riqi.month){case 1:sum = riqi.day; break;case 2:sum = 31 + riqi.day; break;case 3:sum = 31 + 29 + riqi.day; break;case 4:sum = 31 * 2 + 29 + riqi.day; break;case 5:sum = 31 * 2 + 29 + 30 + riqi.day; break;case 6:sum = 31 * 3 + 29 + 30 + riqi.day; break;case 7:sum = 31 * 3 + 29 + 30 * 2 + riqi.day; break;case 8:sum = 31 * 4 + 29 + 30 * 2 + riqi.day; break;case 9:sum = 31 * 5 + 29 + 30 * 2 + riqi.day; break;case 10:sum = 31 * 5 + 29 + 30 * 3 + riqi.day; break;case 11:sum = 31 * 6 + 29 + 30 * 3 + riqi.day; break;case 12:sum = 31 * 6 + 29 + 30 * 4 + riqi.day; break;}}else{switch (riqi.month){case 1:sum = riqi.day; break;case 2:sum = 31 + riqi.day; break;case 3:sum = 31 + 28 + riqi.day; break;case 4:sum = 31 * 2 + 28 + riqi.day; break;case 5:sum = 31 * 2 + 28 + 30 + riqi.day; break;case 6:sum = 31 * 3 + 28 + 30 + riqi.day; break;case 7:sum = 31 * 3 + 28 + 30 * 2 + riqi.day; break;case 8:sum = 31 * 4 + 28 + 30 * 2 + riqi.day; break;case 9:sum = 31 * 5 + 28 + 30 * 2 + riqi.day; break;case 10:sum = 31 * 5 + 28 + 30 * 3 + riqi.day; break;case 11:sum = 31 * 6 + 28 + 30 * 3 + riqi.day; break;case 12:sum = 31 * 6 + 28 + 30 * 4 + riqi.day; break;}}cout << sum;return 0;
}
问题点:
①:用户可以自己声明的类型有结构体类型、共用体类型、枚举类型、类类型等,这些同称为用户自定义类型。
②:在一个组合项中包含若干类型不同(当然也可以相同)的数据项,这种数据类型称为结构体。struct是声明结构体类型时必须使用的关键字。
声明一个结构体类型的一般形式为
struct 结构体类型名
{成员表};
在声明一个结构体类型时必须对各成员都应进行类型声明,即
类型名 成员名;
每一个成员也称为结构体中的一个域。成员表又称为域表。成员名定名规则与变量名相同。
在C++中,结构体成员既可以包括数据(即数据成员),又可以包括函数(即函数成员),以适应面向对象的程序设计。
③:定义结构体类型变量的方法
1)先声明结构体类型再定义变量,如
struct Date{
int year;
int month;
int day;};
Date day1,day2; //Date是结构体类型名,day1、day2是结构体变量名。
2)在声明类型的同时定义变量,如
struct Date{
int year;
int month;
int day;}day1,day2;
这种形式的定义的一般形式为
struct 结构体名
{
成员表
}变量名表;
3)成员也可以是一个结构体变量,如
struct Date
{int year;
int month;
int day;
};
struct Student
{int num;
char name[20];
int age;
Date birthday; //Date是结构体类型,birthday是Date类型的成员。
//(已声明的类型Date与其他类型(如int,char)一样可以用来定义成员的类型)
char addr[30];
}student1,student2;
④:结构体变量的初始化
和其他类型变量一样,对结构体变量可以在定义时指定初始值。如
struct Date
{int year;
int month;
int day;
}day1={2022,1,1}; //初始化
也可以采用声明类型与定义变量分开的形式,在定义变量时进行初始化。如
Date day1={2022,1,1};
⑤:引用结构体变量
1)可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。
2)可以引用一个结构体变量中的一个成员的值。如day1.year表示结构体变量day1中成员year的值。
引用结构体变量中成员的一般形式为 结构体变量名 . 成员名
可以对变量中的成员赋值:day1.year=2022;
“ . ”是成员运算符,它在所有的运算符中优先级最高,因此可以把day1.year作为一个整体来看待。