“千年虫”问题,也称计算机2000年问题,或“千年危机”,是指某些计算机程序在设计时只采用两位十进制数记录年份的最后两位,如1998年被表示为“98”,2000年被表示为“00”,因此,当时间跨入2000年时,计算机计时系统会将2000年解释为1900年,造成各种各样的系统功能紊乱,甚至发生灾难性的后果。因此,从根本上来说,千年虫是一种程序处理日期上的Bug。为了解决2000年问题,世界各国投入了大量的人力、物力,据统计耗资超过6000亿美元,这是人类有史以来最昂贵的救灾行动。
下面的序列保存了10名1920—2000年出生人员的出生年份。为了避免出现“千年虫”问题,请编写个小程序,把序列信息中存在千年虫问题的数据进行提取并修改,然后按年龄从高到低进行输出。
人员序列信息:[ 45,89,1998,00,75,33,1968,37,1958,90 ]
输出参考:[ 1933,1937,1945,1958,1968,1975,1989,1998,1990, 2000 ]
#include<stdio.h>
int main()
{
int i, j;
int a[10], b[10];
int iTemp;
printf("请输入数据:\n");
/*通过键盘为数组元素赋值*/
for (i = 0; i < 10; i++)
{
printf("a[%d]=", i);
scanf_s("%d", &a[i]);
}
printf("千年虫数据:\n");
/*输出数组*/
for (i = 0; i < 10; i++)
{
if (a[i] == 0)
{
b[i] = a[i] + 2000;
printf("%d\t", b[i]);
}
else if (a[i] == 1998 || a[i] == 1968 || a[i] == 1958)
{
b[i] = a[i];
printf("%d\t", b[i]);
}
else
{
b[i] = a[i] + 1900;
printf("%d\t", b[i]); /*输出制表位*/
}
if (i == 4) /*如果是第5个元素*/
printf("\n"); /*输出换行*/
}
/*从大到小排序*/
for (i = 1; i < 10; i++) /*外层循环元素下标为1~9*/
{
for (j = 9; j >= i; j--) /*内层循环元素下标为i~9*/
{
if (b[j - 1] > b[j]) /*如果前一个数比后一个数小*/
{
/*交换两个数组元素的值*/
iTemp = b[j - 1];
b[j - 1] = b[j];
b[j] = iTemp;
}
}
}
printf("\n千年虫数据年龄从高到低排序:\n");
/*输出数组*/
for (i = 0; i < 10; i++)
{
printf("%d\t", b[i]); /*输出制表位*/
if (i == 4) /*如果是第5个元素*/
printf("\n"); /*输出换行*/
}
return 0; /*程序结束*/
}
结果如下: