阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内[说明]
本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。
方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。
为检查当前方格所填整数的合理性,程序引入数组CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实上,CheckMatrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。
[程序]
include <stdio.h>
int pos,a[9],b[11]; /*用于存储方格所填入的整数*/
void write(int a[]) /*方格输出函数*/
{ ……}
int isPrime(int m) /*素数判断函数,若m为素数则返回1,否则返回0*/
{ ……}
int selectNum(int start) /*找到start到10之间尚未使用过的最小的数,若没有则返回0*/
{ int j;
for(j=start;j<=10;j++) if(b[j]) return j;
return0;
}
int check() /*检查填入pos位置的整数是否合理*/
{ int i,j
int checkMatrix[][3]={{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,- 1},{4,6,-1},{5,7,-1}};
for(i=0;(j=(1))>=0;i++)
if(! isPrime((2)))return 0;
return 1;
}
void extend() /*为下一方格找一个尚未使用过的整数*/
{ (3)=selectNum(1);
b[a[pos]]=0;
}
void change() /*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/
{ int j;
while(pos>=0&&(j=selectNum(a[pos]+1))= =0) b[a[pos- -]]=1;
if(pos<0)return;
(4);a[pos] =j;b[j]=0; }
void find()
{ int k=1;
pos=0;a[pos]=1;b[a[pos]]=0;
do{
if(ok)
if((5) ){
write(a);change();
}
else extend();
else change();
k=check(pos);
}while(pos>=0);
}
void main()
{ int i;
for(i=1;i<=10;i++)b[i]=1;
find();
}
第1题
阅读以下说明和流程图,回答问题1-2,将解答填入对应的解答栏内。
[说明]
下面的流程图采用欧几里得算法,实现了计算两正整数最大公约数的功能。给定正整数m和 n,假定m大于等于n,算法的主要步骤为:
(1)以n除m并令r为所得的余数;
(2)若r等于0,算法结束;n即为所求;
(3)将n和r分别赋给m和n,返回步骤(1)。
[流程图]
[问题1] 将流程图中的(1)~(4)处补充完整。
[问题2] 若输入的m和n分别为27和21,则A中循环体被执行的次数是(5)。
第2题
象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。
[Java代码]
行号 代码
01 public class UainJava{
02 public static void main(String[]args){
03 SuperClass s=new SubClass();
04 System.out.printin(s.getValue());
05 System.out.printIn(s.getSum()):
06 }
07 }
08 abstract class SuperClass {
09 private int i;
10 public SuperClass(){i=5;}
11 public int getValue(){
12 return i:
13 }
14 public final abstract int getSum():
15 }
16 class SubClass extends SuperClass{
17 int j;
18 public SubClass(){
19 this(-3);
20 }
21 public SubClass(int j){
22 (1) .j=j;
23 }
24 publiC int getValue()(return j;}
25 public int getSum(){
26 return (2) .getValue()+j;
27 }
28
第3题
阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。
[说明]
本程序将自然数1,2,……,N2(N=5)按蛇形方式逐个顺序存入N阶矩阵。令n=N-1,则矩阵中的每一元素可用aij标记,其中i,j(0≤i,j≤n)分别为其所在行的行号和所在列的列号。蛇形方式顺序存放的方法是从an0开始、到a0n为止,依次填入由1递增的自然数,交替地对每一斜列从左上角向右下角或从右下角向左上角排列。程序的输出为:
[程序]
include <stdio.h>
include <math.h>
define SIZE.10
int a[SIZE] [SIZE],k;
void write(int n) /*输出矩阵*/
{ int i,j;
for(i=0;i<=n;i+ +){
for(j=0; j<=nj j+ +)
printf("%4d",a[i][j]);
printf("\n");
}
}
void makeline(int row_start, int col_start, int row_end) /*完成矩阵一条斜线的整数填写*/
{ int i,j, sign;
sign=((1)> =0)? 1:-1;
for(i = row_start,j = col_start; (row_end-i) * sign>=0; i+=sign,j+=sign)
a[i][j]=(2);
}
void makeArray(int n) /*完成矩阵每条斜线的整数填写*/
{ int d;
for(d=1;d<=(3);d+ +)
if(d< =n+1)
if(d%2)
makeline((4));
else
makeline(n+1-d,0,n);
else
if(d%2)
makeline((5));
else
makeline(0,d-n-1,2*n-d+1);
}
void main()
{ int n, N=5;
k=1; n=N-1;
makeArray(n);
write(n);
}
第4题
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
二叉树的二叉链表存储结构描述如下:
lypedef struct BiTNode
{ datatype data;
street BiTNode *lchiht, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree;
下列函数基于上述存储结构,实现了二叉树的几项基本操作:
(1) BiTree Creale(elemtype x, BiTree lbt, BiTree rbt):建立并返回生成一棵以x为根结点的数据域值,以lbt和rbt为左右子树的二叉树;
(2) BiTree InsertL(BiTree bt, elemtype x, BiTree parent):在二叉树bt中结点parent的左子树插入结点数据元素x;
(3) BiTree DeleteL(BiTree bt, BiTree parent):在二叉树bt中删除结点parent的左子树,删除成功时返回根结点指针,否则返回空指针;
(4) frceAll(BiTree p):释放二叉树全体结点空间。
[函数]
BiTree Create(elemtype x, BiTree lbt, BiTree rbt) { BiTree p;
if ((p = (BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;
p->data=x;
p->lchild=lbt;
p->rchild=rbt;
(1);
}
BiTree InsertL(BiTree bt, elemtype x,BiTree parent)
{ BiTree p;
if (parent= =NULL) return NULL;
if ((p=(BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;
p->data=x;
p->lchild= (2);
p->rchild= (2);
if(parent->lchild= =NULL) (3);
else{
p->lchild=(4);
parent->lchild=p;
}
return bt;
}
BiTree DeleteL(BiTree bt, BiTree parent)
{ BiTree p;
if (parent= =NULL||parent->lchild= =NULL) return NULL;
p= parent->lchild;
parent->lchild=NULL;
freeAll((5));
return bt;
第5题
阅读下列函数说明和C函数,将应填入(n)处的字句写对应栏内。
[说明]
二叉树的二叉链表存储结构描述如下:
typedef struct BiTNode
{ datatype data;
struct BiTNode *lchild, * rchild; /*左右孩子指针*/
}BiTNode,* BiTree;
对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作:
(1) 访问该元素所指结点;
(2) 若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。
此过程不断进行,当队列为空时,二叉树的层次遍历结束。
下面的函数实现了这一遍历算法,其中Visit(datatype a)函数实现了对结点数据域的访问,数组queue[MAXNODE]用以实现队列的功能,变量front和rear分别表示当前队首元素和队尾元素在数组中的位置。
[函数]
void LevelOrder(BiTree bt) /*层次遍历二叉树bt*/
{ BiTree Queue[MAXNODE];
int front,rear;
if(bt= =NULL)return;
front=-1;
rear=0;
queue[rear]=(1);
while(front (2) ){
(3);
Visit(queue[front]->data); /*访问队首结点的数据域*/
if(queue[front]—>lchild!:NULL)
{ rear++;
queue[rear]=(4);
}
if(queue[front]->rchild! =NULL)
{ rear++;
queue[rear]=(5);
}
}
}
第6题
阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。
[函数2.1说明]
函数void find(int *a, int n, int * max, int * min)的功能是在长度为n的整型数组a中,查找最大元素和最小元素的下标。main()中给出了调用find函数的一个实例。
[函数2.1]
include<stdio.h>
void find(int *a, int n,int *max,int * min)
{ int i;
*max =* min=0;
for(i=1;i<n;i+ +)
if(a[i]>a[* max]) (1);
else if(a[i]<a[*min]) (2);
return;
main()
{ int a[]={4,6,8,9,0,6},max,min;
find(a,6,(3));
printf("%5d%5d\n", max,min);
}
[函数2.2说明]
以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符串分别是abcdefg和abceef,则输出为abc。
[函数2.2]
include <stdio.h>
main()
{ char str1[100],str2[100],str[100],c;
int i=0,s;
printf("\nInput string 1:");gets(str1);
printf("\nInput string 2:");gets(str2);
while(((4))&&(str1[i]!='\0')&&(str2[i]!='\0')){
(5);
i++;
}
printf("%s\n",str);
}
第7题
阅读下列说明、图和C++代码,填补空缺。
[说明]
已知对某载客车辆(Car)进行类建模,如图12-2所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。
const int __________ =7; //定义最多载客数
const int MAX_WHEELS=5; //定义最多轮胎数
class Body{ //此处代码省略 ); //车身类
class Passenger{ //此处代码省略}; //乘客类
Class Wheel{ //此处代码省略}; //车轮类
Class Driver{ //司机类
public:
string name; //表示第几路公交车司机
Driver(string driverName):marne( __________ ){}; //构造函数
};
class Engine{ //引擎类
public:
string engineNo; //引擎编号
Engine(string engineNo){ __________ ->engineNo=engineNo; }
//构造函数
};
Class Car{ //汽车类
protected:
Engine *engine; Driver *driver; Body body;
Wheel *wheels[MAX_WHEELS]; Passenger *passengers[MAX_PASSENGERS];
public:
Car(Driver *driver)( //构造函数
this->driver=driver;
engine=new Engine("TX653 6型号引擎");
for(int index=0; index<MAX_WHEELS; index++){
wheels[index]=new Wheel( );
}
for(int index=0; index passengers[index]=NULL;
}
}
virtual -Car( ){ //析构函数
for (int index=0; index<MAX_WHEELS; index++)
delete wheels[index];
delete __________ ;
}
int getPassengerNumber( ){ //获取车上乘客数量
//此处代码省略
}
void getonpassenger(Passenger *apassenger ){
//乘客上车
//此处代码省略
}
void run( ){ //开车
if(driver==NULL){cout<< "司机尚未上车!"; return; }
//此处代码省略
}
};
void main( ){
Driver driver("第五路公交车司机");
Car car( __________ );
Passenger passengers[MAX_PASSENGERS];
for(int index=0; index<MAX_PASSENGERS; index++)
//乘客上车处理
car. getOnPasSenger(&passengers[index]);
car. run( );
}
第8题
阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内
【说明】
从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编写程序,其功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移到该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放。最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT(),把结果XX输出到文件 OUT5.DAT中。
例如:原文:You can create an index on any field.
you have the correct record.
结果:n any field.Yu can create an index
rd. yu have the crreet res
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
【函数】
include "stdio.h"
include "string.h"
include "conio.h"
include "ctype.h"
include "mem.h"
unsigned char xx[50] [80]
int maxline=0;
int readdat(void);
void writedat(void)
/*将题目要求的字符串中所有小写字母o左边的字符串内容移到谊串的右边存放,即将串中“最后”一个字母o左右两侧的内容互换*/
void StrOR(void)
{
inti;
char*p1,* p2,t[80];
for(i=0;i<maxline;i++)
{ t[0]='/0';
p2=xx[i];
while(*p2) /*找到最后一个别'o'*/
{ if((1))p1=p2;
p2++;
}
strcat(t,p1+1);
*p1='\0';
strcat(t,xx[i]);
p1=xx[i];
p2=t;
while(*p2) /*删去字符'o'*/
{ if((2)) (3)=*p2;
p2++;
}
(4);
}
}
void main()
{
clrscr();
if(readdat())
{ printf("Can't open the file IN. DAT!\n");
return;
}
StrOR();
writedat();
}
int readdat(void)
{
FILE * fp;
int i=0;
char * p;
if((fp=fopen("in.dat","r" ))==NULL)
return 1;
while(fgets(xx[i],80, fp)!=NULL)
{ p=strchr(xx[i],'\n');
if(p)
*p=0;
i++;
}
maxline:(5);
fclose(fp);
return 0;
}
void writedat (void)
{ FILE * fp;
int i;
fp=fopen("in.dat',"w");
for(i=0;i<maxline;i++)
{ printf("%s\n",xx[i]);
fprintf(fp," %s\n",xx[i]);
}
fclose(fp);
}
}
}
第9题
阅读以下应用说明及Visual Basic程序代码,将应填入______处的语句写在答题纸的对应栏内。
[应用说明9]
本应用程序的运行窗口如图2-6所示。
窗口中的3个文本框和2个按钮,名称分别为Txt_salary,Txt_base,Txt_tax,Cmd compute和Cmd_quit。运行时,文本框Txt_base中存放的是免税金额基数(应扣除的基本费用)。当用户在文本框Txt_salary中输入月收入(工资或薪金)并单击“计算”按钮 Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_ tax在运行时不接受用户输入,Txt_base的内容以灰色显示。
个人工资(或薪金)所得税是按照超额累进的税率来征收的,其计算方法参考试题8。
[程序代码9]
Option Base 0
Private Sub Cmd_compute_Click()
Dim paylevel,taxPrate
paylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,1000001)
taxPrate=Array(5,10,15,20,25,30,35,40,45)
K=(1)
S=0
if(K>0) Then
For j=1 TO 9
If (2) Then
S=S+(paylevel(j)-paylevel(j-1)) * taxPrate(j-1)/100
Else
S=S+( (3) ) * taxPrate(j-1)/100
Exit For
End If
Next j
End If
(4)=Str$(S)
End Sub
Private Sub Cmd_quit_Click()
End
End Sub
Private Sub Form_Load()
Txt_tax.Text=“”
Txt_salary.Text=“”
Txt_base.Text=800
Txt_tax.Locked=True
Txt_base.Enabled=(5)
End Sub
第10题
。
[应用说明7]
本应用程序的运行窗口如图2-5所示。
只要用户单击“闪烁”按钮,文字“欢迎光临”就会以0.3s消失、0.3s显示反复进行闪烁;单击“停止”按钮,闪烁停止,恢复图示的初态。
[属性设置7]
[程序代码7]
Private Sub CmdF C1ick()
Timerl. (3)=True
Label.Visible=False
End Sub
Private Sub Timerl_Timer()
(4)=not Label.Visible
End Sub
Private Sub CmdT_Click()
Timerl.Enabled=(5)
Label.Vlsible=true
End Sub
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!