itgle.com

阅读下列函数说明、图和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)

题目

阅读下列函数说明、图和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代码,回答问题[说明] 假定用一个整型数组表示一个长整数,数组的每个元素 ”相关问题
  • 第1题:

    试题三(共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存在的缺点。


    正确答案:
    试题三参考答案(共 15分)
    【问题 1】 (12分)
    (1) sizeof(int) (3分)
    若考生解答为一个正整数,则给 2分
    (2)temp[k++] 或*(temp+k++)或等价表示 (3分)
    (3) ik 或等价表示 (3分)
    (4)a[k++] 或*(a+k++)或等价表示 (3分)
    【问题 2】(3分)
    可能由于动态内存申请操作失败而导致函数功能无法实现,时间和空间效率低。
    注:考生仅回答出运行速度慢则给 2分,其他含义相同的描述可给满分或酌情给分。

  • 第2题:

    阅读下列说明和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", &n); 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的元素值。


    答案:
    解析:
    【问题1】
    (1)b[0]=1
    (2)j(3)a[j]<=a[i]
    (4)b[i]=len+1
    【问题2】(4分)
    (5)动态规划法
    (6)O(n2)
    【问题3】(5分)
    B={1,2,2,3,3,4}

  • 第3题:

    设有说明int(*ptr)[M];其中的标识符ptr是() 。

    A.M个指向整型变量的指针

    B.指向M个整型变量的函数指针

    C.一个指向具有M个整型元素的一维数组的指针

    D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量


    C 解析:根据C语言的语法规则可知,int(*ptr)[M]中的标识符ptr是一个指向具有M个整型元素的一维数组指针。

  • 第4题:

    设有说明int(*ptr)[M];其中ptr是()。

    A.M个指向整型变量的指针

    B.指向M个整型变量的函数指针

    C.一个指向具有M个整型元素的一维数组的指针

    D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量


    正确答案:C

  • 第5题:

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


    答案:
    解析:
    (1)arr[n](2)arr[i+1]=arr[i](3)arr[i+1](4)break(5)pdata,n,price(6)idx【解析】

    1空如果所有元素都比带插入元素小,那么带插入元素排在最后。23空插入元素并将其他元素后移4空如果price小于等于0,则break终止循环5空调用inserElem函数时填写的参数6遍历所有元素并输出结果。

  • 第6题:

    设有说明int (*ptr)[M]; 其中ptr是 。

    A.M个指向整型变量的指针

    B.指向M个整型变量的函数指针

    C.一个指向具有M个整型元素的一维数组的指针

    D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量


    C 解析:指针数组是指数组中的元素是指针类型的数据,本题中的数组元素指针指向的是整型数据。注意:通过带下标的指针变量引用一维数组元素。