欢迎来到麦多课文档分享! | 帮助中心 海量文档,免费浏览,给你所需,享你所想!
麦多课文档分享
全部分类
  • 标准规范>
  • 教学课件>
  • 考试资料>
  • 办公文档>
  • 学术论文>
  • 行业资料>
  • 易语言源码>
  • ImageVerifierCode 换一换
    首页 麦多课文档分享 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    【计算机类职业资格】程序员-C语言程序设计及答案解析.doc

    • 资源ID:1336136       资源大小:78.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:5000积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    二维码
    微信扫一扫登录
    下载资源需要5000积分(如需开发票,请勿充值!)
    邮箱/手机:
    温馨提示:
    如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如需开发票,请勿充值!如填写123,账号就是123,密码也是123。
    支付方式: 支付宝扫码支付    微信扫码支付   
    验证码:   换一换

    加入VIP,交流精品资源
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【计算机类职业资格】程序员-C语言程序设计及答案解析.doc

    1、程序员-C 语言程序设计及答案解析(总分:35.01,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:5.00)阅读以下说明和 C 语言函数,回答问题。说明下面待修改的 C 程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。下面给出的 C 程序代码中有 5 个错误,请指出所有的错误。C 程序代码01 #include stdio.h0203 int main( )04 05 long n, num; 06 int

    2、i; 0708 do 09 printf(“清输入一个正整数: “); 10 scanf(“%id“, n); 11 while(n=0); 12 k=1; 13 for(i=1; n=0; i+) 14 if(i io 2=1) 15 Rum=num+(n%10)*k; 16 k=k * 10; 17 18 n=n/10; 19 20 printf(“新数据为: %d/n“, num); 21 return 0; 22 (分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_二、B试题二/B(总题数:1,分数:5.00)阅读以下说明和

    3、 C 程序代码,将程序补充完整。说明下面 C 程序代码的功能是:对于输入的一个正整数 n(100n1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将 n 与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278 不是回文数,其反序数为 872,相加后得到的 1150 还不是回文数,再将 1150 与其反序数 511 相加,得到的 1661 是回文数。函数 int isPalm(long m)的功能是:将正整数 m 的各位数字取出存入数组中,然后判断其是否为回文数。若 m 是回文数则返回 1,否则

    4、返回 0。C 程序代码#includestdio.h#includestdlib.hint isPalm(long m)int i=0, k=0; char str32; while(m0) strk+=U (1) /U +0; m=m/10; for(i=0; ik/2; i+)if(stri!=strU (2) /U)return 0; return 1; int main( )long n, a, t; printf(“input a positive integer: “); scanf(“%ld“, if(n100|n=1000)return -1; while(U (3) /U)

    5、printf(“%id-“, n); for(a=0, t=n; t0; )a=U (4) /U*10+t%10; t=t/10; n=U (5) /U; printf(“%id/n“, n); system(“pause“); return 0; (分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、B试题三/B(总题数:1,分数:5.00)阅读以下说明和 C 语言函数,填补空缺。说明已知 1900 年 1 月 1 日是星期一,下面的函数 count_5_13(int year)用于计算给定的年份 year 中有几个“黑色星期五

    6、”。“黑色星期五”指既是 13 日又是星期五的日期。函数 count_5_13(int year)首先算出年份 year 的 1 月 13 日是星期几,然后依次计算每个月的 13 日是星期几,若是星期五,则计数。程序中使用了函数 isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为 1(或 0)分别表示 year 是(或不是)闰年。C 语言函数int Count_5_13(int year)int date; /*date 为 0 表示星期日,为 16 分别表示星期一至星期六*/long days=0; /*days 记录天数*/int m, y, c=0; /*

    7、c 用于表示黑色星期五的个数*/if(year1900) return-1; /*计算从 1900 年 1 月 1 日起,至给定年份 year 的 1 月 13 日间隔的天数*/days=12;for(y=1900; yyear; y+) days +=365; if (iSLeapYear(Y)U (1) /U; date=(days%7)+1)%7; /*算出给定年份 year 的 1 月 13 日是星期几+/c=(U (2) /U)?1:0; for(m=1; U(3) /U; m+) switch(m) case 1: case 3: case 5: case 7: case 8: c

    8、ase 10: case 12: days=31; break; case 4: case 6: case 9: case 11: days=30; break; case 2: days=28; if(U (4) /U)days=29; break; /*end of switch*/date=(days%7)+ U(5) /U)%7; if (date=5) c+; /*end of for*/return c; (分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、B试题四/B(总题数:1,分数:5.00)阅读以下说明和 C

    9、 语言程序,填补空缺。说明某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件“dial.txt”中,其数据格式如下:拨入或拨出标记通话开始时间通话结束时间对方号码注 1:数据字段以一个空格作为分隔符。注 2:拨入和拨出标记均为小写字母。拨入标记为“i”,表示其他用户呼叫本机,本机用户不需付费;拨出标记为“o”,表示本机呼叫其他用户,此时本机用户需要付费。注 3:通话开始和结束时间的格式均为:HH:MM:SS。其中 HH 表示小时,取值 0023;MM 表示分钟,取值0059;SS 表示秒,取值 0059。从通话开始到结束这段时间称为通话时

    10、间,假定每次通话时间以秒为单位,最短为 1 秒,最长不超过 24 小时。注 4:跨月的通话记录计入下个月的通话数据文件。例如“o 23:01:12 00:12:15”表示本次通话是本机呼叫其他用户,时间从 23 时 01 分 12 秒至次日的 0时 12 分 15 秒,通话时间为 71 分 03 秒。下面程序的功能是计算并输出该用户本月电话费(单位:元)。通话计费规则为:(1)月通话费按每次通话费累加;(2)每次的通话费按通话时间每分钟 0.08 元计算,不足 1 分钟时按 1 分钟计费。对于每次的拨出通话,程序中先分别计算出通话开始和结束时间相对于当日 0 点 0 分 0 秒的时间长度(以秒

    11、为单位),然后算出本次通话时间和通话费。例如,若输入文件 dialtxt 的数据如下所示,则输出 fee=7.44。o 14:05:23 14:11:25 82346789i 15:10:00 16:01:15 13890000000o 10:53:12 11:07:05 63000123o 23:01:12 00:12:15 13356789001C 语句程序代码#includestdio.hFILE *fin; int main( )char str80; int h1, h2, m1, m2, s1, s2; long t_start, t_end, interval; int c; d

    12、ouble fee=0; fin=fopen(“dial. txt“, “r“)j; if (!fin)return -1; while(!feof(fin) if(!fgets(str, 80, fin) break; if(U (1) /U) continue; h1=(str2-48)*10+str3-48; m1=(str5-48)*10+str6-48; s1=(str8-48)*10+str9-48; h2=(str11-48)*10+str12-48; m2=(str14-48)*10+str15-48; s2=(str17-48)*10+str18-48; t_start=h1

    13、*60*60+m1*60+s1; /*通话开始时间*/t_end=h2*60*60+m2*60+s2; /*通话结束时间*/if(U (2) /U) /*若通话开始和结束时间跨日*/interval=U (3) /U -t_start+t_end; elseinterval=t_end-t_start;c=U (4) /U; /*计算完整分钟数表示的通话时间*/if(interval%60)U (5) /U; fee+=c*0.08; fclose(fin); printf(“fee=%.21f/n“, fee); return 0; (分数:5.00)(1).(分数:1.00)填空项 1:_

    14、填空项 1:_填空项 1:_填空项 1:_填空项 1:_五、B试题五/B(总题数:1,分数:5.00)阅读以下说明和 C 函数代码,回答问题。说明著名的菲波那契数列定义式为:f1=1,f 2=1,f n=fn-1+fn-2(n=3,4,)因此,从第 1 项开始的该数列为 1,1,2,3,5,8,13,21,。函数 fib1 和 fib2 分别用递归方式和迭代方式求解菲波那契数列的第 n 项(调用 fib1、fib2 时可确保参数 n 获得一个正整数 1。C 函数代码(分数:5.01)(1).函数 fib1 和 fib2 存在错误,只需分别修改其中的一行代码即可改正错误。 (1)函数 fib1

    15、不能通过编译,请写出 fib1 中错误所在行修改正确后的完整代码。 (2)函数 fib2 在 n2 时不能获得正确结果,请写出 fib2 中错误所在行修改正确后的完整代码。(分数:1.67)填空项 1:_(2).将函数 fib1 和 fib2 改正后进行测试,发现前 46 项都正确,而第 47 项的值是一个负数,请说明原因。(分数:1.67)填空项 1:_(3).函数 fib1、fib2 求得菲波那契数列第 n 项(n40)的速度并不相同,清指出速度慢的函数名,并简要说明原因。(分数:1.67)填空项 1:_六、B试题六/B(总题数:1,分数:5.00)阅读以下说明和 C 语言函数,填补空缺。

    16、说明函数 count months(DATE start, DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。规定两个相邻年份的同月同日之间的问隔为 1 年。例如,2007.5.302008.5.30 的间隔为 1 年。若相邻两年中前一年是闰年,并且日期是 2 月 29 日,则到下一年的 2 月 28 日为 1 年,即 2008.2.292009.2.28 的间隔为 1 年。规定两个相邻月份的相同日之间的间隔为 1 个月,但需要特别考虑月末的特殊情况。例如,2007.1.292007.2.28 的间隔为 1 个月,

    17、同理,2007.1.302007.2.28、2007.1.312007.2.28 的间隔都是 1 个月。计算起止日期间隔不足一年的完整月份数时,分两种情况:(1)起止日期不跨年度。先用终止日期的月号减去起始日期的月号得到月份数,然后再根据情况进行修正。例如,起止日期为 2008.3.312008.9.20,通过月号算出月份数为 6。修正时,通过调用函数 makevalid将 2008.9.31 改为 2008.9.30,与终止日期 2008.9.20 比较后,将月份数修正为 5。(2)起止日期跨年度。计算方法如下例所示:对于起止日期 2008.7.252009.3.31,先计算 2008.7.

    18、252008.12.25 的月份数为 5,再算出 2008.12.252009.3.25 的月份数为 3,因此 2008.7.252009.3.31之间的完整月份数为 8。日期数据类型定义如下:typedef struct int year; int month; int day; /*日期的年号(4 位)、月和日号*/DATE; 程序中使用的函数 cmp_date( )、isLeapYear( )和 makevalid( )说明如表 11-8 所示。 表 11-8 函数说明函数名 参数 返回值 说明cmp_date DATE startDATE end-1:startend0:start=e

    19、nd1:startend比较两个日期的大小,例如,2007.1.30 小于 2007.5.152008.11.23 等于 2008.11.232008.1.31 大于 2007.5.15isLeap Yearint year 1:year 表示的年号是闰年0:year 表示的年号不是闰年判断给定年号是否为闰年makevalid DATE *r 无 若日期*r 是非法的,即*r 不是闰年时其日期为 2 月 29 日,或者其 4、6、9、11 等月份出现了 31 日,则将其日期改为当月最后C 语言函数int count_months(DATE start, DATE end)int years=0

    20、, 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) /*修正年数*/U (1) /U; r.year-; if(r. yearend. year) /*跨年度时,先计算到 12 月的月份数*/months=U (2) /U; r. month=U (12) /U; months+=(end. month+12-r. month)%12;

    21、 r. year=end. year; r. month=end. month; makeva!id(U (3) /U); /*将日期 r 修正为有效日期*/if(cmp_date(r, end)0) /*修正月份数*/U (4) /U; months+=U (5) /U; /*计算总月份数*/return months; (分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_七、B试题七/B(总题数:1,分数:5.00)阅读以下说明和 C 程序,填补空缺。说明下面的程序按照以下规则输出给定名词的复数形式。(1)若名词以“y”结尾,则

    22、删除 y 并添加“ies”。(2)若名词以“s”、“ch”或“sh”结尾,则添加“es”。(3)其他所有情况,直接添加“s”。C 程序#includestdio.h#includestring.hchar *plural(char *word)int n; char *pstr; n=strlen(word); /*求给定单词的长度*/pstr=(char*)malloc(n+3); /*申请给定单词的复数形式存储空间*/if(!pstr | n2)return NULL; strcpy(pstr, word); /*复制给定单词*/if(U (1) /U)pstrn-1=i; pstrn=e

    23、; pstrn+1=s; U(2) /U; elseif(pstrn-1=s|pstrn-1=h pstrn+1=s; pstrn+2=/0; elsepstrn=s; pstrn+1=/0; U (4) /U; main( ) int i; char *ps; char wc910=“chair“, “dairy“, “boss“, “circus“, “fly“, “dog“, “church“, “clue“, “dish“); for(i=0; i9; i+) ps=U (5) /U; printf(“%s: %s/n“, wci, ps); /*输出单词及其复数形式*/free(ps

    24、); /*释放空间*/system(“pause“); (分数:5.00)(1).(分数:1.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_程序员-C 语言程序设计答案解析(总分:35.01,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:5.00)阅读以下说明和 C 语言函数,回答问题。说明下面待修改的 C 程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。下面给出的 C 程序代码中

    25、有 5 个错误,请指出所有的错误。C 程序代码01 #include stdio.h0203 int main( )04 05 long n, num; 06 int i; 0708 do 09 printf(“清输入一个正整数: “); 10 scanf(“%id“, n); 11 while(n=0); 12 k=1; 13 for(i=1; n=0; i+) 14 if(i io 2=1) 15 Rum=num+(n%10)*k; 16 k=k * 10; 17 18 n=n/10; 19 20 printf(“新数据为: %d/n“, num); 21 return 0; 22 (分数

    26、:5.00)(1).(分数:1.00)填空项 1:_ (正确答案:变量 k 没有定义。)解析:填空项 1:_ (正确答案:变量 num 应初始化为 0。)解析:填空项 1:_ (正确答案:第 10 行 n 之前应加取地址符号。)解析:填空项 1:_ (正确答案:第 13 行 n 应大于 0。)解析:填空项 1:_ (正确答案:第 14 行 if 语句条件错误,应该将“=”改为“=”。)解析:解析 本题中有如下 5 个错误:(1)变量 k 没有定义就使用。(2)变量 num 没有初始值就使用。(3)第 10 行输入变量时没有使用取地址符号。(4)第 13 行循环条件设置错误,造成无穷循环。(5)

    27、第 14 行误把赋值符号“=”当做关系运算符“等于”。二、B试题二/B(总题数:1,分数:5.00)阅读以下说明和 C 程序代码,将程序补充完整。说明下面 C 程序代码的功能是:对于输入的一个正整数 n(100n1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将 n 与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278 不是回文数,其反序数为 872,相加后得到的 1150 还不是回文数,再将 1150 与其反序数 511 相加,得到的 1661 是回文数。函数 int isPalm(lon

    28、g m)的功能是:将正整数 m 的各位数字取出存入数组中,然后判断其是否为回文数。若 m 是回文数则返回 1,否则返回 0。C 程序代码#includestdio.h#includestdlib.hint isPalm(long m)int i=0, k=0; char str32; while(m0) strk+=U (1) /U +0; m=m/10; for(i=0; ik/2; i+)if(stri!=strU (2) /U)return 0; return 1; int main( )long n, a, t; printf(“input a positive integer: “)

    29、; scanf(“%ld“, if(n100|n=1000)return -1; while(U (3) /U) printf(“%id-“, n); for(a=0, t=n; t0; )a=U (4) /U*10+t%10; t=t/10; n=U (5) /U; printf(“%id/n“, n); system(“pause“); return 0; (分数:5.00)(1).(分数:1.00)填空项 1:_ (正确答案:m%10 或其他等价形式)解析:填空项 1:_ (正确答案:k-i-1)解析:填空项 1:_ (正确答案:!isPalm(n),或 isPalm(n)!=1 或 i

    30、sPalm(n)=0)解析:填空项 1:_ (正确答案:a)解析:填空项 1:_ (正确答案:n+a)解析:解析 函数 isPalm(long m)的功能是判断 m 是否为回文数,其方法是将 m 的各位数字依次取出并转换为对应的数字字符保存在数组 str 中,然后再判断 str 中的字符中序列是否对称。将 m 的个位数取出可以采用如下公式“m%10”,即对 10 取余数。所以(1)处应为 m%10 或其他等价形式。若判断数组 str 中的字符序列是否对称,即比较 str(i)与 str(k-1-i)是否相等,所以(2)应为 k-1-i。函数 isPalm(long m)的功能是判断 m 是否为

    31、回文数,(3)处应该是对它的调用,同时取反,即“!isPalm(n)”。(4)处为“a”,(5)处应该是数 n 与反序数 a 相加得到的新数,即“n+a”。三、B试题三/B(总题数:1,分数:5.00)阅读以下说明和 C 语言函数,填补空缺。说明已知 1900 年 1 月 1 日是星期一,下面的函数 count_5_13(int year)用于计算给定的年份 year 中有几个“黑色星期五”。“黑色星期五”指既是 13 日又是星期五的日期。函数 count_5_13(int year)首先算出年份 year 的 1 月 13 日是星期几,然后依次计算每个月的 13 日是星期几,若是星期五,则计

    32、数。程序中使用了函数 isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为 1(或 0)分别表示 year 是(或不是)闰年。C 语言函数int Count_5_13(int year)int date; /*date 为 0 表示星期日,为 16 分别表示星期一至星期六*/long days=0; /*days 记录天数*/int m, y, c=0; /*c 用于表示黑色星期五的个数*/if(year1900) return-1; /*计算从 1900 年 1 月 1 日起,至给定年份 year 的 1 月 13 日间隔的天数*/days=12;for(y=1

    33、900; yyear; y+) days +=365; if (iSLeapYear(Y)U (1) /U; date=(days%7)+1)%7; /*算出给定年份 year 的 1 月 13 日是星期几+/c=(U (2) /U)?1:0; for(m=1; U(3) /U; m+) switch(m) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; case 4: case 6: case 9: case 11: days=30; break; case 2: days=28; if(U

    34、(4) /U)days=29; break; /*end of switch*/date=(days%7)+ U(5) /U)%7; if (date=5) c+; /*end of for*/return c; (分数:5.00)(1).(分数:1.00)填空项 1:_ (正确答案:days=days+1 或其他等价形式)解析:填空项 1:_ (正确答案:date=5 或其他等价形式)解析:填空项 1:_ (正确答案:m12 或其他等价形式)解析:填空项 1:_ (正确答案:isLeapYear(year)或其他等价形式)解析:填空项 1:_ (正确答案:date)解析:解析 对于 2 月份

    35、,需要考虑所在年份是否为闰年,如果不是,则按 365 天计算,否则天数要加1,所以(1)处应为 days=days+1 或其他等价形式。程序中 date 变量表示的是星期几,如果是星期五(即date=5)则 c 取值为 1,否则为 0,所 PA(2)处应为 date=5。因为要考虑到每个月的 13 日是否为周五,所以要对其进行遍历,但是 1 月份之前己考虑过,所以就要考虑 2 到 12 月,那么 m 就应该从 1 到 11,所以(3)处应为 m12 或 m=11,或其他等价形式。同时也很容易得出(4)处是判断年份是否为闰年,因此需要调用相应的判断函数,即(4)处应为 isLeapYear(ye

    36、ar)或其他等价表示。通过之前的代码分析,不难得到(5)处为 date。四、B试题四/B(总题数:1,分数:5.00)阅读以下说明和 C 语言程序,填补空缺。说明某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件“dial.txt”中,其数据格式如下:拨入或拨出标记通话开始时间通话结束时间对方号码注 1:数据字段以一个空格作为分隔符。注 2:拨入和拨出标记均为小写字母。拨入标记为“i”,表示其他用户呼叫本机,本机用户不需付费;拨出标记为“o”,表示本机呼叫其他用户,此时本机用户需要付费。注 3:通话开始和结束时间的格式均为:HH:MM:S

    37、S。其中 HH 表示小时,取值 0023;MM 表示分钟,取值0059;SS 表示秒,取值 0059。从通话开始到结束这段时间称为通话时间,假定每次通话时间以秒为单位,最短为 1 秒,最长不超过 24 小时。注 4:跨月的通话记录计入下个月的通话数据文件。例如“o 23:01:12 00:12:15”表示本次通话是本机呼叫其他用户,时间从 23 时 01 分 12 秒至次日的 0时 12 分 15 秒,通话时间为 71 分 03 秒。下面程序的功能是计算并输出该用户本月电话费(单位:元)。通话计费规则为:(1)月通话费按每次通话费累加;(2)每次的通话费按通话时间每分钟 0.08 元计算,不足

    38、 1 分钟时按 1 分钟计费。对于每次的拨出通话,程序中先分别计算出通话开始和结束时间相对于当日 0 点 0 分 0 秒的时间长度(以秒为单位),然后算出本次通话时间和通话费。例如,若输入文件 dialtxt 的数据如下所示,则输出 fee=7.44。o 14:05:23 14:11:25 82346789i 15:10:00 16:01:15 13890000000o 10:53:12 11:07:05 63000123o 23:01:12 00:12:15 13356789001C 语句程序代码#includestdio.hFILE *fin; int main( )char str80;

    39、 int h1, h2, m1, m2, s1, s2; long t_start, t_end, interval; int c; double fee=0; fin=fopen(“dial. txt“, “r“)j; if (!fin)return -1; while(!feof(fin) if(!fgets(str, 80, fin) break; if(U (1) /U) continue; h1=(str2-48)*10+str3-48; m1=(str5-48)*10+str6-48; s1=(str8-48)*10+str9-48; h2=(str11-48)*10+str12-

    40、48; m2=(str14-48)*10+str15-48; s2=(str17-48)*10+str18-48; t_start=h1*60*60+m1*60+s1; /*通话开始时间*/t_end=h2*60*60+m2*60+s2; /*通话结束时间*/if(U (2) /U) /*若通话开始和结束时间跨日*/interval=U (3) /U -t_start+t_end; elseinterval=t_end-t_start;c=U (4) /U; /*计算完整分钟数表示的通话时间*/if(interval%60)U (5) /U; fee+=c*0.08; fclose(fin);

    41、 printf(“fee=%.21f/n“, fee); return 0; (分数:5.00)(1).(分数:1.00)填空项 1:_ (正确答案:str0=i或其他等价形式)解析:填空项 1:_ (正确答案:t_endt_stail 或其他等价形式)解析:填空项 1:_ (正确答案:24*60*60 或其他等价形式)解析:填空项 1:_ (正确答案:interval/60)解析:填空项 1:_ (正确答案:C+或其他等价形式)解析:解析 对于读入的每一条记录,首先要判断是拨入还是拨出,如果是拨入则不计费,然后继续下一条记录,所以(1)处应为 str0=i。对于 0 点之前到 0 点整的通话

    42、长度就是全天的秒数减去开始时间的秒数,即 24*60*60-t_start。因此,(2)处应为 t_endt_start,而(3)处应为 24*60*60 或其他等价形式。由于 interval 是以秒为单位的通话长度,而话费是以分钟为单位的,所以(4)处应为interval/60,剩余时间应该是按分钟计费,所以(5)处应为 C+。五、B试题五/B(总题数:1,分数:5.00)阅读以下说明和 C 函数代码,回答问题。说明著名的菲波那契数列定义式为:f1=1,f 2=1,f n=fn-1+fn-2(n=3,4,)因此,从第 1 项开始的该数列为 1,1,2,3,5,8,13,21,。函数 fib

    43、1 和 fib2 分别用递归方式和迭代方式求解菲波那契数列的第 n 项(调用 fib1、fib2 时可确保参数 n 获得一个正整数 1。C 函数代码(分数:5.01)(1).函数 fib1 和 fib2 存在错误,只需分别修改其中的一行代码即可改正错误。 (1)函数 fib1 不能通过编译,请写出 fib1 中错误所在行修改正确后的完整代码。 (2)函数 fib2 在 n2 时不能获得正确结果,请写出 fib2 中错误所在行修改正确后的完整代码。(分数:1.67)填空项 1:_ (正确答案:(1)return fibl(n-1)+fibl(n-2) (2)longf=1 或 long f=(l

    44、ong)1 或 longf=1L)解析:(2).将函数 fib1 和 fib2 改正后进行测试,发现前 46 项都正确,而第 47 项的值是一个负数,请说明原因。(分数:1.67)填空项 1:_ (正确答案:溢出)解析:(3).函数 fib1、fib2 求得菲波那契数列第 n 项(n40)的速度并不相同,清指出速度慢的函数名,并简要说明原因。(分数:1.67)填空项 1:_ (正确答案:函数 fibl。原因是递归算法时间消耗大。)解析:解析 问题 1(1)函数 fibl 不能通过编译,是因为语句“fibl(n)=fibl(n-1)+fibl(n-2)”出错,正确应该为“return fibl(n-1)+fibl(n-2)”。 (2)for 循环中 i 从 3 开始递增,对于 i


    注意事项

    本文(【计算机类职业资格】程序员-C语言程序设计及答案解析.doc)为本站会员(unhappyhay135)主动上传,麦多课文档分享仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文档分享(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
    备案/许可证编号:苏ICP备17064731号-1 

    收起
    展开