初学者请教 两道简单的c语言编程题目

1.分别用for语句和while语句编写一程序:
判断输入的一个16进制数(取值范围:0x0000-0xffff)其2进制表示中所包含的"1"的个数。

2.编写一程序,输入当前日期和你的生日,计算期间的天数(提示:使用循环从出生的下一年开始直到去年,计算期间天数,然后加上头尾两年的剩余天数,注意要考虑闰年)(注意是两种访法)

我们刚学完c的基本数据类型 以及三种程序设计结构,没有涉及到数组等概念,可能第二题需要用到数组。
我做了一下第二题,如下不知是否正确:
#include <stdio.h>

void main()
{
int leap_a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int N_leap_a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int Y1,M1,D1,Y2,M2,D2;
int leap_year=0;
long int total,rest=0;
long int day1=0,day2=0,D1_1=0,i,tatal=0;
int ddd;

printf("\t*********你的生命渡过了多少个日子?*********\n");

printf("请输入您的出生年份:\t\n");
scanf("%d",&Y1);

printf("请输入您的出生月份:\t\n");
scanf("%d",&M1);

printf("请输入您的出生日号:\t\n");
scanf("%d",&D1);

printf("请输入当前年份:\t\n");
scanf("%d",&Y2);

printf("请输入当前月份:\t\n");
scanf("%d",&M2);

printf("请输入当前日号:\t\n");
scanf("%d",&D2);

ddd=Y1;
/////////////////////////////////////////////
if (Y1%4==0&&Y1%100!=0||Y1%400==0)
{
D1_1=leap_a[M1]-D1;
for(i=M1+1;i<13;i++)
{
day1=day1+leap_a[i];
}
}
else
{
D1_1=N_leap_a[M1]-D1;
for(i=M1+1;i<13;i++)
{
day1=day1+N_leap_a[i];
}
}
///////////////////////////////////////////
if (Y2%4==0&&Y2%100!=0||Y2%400==0)
{
for(i=1;i<M2;i++)
{
day2=day2+leap_a[i];
}
}
else
{
for(i=1;i<M2;i++)
{

day2=day2+N_leap_a[i];
}
}
/////////////////////////////////////////////
while (Y1 < Y2) //判断从 Y1 到 Y2 年间有多少个闰年
{
Y1=Y1+1;
if (Y1%4==0&&Y1%100!=0||Y1%400==0)
leap_year++;
}

//********************以下计算年份********************
if(Y2-ddd!=1)
rest=365*(Y2-ddd);

total=rest+leap_year+day1+day2+D1_1+D2;
if(Y2==ddd)
total=total-365; ///在这里可能出现差错
printf("Total Day %d\n",total);
}
第一题的答案,二楼已经给出了,谢谢!不知道第二题有没有什么更精简的做法?期待高手给出啊!如果
int flog;
flog=Y1%4==0&&Y1%100!=0||Y1%400==0;
代替,可是程序简化
我只想得到这个。
现在我再加50分,能有更精简的算法就更好了,我自己也会再考虑的,如果没有的话,分数就给二楼了,谢谢!

第1个回答  2008-04-04
试用3重循环做一下
第2个回答  2008-04-04
刷分数
相似回答