阅读以下说明和程序流程图,将应填入 (n) 处的字句写在对应栏内。 [说明] 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为: m=a[k]×10k-2+a[k-1]×10k-3+…

admin2013-01-05  32

问题 阅读以下说明和程序流程图,将应填入  (n)  处的字句写在对应栏内。
   [说明]
   假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
   m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]
   其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。注:数组下标从0开始。
   流程图(图4-1)用于计算长整数的加(减)法。运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注,此处不考虑溢出情况,即数组足够大。这样在程序中引进两个指针pA和pB,分别指向绝对值较大者和较小者。而对绝对值相加,情况,让pA指向LA,pB指向LB,不区分绝对值大小。pA±pB可用通式pA+flag*pB来计算,flag为+1时即对应pA+pB,flag为-1时即对应pA-pB。需特别注意的是,对于相减,不够减时要进行借位,而当
最高位借位后正好为0时,结果的总位数应减1;对于加法,有最高进位时,结果的总位数应加1。
  
流程图中涉及的函数说明如下:
   (1)cmp(int *LA,int *LB)函数,用于比较长整数LA与LB的绝对值大小,若LA绝对值大于LB绝对值则返回正值,LA绝对值小于LB绝对值返回负值,相等则返回0。
   (2)max(int A,int B)函数,用于返回整数A与B中较大数。
   另外,对流程图中的写法进行约定:(1)“:=”表示赋值,如“flag:=LA[0]+LB[0]”表示将“LA[0]+LB[0]”的结果赋给flag,相当于C中的赋值语句:“flag=LA[0]+LB[0];”;(2)“:”表示比较运算,如“flag:1”表示flag与1比较。  
(5)

选项

答案LC[i+2]:0

解析 对这种题目,首先阅读说明,从功能上了解程序的结构,把握整体框架,再仔细对照阅读流程图,且勿先阅读流程图。
   仔细阅读完说明,就知道整体框架了:先决定符号,再进行绝对值的加减,其中加减是用flag来标识的。对于加法,要注意进位,特别是最高进位;对于减法,要注意借位,亦即负进位,在此不用考虑不够减情况,但仍要特别注意最高借位,当最高位正好为0时,要把高位所有的0去掉。
   空(1)很容易就得到答案,应为flag:=1。
   空(2)以下就开始绝对值的加减了。此时PA、PB已正确赋值。
   在计算过程中,进位是需要特别注意的,从下面的流程可知,Carry表示的就是进位,需要进行初始化,故空(2)应填carrry:=0。
   空(3)以下是i>=N的情况,即对于计算结束,进行后期处理,此时就要考虑最高进位的问题。可得空(3)应填carry:0,即判断最高进位是否为O(对减法为负进位)。
   空(4)是删除高位的0,故应填LC[i+1]:0。
   空(5)处是具体进行加减法运算的。空(5)处的条件主要是针对减法的,当不够减时需要借位,故空(5)应填LC[i+2]:0。
转载请注明原文地址:https://kaotiyun.com/show/KeDZ777K
0

最新回复(0)