prog24.cpp
来自「C++语言程序设计题典」· C++ 代码 · 共 127 行
CPP
127 行
#include <stdio.h>
#define N 4
int count_day(int,int,int,int);
int leap(int);
struct person
{
char name[10];
struct dates
{
int year;
int month;
int day;
} date;
int d; /*从1900.1.1到出生日的天数*/
};
class compute
{
struct person st[N];
int daynum(int,int,int,int,int,int);
int count_day(int,int,int,int);
int leap(int);
public:
void getdata();
void sort();
void disp();
};
int compute::daynum(int s_year,int s_month,int s_day,int e_year,
int e_month,int e_day)
{
int year,day,day1,day2;
if (s_year<e_year)
{
day=count_day(s_year,s_month,s_day,0);
for (year=s_year+1;year<e_year;year++)
if (leap(year))
day+=366L;
else
day+=365L;
day+=count_day(e_year,e_month,e_day,1);
}
else if (s_year==e_year)
{
day1=count_day(s_year,s_month,s_day,1);
day2=count_day(e_year,e_month,e_day,1);
day=day2-day1;
}
else
day=-1;
return day;
}
int compute::count_day(int year,int month,int day,int flag)
{
static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
/*使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年*/
int p,i,s;
if (leap(year))
p=1;
else
p=0;
if (flag)
{
s=day;
for (i=1;i<month;i++)
s+=day_tab[p][i-1];
}
else
{
s=day_tab[p][month]-day;
for (i=month+1;i<=12;i++)
s+=day_tab[p][i-1];
}
return(s);
}
int compute::leap(int year)
{
if (year%4==0 && year%100!=0 || year%400==0) /*是闰年*/
return 1;
else /*不是闰年*/
return 0;
}
void compute::sort()
{
int i,j;
struct person temp;
for (i=0;i<N-1;i++)
for (j=0;j<N-i-1;j++)
{
if (st[j].d>st[j+1].d)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
void compute::getdata()
{
int i;
for (i=0;i<N;i++)
{
printf("输入第%d个学生姓名:",i+1);
scanf("%s",st[i].name);
printf(" 出生日期:");
scanf("%d.%d.%d",&st[i].date.year,&st[i].date.month,&st[i].date.day);
st[i].d=daynum(1900,1,1,st[i].date.year,
st[i].date.month,st[i].date.day);
}
}
void compute::disp()
{
int i;
printf("输出结果:\n");
printf(" 姓名 出生日期\n");
for (i=0;i<N;i++)
printf(" %-8s%d.%d.%d\n",st[i].name,st[i].date.year,
st[i].date.month,st[i].date.day);
printf("\n");
}
void main()
{
compute obj;
obj.getdata();
obj.sort();
obj.disp();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?