阅读下列函数说明、图和C代码,回答问题[说明]假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。[函数]int cmp(int *LA, int *LB);/*比较长整数LA与LB的绝对值大小*//*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/int ADD (int *LA, int *LB, int *LC)/*计算长整数LA与LB的和,结果存储于LC中*//*注意:正数与负数的和相当于正数与负数绝对值的差*//*数据有误返回0,正常返回1*/{if(LA == NULL || LB == NULL || LC == NULL)return 0;int *pA, *pB, i, N, carry, flag;flag = LA[0] + LB[0];switch(flag){ /*根据参与运算的两个数的符号进行不同的操作*/case 0:case 2:Lc[0] = LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/pA = LA;pB = LB;(1) ;break;case 1: /*LA与LB异号*//*比较两者的绝对值大小,结果符号与较大者相同*/flag = (2) ;if(flag 0){ /*LA较大*/LC[0] = LA[0];pA = LA;pB = LB;}else if(flag 0)(/*LB较大*/LC[0] = LB[0];pA = LB;pB = LA;}else{/*LA与LB相等*/LC[0] = 0;LC[1] = 0;return 1;}flag = -1;break;default:return 0;break;}/*switch*//*绝对值相加减*//*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减情况*/(3) ;N = LA[1] LB[1] ? LA[1] : LB[1];for(i = 0; i N; i++){if(i = pA[1]){/*LA计算完毕*/carry += flag * pB[i+2];}else if(i = pB[1]){/*LB计算完毕*/carry += pA[i+2];}else{carry += pA[i+2] + flag * pB[i+2];}LC[i+2] = carry % 10;carry /= 10;if( (4) ){/*需要借位,针对减法*/LC[i+2] += 10;carry--;}}/*for*/if( (5) ){/*最高进位,针对加法*/LC[i+2] = carry;i++;}if(LC[i+1] == 0) i--; /*若最高位为零,针对减法*/LC[1] = i;return 1;};/*ADD*/

阅读下列函数说明、图和C代码,回答问题

[说明]

假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:

m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]

其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数、1表示负数。

运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。

[函数]

int cmp(int *LA, int *LB);

/*比较长整数LA与LB的绝对值大小*/

/*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/

int ADD (int *LA, int *LB, int *LC)

/*计算长整数LA与LB的和,结果存储于LC中*/

/*注意:正数与负数的和相当于正数与负数绝对值的差*/

/*数据有误返回0,正常返回1*/

{

if(LA == NULL || LB == NULL || LC == NULL)return 0;

int *pA, *pB, i, N, carry, flag;

flag = LA[0] + LB[0];

switch(flag){ /*根据参与运算的两个数的符号进行不同的操作*/

case 0:

case 2:

Lc[0] = LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/

pA = LA;

pB = LB;

(1) ;

break;

case 1: /*LA与LB异号*/

/*比较两者的绝对值大小,结果符号与较大者相同*/

flag = (2) ;

if(flag > 0){ /*LA较大*/

LC[0] = LA[0];

pA = LA;

pB = LB;

}

else if(flag < 0)(/*LB较大*/

LC[0] = LB[0];

pA = LB;

pB = LA;

}

else{/*LA与LB相等*/

LC[0] = 0;

LC[1] = 0;

return 1;

}

flag = -1;

break;

default:

return 0;

break;

}/*switch*/

/*绝对值相加减*/

/*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减情况*/

(3) ;

N = LA[1] > LB[1] ? LA[1] : LB[1];

for(i = 0; i < N; i++){

if(i >= pA[1]){/*LA计算完毕*/

carry += flag * pB[i+2];

}

else if(i >= pB[1]){/*LB计算完毕*/

carry += pA[i+2];

}

else{

carry += pA[i+2] + flag * pB[i+2];

}

LC[i+2] = carry % 10;

carry /= 10;

if( (4) ){/*需要借位,针对减法*/

LC[i+2] += 10;

carry--;

}

}/*for*/

if( (5) ){/*最高进位,针对加法*/

LC[i+2] = carry;

i++;

}

if(LC[i+1] == 0) i--; /*若最高位为零,针对减法*/

LC[1] = i;

return 1;

};/*ADD*/


相关考题:

阅读以下说明和流程图,回答问题将解答填入对应栏。[说明]本流程图实现采用递归函数来求一个整数数组中从元素0到元素n中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有n的元素的数组的最小值时,只要求将前n-1的元素的最小值与第n个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。注:int min(int X,int y)为返回两数中最小数的函数。int minInArray(int a[],int n)为返回数组中最小数的函数。minA为数组中最小值。[问题l]将流程图的(1)~(4)处补充完整。[问题2]min()函数的定义为(5)。

设有说明int(*ptr)[M];其中的标识符ptr是( )。A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M个整型元素的一维数组的指针D.具有M个指针元素的一维指针数组,每个元素都只能指向整型变量

设有说明int(*ptr)[M];其中的标识符ptr是______。A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M个整型元素的一维数组的指针D.具有M个指针元素的一维指针数组,每个元素都只能指向整型变量

阅读下列说明和C代码,回答问题l至问题3.将解答写在答题纸的对应栏内。【说明】计算一个整数数组a的最长递增子序列长度的方法描述如下:假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤in)为结尾元素的最长递增子序列的长度,则数组a的最长递增子序列的长度为器;其中b[i]满足最优子结构,可递归定义为:【c代码】下面是算法的c语言实现。(1)常量和变量说明a:长度为n的整数数组,待求其最长递增子序列b:长度为n的数组,b[i]记录以a[i](0≤in)为结尾元素的最长递增子序列的长度,其中0≤inlen:最长递增子序列的长度i.j:循环变量temp,临时变量(2)C程序include stdio . hint maxL (int *b. int n) {int i. temp =0;For(i = 0; i n; i++){if (b[i] temp )Temp= b[i];}Return temp;【问题l】(8分)根据说明和C代码,填充C代码中的空(1)~(4)。【问题2】(4分)根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示)。【问题3】(3分)已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值。

试题三(共15分)阅读以下说明和C函数,回答问题 l和问题 2,将解答填入答题纸的对应栏内。【说明】对于具有n个元素的整型数组a,需要进行的处理是删除a中所有的值为 0的数组元素,并将a中所有的非 O元素按照原顺序连续地存储在数组空间的前端。下面分别用函数CompactArr_v1 和CompactArr v2来实现上述处理要求,函数的返回值为非零元素的个数。 函数CompactArr_vl(int a[],int n)的处理思路是:先申请一个与数组a的大小相同的动态数组空间,然后顺序扫描数组a的每一个元素,将遇到的非O元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组a中。函数CompactArr_v2(int a[],int n)的处理思路是:利用下标i(初值为 0)顺序扫描数组a的每一个元素,下标k(初值为0)表示数组 a中连续存储的非0元素的下标。扫描时,每遇到一个数组元素,i就增 1,而遇到非 0元素并将其前移后k才增 1。【问题1】 (12分)请根据说明中函数CompactArr_v1的处理思路填补空缺(1)~(3),根据CompactArr_v2的处理思路填补空缺(4)。【问题2】(3分)请说明函数CompactArr vl存在的缺点。

设有说明int(*ptr)[M];其中ptr是()。 A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M个整型元素的一维数组的指针D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量

阅读下列说明和C代码,回答问题,将解答填入答题纸的对应栏内。【说明】计算一个整数数组a的最长递增子序列长度的方法描述如下:假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度为 ;其中b[i]满足最优子结构,可递归定义为:【C代码】下面是算法的C语言实现。(1)常量和变量说明a:长度为n的整数数组,待求其最长递增子序列b:长度为n的数组,b[i]记录以a[i](0≤ilen:最长递增子序列的长度i, j:循环变量temp:临时变量(2)C程序#include int maxL(int*b, int n) {int i, temp=0;for(i=0; itemp) temp=b[i]; } return temp;}int main() { int n,a[100], b[100], i, j, len; scanf("%d", for(i=0;i【问题1】(8分)根据说明和C代码,填充C代码中的空(1)~(4)。【问题2】(4分) 根据说明和C代码,算法采用了 (5) 设计策略,时间复杂度为 (6) (用O符号表示)。【问题3】(5分) 已知数组a={3,10,5,15,6,8},据说明和C代码,给出数组b的元素值。

阅读以下C代码,回答问题(1)~(6),将解答填入答题纸的对应栏内。【说明】函数insertElem的功能是在元素升序排列的数组中加入一个新元素并保持数组元素升序排列的特点。在main函数中输入若干表示价格的实数,输入为0或负数或实数个数超出限定数量时终止,调用insertElem将价格按升序保存在数组pdata中,最后输出所输入的实数

设有说明int(*ptr)[M];其中的标识符ptr是() 。A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M个整型元素的一维数组的指针D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量

设有说明int (*ptr)[M]; 其中ptr是 。A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M个整型元素的一维数组的指针D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量