一、问答题
1、阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。
[说明]
两个包含有限个元素的非空集合A、B的相似度定义为|A∩B|/|A∪B|,即它们的交集大小(元素个数)与并集大小之比。
以下的流程图计算两个非空整数集合(以数组表示)的交集和并集,并计算其相似度。已知整数组A[1:m]和B[1:n]分别存储了集合A和B的元素(每个集合中包含的元素各不相同),其交集存放于数组C[1:s],并集存放于数组D[1:t],集合A和B的相似度存放于SIM。
例如,假设A={1,2,3,4},B={1,4,5,6},则C={1,4),D={1,2,3,4,5,6},A与B的相似度SIM=1/3。
[流程图]
参考答案:
s t C[s] D[t] s/t
2、
阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
[说明]
下面的函数sort(int n,int a[])对保存在数组a中的整数序列进行非递减排序。由于该序列中的元素在一定范围内重复取值,因此排序方法是先计算出每个元素出现的次数并记录在数组b中,再从小到大顺序地排列各元素即可得到一个非递减有序序列。例如,对于序列6,5,6,9,6,4,8,6,5,其元素在整数区间[4,9]内取值,因此使数组元素b[0]~b[5]的下标0~5分别对应数值4~9,顺序地扫描序列的每一个元素并累计其出现的次数,即将4的个数记入b[0],5的个数记入b[1],依此类推,9的个数记入b[5]。最后依次判断数组b的每个元素值,并将相应个数的数值顺序地写入结果序列即可。
对于上例,所得数组b的各个元素值如下:
那么在输出序列中写入1个4、2个5、4个6、1个8、1个9,即得4,5,5,6,6,6,6,8,9,从而完成排序处理。
[C函数] void sort(int n,int a[]) { int *b; int i, k, number; int minimum=a[0],maximum=a[0]; /*minimum和maximum分别表示数组a的最小、最大元素值*/ for(i=1; i<n; i++){ if(______) minimum=a[i]; eiSe if (______) maximum=a[i]; } number=maximum-minimum+1; if(number<=i)return; b=(int*)calloc(number,sizeof(int)); if(!b) return; for(i=0;i<n; i++){/*计算数组a的每个元素值出现的次数并记入数组b */ k=a[i]-minimum; ++b[k]; } /*按次序在数组a中写入排好的序列*/ i=______; for(k=0; k<number; k++) for(; ______; --b[k] ) a[i++]=minimum+______; }
参考答案:
a[i]<minimum,或a[i]<=minimum,或其等价形式 a[i]>maximum,或a[i]>=maximum,或其等价形式 0 b[k],或b[k]>0,或b[k]!=0,或其等价形式 k
3、
阅读以下说明和C代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
[说明1]
下面的函数countChar(char*text)统计字符串text中不同的英文字母数和每个英文字母出现的次数(英文字母不区分大小写)。
[C代码1] int countChar(char *text) { int i,sum=0; /*sum保存不同的英文字母数*/ char *ptr; int c[26]={0); /*数组C保存每个英文字母出现的次数*/ /*c[0]己录字母A或a的次数,c[1]记录字母B或b的次数,依此类推*/ ptr=______; /*ptr初始时指向字符串的首字符*/ while (*ptr) { if (isupper(*ptr) ) c [*ptr-'A']++; else if (islower(*ptr)) c[*ptr-'a']++; ______; /*指向下一个字符*/ } for(i=0;i<26; i++) if(______)sum++; return sum; }[说明2]
将下面C代码2中的空缺补全后运行,使其产生以下输出。
f2:f2:f2:2 f3:f3:1 [C代码2] #include<stdio.h> int f1(int(*f)(int)); int f2(int); int f3(int); int main() { printf("%d\n",f1(______)); printf("%d\n",f1(______)); return 0; } int f1(int(*f)(int)) { int n=0; /*通过函数指针实现函数调用,以返回值作为循环条件*/ while (______) n++; return n; } int f2(int n) { printf("f2:"); return n*n-4; } int f3(int n) { printf("f3:"); return n-1; }
参考答案:
text,或&text[0],或其等价形式 ptr++,或++ptr,或ptr=ptr+1,或ptr+=1 c[i],或*(c+i) f2 f3 f(n),或(*f)(n)
4、
阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。
[说明]
正整数n若是其平方数的尾部,则称n为同构数。例如,6是其平方数36的尾部,76是其平方数5776的尾部,6与76都是同构数。下面的程序求解不超过10000的所有同构数。
已知一位的同构数有三个:1,5,6,因此二位同构数的个位数字只可能是1,5,6这三个数字。依此类推,更高位数同构数的个位数字也只可能是1,5,6这三个数字。
下面程序的处理思路是:对不超过10000的每一个整数a,判断其个位数字,若为1、5或6,则将a转换为字符串as,然后对a进行平方运算,并截取其尾部与as长度相等的若干字符形成字符串后与as比较,根据它们相等与否来断定a是否为同构数。
[C程序] #include<stdio.h> #include<stdlib.h> #include<string.h> int myitoa(int,char*); /*将整数转换为字符串*/ /*right取得指定字符串尾部长度为length的子串,返回所得孔串的首字符指针*/ char*right(char*,int length); int main() { int a,t; int fen; char as[10],rs[20]; printf("[1,10000]内的同构数:\n"); for(a=1; a<=10000;a++) { t=______; /*取整数a的个位数字*/ if(t!=1&&t!=5&&t!=6)continue; len=myitoa(a,as); /*数a转换为字符串,存入as*/ myitoa(a*a,rs); /*数a的平方转换为字符串,存入rs*/ /*比较字符串as与rs末尾长度为len的子串是否相等*/ if(strcmp(as,______)==0) /*若相同则是同构数并输出*/ printf("%s的平方为%s\n",as,rs); } return 0; } int myitoa(int num,char*s) /*将整数num转换为字符串存入s*/ { int i,n=0; char ch; /*从个位数开始,取num的每一位数字转换为字符后放入s[]*/ while(num){ s[n++]=______+'0'; num=num/10; } s[n]='\0'; for(i=0; i<n/2;i++){ /*将S中的字符串逆置*/ ______;s[i]=s[n-i-1]; s[n-i-1]=ch; } return n; /*返回输入参数num的位数*/ } char*right(char*ms,int length) /*取字符串ms尾部长度为length的孔串,返回所得孔串的首字符指针*/ { int i; for(;*ms;ms++); /*使ms到达原字符串的尾部*/ for(i=0;i<length;______); /*使ms指向所得孔串的首部字符*/ return ms; }
参考答案:
a%10,或其等价形式 right(rs,len) num%10,或其等价形式 ch=s[i],或ch=*(s+i) i++,ms--,或ms--,i++,或其等价形式
5、
阅读以下说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
某应急交通控制系统(TraficControlSystem)在红灯时控制各类车辆(Vehicle)的通行,其类图如下图所示,在紧急状态下应急车辆红灯时也可通行,其余车辆按正常规则通行。
类图
下面的C++代码实现以上设计,请完善其中的空缺。
[C++代码] #include<typeinfo> #include<iostream> using namespace std; class Vehicle {/*抽象基类,车辆*/ public: virtual void run()=0; }; class Emergency { /*抽象基类,可在红灯时通行的接口,函数均为纯虚函数*/ public: ______=0; //isEmergent()函数接口 ______=0; //runRedLight()函数接口 }; clasS Car:public Vehicle{ public: ~Car(){} void run(){/*代码略*/ ) ); class Truck:public Vehicle{ public: ~Truck(){} void run(){ /*代码略*/ } ); class PoliceCar:______ { private: bool isEmergency; public: PoliceCar():Car(),Emergency() { this->isEmergency=false; } PoliceCar(bool b):Car(),Emergency() {this->isEmergency=b;} ~P0liceCar(){ } bool isEmergent(){ return ______} void runRedLight() { /*代码略*/ } ); /*类Ambulance、FireEngine实现代码略*/ class TraficControlsystem { /*交通控制类*/ private: Vehicle*v[24]; int numVehicles;/*在构造函数中设置初始值为0*/ public: void control(){ //控制在紧急情况下应急车辆红灯通行,其他情况按常规通行 for(int i=0;i<numVehicles; i++){ Emergency *ev=dynamic_cast<Emergency*>(v[i]); if(ev !=0) ______->runRedLight(); else ______->run(); } } void add(Vehicle*vehicle) { v[numVehicles++] =vehicle; } /*添加车辆*/ void shutDown() {for(int i=0; i<numVehicles; i++) { delete v[i];} } }; int main(){ TraficControlSystem*tcs=new TraficControlSystem; tcs->add(new Car()); tcs->add(new PoliceCar()); tcs->add(new Ambulance()); tcs->add(new Ambulance(true)); tcs->add(new FireEngine(true));tcs->add(new FireEngine()); tcs->add(new Truck()); tcs->contr01();tcs->ShutDown(); delete tcs; }
参考答案:
virtual bool isEmergent() virtual void nmRedLight() public Car, public Emergency this->isEmergency ev v[i]
6、
阅读以下说明和Java代码,填充程序中的空缺,将解答填入答题纸的对应栏内。
[说明]
某应急交通控制系统(TraficControlSystem)在红灯时控制各类车辆(Vehicle)的通行,其类图如下图所示,在紧急状态下应急车辆在红灯时可通行,其余车辆按正常规则通行。
类图
下面的Java代码实现以上设计,请完善其中的空缺。
[Java代码] abstract class Vehicle{ public Vehicle(){ } abstract void run(); }; interface Emergency{ ______; ______; }; class Car extends Vehicle{ public Car(){ } void run(){ /*代码略*/ } }; Class Truck extends Vehicle{ public Truck(){ } void run() { /*代码略*/ } }; class PoliceCar ______ { boolean isEmergency= false; public PoliceCar(){ } public PoliceCar(boolean b) {this.isEmergency=b; } public boolean isEmergent(){ return ______ } public void runRedLight(){ /*代码略*/ } }; /*类Ambulance、FireEngine实现代码略*/ public class TraficControlsystem { /*交通控制类*/ private Vehicle[]V=new Vehicle[24]; int numVehicles; public void control(){ for {int i=0; i<numVehicles; i++){ if(V[i]instanceof Emergency&&((Emergency)v[i]). isEmergent()){ (______).runRedLight(); }else ______. run(); } } void add(Vehicle vehicle){ v[numVehicles++]=vehicle;}/*添加车辆*/ void shutDown(){/*代码略*/} public static void main(String[]args){ TraficC0ntrolSystem tcs=new TraficControlSystem(); tcs.add(new Car()); tcs.add(new PoliceCar()); tcs.add(new Ambulance()); tcs.add(new Ambulance(true)); tcs.add(new FireEngine(true)); tcs.add(new Truck()); tcs.add(new FireEngine()); tcs.control(); tcs.shutDown(); } }
参考答案:
boolean isEmergent() void runRedLight() extends Car implements Emergency this.isEmergency (Emergency)v[i] v[i]
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!