阅读以下说明和流程图,回答问题将解答填入对应栏。
[说明]
本流程图采用“双向冒泡法”实现对数组a[n]的排序。双向冒泡法就是在逐步缩小的数组内,分别从数组的两端开始向内搜索,同时将大数往上浮,小数往下沉,每次交换一组数。flag是一个标志,发生过交换就置为1,当这个循环过程都不再发生交换时,则数组排序完成。
注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述;
定义swAP[a,b]为将a和b两数交换。
[问题]
将流程图的(1)~(5)处补充完整。
第1题
阅读以下说明和C程序,将应填入(n)处的字句写在对应栏内。
【说明】
下面的程序按照以下规则输出给定名词的复数形式。
a.若名词以“y”结尾,则删除y并添加“ies”;
b.若名词以“s”、“ch”或“sh”结尾,则添加“es”;
c.其他所有情况,直接添加“s”。
【C程序】
include <stdio.h>
include <string.h>
char*plural(char *word)
{
int n;
char *pstr;
n=strlen(word); /*求给定单词的长度*/
pstr=(char*)malloc(n+3);/*申请给定单词的复数形式存储空间*/
if (!pstr||n<2)
return NULL;
strcpy(pstr,word); /*复制给定单词*/
if ((1))
{
pstr[n-1]='i';pstr[n] ='e';pstr[n+1]='s';(2);
}
else
if(pstr[n-1]=='s'| |pstr[n-1]=='h'&&((3)))
{
pstr[n]='e';pstr[n+1]='s';pstr[n+2]='\0';
}
else
{ pstr[n]='s';pstr[n+1]='\0';)
(4);
}
main()
{ int i; char *ps;
char wc[9][10]=
{"chair","dairy","boss","circus","fly","dog","church","clue","dish");
for(i = 0;i<9; i++) {
ps= (5) ;
printf("%s: %s\n",wc[i],ps); /*输出单词及其复数形式*/
free(ps); /*释放空间*/
}
system("pause");
}
第2题
阅读以下说明和Java源程序,将应填入(n)处的字句写在答题纸的对应栏内。
说明
以下程序的功能是计算三角形、矩形和正方形的面积并输出。
程序由5个类组成:AreaTest是主类,类Triangle、Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算面积的抽象方法。
程序
public class AreaTest{
public static void main(String args[]){
Figure[]figures={
new Triangle(2,3,3),new Rectangle(5,8), new Square(5)
};
for(int i=0;i<figures.1ength;i++){
System.out.println(figures[i]+"area="+figures[i].getArea());
}
}
}
public abstract class Figure{
public abstract double SetAJea();
public class Rectangle extends (1) {
double height;
double width;
public Rectangle(double height,double width){
this.height=height;
this.width=width;
}
public String toString(){
return "Rectangle:height="+height+",width="+width+":";
}
public double getArea() { return (2);
} } public class Square extends (3) {
public Square(double width) {
(4);
}
public String toString() {
return "Square:width="+width+":";
} } public class Triangle extends (5). {
double la;
double lb;
double lc;
public Triangle(double la,double lb,double lc) {
this.la=la; this.lb=lb; this.lc=lc;
public String toString(){
return "Triangle: sides="+la+","+lb+","+lc+":";
public double getArea() {
double s=(la+lb+lc)/2.0;
return Math.sqrt(s*(s-la)*(s-lb)*(s?1c));
}
}
第3题
阅读以下应用说明及Visual Basic部分程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
应用说明
设一个简单的“通讯录”存储在一个ACCESS类型的数据库表中,包括姓名、电话和email三个字段。下面的应用程序实现对“通讯录”数据库表中的记录进行增加、删除及修改处理,其运行界面如下:
(1)数据控件(datal)与“通讯录”数据库表相连接,用户可通过“”和“”按钮指定表中的当前记录。
(2)文本框Txt name、Txt phone和Txt email分别与数据库表中的“姓名”、“电话”和“email”字段绑定,用于显示当前记录的内容。
(3)应用程序启动时,“确定”按钮(Cmd ok)和“取消”按钮(Cmd cancel)不可操作,文本框中显示表中的第一条记录,这时文本框处于不可操作状态。
(4)单击“增加”按钮(Cmd_add)或“修改”按钮(Cmd_modify)后,方可以编辑记录内容,同时“增加”、“删除”、“修改”和“退出”按钮变为不可操作状态。“增加”和“修改”操作需通过“确定”和“取消”按钮确认。
(5)单击“删除”按钮(Cmd del)后,弹出对话框,再单击“确定”按钮,当前记录被删除。
程序代码
Private Sub enableop(isEnabled As Boolean)
Txt_name.Enabled=isEnabled: Txt_phone.Enabled=isEnabled
Txt_email.Enabled=isEnabled
Cmd_ok.Enabled=isEnabled: Cmd_eancel.Enabled=isEnabled
Cmd_add.Enabled=Not isEnabled: Cmd_del.Enabled=Not isEnabled
Cmd_end.Enabled=Not isEnabled: Cmd_modify.Enabled=Not isEnabled
EndSub
Private Sub Form_Load()
Call enableop(False)
Data1.Refresh
If Data1 .Recordset. RecordCount = 0 Then
Cmd_del. Enabled= False: Cmd_modify. Enabled=(1)
End If End Sub Private Sub Cmd_add_Cliek() '单击“增加”按钮的代码
Call enableop( (2) )
Datal .Recordset. AddNew '在数据库表中添加一个新记录
Txt name. (3) End Sub Private Sub Crud_del_Click() '单击“删除”按钮的代码
On Error GoTo error3
arts = MsgBox("确定删除吗?", vbYesNo + vblnformafion, "操作提示!")
If (ans = vbYes) Then
Datal.Recordset. (4)
Datal .Recordset. MoveNext
If Datal .Recordset. EOF Then Data l.Refiesh
End If
Exit Sub error3:
MsgBox Err. Description, vbOKOnly, "错误提示!" End Sub Private Sub Cmd_ok_Click() '单击“确定”按钮的代码
On Error GoTo errorl
Datal.Recordset. (5)
Call enableop(False)
Exit Sub error 1:
MsgBox Err. Description, vbOKOnly, "错误提示!"
Datal.UpdateControls
Call enableop(False) End Sub '“修改”和“取消”按钮的程序代码(略)
第4题
内。
【应用4.1】
设应用程序的运行窗口内有一个文字标签(Label)以及一个框架,其中有三个复选框(chk1,chk2,chk3),各个复选框单击事件过程的程序代码如下:
Private Sub chkl_Click()
Label.fontBold=chkl.Value
End Sub
Private Sub chk2_Click()
Label.fontltalic=chk2.Value
End Sub
Private Sub chk3_Click()
Label.fontUnderLine=chk3.Value
End Sub
三个复选框chkl、chk2、chk3的功能分别是:(1)。
【应用4.2】
设应用程序的运行窗口内有两个文本框Txt1和Txt2,其初始内容为空。在Txt1文本框中输入一个数值,当光标离开此文本框(例如进入文本框Txt2)时,执行的程序代码如下:
Private Sub Txt1_LostFocus()
dim x aS double
x=Val(Txtl.Text)
工f x<0 Or x>100 Then
Txtl.Text =""
MsgBox$("请重新输入!")
Txtl.SetFocus
Else
Txt2.Text=Txt1.Text
End If
End Sub
该程序代码的功能是:若在文本框Txtl中输入的数值小于0或大于100,当光标离开此文本框时,(2);否则,将其值复制到文本框Txt2中。
【应用4.3】
在下面的应用中,当窗口内发生C1ick事件时,窗口内将显示如图2-4所示的杨辉三角(每一行都是二项式展开的系数)。请完善程序代码。
Private Sub Form. Click()
Dim i,j,c As Integer,StrTemp AS String
Dim a(9)As Integer
a(0)=0=a(1)=l:StrTemp=Str(a(1))+Space(3)
CurrentX=(ScaleWidth-TextWidth(StrTemp))/2
Print StrTemp
For j=2 TO 9
a(j)=1
For C=j-1 TO 2 Step-1
a(c) =(3)
Next
(4)=""
For c = 1 To j
StrTemp = StrTemp & Str((5)) & Space(5 - Len(Str(a(c))))
Next
CurrentX = (ScaleWidth - TextWidth(StrTemp)) / 2
Print StrTemp
Next End Sub
第5题
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
函数count months(DATE start,DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。
该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。
规定两个相邻年份的同月同日之间的间隔为1年。例如,2007.5.30—2008.5.30的间隔为1年。若相邻两年中前一年是闰年,并且日期是2月29日,则到下一年的2月28日为1年,即2008.2.29—2009.2.28的间隔为1年。
规定两个相邻月份的相同日之间的间隔为1个月,但需要特别考虑月末的特殊情况。例如,2007.1.29—2007.2.28的间隔为1个月,同理,2007.1.30—2007.2.28、2007.1.31—2007.2.28的间隔都是1个月。
计算起止日期间隔不足一年的完整月份数时,分如下两种情况。
(1)起止日期不跨年度。先用终止日期的月号减去起始日期的月号得到月份数,然后再根据情况进行修正。例如,起止日期为2008.3.31—2008.9.20,通过月号算出月份数为6。修正时,通过调用函数makevalid将2008.9.31改为2008.9.30,与终止日期2008.9.20比较后,将月份数修正为5。
(2)起止日期跨年度。计算方法如下例所示:对于起止日期2008.7.25—2009.3.31,先计算2008.7.25—2008.12.25的月份数为5,再算出2008.12.25—2009.3.25的月份数为 3,因此2008.7.25—2009.3.31之间的完整月份数为8。
日期数据类型定义如下:
typedef struct{
int year; int month; int day; /*日期的年号(4位)、月和口号*/
}DATE;
程序中使用的函数cmp_date()、isLeap Year()和makevalid()说明如下。
[*]
【C语言函数】
int count_months (DATE start,DATE end)
{
int years = 0, months = 0;
DATE r;
if (cmp_date(start,end) > 0) {
r = start; start = end; end = r;
}
years = end.year - start.year; /*计算年数*/
r = start;
r.year = end.year;
if (cmp_date(r, end) > 0) { /*修正年数*/
(1);
r.year--;
}
if (r.year < end.year) { /*跨年度时,先计算到12月的月份数*/
months =(2);
r.month = 12;
}
months += (end.month + 12 - r.month) % 12;
r.year = end.year; r.month = end.month;
makevalid ((3)); /*将日期r修正为有效日期*/
if (cmp_date(r,end) > 0) /*修正月份数*/
(4);
months +=(5); /*计算总月份数*/
return months;
}使用的函数cmp_date()、isLeap Year()和makevalid()说明如下。
[*]
第7题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
这是一个求解Josephus问题的函数。用整数序列1,2,3…,n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。Josephus问题描述,设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,…如此反复直到所有的人全部出局为止。
[C函数]
void Josephus(int A[],int n,s,m)
(int i,j,k,temp;
if(m==O){
printf("m=0是无效的参数!\n");
return;
}
for(i=0;i<n;i++) A[i]=i+1; /*初始化,执行n次*/
i= (1) /*报名起始位置*/
for(k=n;k>1;k-){
if((2)) i=0;
i=(3) /*寻找出局位置*/
if(i!=k-1){
tmp=A[i];
for(j=i;J<k-1;j++) (4);
(5);
}
}
for(k=0;k<n/2;k++){
tmp=A[k];A[k]=A[n-k+1];A[n-k+1]=tmp;
}
}
第8题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明1]
L为一个带头结点的循环链表。函数LinkList deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于C的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。
[C函数1]
LinkList deletenode(LinkList L,int c)
{LinkList Lc,P,pre;
pre=L;
p=(1);
Lc=(LinkList)malloc(sizeof(Listnode));
Lc->next=Lc;
while(P!=L)
if(p->data>C){
(2);
(3);
Lc->next=p;
p=pre->next;
}
else{
pre=p;
p=pre->next;
}
return Lc;
}
[说明2]
递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成k(2≤k≤9)进制数,并打印。
[C函数2]
dec to k 2(int n,int k)
{ if(n!=O){
dec to k 2( (4) ,k);
printf("%d", (5) );
}
}
第9题
阅读下列说明、图和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
已知对某载客车辆(Car)进行类建模,如图7-1所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。
【Java代码】
class Body{ //此处代码省略 ); //车身类
class Passenger{ //此处代码省略 )/ //乘客类
class Wheel{ //此处代码省略 ); //车轮类
class Driver{ //司机类
public String name; //表示第几路公交车司机
public Driver(String driverName){name = driverName/) //构造函数
};
class Engine{//引擎类
public String engineNo;//引擎编号
public Engine(String engineNo){this.engineNo=engineNo;)//构造函数
};
public class Car{//汽车类
static final int(1)=7; //定义最多载客数
static final int MAX WHEELS =5; //定义最多轮胎数
protected Engine engine;
protected Driver driver;
protected Body body=new Body();
protected Wheel[] wheels;
protected Passenger[]passengers;
public Car(Driver driver){ //构造函数
(2).driver=driver;
engine=new Engine("TX6536型号引擎");
wheels=new Wheel[MAX WHEELS];
passengers=new Passenger[MAX_PASSENGERS];
for(int index=0;index<MAX_WHEELS;index++){
wheels[index]=new Wheel();
}
for(int index=0;index<MAX_PASSENGERS;index++){
passengers[index]=null;
}
}
int getPassengerNumber(){//获取车上乘客数量
//此处代码省略
}
void getOnPassenger(Passenger aPassenger){//乘客上车
//此处代码省略
}
void run(){ //开车
if((3)){System.out.println("司机尚未上车!");return;}
//此处代码省略
}
public static void main(String args[]){
Driver driver=new Driver("第五路公交车司机");
Car car=new Car((4));
for (int index = 0 ; index < MAX_PASSENGERS; index ++)
car.getOnPassenger((5) Passenger());
car.run();
}
}
第10题
阅读以下说明和流程图,填补流程图中的空缺(1)一(5),将解答填入答题纸的对应栏内。
【说明】
下面的流程图采用公式ex=1+x+x2/2 1+x3/3 1+x4/4 1+…+xn/n!+???计算ex的近似值。设x位于区间(0,1),该流程图的算法要点是逐步累积计算每项xx/n!的值(作为T),再逐步累加T值得到所需的结果s。当T值小于10-5时,结束计算。
【流程图】
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!