阅读以下说明和c函数,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 c语言常用整型(int)或长整型(1ong)来说明需要处理的整数,在一般情况下可以满足表示及运算要求,而在某些情况下,需要表示及运算的整数比较大,即使采用更长的整型(例如

admin2010-01-08  29

问题 阅读以下说明和c函数,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明】
c语言常用整型(int)或长整型(1ong)来说明需要处理的整数,在一般情况下可以满足表示及运算要求,而在某些情况下,需要表示及运算的整数比较大,即使采用更长的整型(例如,long long类型,某些c系统会提供)也无法正确表示,此时可用一维数组来表示一个整数。假设下面要处理的大整数均为正数,将其从低位到高位每4位一组进行分组(最后一组可能不足4位),每组作为1个整数存人数组。例如,大整数2543698845679015847在数组A中的表示如下(特别引入-1表示分组结束):

在上述表示机制下,函数add_large_number(A,B,c)将保存在一维整型数组A和B中的两个大整数进行相加,结果(和数)保存在一维整型数组c中。
【c函数】
Void add_large_number(int A[],  int B[],  int c[])
{
int i,cf;    /*cf存放进位*/
int t,*p;    /*t为临时变量,p为临时指针*/
cf=  ( 1)  ;
for(i=0 ; A>-l&&B>-1;i++){
/*将数组A、B对应分组中的两个整数进行相加*/
t=(2)  ;
C=t%i0000;
cf=  (3)  ;
}
if(  (4))P=B;
else P=A;
for(;P>-1;i++){/*将分组多的其余各组整数带进位复制入数组C*/
C=(p+cf)%i0000;  cf=(p+cf)/10000;
}
if(cf>0)  C[i++]=cf;(5)=-1;    /*标志”和数”的分组结束*/

选项

答案(1)0 (2)A[i]+B[i]+cf (3)t/10000 (4)A[i]==-l或B[i]>-1(5)C[i]

解析 题目用整型数组表示大数组,一个数组元素表示4位的整数。在这种表示方式下进行两个大整数的相加运算时,需要对进位的处理多加考虑。已知cf表示进位情况,那么在开始进行相加之前,cf的初始值应该为O,所以空(1)的答案为“O”。大家都知道在进行加法操作的时候,需要从个位开始进行对齐然后从末位进行相加。对于保存在整型数组中的大整数,我们从最低位A[0]和B[0]开始相加,并且根据程序中c=t%10000对t的使用,可以推断出空(2)的答案为“A+B+cf”。需要注意的是,在进行运算的同时,需要对前面相加产生的进位cf进行相加,同时也要计算出此次相加产生的进位,所以空(3)进位的计算的答案应该为“t/10000”。但是每次进行相加的两个整数的位数不一定相同,对于位数比较长的那个整数,我们应该把相加之后剩余的位数连带进位记录下来,保存到数组c中的对应位置,从程序中可以看出临时指针p指向的是位数比较长的这个数组。根据题目中的两个for循环设置的满足循环的条件可以看出如果数组中的整数已经相加结束,肯定满足A==-1否则B==-1,所以空(4)处的判断条件应该为“A:=-1”或者“B>-l”。当两个整数相加之后会产生进位,新的数据的位数可能会比原来的长,这时候我们就需要把多出来的这一位(即最后一次相加产生的进位)作为和数来进行处理。函数在最后用一个if语句对这种情况进行了处理,而空(5)的语句应该是对存放相加之和的数组设置结束标志,所以空(5)的答案为c
转载请注明原文地址:https://kaotiyun.com/show/VIjZ777K
0

最新回复(0)