软考初级程序员下午题(14)

试题四

阅读以下说明和C程序,将应填入______处的字句填写完整。
[说明]
某旅游服务应用程序运行时,根据输入的两个城市名查找其间的距离。各城市间的距离如下表所示。表格中的第一行和第一列表示城市名,表中的每个元素是一个整数,代表该元素所在行和列对应的城市之间的距离(单位:km)。 在这里插入图片描述在这里插入图片描述

在程序中,城市名用一维全局数组cityTable存储,城市之间的距离矩阵用二维全局数组kmTable表示,并用相应的值对这两个数组进行初始化。 
  [C程序1] 
    #define NCities 8    //城市个数 
    #define TRUE 1 
    static char*cityTable[NCities]={//城市名按字典序升序排列 
    "Beijing", 
    ……    //其他城市名略去 
    "Sanya", 
    }; 
    static int kmTable[NCities][NCities]={ 
    {0,1697,2695,937,1784,1356,926,2543}, 
    {1697,0,313,1840,533,940,1409,1505}, 
    ……    //剩余元素的初始值略去 
    }; 

程序执行时,首先按提示输入两个城市名,然后在cityTable中查找与城市名对应的下标,最后用该下标在krnTable中找到这两个城市之间的距离。
程序中定义的函数FindCityInSortedArray和GetCity说明如下:
(1)函数FindCityInSortedArray的功能是用二分查找法在全局数组cityTable中查找城市名所对应的下标值。
(2)函数GetCity的功能是读入城市名,调用函数FindCityInSortedArray来获取城市所对应的下标值。如果该城市名不存在,则提示用户重新输入。

  [C程序2] 
    int main(){ 
    int city1,city2; 
    city1=GetCity("输入第1个城市名:"); 
    city2=GetCity("输入第2个城市名:"); 
    printf("%s和%s之间的距离为:%d km.\n", cityTable[city1],cityTable[city2], 
    kmTable[city1[city2]; 
    return 0; 
    } 
    static int GetCity(char*prompt){ 
    char*cityName; 
    int index; 
    cityName=(char*)malloc(20*sizeof(char)); 
    while (TRUE.{ 
    printf("%s",prompt); 
    gets(cityName);    //获取输入字符串 
    index=FindCitylnSortedArray(cityName); 
    if(______)break; 
    printf("城市名不存在,请重新输入。\n"); 
    } 
    free(cityName); 
    return ______; 
    } 
    static int FindCityInSortedArray(char*key){ 
    int Ih,rh,mid,cmp; 
    Ih=0; 
    rh=NCities-1; 
    while(______){ 
    mid=(Ih+rh)/2; 
    cmp=strcmp(______);    //比较两个城市名是否相同 
    if(cmp==0)return ______;    //两个城市名相同 
    if(cmp<0){rh=mid-1;} 
    else{Ih=mid+1;} 
    } 
    return (-1);    //城市名不存在时返回-1 
    } 

试题五

阅读以下说明,以及用C++在开发过程中所编写的程序代码,将应填入______处的字句填写完整。
[说明]
在矩形类中重载关系运算符“>=”,采用友元,比较的依据是矩形面积的大小。重载算术运算符“+=”,采用成员函数,更新矩形对象的长与宽,分别加上形参矩形的长与宽。重载算术运算符+,利用构造函数,采用友元。

[代码]
class Crect
{
int length, witdth;
public:
CRect(int l,int w){
length=l;
width=w;
}
friend int operator=(CRect& r1,CRect& r2)
{
return______>=______;    //比较面积
}
void operator+=(CRect& r){
______;//求长
______;//求宽
}
friend operator+(CRect& r1, CRect& r2){
return CRect(______); //利用构造函数 
}
}

试题六

阅读以下说明和Java代码,将应填入______处的字句填写完整。
[说明]
下面程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。

 import java.io.*;
    public class testThrows{
    public static ______ readstring() ______ IOException{
    int ch;
    String r="";
    boolean done=false;
    while(______){
    ch=System.in.read();
    if(ch<0 || ch=0xd) //处理回车符中第一个符号
    done=true;
    else
    r=r+(char)ch;
    }
    return r;
    }
    public static void main(String args[]){
    String str;
    ______{
    Str=readstring();
    }______ (lOException e){
    System.out.println("error")
    return;
    }
    System.out.println("input integer: "+lnteger.parselnt(str));
    }
    }

试题四答案

(1)index>=0,或等价形式
(2)index
(3)Ih<=rh,或等价形式
(4)key,cityTable[mid]或key,*(cityTable+mid)
(5)mid

[解析] 本题考查C语言程序设计基本能力。
本题涉及一维和二维数组操作,以及数组上的查找算法。先考察main()函数,理清程序整体结构,在该函数中提示并输入两个城市名,然后输出这两个城市之间的距离。
函数GetCity的功能是读入城市名,调用函数FindCityInSortedArray来获取城市所对应的下标值index。如果该城市名不存在,则提示用户重新输入。
函数FindCityInSortedArray的功能是用二分查找法在全局数组cityTable中查找城市名所对应的下标值。
最后用该下标在kmTable中找到这两个城市之间的距离。
先考查空1,因为GetCity在while循环中执行完语句index=FindCityInSortedArray(cityName)之后,获得城市对应的下标值index,而有效的下标值就是城市名称在数组中的位置下标,所以index>=0时说明下标有效,跳出循环。
然后考查空2,因为程序首先要获得两个城市名称所对应的下标,所以通过GetCity读入城市名称并获取所对应的下标,然后返回所对应的下标值。此处即为获取到的index。
接下来考查空3、4和5,因为函数FindCityInSortedArray的功能是用二分查找法在全局数组cityTable中查找城市名所对应的下标值。在已经排序的数组中进行二分查找,在当前数组区域中,如果下界小于上界,则目标元素和中值进行比较,如果相等则返回下标;如果目标元素小于中值元素,则在前半区域(左分支中)继续查找;如果大于中值元素,则在后半区域(右分支中)继续查找。如果最后没有找到所需查找的目标元素,则返回-1。因此,空3处填入“lh<=rh”以判断下界是否小于上界;空4处目标元素key和中值元素cityTable[mid],中值元素的也可以用*(cityTable+mid)表示;空5处为比较成功时返回所在元素的下标,此处为“mid”。

试题五答案

(1)r1.lengthr1.width
(2)r2.length
r2.width
(3)length+=r.length
(4)width+=r.width
(5)r1.length+r2.length,r1.width+r2.width

[解析] 本题考查C++中的函数重载与友元。
题目要求在矩形类中采用友元重载关系运算符“>=”,比较的依据是矩形面积的大小;采用成员函数重载算术运算符“+=”来更新矩形对象的长与宽,其功能是分别加上形参矩形的长与宽;重载算术运算符“+”,利用构造函数,也采用友元的方式。首先我们要了解一下友元的作用。
需要在类的外部直接访问类的私有数据成员,在不改变类的数据成员安全性的前提下,使得类外部的函数或类能够访问类中的私有成员数据,这一功能可以通过友元的方式来实现。下面来具体分析程序。
第1空与第2空要结合起来完成,它们是重载关系运算符“>=”的两个操作数,而根据题目要求,这个关系运算符的比较依据是矩形面积的大小,求矩形的面积是通过矩形的长和宽来实现的,这个函数的参数是两个矩形类对象,在定义矩形类时,分别把矩形的长和宽定义成了默认的私有成员变量。根据程序中函数的定义可以知道,这个函数被定义为友元函数,可以访问矩形类中的私有成员变量,因此这两个空的答案分别是用对象的长和宽计算其面积,即答案分别为“r1.lengthr1.width”与“r2.lengthr2.width”。
第3空与第4空要结合起来完成,它们是重载算术运算符“+=”函数下面的操作,根据题目要求,这个算术运算符的作用是用来根据形参矩形的长与宽更新该矩形对象的长与宽,是该矩形对象的长与宽分别加上形参矩形对象的长与宽,根据注释,第3空用来更新其长,因此此空答案为“length+=r.length”;而第4空用来更新其宽,因此答案为“width+=r.width”。
第5空在重载算术运算符“+”的函数下面,根据题目要求,此函数的实现是利用矩形类的构造函数和友元共同实现的。从程序中可以明显知道,此空是构造函数的参数,而构造函数的两个参数分别是矩形的长与宽。算术运算符“+”的作用我们大家也都非常熟悉,是用来计算两个操作数的和。重载算术运算符“+”的函数参数是两个矩形对象,那么构造函数中的两个参数应该分别是这两个矩形对象的长与宽的和。所以此空答案为“r1.length+r2.length”,“r1.width+r2.width”。

试题六答案

(1)String
(2)throws
(3)!done
(4)try
(5)catch

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值