问答题【说明】以下【C程序】能将自然数1,2,…,N2按蛇形方式逐个存入N阶矩阵。换言之,程序从anO开始到aOn。为止(n=N-1)顺序填入自然数,交替地对每一斜列从左上元素向右下元素或从右下元素向左上元素存数。例如,当N=5时,程序输出结果如图2-12所示;当N=8时,程序输出结果如图2-13所示。【C程序】#include<stdio.h>#defineSIZE10inta[SIZE][SIZE],k;main()inti,j,n,N;for(N=3;N<=SIZE;N++)k=1;makeArray(n=N-1);printf("/nN=%d;/n",n+1);for(i=0;i<=n;i++)for(j=0;j<=n;j++)printf("%4d",a[i][j]);printf("/n");makeline(introw_start,intcol_start,introwend)/*完成矩阵一条斜线的整数填写*/inti,j,sign=(1);for(i=row_start,j=colstart;(2);i+=sign,j+=sign)a[i][j]=k++;makeArray(intn)/*完成矩阵每条斜线的整数填写*/intd;for(d=1;d<=(3);d++)if(d<=n)if(d%2)makeline((4));elsemakeline((5));elseif(d%2)makeline((6));elsemakeline((7));
问答题[函数2.1说明]
下面程序的功能是:将由键盘输入的某个十进制数转换成对应的R进制数并输出。这里R是 2到16的整数,由键盘输入。例如,输入n=128,base=13后的输出为9B。
[函数2.1]
#include <stdio.h>
main()
{ char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int c[64],n,i=0,base;
printf("Enter a number:");scaaf("%d",
printf("Enter new base:");scanf("%d",
do{c[i]={{U}} (1) {{/U}};
i++;
n=n/base;
}while({{U}} (2) {{/U}});
printf("Transmit new base:");
for(- -i;i>=0;- -i)printf("%c",{{U}} (3) {{/U}});
}
[函数2.2说明]
所谓回文字符中是指正序和逆序拼写相同的字符串,例如astrtsa,adgdtdgda等。下面函数int fun(char *str)的功能是判断字符串str是否是回文,当字符串是回文时,函数返回1,否则返回0。
[函数2.2]
int fun(char *str)
{ int i,j,l;
for(i=0;str[i]! ='/0';i++);
l=i/2;
for(j=0,i- -;j<=1;{{U}} (4) {{/U}})
if({{U}} (5) {{/U}}) return 0;
return 1;
}
问答题试题七(15分,每空3分)阅读以下说明及VisualBasic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]某个文本文件中存放了若干个非零数值有效数据,每个数据占一行,最后一行以数字“0”作为结束标志。下面的程序用于计算该文件中这些数据之和,其运行窗口如下:用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名,再单击“累计”按钮,就能在“总计”文本框中看到该文本文件中的数据之和。在开发过程中,设驱动器列表框名为Drive1,目录列表框名为Dir1,文件列表框名为File1,存放数据的文本文件名为D:\test\vb7\data.txt,“累计”按钮名为sum,“总计”文本框(TextBox)名为text1。[VisualBasic代码]PrivateSubDrive1_Change()Dir1.Path=(1)'用户选择的驱动器反映到目录列表框中EndSubPrivateSubDir1_Change()File1.Path=(2)'用户选择的文件夹改变文件列表框内容EndSubPrivateSubsum_Click()Dim(3)AsNewFileSystemObject,(4)AsTextStream'创建自己的文件系统对象,说明自己的文本流对象IfRight(Dir1.Path,1)="\"ThenSetmyTextFile=fso.OpenTextFile(Dir1.Path+File1.FileName)ElseSetmyTextFile=fso.OpenTextFile(Dir1.Path+"\"+File1.FileName)EndIfS=0Dod=Val(myTextFile.ReadRow)S=S+dLoopWhile(5)Text1.Text=Str$(S)EndSub
问答题[说明]给定一个十进制整数A,将其转换为R进制数的方法是:将A的整数部分逐次除以R,直到商等于0为止,将所得的余数由低位到高位排列在一起,就得到了对应R的进制数。以A=11,R=2为例,11÷2=5…1,5÷2=2…1,2÷2=1…0,1÷2=0…1中各式的余数依次为:1,1,0,1,于是与A对应的二进制数为1011。下面的流程图实现了将十进制数2597转换为八进制数的功能,其中:(1)循环1执行除法运算并将余数依次记录在数组a中(假定数组长度足够长),如a[1],a[2],……,a[k];(2)循环2则用于将这些余数按逆序输出,即a[k],a[k-1],……,a[1];(3)图中i,j分别是循环1和循环2中的循环变量;(4)图中q用于记录每次除法所得的商值。[流程图][问题1]将流程图中的(1)~(4)处补充完整,其中(1)~(3)处要求使用C语言格式书写:(1)处为逻辑表达式,(2)、(3)两处为算术表达式;(4)则须按照“循环变量名:循环初值,循环终值,增量”格式描述。[问题2]该算法运行的结果{{U}}(5){{/U}}。
问答题[说明]设某单位Acess数据库中有一张员工信息表,其中记录了员工编号、姓名、性别等基本信息。下面的应用程序利用数据控件(Data)实现了对这张表中记录的增加、删除和修改操作。其运行界面如下:在开发过程中,数据控件Data1与员工数据表相连接,各文本框、“性别”组合列表框Combo1、“政治面貌”组合列表框Combo2都分别与数据表的相应字段绑定,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDel、CmdUpdate和CmdExit。[VisualBasic代码]PrivateSubForm_Load()'加载窗体Combo1.{{U}}(1){{/U}}"男"Combo1.{{U}}(1){{/U}}"女"Combo2.{{U}}(1){{/U}}"党员"Combo2.{{U}}(1){{/U}}"团员"Combo2.{{U}}(1){{/U}}"群众"EndSubPrivateSubCmdAdd_Cliek()'增加记录Datal.Recordset.AddNewEndSubPrivateSubCmdDel_Click()'删除记录Datal.Recordset.{{U}}(2){{/U}}Datal.Recordset.MoveNextEndSubPrivateSubCmdUpdate_Click()'修改记录IfDatal.ReadOnly={{U}}(3){{/U}}AndDatal.Recordset.UpdatableThenDatal.Recordset.EditDatal.Recordset.{{U}}(4){{/U}}ElseMsgBox"数据表不允许修改!"EndIfEndSubPrivateSubCmdExit_Click()'退出程序DimretAsLongret:MsgBox("真的要退出吗?",vbQuestion+vbYesNo,"退出")If{{U}}(5){{/U}}ThenDatal.Reeordset.CloseEndEndffEndSub
问答题【说明】 以下【C++程序】实现一个简单的小型复数类MiniComplex,该复数类能进行输入、输出、复数的加法、减法、乘法和除法运算,还可以进行复数的相等比较。【C++程序】#ifndef H_MiniComplex#define H_MiniComplex#include <iostream>using namespace std;class MiniComplex public: //重载流插入和提取运算符 (1) ostream return osObject; (2) istream isObject >>complex.realPart>>ch>>complex.imagPart>>ch; return isObject; MiniComplex(double real=0,double imag=0); //构造函数 MiniComplex operator+(const MiniComplex //重载运算符+ MiniComplex operator-(const MiniComplex //重载运算符- MiniComplex operator*(const MiniComplex //重载运算符* MiniComplex operator/(const MiniComplex //重载运算符/ bool operator==(const MiniComplex //重载运算符== private : double (3) ; double imagPart;;#end if#include "MiniComplex.h"bool MiniComplex::operator==(const MiniComplexMiniComplex::MiniComplex(double real,double imag) realPart== real; imagPart==imagPart;MiniComplex MiniComplex::operator+(const MiniComplex temp.realPart = realPart+ortherComplex. realPart; temp.imagPart = imagPart +ortherComplex. imagPart; return temp; (4) MiniComplex temp; temp.realPart= realPart-ortherComplex. realPart; temp.imagPart = imagPart-ortherComplex. imagPart; return temp;MiniComplex MiniComplex::operator*(const MiniComplex temp.realPart = (realPart*ortherComplex. realPart)-(imagPart *ortherComplex.imagPart); temp.imagPart = (realPart*ortherComplex. imagPart)+(imagPart *ortherComplex.realPart); return temp;MiniComplex MiniComplex::operator/(const MiniComplex float tt; tt=1/(ortherComplex.realPart*ortherComplex.realPart+ortherComplex.imagPart *ortherComplex. imagPart); temp.realPart=((realPart*ortherComplex, realPart)+(imagPart *ortherComplex. imagPart))*tt; temp.imagPart =((imagPart *ortherComplex. realPart)-(realPart*ortherComplex. imagPart))*tt; return temp;#include <iostream>#include <MiniComplex.h>using namespace std;int main() MiniComplex numl(23, 34),num2(56, 35); cout<<"Initial Value of num1="<<num1<<"/n Initial Value of num2="<<num2<<end1; cout<<num1<<"+"<<num2<<"="<<num1+num2<<end1; //使用重载的加号运算符 cout<<num1<<"-"<<num2<<"="<<num1-num2<<end1; //使用重载的减号运算符 cout<<num1<<"*"<<num2<<"="<<num1*num2<<end1; //使用重载的乘号运算符 cout<<num1<<"/"<<num2<<"="<<num1/num2<<end1; //使用重载的除号运算符 (5) ;
问答题【说明】 请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。 【程序】 文件search.cpp的内容如下: #include <iostream. h > int SeqSearch( int list[ ] ,int start,int n,int key) for(int i=start;i<=n;i++) //(1) if( list[i] = key)//(2) return i; return -1; void main( ) int A[10] int key,count=0,pos; cout <<" Enter a list of 10 integers:"; for(pos=0;pos<10;pos++) cin >>A; //(3) cout <<" Enter a key; "; cin >> key; pos=0; while(( pos = SeqSearch ( A, pos, 10, key)) !=-1 ) count ++; pos ++; cout<<key<<"occurs" <<count<< (count!=1?" times":" time") <<" in the list," << endl; 第一种情况:输入2 3 12 6 8 45 8 33 7输入key:8 输出: (4) 第二种情况:输入2 3 126 8 45 8 33 7输入k6y:9 输出: (5)
问答题[说明]链式存储的队列称为链队。根据队列的FIFO原则,为了操作上的方便,可以使用带头指针front和尾指针rear的单链表来实现链队。若链队元素的数据类型为datatype,则链队结构描述如下:typedefstructnodedatatypedata;structnode*next;QNode;/*链队结点的类型*/typedefstructQNnode*front,*rear;LQueue;/*将头尾指针封装在一起的链队*/以下这种链队的几个例子:设q是一个指向链队的指针,即LQueue*q。下面各函数的功能说明如下:(1)LQueue*Init_LQueue():创建并返回一个带头尾结点的空链队;(2)intEmpty_LQueue(LQueue*q):判断链队q是否空;(3)voidIn_LQueue(LQueue*q,datatypex):将数据x压入链队q;(4)intOut_LQueue(LQuere*q,datatype*x):弹出链队q的第一个元素x,若成功则返回返回1否则返回0。[函数]LQueae*Init_LQueue()LQueue*q,*p;q=malloc(sizeof(LQueue));/*申请链队指针*/P=malloc(sized(QNode));/*申请头尾指针结点*/p->next=NULL;(1)=p;returnq;intEmpty_LQueue(LQueue*q)if(q->front(2)q>rear)return0;elsereturn1;voidIn_LQueue(LQueue*q,datatypex)QNoda*p;p=malloc(sizeof(QNnode));/*申请新接点*/p->data=x;p->next=NULL;(3)=p;q->rear=p;intOut_LQueue(LQueue*q,datatype*x)QNnode*p;if(Empty_LQueue(q))return0;/*队空,操作失败*/elsep=q->front->next;*x=(4);(5)=p->next;free(p);if(q->front->next==NULL)q->rear=q->front;return1;
问答题【说明】本应用程序的运行窗口如图2所示。窗口中的3个文本框和两个按钮名称分别为Txt_salary、Txt_base、Txt_tax、Cmd_compute和Cmd_quit。运行时,文本框Txt_base存放的是免税金额基数(应扣除的基本费用co)当用户在文本框Txt_salary中输入月收入(工资或薪金)并单击“计算”按钮Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为800元,税率如表1所示。级数月应纳税所得额适用税率(%)123456789不超过500元的部分501元~2000元的部分2001元~5000元的部分5001元~20000元的部分20001元~40000元的部分40001元~60000元的部分60001元~80000元的部分80001元~100000元的部分超过100000元的部分51015202530354045设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S(元);若0<K≤500,则S=K×5%;若500<K≤2000,则S=500×5%+(K-500)×10%;若2000<K≤5000,则S=500×5%+1500×10%+(K-2000)×15%;若5000<K≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%;例如,某人某月工资总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。在开发过程中,需要编写的程序代码如下;【程序】OptionBase0PrivateSubCmd_compute_Click()Dimpaylevel,taxPratepaylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,_1000001)taxPrate=Array(5,10,15,20,25,30,35,40,45)K={{U}}(1){{/U}}S=0If(K>0)ThenForj=1To9If{{U}}(2){{/U}}ThenS=S+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100ElseS=S+{{U}}(3){{/U}}*taxPrate(j-1)/100ExitForEndIfNextjEntIf{{U}}(4){{/U}}=Str$(S)EndSubPrivateSubCmd_quit_Click()EndEndSubPrivateSubForm_Load()Txt_tax.Text=""Txt_salaw.Text=""Txt_base.Text=800Txt_tax.Locked=TrueTxt_base.Enabled={{U}}(5){{/U}}EndSub
问答题【说明】某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在n(n≥1)个数据D1、D2、…、Dn中,选出其中所有不重复的k个数据,置于原来前k个数据的位置上。该流程图的算法如下:第1个数据必然被选出,然后从第2个数据开始,逐个考查其余的数据。假设D1、D2、…、Dm(m≥1)是已经选出的、不重复的数据,则对于数据Di(m<i≤n),将其依次与Dm/Dm-1、…、D1进行比较,若没有发现与之相同者,则Di被选出并置于Dm+1的位置上;否则对Di不做处理。例如,如下10个数据:5,2,2,7,4,4,7,1,9,1(n=10)经过上述算法处理后的结果为:5,2,7,4,1,9(k=m=6)【流程图】注:循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。
问答题[说明] 若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。[程序] void saddle (int A[ ] [ ], int m, int n) int i,j,min; for (i=0;i <m;i + + ) min: (1) ; for (j=1; j<n; j+ +) if(A[i][j]<min) (2) ; for (j=0; j<n; j+ +) if ( (3) ) p=0; while (p<m if (p > = m)printf ("%d,%d,%d/n",i,j,min);
问答题【说明】下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按从小到大的顺序排列,M是给定的常数。【流程图】此流程图1中,比较“K(I)+K(J):M”最少执行次数约为(5)。
问答题试题四(15分,每空3分)阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[i][j]等于0表示第i排第j列(0≤i,j≤N-1)的票尚未售出。函数intFind(inta[][N],intR,int*row,int*col)的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0。例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出的3×3正方形空座位如图(c)中斜线区所示。[函数]intFind(inta[][N],intR,int*row,int*col){inti,j,k,c,t;intFOUND=0;for(i=0;!FOUNDc
问答题
问答题【问题2】(6分)
若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空(1)~(3)。
若采用定义方式1和调用方式1,则输出为“00000000”。
若采用定义方式1和调用方式2,则(1)。
若采用定义方式2和调用方式1,则(2)。
若采用定义方式2和调用方式2,则(3)。
问答题[说明]本程序将自然数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>#defineSIZE.10inta[SIZE][SIZE],k;voidwrite(intn)/*输出矩阵*/inti,j;for(i=0;i<=n;i++)for(j=0;j<=njj++)printf("%4d",a[i][j]);printf("/n");voidmakeline(introw_start,intcol_start,introw_end)/*完成矩阵一条斜线的整数填写*/inti,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);voidmakeArray(intn)/*完成矩阵每条斜线的整数填写*/intd;for(d=1;d<=(3);d++)if(d<=n+1)if(d%2)makeline((4));elsemakeline(n+1-d,0,n);elseif(d%2)makeline((5));elsemakeline(0,d-n-1,2*n-d+1);voidmain()intn,N=5;k=1;n=N-1;makeArray(n);write(n);
问答题【函数1说明】
函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串。若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。
【函数1】
int palindrome(char s[]{
char *pi, *pj;
pi=s; pj=s+strlen(s)-1;
while(pi<pj pj--;
}
if({{U}} (2) {{/U}})return-1;
else return 0;
}
【函数2说明】
函数f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。
例如,若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。
【函数2】
void f(char *str, char del){
int i,j, len;
len=strlen(str);
i=0;
while(i<len){
While({{U}} (3) {{/U}}) i++; /*忽略连续的标志字符*/
/*寻找从str[i]开始直到标志字符出现的一个子字符串*/
j=i+1;
while(str[j]!=del
{{U}} (4) {{/U}}='/0'; /*给找到的字符序列置字符串结束标志*/
printf("%s/t",
{{U}} (5) {{/U}};
}
}
问答题试题八(共15 分)
阅读以下说明和Java 程序代码,将应填入(n) 处的字句写在答题纸的对应栏内。
[说明]
在下面的 Java 程序代码中,类SalesTicket 能够完成打印票据正文的功能,类HeadDecorator 与FootDecorator 分别完成打印票据的台头和脚注的功能。
已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
这是票据的台头!
这是票据正文!
这是票据的脚注!
------------------------
这是票据的台头!
这是票据的脚注!
[Java 程序代码]
public class SalesTicket {
public void printTicket() {
System.out.println("这是票据正文!");
}
}
public class Decorator extends SalesTicket{
SalesTicket ticket;
public Decorator(SalesTicket t){
ticket = t;
}
public void printTicket(){
if(ticket != null)
ticket.printTicket();
}
}
public class HeadDecorator extends Decorator{
public HeadDecorator(SalesTicket t) {
(1) ;
}
public void printTicket() {
System.out.println("这是票据的台头!");
super.printTicket();
}
}
public class FootDecorator extends Decorator{
public FootDecorator(SalesTicket t) {
(2) ;
}
public void printTicket() {
super.printTicket();
System.out.println("这是票据的脚注!");
}
}
public class Main {
public static void main(String[] args) {
T = new HeadDecorator( (3) );
T. (4) ;
System.out.println("------------------------");
T = new FootDecorator( (5) );
T.printTicket();
}
}
问答题[说明]
当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在第一个显示面板上显示字符串"HelloWorld";在第二个显示面板上画一条直线。
[Java代码]
import java.awt. *;
import javax.swing. *;
public class HelloWorldApplet extends JApplet
pubhc void {{U}}(1) {{/U}} {
{{U}}(2) {{/U}} str="HetloWorld";
JLabel label = new JLabel(str);
this. getContentPane().add(label);
}
}
import java.applet.Applet;
import java.awt.Graphics;
public class AppletPaint extends {{U}}(3) {{/U}}{
public void paint({{U}} (4) {{/U}}) {
g.drawLine(0,0,300,200);
}
}
[HTML文档]
<html>
<head>
<title> HTML Test Page </title>
</head>
<body>
<applet code="{{U}} (5) {{/U}}" width="300" height="100">
</applet>
<applet code=" AppletPaint.class" width="300" height="100">
</applet>
</body>
</html>
