编辑: 过于眷恋 2019-12-25
2007 年上半年 程序员 下午试卷 第1页(共

11 页) 全国计算机技术与软件专业技术资格 全国计算机技术与软件专业技术资格 全国计算机技术与软件专业技术资格 全国计算机技术与软件专业技术资格( ( ( (水平 水平 水平 水平) ) ) )考试 考试 考试 考试

200 200

200 2007

7 7

7 年上半年 年上半年 年上半年 年上半年 程序员 程序员 程序员 程序员 下午试卷 下午试卷 下午试卷 下午试卷 (考试时间 14:00~16:30 共150 分钟) 请按下述要求正确填写答题纸 请按下述要求正确填写答题纸 请按下述要求正确填写答题纸 请按下述要求正确填写答题纸 1.

在答题纸的指定位置填写你所在的省、自治区、直辖市、计划单列市的名称. 2. 在答题纸的指定位置填写准考证号、出生年月日和姓名. 3. 答题纸上除填写上述内容外只能写解答. 4. 本试卷共

8 道题,试题一至试题三是必答题,试题四至试题五选答

1 道, 试题六至试题八选答

1 道.每题

15 分,满分

75 分. 试题号 一~三四~五六~八 选择方法 必答题 选答

1 题 选答

1 题5. 解答时字迹务必清楚,字迹不清时,将不评分. 6. 仿照下面例题,将解答写在答题纸的对应栏内. 例题 例题 例题 例题

2007 年上半年全国计算机技术与软件专业技术资格(水平)考试日期是(1) 月(2)日. 因为正确的解答是

5 月26 日 ,故在答题纸的对应栏内写上

5 和

26 (参看下表) . 例题 解答栏 (1)

5 (2)

26 2007 年上半年 程序员 下午试卷 第2页(共

11 页) 试题一 试题一 试题一 试题一( ( ( (共共共共15 分分分分) ) ) ) 阅读以下说明和流程图,回答问题1 和问题2,将解答填入答题纸的对应栏内. [ [ [ [说明 说明 说明 说明] ] ] ] 为便于管理,每本正式出版的图书都印有国际标准书号.标准书号由 ISBN 和10 个数字组成,其格式为:ISBN 组号-出版者号-书名号-校验码.其中,校验码是根据 前面

9 个数字计算得到的,用于计算机自动校验.假设标准书号的

10 个数字依次是 a(1),a(2),…,a(10),则校验码 a(10)的设置应使 S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被

11 整除.如果校验码 a(10)应设置成 10,则规定以 X 表示之.例如,信息处理技术 员考试大纲的标准书号为:ISBN 7-302-11191-X.第1段上的数字

7 是国际 ISBN 中心分配给中国ISBN 中心管理的组号.第2 段上的

302 表示清华大学出版社.标准 书号的校验过程如图1-1 所示,计算校验码的过程如图1-2 所示,其中,Mod(S,11)表示 S 除以11 得到的余数. [ [ [ [流程图 流程图 流程图 流程图] ] ] ] a(10)='

X'

?

10 →a(10)

0 →S 循环开始 I = 1,10 S + (

1 ) →S 循环结束 Mod(S,11)=0? 校验正确 书号有错 图1-1 校验过程 图1-2 计算校验码的过程

0 →S 循环开始 I = 1, (

2 ) - (

3 ) - 循环结束 a(10) = 10? Mod(S,11) →R (

4 ) →a(10) '

X'

→a(10) [ [ [ [问题 问题 问题 问题1] 1] 1] 1]请填补流程图中的空缺(1)~(4) . [ [ [ [问题 问题 问题 问题2] 2] 2] 2]设 程序员考试大纲 标准书号前9 个数字为7-302-08493,请写出其校验码. Y N Y N Y N

2007 年上半年 程序员 下午试卷 第3页(共

11 页) 试题二 试题二 试题二 试题二( ( ( (共共共共15

15 15 15分分分分) ) ) ) 阅读以下说明和C语言函数,将解答填入答题纸的对应栏内. [ [ [ [说明 说明 说明 说明] ] ] ] 下面待修改的C 程序完成的功能是:对于给定的一个长正整数,从其个位数开始, 每隔一位取一个数字(即取其个位、百位、万位等数字) ,形成一个新的整数并输出. 例如,将该程序修改正确后,运行时若输入

14251382 ,则输出的整数为

4532 . 下面给出的C 程序代码中有五个错误,请指出所有的错误. [C [C [C [C程序代码 程序代码 程序代码 程序代码] ] ] ] 行号 行号 行号 行号 代码 代码 代码 代码

01 02

03 04

05 06

07 08

09 10

11 12

13 14

15 16

17 18

19 20

21 22 #include int main() { long n, num;

int i;

do { printf( 请输入一个正整数: );

scanf( %ld ,n);

}while(n = 0;

i++) { if (i %

2 = 1) { num = num + (n % 10) * k;

k = k * 10;

} n = n / 10;

} printf( 新数据为:%d n ,num);

return 0;

}

2007 年上半年 程序员 下午试卷 第4页(共

11 页) 试题三 试题三 试题三 试题三( ( ( (共共共共15

15 15 15分分分分) ) ) ) 阅读以下说明和C语言函数,将应填入 (n) 处的字句写在答题纸的对应栏内. [ [ [ [说明 说明 说明 说明] ] ] ] 函数count_ months(DATE start, DATE end)的功能是:计算两个给定日期之间所 包含的完整月份数. 该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数. 规定两个相邻年份的同月同日之间的间隔为

1 年.例如,2007.5.30~2008.5.30 的间隔为

1 年.若相邻两年中前一年是闰年,并且日期是

2 月29 日,则到下一年的

2 月28日为1年,即2008.2.29~2009.2.28的间隔为1年. 规定两个相邻月份的相同日之间的间隔为1个月, 但需要特别考虑月末的特殊情况. 例如,2007.1.29~2007.2.28 的间隔为

1 个月,同理, 2007.1.30

30 30 30~2007.2.

28、 2007.1.31

31 31 31~2007.2.28的间隔都是1个月. 计算起止日期间隔不足一年的完整月份数时,分两种情况: 1)起止日期不跨年度.先用终止日期的月号减去起始日期的月号得到月份数,然 后再根据情况进行修正.例如,起止日期为2008.3.31~2008.9.20,通过月号算出月份 数为6.修正时,通过调用函数makevalid将2008.9.31改为2008.9.30,与终止日期 2008.9.20比较后,将月份数修正为5. 2)起止日期跨年度.计算方法如下例所示:对于起止日期2008.7.25~2009.3.31, 先计算2008.7.25~2008.12.25的月份数为5,再算出2008.12.25~2009.3.25的月份 数为3,因此2008.7.25~2009.3.31之间的完整月份数为8. 日期数据类型定义如下: typedef struct { int year;

int month;

int day;

/*日期的年号(4位) 、月和日号*/ }DATE;

程序中使用的函数cmp_date()、isLeapYear()和makevalid()说明如下: 函数名 参数 返回值 说明 cmp_date DATE start, DATE end -1:startend 比较两个日期的大小,例如: 2007.1.31 小于 2007.5.15, 2008.11.23 等于 2008.11.23, 2008.1.31 大于 2007.5.15 isLeapYear int year 1:year 表示的年号是闰年 0:year 表示的年号不是闰年 判断给定年号是否为闰年 makevalid DATE *r 无 若日期*r 是非法的,即*r 不是 闰年时其日期为

2 月29 日,或 者其

4、

6、

8、10 等月份出现了

31 日, 则将其日期改为当月最后 一天的日期.

2007 年上半年 程序员 下午试卷 第5页(共

11 页) [C [C [C [C语言函数 语言函数 语言函数 语言函数] ] ] ] int count_months(DATE start, DATE end) { int years = 0, months = 0;

DATE r;

if (cmp_date(start,end) >

0) { r = start;

start = end;

end = r;

} years = end.year - start.year;

/*计算年数*/ r = start;

r.year = end.year;

if (cmp_date(r,end) >

0) { /*修正年数*/ (1) ;

r.year--;

} if (r.year <

end.ye........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题