1、一是 做好换流站重大隐患缺陷的整改 治理 , 紧密联合直流技术中心与相关厂家,深挖缺陷机理原因,制定可靠的整改方案,C语言程序设计练习试卷 1答案与解析 1 【正确答案】 变量 k没有定义。 变量 num应初始化为 0。 第 10行 n之前应加取地址符号。 第 13行 n应大于 0。 第 14行 if语句条件错误,应该将 “=”改为 “=”。 【知识模块】 C语言程序设计 2 【正确答案】 m%10或其他等价形式 k-i-1 !isPalm(n),或 isPalm(n)!=1或 isPalm(n)=0 a n+a 【试题解析】 函数 isPalm(long m)的功能是判断 m是否为回文数,其
2、方法是将 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是否为回文数, (3)处应该是对它的调用,同时取反,即 “!isPalm(n)”。 (4)处为 “a”, (5)处应该是数 n与反序数 a相加得到的新数,即 “n+a”。 【知识模块】 C语言程序设计
3、3 【正确答案】 days=days+1或其他等价形式 date=5或其他等价形式 m 12或其他等价形式 isLeapYear(year)或其他等价形式 date 【试题解析】 对于 2月份,需要考虑所在年份是否为闰年,如果不是,则按 365天计算,否则天数要加 1,所以 (1)处应为 days=days+1或其他等价形式。程序中date变量表示的是星期几,如果是星期五 (即 date=5)则 c取值为 1,否则为 0,所PA(2)处应为 date=5。因为要考虑到每个月的 13日是否为周五,所以要对其进行遍历,但是 1月份之前己考虑过,所以就要考虑 2到 12月,那么 m就应该从 1到11
4、,所以 (3)处应为 m 12或 m =11,或其他等价形式。同时也很容易得出 (4)处是判断年份是否为闰年,因此需要调用相应的判断函数,即 (4)处应为isLeapYear(year)或其他等价表示。通过之前的代码分析,不难得到 (5)处为 date。 【知识模块】 C语言程序设计 4 【正确答案】 str0=i或其他等价形式 t_end t_stail或其他等价形式 24*60*60或其他等价形式 interval/60 C+或其他等价形式 【试题解析】 对于读入的每一条记录,首先要判断是拨入还是拨出,如果是拨入则不计费,然后继续下一条记录,所以 (1)处应为 str0=i。对于 0点之前
5、到 0点整的通话长度就是全天的秒数减去开始时间的秒数,即 24*60*60-t_start。因此,(2)处应为 t_end t_start,而 (3)处应为 24*60*60或其他等价形式。由于 interval是以 秒为单位的通话长度,而话费是以分钟为单位的,所以 (4)处应为interval/60,剩余时间应该是按分钟计费,所以 (5)处应为 C+。 【知识模块】 C语言程序设计 【知识模块】 C语言程序设计 5 【正确答案】 (1)return fibl(n-1)+fibl(n-2) (2)longf=1或 long f=(long)1或 longf=1L 【知识模块】 C语言程序设计
6、6 【正确答案】 溢出 【知识模块】 C语言程序设计 7 【正确答案】 函数 fibl。原因是递归算法时间消耗大。 【试题解析】 问题 1(1)函数 fibl不能通过编译,是因为语句 “fibl(n)=fibl(n-1)+fibl(n-2)”出错,正确应该为 “return fibl(n-1)+fibl(n-2)”。 (2)for循环中 i从 3开始递增,对于 i=1或 2并不会执行,因此,只需给 f赋初值1即可。 问题 2由于 long数据类型是有范围限制的,当 n超过某个值时,函数结果就会溢出,接下来的计算结果也就不会准确了。 问题 3两个函数一 个采用的是递归算法,另一个是迭代算法,通常
7、情况下,前者的计算时间更长。因为递归会造成大量的函数调用和数据返回,需要很多的时间,效率较低。 【知识模块】 C语言程序设计 8 【正确答案】 years-,或其他等价形式 12_r.month,或其他等价形式 &r months-,或其他等价形式 years*12 【试题解析】 years=end. year-start. year语句计算出的年份多算了一年,应该减去 1,所以 (1)处应为 years-。跨年度时计算日期应该分两阶段,年前部分和年 后部分,所以 (2)处应为 12-r.month。根据函数 makevalid的接口说明可知,函数的实参应该是变量 r的地址,所以 (3)处应为
8、 “&r”。用两个月份号相减可能会多算一个月,因此应该将 months减少 1,所以 (4)处应为 “months-”。计算总月份数时,年份数 years*12再加上不足一整年的月份数即可得到月份总数,所以 (5)处为“years*12”。 【知识模块】 C语言程序设计 9 【正确答案】 pstrn-1=y,或 *(pstr+n-1)=y,或其等价表示 pstrn+2=0,或 *(pstr+n+2)=0,或其等价表示 pstrn-2=c|pstrn-2=s,或其等价表示 retum pstr plural(wci),或其等价表示 【试题解析】 空 (1)处 if语句处理的是以 “y”结尾的名词
9、,所以空 (1)处应填入“pstrn-1=y”或其等价形式。由于串 pstr的长度发生了变化,所以需要设置新的结束标志,空 (2)处应填入 “pstrn+2=0”或其等价形式。空 (3)处 if语句处理串的末尾为 “s”、 “ch”或 “sh”的情形,空 (3)处应填入 “ pstrn一 2一 cllps打 n一 2一 s”或其等价形式。根据函数 “char*plmal(char*word)”的定义,最后应将求得的给定名词的复数形式返回给主调函数 main,对于串,应返回串空间的首地址,即返回指针 pstr,因此空 (4)处应填入 “return pstr”。空 (5)处应调用函数plural(char *word)对指定名词求复数,数组 wc初始化时已设置了名词序列,所以空 (5)处应填入 “plural(wci)”。 【知识模块】 C语言 程序设计