问题 问答题

阅读以下说明和C函数,回答问题1至问题3,将解答写在答题纸的对应栏内。  

   

    

 

【说明1】函数substring(constcharstr[],intindex,intlength)的功能是求出字符串str中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串"Chinatoday"为例,其第一个字符"C"的序号为1(而其在字符数组str中的下标为0),从序号5开始且长度为3的子串为"at"。【C函数1】

【问题1】函数substring中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行(有注释时,注释可省略)。

答案

参考答案:

解析:

 本问题考查字符串运算及常见编程错误的处理。  求子串运算substring的原型如下:    根据题目说明,参数index为子串的位置序号(从1开始),length为子串的长度。显然,在函数substring中,首先应判断参数的合理性,即index应不小于1,length应不小于0,同时,从index开始可以得到长度为length的子串,即index+length-1应不大于最后一个字符的序号。因此,第6行的代码是正确的。  第7行申请动态内存块的语句是正确的。第9行的代码判断内存申请是否成功,其中,判断指针tptr的表达式tptr=0有错误,即误用了"="与"=",导致无论内存申请操作是否成功,在此都将tptr赋值为空指针,造成内存泄漏。第10、11行代码用于从字符串str中复制子串,代码是正确的。第12行的代码设置字符串的结束标志,为错误代码。由于所获得字符串的长度为length,其在动态数组tptr的下标从0开始,因此,下标length-1为最后一个字符的下标,tptr[length-1]='\0'会导致丢失最后一个字符,因此该语句中tptr的下标应为length。

单项选择题


(每题所给选项中有一个或一个以上的正确答案,请在题后的括号内填入正确的选项)

沈阳市综合服务公司(以下简称服务公司)为偿还其欠该市某食品加工部(以下简称食品加工部)的货款,签发了出票日期为2003年8月20日,金额为3400元人民币的中国农业银行该市分行的转账支票一张,未记载收款人名称就交付了票据。8月22日,有人持该支票到该市东胜庄饲料厂(以下简称饲料厂)购买饲料,此时,该转账支票的大小写金额均为人民币13400元,并且没有做过任何背书。饲料厂收下支票当日,在背书人与被背书人栏内盖上自己的印章作为背书,再以持票人的身份将该支票交给中国农业银行沈阳支行向阳营业所,由该所于当日通过中国农业银行沈阳支行光华路营业所从服务公司银行账户上划走人民币13400元,转入饲料厂账户。5月底服务公司与其开户银行对账时,发现账上存款短缺10000元,经双方核查,发现该转账支票金额与存根不同,已被改写。经协商无果,服务公司向人民法院提起诉讼,称该转账支票已被涂改,请求确定该票据无效,并判令被告饲料厂承担经济损失13400元,支票金额涂改,两农业银行营业所未按规定进行严格审查,错划款项,造成原告经济损失,也应承担责任。后经司法技术鉴定,该转账支票上金额字迹系消褪后书写而成,且在饲料厂经手前已被改写。请问:

付款人对被提示付款的票据的哪个方面不负审查义务?( )

A.票据格式是否合法,绝对应当记载事项是否齐全

B.票据的背书是否连续

C.持票人是否为真正的票据权利人

D.提示付款人的合法身份证明或有效证件

选择题