阅读以下说明和C程序代码,将解答写在答题纸的对应栏内。 【说明】 下面是一个待修改的C程序,其应该完成的功能是:对于输入的一个整数num,计算其位数k,然后将其各位数字逆序转换为字符串保存并输出。若nun为负整数,则输出字符串应有前缀“一”

admin2013-07-03  33

问题 阅读以下说明和C程序代码,将解答写在答题纸的对应栏内。
    【说明】
    下面是一个待修改的C程序,其应该完成的功能是:对于输入的一个整数num,计算其位数k,然后将其各位数字逆序转换为字符串保存并输出。若nun为负整数,则输出字符串应有前缀“一”。例如,将该程序修改正确后,运行时若输入“14251”,则输出“15241”;若输入“一6319870”,则输出“一0789136”。
    下面给出的C程序代码中有五处错误,请指出错误代码所在的行号并给出修改正确后的完整代码行。
【C程序代码】
行号    代码
1       #include
2       #include
3       int main()
4       {
5           long num=0,t=0;char*pstr,i=0,k=0;
6
7       sancf(“%ld”,&num);    /*输入一个整数,存入num*/
8       t=num;  k:num!=0?0:1;
9       while(t>=0){    /*计算位数*/
10          t=t/10;
11          k++:
12      }
13
14      pstr=(char * )malloc((k+2)+sizeof(char));
15      If(pstr=0)  return一1;
16
17      i=0:
18      if(num<0){
19          num=一num
20          pstr[0]=‘一’;i=1;
21      }
22      for(;k>0;k- -){      /*形成字符串*/
23          pstr[i++]=num%10;
24          num=num/10:
25      }
26      pstr[k]=‘\0’;    /*设置字符串结尾*/
27      printf(“%s\n”,pstr);
28      free(pstr);
29      return 0:
30      }

选项

答案行号 修改正确后的完整代码行 7 sancf(”%ld”,&num) 9 while(t!=0)或while(t) 15 if(pstr=0)或其等价形式 23 pstr[i++]=num.[*94]10+‘0’或其等价形式 26 pstr[i]=‘\0’或其等价形式

解析 本题考查考生对使用C语言编程时常见错误的查找和排除。
    程序的第7行是使格式化输入函数scanf()的调用,这是比较容易出错的地方。常见的错误是格式控制串与输入列表中的变量类型不匹配,或是丢失变量前的取地址运算符号“&”。本行的错误就是变量num前丢失了地址运算符号“&.”,应将其改为:sancf(”%ld”,&num)。
    程序第8~12行的功能是计算变量num的位数并将其结果以变量k显示。计算一个整数的算法是:将其循环除以10,每次在丢掉其个位数字的同时,其计算位数的变量执行加1操作,直到该整数的值被除到等于0为止。换句话说,只要该整数不为0,就一直执行循环除10操作。因此,第9行的循环条件出错,应改为:while(t! =0)。
    程序第14~15行用于为要创建的字符串申请动态存储空间,并判断是否申请成功。第15行存在一个在程序员考试中多次考查的错误,判断内存是否申请成功的条件应改为:if(pstr==0)。
    程序第22~25行用于将整数num转化为其逆序的字符串。此处的错误在第23行,因为*pstr中应存储的是字符而非数字字符,而num%10为整数,应在其后加上字符‘0’。因此,第23行的错误应修改为:pstr[i++]=num%10+‘0’。
    程序第26行用于设置字符串的结束标志。由于num的值可正可负,将字符串的结束标志设置在k下标处在num的值为负时会出错。修改的方法是用i作为下标,使得‘\0’正好跟在最后一个数字字符的后面。因此,第26行的错误应修改为:pstr=‘\0’。
转载请注明原文地址:https://kaotiyun.com/show/YnjZ777K
0

最新回复(0)