C语言上机:日期差计算.pdfVIP

  • 0
  • 0
  • 约7.06千字
  • 约 6页
  • 2026-02-06 发布于北京
  • 举报

2009年秋二级C语言上机试卷(试卷代号C01)

一、改错题(16分)

输入两个正确日期且年份在19009999范围内,计算并输出两个日期之间间隔的天数。

提示:能被4整除并且不能被100整除的年份是闰年,能被400整除的年份也是闰年,

其他年份则是平年。

【测试数据与运行结果】

显示:firstdate:

输入:1980-2-1

显示:seconddate:

输入:2009-8-1

输出:10774days

【含有错误的源程序】

#includestdio.h

#defineleap(inty)((y)%40(y)%100!=0||(y)%4000)

/*语法错,易,改为#defineleap(y)((y)%40(y)%100!=0||(y)%4000)*/

structd

{inty,m,d;};

intdays(structdd1,structdd2)

{intmon[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}};

inti;longtd=0;

for(i=d1.y;id2.y;i++)

tdleap(i)?366:365;/*算法错,中,改为td+=leap(i)?366:365;*/

for(i=1;id1.m;i++)

td-=mon[leap(d1.y)][i];

td-=d1.d-1;

for(i=1;id2.m;i++)

td+mon[leap(d2.y)][i];

td+d2.d-1;

returntd;

}

voidmain()

{structd1,d2;/*语法错,易,改为structdd1,d2;*/

puts(firstdate:);

scanf(%d-%d-%d,d1.y,d1.m,d1.d);

puts(seconddate:);

scanf(%d-%d-%d,d2.y,d2.m,d2.d);

printf(%ddays\n,days(d1.y,d2.y));

/*语法错,中,改为printf(%dds\n,days(d1,d2));*/

getch();

}

二、编程题(24分)

输入两个自然数P和Q(PQ),找出满足下列条件的整数组(K,M,N):

(1)P≤KM≤Q

(2)K*K+M*M=N*N

【编程要求】

1.编写函数intchlm(intp,intq,inta[][3])实现以下功能:查找K、M在[p,q]范围内取值且

满足以上条件的所有整数组(K,M,N)。若找到则将这些整数组保存到a指向的数组中,

函数返回找到的整数组的组数。若找不到则函数返回0。

2.编写函数main实现以下功能:一个二维数组a变量p、q,输入两个自然数并保存

到p和q中(pq),调用chlm函数在[p,q]范围内查找满足以上条件的整数组。若找不

到则在屏幕上输出“notfound”,否则将查找结果保存到a数组中,输出a数组数据到

文档评论(0)

1亿VIP精品文档

相关文档