C语言寻找170厘米以上的同学,选人问题 C语言很多学校在每年的九月份新学期开学时对新生需要进行军训,我们学校也一样,今年也开始军训了,第一天,总教官把所有新生都召集在一个很大的操场上,把所有学生从1...

第一个问题

/*--------------------------------------------------------------*/

#include "stdio.h"

int md[12]=; /*每个月的天数*/

int year; /*年*/

int month; /*月*/

int day; /*日*/

int ad; /*要加上的天数*/

int IsLeapYear(int y); /*判断y是否闰年*/

void AddDay(int d); /*在日期上加上d天*/

int main()

{

printf("输入年:");

scanf("%d",&year);

while(year<1)

{

printf("\n输入错误,重新输入:");

scanf("%d",&year);

}

printf("输入月:");

scanf("%d",&month);

while(month<1 || month>12)

{

printf("\n输入错误,重新输入:");

scanf("%d",&month);

}

printf("输入日:");

scanf("%d",&day);

while(day<1 || day>( month==2 ? (IsLeapYear(year) ? 29:md[month-1]) : md[month-1]) )

{/*上面这句有些复杂,因为要判断这个月的天数,还有判断是否年*/

printf("\n输入错误,重新输入:");

scanf("%d",&day);

}

printf("输入要加上的天数:");

scanf("%d",&ad);

while(ad<1)

{

printf("\n输入错误,重新输入:");

scanf("%d",&ad);

}

printf("输入的日期是 %d年%d月%d日\n",year,month,day);

AddDay(ad); /*加上ad天*/

printf("加上%d天后是 %d年%d月%d日\n",ad,year,month,day);

}

int IsLeapYear(int y) /*判断是否闰年*/

{

if((y%400 == 0)||(y%4 == 0 && y%100 != 0))

return 1;

return 0;

}

void AddDay(int d)

{

if((day+d) <= md[month-1]) //如果加上d天后,还未超出本月

day = day+d;

else

{

//首先减去当月剩余的天数

if(IsLeapYear(year) && month == 2)

d -= (29-day);

else

d -= (md[month-1]-day);

month++;

if(month>12) /*加上一个月后检查月份是否超出范围*/

//然后依次减去以后各个月的天数,直到不能再减为止

while( d > ( month==2 ? (IsLeapYear(year) ? 29:md[month-1]) : md[month-1]) )

{

if(IsLeapYear(year) && month == 2) //如果是闰年且是二月

d -= 29;

else

d -= md[month-1];

month++;

if(month>12)/*加上一个月后检查月份是否超出范围*/

}

day = d; //减剩的就是day

}

}

/*---------------------------------------------------------------*/

其实三个问题中第一个还比较复杂,其余两个相对简单,先给第一个的答案吧,占个位子,有空再来补上其余两个。

第一个程序经过我调试运行通过,测试没有什么问题,其实你可以加上任意大于0的天数,该程序都能得出正确结果。另外程序中的提示字符串我是用中文,因为VC++支持中文,如果你的编译器不支持中文(如TC),请你自己把中文字符串改为英文。

ps:非常痛恨百度知道的删除空格做法,原本很漂亮的程序变的面目全非了!!!

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

解析看不懂?求助智能家教解答查看解答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值