在第3讲作业2动态整型数组类 CArray 上增加对下标运算符、赋值运算符的重载: 在动态整型数组类 CArray 中,添加深拷贝构造函数 设计一个动态整型数组类 CArray ,并对CArray类进行测试 数据成员: int *vec; // 动态数组指针 int size; //动态数组规模 成员函数:public CArray(int n); // 构造函数,构造规模为n的数组 CArray (CArray &arr); //拷贝构造函数 ~CArray(); //析构函数,释放动态数组空间 int length(); // 取数组元素个数 int get(int i); // 取数组第i个元素 void set(int i, int value); // 设置数组第i个元素 int getMax(); // 取数组最大元素 int getMin(); // 取数组最大元素 void print(); //输出动态数组的所有元素 int & operator[](int); CArray & operator=(const CArray &arr);
第1题
[说明]
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数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比较。
(1)
第2题
编写一程序,求一维数组中下标为偶数的元素之和。 编程提示: 1.定义一个数组a并初始化。 2.定义一个整型变量sum,存放下标为偶数的元素和,并初始化为0。 3.从数组的第0个元素开始,每次循环变量递增2,一直到数组的最后一个元素,将其累加到sum变量。 4.输出sum变量即为下标为偶数的元素之和。/* c6-6.c 求一维数组中下标为偶数的元素之和*/ #include "stdio.h" int main( ) { int i,sum=0; /* 初始化sum为0 */ int a[]={2,3,4,5,6,7,8,9}; for(i=0; i<8; ) * 请补充完整循环语句 sum+="a[i];" printf("sum="%d\n",sum);" return 0;>
第3题
A.int a[4]={1,2,3,4,5};
B.int a[2][2]={1,2,3,4,5};
C.int a[4]={'1','2','3','4');
D.int a[3][]={1,2,3,4,5,6};
第4题
编写程序,输出一维数组a中的元素最小值及其下标。 编程提示: 1.定义一个整型变量存放最小值下标,将其初始化为0 ,例如:int p=0;即从数组第零个元素开始判断。 2.通过循环,依次判断数组中的每一个元素a[i]是否小于a[p],如果是,则将p和a[p]的值作相应的改变。/* c6-5.c 输出一维数组中元素的最小值及其下标*/ #include "stdio.h" int main( ) { int i,m,p,a[10]={9,8,7,6,1,3,5,18,2,4}; /* m为最小值,p为其下标 */ m=a[0]; p=0; for(i=1;i<10;i++) if { ; p="i;}" * 请补充完整此语句 printf("%d,%d\n",a[p],p); 输出一维数组a中的最小值及其下标 return 0;>
第5题
[说明]
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数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*/
第6题
有长度为10的一维整型数组a,由键盘输入它的值(10个不等的数),求a数组中最小元素的值及其在数组中的位置。 输入样例: 16 9 56 23 24 75 6 81 36 35 输出样例: 最小元素是 6,是第7个元素 注意:a[0]是数组中的第1个元素。 请完善程序。(有2个空,答案一行写一个,不要添加多余的空格) #include <stdio.h> int main() { int i,a[10],min,k; // k存储位置 for(i=0;i<10;i++) scanf("%d",&a[i]); min="a[0];" 假设第1个数为最小数 k="1;" k保存最小数的位置,此时为1 for(i="1;i<10;i++)" { if(a[i] ) min更新为较小数 k更新为较小数的位置 } printf("最小元素是 %d,是第%d个元素",min,k); 提示:求数组元素的最小值可以参考本周附加例题解析“求最值及其位置”中的数组方法例题 ,注意位置序号与本例的区别>
第7题
A.2 7 8 12 35
B.12 35 8 7 2
C.35 12 8 7 2
D.8 7 12 35 2
第8题
A.a0、a1、a2、a3
B.a[0]、a[1]、a[2]、a[3]
C.a[1]、a[2]、a[3]、a[4]
D.a[0]、a[1]、a[2]、a[3]、a[4]
第9题
注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。
程序运行结果如下:
9173546280
public class ex20_2 {
private int[] a=new int[10];
public static void main(String[] args)
ex20_2 obj20_2=new ex20_2 );
obj20_2. method ( );
}
public void init () {
for(int i=0;i<a.length;i++) {
a[i] =i;
}
}
public void method() {
int c,i,j;
i=0;
j=a.length-1;
init();
while(i<j){
while((a[i]%2==1)&&i<j)
i++;
while((a[j]%2==0)&&i<j)
j--
if(i<j){
c=a [i];
______________;
a[j]=c;
_______________;
}
}
for(i=0;i<a.length;i++){
System.out.print(Integer.toString(a[i]));
}
}
}
第10题
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!