[试题]

阅读下列函数说明、图和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代码,回答问题[说明] 在进行文法分析的时候,通常需要检

[主观题]阅读下列函数说明、图和C代码,回答问题[说明]在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。函数中使用的预定义符号如下:typedef struct TreeNode{/*二叉排序树节点*/char *word;struct TreeNode *left, *right;}BNODE;[函数]int getWord(FI

  • 查看答案
  • 阅读下列函数说明和C£«£«代码,回答问题[说明] 任何一种程序都是为了解决问题

    [试题]阅读下列函数说明和C++代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手

  • 查看答案
  • 阅读下列函数说明和C£«£«代码,回答问题[说明] 对多个元素的聚合进行遍历访问

    [主观题]阅读下列函数说明和C++代码,回答问题[说明]对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图5-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。[图5-1][C++代码]template (1) >class Iterator{

  • 查看答案
  • 阅读以下说明和流程图,回答问题。[说明] 从键盘输入一个高精度正整数n,去掉其中

    [主观题]阅读以下说明和流程图,回答问题。[说明]从键盘输入一个高精度正整数n,去掉其中s个数字后按原左右次序再组成一个新的正整数。对给定的n,要寻找一种方案,使得余下的数字组成的新数最小。算法分析:每次删除一个数字,选择一个使余下的数最小的数字作为删除对象。当s=1时,在n中删除哪一个数字能达到最小的目的?从左到右每相邻的两个数字比较:若出现减,郎左边大于右边,则删除左边的大数字;若不出现减,即所有数字全部升序,则删除最右边的大数字。当s>l(当然小于n的位数),按上述操作一个一个删除,删除一个达到最小

  • 查看答案
  • 阅读以下函数说明和C代码,回答问题[说明] 任何一种程序都是为了解决问题而撰写的

    [试题]阅读以下函数说明和C代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”

  • 查看答案
  • 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。说明:一个简单

    [案例分析题] 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。说明:一个简单的图形编辑器提供给用户的基本操作包括:创建图形、创建元素、选择元素以及删除图形。图形编辑器的组成及其基本功能描述如下。(1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。(2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。(3)编辑器提供了两种操作图形的工具:选择工具和创建工具。对图形进行操作时,一次只能使用一种工具(即当前活动工具,active)。①创建工具用于创建文

  • 查看答案
  • 阅读以下应用说明、图和C£«£«代码,根据要求回答问题1至问题3。 [说明] 已

    [主观题]阅读以下应用说明、图和C++代码,根据要求回答问题1至问题3。[说明]已知以下C++程序运行时的输出结果如下。1:11:11:1[C++程序]01 include <iostream>02 using namespace std;03 class Stock{04 protect:05 (1) { };06 Stock(int n, int pr=1) {07 shares = n; share_val=pr;08 };09 void ~Stock() { };10 public:11 //成员

  • 查看答案
  • 阅读下列程序说明和C代码,回答问题1~2。[说明] 本程序用古典的Eratost

    [试题]阅读下列程序说明和C代码,回答问题1~2。[说明]本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宜布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9:重复上述步骤,再取走最小数3,宣布它为素数,井取走3的倍数,于是留下5、7。反复重复上述步骤,直至筛中为空时,工作结束,求得2至 10中的全部素数。程序中用数组sieve表示筛子,数组元素sieve[i]的值为1

  • 查看答案
  • 假定MyClass为一个类,那么下列的函数说明中,()为该类的析构函数。

    [单选题]假定MyClass为一个类,那么下列的函数说明中,( )为该类的析构函数。A.void~MyClass();B.~MyClass(int n)C.MyClass();D.~MyClass();

  • 查看答案
  • 假定MyCIass为一个类,那么下列的函数说明中,()为该类的析构函数。

    [单选题]假定MyCIass为一个类,那么下列的函数说明中,( )为该类的析构函数。A.void~MyClass();B.~MyClass(int n);C.MyClass();D.~MyClass();

  • 查看答案
  • 阅读下列函数说明、图和C代码,回答问题[说明] 假定用一个整型数组表示一个长整数