版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件水平考试(初级)程序员下午(应用技术)模拟试卷3(共9套)(共62题)软件水平考试(初级)程序员下午(应用技术)模拟试卷第1套一、流程图题(本题共1题,每题1.0分,共1分。)1、阅读以下说明和流程图,回答问题,并将解答填入对应栏内。【说明】求解约瑟夫环问题。算法分析:n个士兵围成一圈,给他们依次编号,班长指定从第w个士兵开始报数,报到第s个士兵出列,依次重复下去,直至所有士兵都出列。【流程图】【问题】将流程图中的(1)~(5)处补充完整。标准答案:(1)L[i].nextp=1(2)k=w-1(3)count!=n(4)++I(5)++count知识点解析:暂无解析二、C语言题(本题共3题,每题1.0分,共3分。)2、阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【函数2.1】voidsort(char*s,intnum){inti,j--num;chart;while(j-->1)for(i=0;i<j;i++)if(s[i]>s[i+1]){t=s[i];s[i]=s[i+1];s[i+1]=t;}voidmain(){char*s="CEAedea";sort(s,5);printf("%s",s);}上述程序的结果是(1)【函数2.2】voidmain(){union{intig[6];Chars[12];}try;try.ig[0]=0x4542;try.ig[1]=0x2049;try.ig[2]=0x494a;try.ig[3]=0x474e;try.ig[4]=0x0a21;try.ig[5]=0x0000;pintf("%s",try,s);}上述程序的结果是(2)【函数2.3】voidmain(){char*letter[5]={"ab","efgh","ijk","nmop","st"};char**p;inti;p=letter;for(i=0;i<4;i++).printf("%s",p[i]);}上述程序的结果是(3)【函数2.4】main(){inti=4,j=6,k=8,*p=&I,*q=&j,*r=&k;intx,y,z;x=p==&i;y=3*-*p/(*q)+7;z=*(r=&k)=*p**q;printf("x=%d,y=%d,z=%d",x,y,z);}上述程序的结果是(4)【函数2.5】inta[]={5,4,3,2,1};voidmain(){inti;intf=a[0];intx=2;for(i=0;i<5;i++)f+=f*x+a[i];printf("%d",f);}上述程序的结果是(5)标准答案:(1)ACEdeea(2)BEIJING!(3)abefghijkmnop(4)x=1,y=5,z=24(5)129知识点解析:暂无解析3、阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】将A,B,C,D,E,F这6个变量排成如图(a)所示的三角形,这6个变量分别取[1,6]中的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。图(b)就是一个解。程序引入变量a,b,c,d,e,f,并让它们分别顺序取1~6的整数,在它们互不相同的条件下,测试由它们排列成的如图(a)所示的三角形三条边上的变量之和是否相等,如果相等即为一种符合要求的排列,就输出它们。【程序】voidmain(){inta,b,c,d,e,f;for(a=1;a<=6;a++)for(b=1;b<=6;b++){if((1))continue;for(c==1;c<=6;c++){if((2))continue;for(d=1;d<=6;d++){if((3))continue;for(e=1;e<=6;e++){if((4))continue;f=21-(a+b+c+d+e);if((5)){printf("%6d",a);printf("%4d%4d",b,f);printf("%2d%4d%4d",c,d,e);scanf("%*c");/*按回车键,继续找解*/}}}}}}标准答案:(1)b==a(2)c==a‖c==b(3)d==a‖d==b‖d==c(4)e==a‖e==b‖e==c‖e==d(5)a+b+c==c+d+e&&a+b+c==e+f+a知识点解析:暂无解析4、阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】下面一段程序从给定的数组b中找出值最小的元素,并输出该元素的数组下标、内存地址minaddr以及元素值本身。函数findmin负责在给定的数组中查找最小值,并返回最小值所在的内存地址,函数有三个参数:array是所要处理的数组;size是数组的大小;index负责从函数返回具有最大值的元素在数组中的数组下标。请填充空白,使其成为一个合乎要求的完整程序。【程序】//程序开始#include<iostream.h>int*findmin(int*array,intsize,int&index);voidmain(){/******变量定义部分***********/intb[10]={34,34,23,89,1,2,13,42,5,54};(1);intidx;/*******寻找最小值************/minaddr=findmin(b,sizeof(b)/sizeof(int),idx);/*******输出最小值的有关信息************/cout<<"Minvalueindex:"<<idx<<end1<<"Minvalueaddress:"<<minaddr<<end1<<"Minvalue:"<<(2)<<end1;}/*******函数findmin的定义部分************int*findmin(int*array,intsize,int&index){intmin=0;//max是当前具有最小值的数组元素下标值for(inti=1;(3);i++){if(array[i]<(4))min=i;}(5);returnarray+min;//返回最小值所在内存地址}标准答案:(1)int*minaddr(2)b[idx](3)i<size(4)array[min](5)index=min知识点解析:暂无解析三、VB题(本题共2题,每题1.0分,共2分。)5、阅读以下说明及VisualBasic程序代码,将应填入(n)处的字句写在对应栏内。[说明]我国现行使用的公民身份证号码有两种,分别遵循两个国家标准:〖GB11643-1989〗和〖GB11643-1999〗。〖CB11643-1989〗中规定的是15位身份证号码,排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。〖GB11643-1999〗中规定的是18位身份证号码,是特征组合码,它由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其中,校验码C由本体码按如下过程求得:(1)计算校验码和S=a18W18+a17W17+…+a2W2,其中i表示18位身份证号,码每一位的序号,从右至左,最左侧为18,最右侧为1;ai表示身份证号码第i位上的号码;wi表示第i位上的权值,其值为2i-1模11的结果;(2)计算校验码值R,其值为校验和模11的结果;(3)根据下面对应关系找出校验码C:由上述计算过程可以看出,18位身份证号码中可能包含非数字的字母X(代表数字10)。下面的应用程序基于这一算法实现了身份证号码的升位查询:在开发过程中,显示新旧两种身份证号码的文本框(TextBox)分别名为Text1和Text2,“号码升位”按钮(CommandButton)名为Command1。代码中使用到的字符串函数及功能说明如下:(1)Len(s):获取字符串s的长度;(2)Left(s,1):返回字符串s左端长度为1的子串;(3)Right(s,1):返回字符串s右端长度为1的子串;(4)Mid(s,p,1):返回字符串s从第P个字符开始长度为1的子串。[VisualBasic代码]’计算18位身份证号码PrivateSubCommandl_Click()DimcodeAsStringDimSAsIntegercode=Textl.Text’提取15位身份证号码IfLen(code)<>15ThenMsgBox"ID号码长度不正确,请检查!"(1)EndIfcode=Left(code,6)+"19"+(2)(code,9)’年份升位S=0Fori=18To2Step-1’计算校验码和S=S+Clnf((3))*(2^(i-1)Mod11)Nexti(4)’计算校验码值SelectCaseS’确定校验码Case0:code=code+"1"Case1:code=code+"0"Case2:code=code+"X"CaseElse:code=code+CStr((5))EndSelectText2.Text=code’显示18位身份证号码EndSub标准答案:(1)ExitSub(2)Right(3)Mid(code,19-i,1)(4)S=SMod11(5)12-S知识点解析:(1)输入错误时,应即刻退出过程;(2)注意到“19”是夹在15位身份证号码左端6位与右端9位之间的,按照参数调用格式可以推断此处函数是Right;(3)此处应填入身份证号码中第i位(从左端起、序号自18递减)上的号码,它位于字符串code的第19-i位(从左端起、序号自1递增),因此可用Mid(code,19-i,1)来获取;(4)略;(5)从校验码值与校验码的转换关系可知:当校验码值大于等于3时,校验码值与校验码之和为12。6、阅读以下说明及VisualBasic程序代码,高尔夫球应填入(n)处的字句写在对应栏内。[说明]设某单位Acess数据库中有一张员工信息表,其中记录了员工编号、姓名、性别等基本信息。下面的应用程序利用数据控件(Data)实现了对这张表中记录的增加、删除和修改操作。其运行界面如下:在开发过程中,数据控件Data1与员工数据表相连接,各文本框、“性别”组合列表框Combo1、“政治面貌”组合列表框Combo2都分别与数据表的相应字段绑定,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDel、CmdUpdate和CmdExit。[VisualBasic代码]PrivateSubForm_Load()’加载窗体Combo1.(1)"男"Combo1.(1)"女"Combo2.(1)"党员"Combo2.(1)"团员"Combo2.(1)"群众"EndSubPrivateSubCmdAdd_Cliek()’增加记录Datal.Recordset.AddNewEndSubPrivateSubCmdDel_Click()’删除记录Datal.Recordset.(2)Datal.Recordset.MoveNextEndSubPrivateSubCmdUpdate_Click()’修改记录IfDatal.ReadOnly=(3)AndDatal.Recordset.UpdatableThenDatal.Recordset.EditDatal.Recordset.(4)ElseMsgBox"数据表不允许修改!"EndIfEndSubPrivateSubCmdExit_Click()’退出程序DimretAsLongret:MsgBox("真的要退出吗?",vbQuestion+vbYesNo,"退出")If(5)ThenDatal.Reeordset.CloseEndEndffEndSub标准答案:(1)Addhem(2)Delete(3)False(4)Update(5)ret=vbYes知识点解析:(1)组合列表框中的列表项是在窗体加载时添加的,其方法是调用组合框控件对象的Addhem方法;(2)从数据集中删除记录应使用Delete方法;(3)若数据控件的ReadOnly(只读)属性为真,则数据记录不可更改,因此此处取假值;(4)数据集的Edit方法用于对可更新的当前记录进行编辑修改。Update方法则用于将修改的记录内容保存到数据库中。(5)询问窗口返回两种值,一是单击按钮“是(Y)”返回的vbYes,二是单击按钮“否(N)”按钮返回的vbNo。选择前者将结束程序。四、C++题(本题共1题,每题1.0分,共1分。)7、阅读以下说明和C++程序,将应填入(N)处的字句写在对应栏内。[函数8.1说明]现考虑编写一个扑克游戏:只用一副无大小王的扑克,扑克的花色(suit)分为Spade、Heart、Diamond和Club,每门花色的牌共13张,面值(rank)分别为2、3、4、5、6、7、8、9、10、Jack、Queen、King和Ace,每张扑克牌应包含如下信息:惟一的ID号(1~52)、花色、面值、背面图案的编号等。每张扑克牌的操作有:判断两张扑克牌是相同花色吗?相同面值吗,判断一张扑克牌是给定的花色吗?是给定的面值吗?请补充扑克牌类Card类的声明和实现代码,要求选取适当形式的数据成员描述每张扑克牌的信息,同时以成员函数的形式实现指定的操作。[C++程序]constenumSUIT{SPADE=0,HEART,DIAMOND,CLUB};constenumRANK{TWO=0THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING,ACE};classCard。{public:(1)(intid):mID(id),mSuit((id1)/13),mRank((id-1)%13){}boolIsSameSuit(constCard&rhs){retum((this==&rhs)?(2)));}boolIsSankRank(constCard&rhs){return((this==&rhs)?false:mRank==rhs.mRank);}boolIsSuit(intsuit){return(3);}boolIsRank(intrank){returnmRank==rank;}private:staticintnBackImg;//背面图案constintmID;constintmSuit;constintmRank;};[函数8.2说明]输入一字符串,将其中所有的小写字母转换为大写字母,大写字母转换为小写字母,然后显示输出转换后的字符串。[C++程序]#include<iostream.h>classvector{inta;intb;public:vector(intx=0,inty=0):a(x),b(y){}doubleoperator*((4)){doublec;(5);returnc;}voidinput(intx,inty){a=x;b=y;}voidoutput(){cout<<’(’<<a<<’,’<<b<<")"<<end1;}};voidmain(){vectorx(10,20),y;//定义x,y,z三个矢量类对象,并将x置初值(10,20)doubled;//定义实数d以存放点乘结果y.input(2,3);//给y赋值为(2,5)d=x*y;//两矢量点乘x.output();//输出矢量xy.output();//输出矢量ycout<<d<<end1;//输出点乘结果}标准答案:(1)Card(2)false:mSuit==rhs.mSuit(3)mSuit=suit(4)vector&x(5)c=a*x.a+b*x.知识点解析:暂无解析五、JAVA题(本题共1题,每题1.0分,共1分。)8、阅读以下程序说明和Java代码,将应填(n)处的字句写对应栏内。[说明]本程序的功能是产生一个抽奖游戏中的随机数组合。抽奖的规则是从自然数1至50中无重复抽取6个数。为了保证抽取的无重复性,将50个自然数放在数组source中。每抽取了一个数,就用数组的最后一个数来改写这个被抽中的数,并把数组的长度减1。为使输出更为清晰,把抽取出来的6个数放在数组target中,经过排序(Arrays类中的sou方法实现排序)然后输出。注:Math.random方法返回一个在0(包含)到1(不包含)之间的随机浮点数。[Java代码]importjava.util.*;publicclassDrawOut{publicstaticvoidmain(String[]args){intn=50;intk=6;int[]source=newint[n];for(inti=0;i<(1);i++)source[i]=i+1;int[]target=newint[k];//将抽中的数字从source数组中取出,放入到target数组for(inti=0;i<(2);i++){intr=(int)(Math.random()*(3));target[i]=source[r];....[r]=(4);(5);}Arrays.sort(target);for(inti=0;i<target,length;i++)System.out.prinfln(target[i]);}}标准答案:(1)source.length(2)target.length(3)n(4)Source[n-1](5)n--知识点解析:本处for循环的功能是将自然数1至50顺序放到source数组中。数组的下标从。开始,上标是source.length;(2)本处for循环的功能是将从source数组中取出的数字放入target数组。数组的下标从0开始,上标是tar-get.length;(3)Math.random方法返回一个在0(包含)到1(不包含)之间的随机浮点数,乘以n(此处值为50)是为了产生一个。至49之间的整数作为从source数组中取数字的下标;(4)本行代码的功能是把source数组的最后一个数字来改写这个被抽中的数字;(5)本行代码的功能是调整数组source的大小,将数组长度n减1。软件水平考试(初级)程序员下午(应用技术)模拟试卷第2套一、流程图题(本题共1题,每题1.0分,共1分。)1、阅读下列算法说明和算法,将应填入(n)处的语句写在对应栏内。【说明】本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。【代码】#include<stdio.h>#include<stdlib.h>#include<string.h>char*replace(char*s1,char*s2,char*s3){char*p,*q,*r,*s;int|2,|3,i=0;|2=strlen(s2);|3=strlen(s3);p=s1;while((p=strstr(p,s2))!=NULL){i++;/*统计s2串出现的次数*/(1);}i=(2);s=r=(char*)malloc(i);/*分配动态内存存放新字符串*/p=s1;while(1){q=strstr(p,s2);/*s2串是否在s1中出现,q是首次出现的位置*/if(q!=NULL){i=q-p;(3);r+=i;(4);r+=|3;p=q+|2;/*将指向s1串的指针移到s2子串出现的位置后,为下一次循环做好准备*/}else/*q为空,表示剩余的s1串中已经没有s2*/{(5);break;/*终止循环*/}}return(s);/*返回指向所形成的新串的指针*/}voidmain(){char*a="sabcababde",*b="ab",*c="efg",*d;d=replace(a,b,c);printf("result=%s\n",d);free(d);}标准答案:(1)p+=12(2)strlen(s1)-i*12+i*13+1(3)strncpy(r,p,i)(4)strcpy(r,s3)(5)strcpy(r,p)知识点解析:本题考查用C语言实现对字符串的操作。题目要求将字符串s1中出现的所有子串s2替换成s3,形成一个新串,但不破坏字符串s1。要不破坏字符串s1,只有用一个新串来存放处理结果;要用到新串,那么就需要重新分配空间。第(1)空在第一个循环体中,此循环体的作用在注释中已经给出,用来统计串s2在串s1中出现的次数,这里的统计变量已经给出,并将结果存放在统计变量i中,但每次统计成功后串s1的位置应该往后移动串s2的长度,由程序我们可以看出,串s1存放在指针变量p中,因此,指针变量p指的位置需要往后移动串s2的长度,而串s2的长度存放在变量12中。因此,此空答案为p+=12。第(2)空很明显是用来给变量i赋一个值,但根据s=r=(char*)malloc(i)语句我们可以推断出,当前变量i中存放的是新串的长度。而新串的长度应该等于串s1的长度减去串中x个串s2的长度,加上x个串s3的长度再加1,而在上面的循环中已经求出了串s2在串s1中出现的次数,结果存放在变量i中。因此,此空答案为strlen(sl)-i*12+i*13+1。第(3)空是在if(q!=NULL)成立的情况下运行的语句,而变量q指向的是s2在s1中首次出现的位置,如果条件成立,说明串s2在串s1中出现了,语句i=q-p用来表示出现的位置到s1开始位置的距离。在这些条件都清楚了后,应该往新的串中写字符了,首先写串s1的前i个字符,此空就是用来完成这个功能的,因此,此空答案为strncpy(r,p,i)。第(4)空是接着上一空而来的,在上面我们[分析]到,把串s1的前i个字符写入新串,那么在新串中接着要出现的应该是替换串s2的串s3,此空的任务应该是将串s3写入新串中,因此,此空答案为strcpy(r,s3)。第(5)空是在if(q!=NULL)不成立的情况下运行的语句,这说明串s2不在串s1中出现,在这种情况下,串应该不需要进行替换操作,而直接将串s1写入到新串中,此空的作用就是用来实现这个功能的,因此,此空答案为strcpy(r,p)。二、C语言题(本题共3题,每题1.0分,共3分。)2、阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,则此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去,直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。设n=100,s=1,m=10。(1)将1到n个人的序号存入一维数组p中;(2)若第i个人报数后出圈,则将p置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置:(3)重复第(2)步,直至圈中只剩下p[1]为止。#include<stdio.h>#defineN100#defineS1#defineM10voidmain(){intp[100],n,s,m;m=M;n=N;s=S;inti,j,s1,w;s1=s;for(i=1;(1);i++)(2)=i;for(i=n;i>=2;i--){s1=(3);if(s1==0)s1=i;w=(4);for(j=s1;j<i;j++)p[j-1]=p[j];p[i-1]=(5);printf("%4d",p[i])}}标准答案:(1)i<=n(2)p[i-1](3)(s1+m-1)%i(4)p[s1-1](5)w知识点解析:题目中给出了n个人出圈问题的具体实现方法,要求用C语言来实现,结合题目中给出的方法,我们来具体分析程序。第(1)空是循环的判断条件,根据题目的要求和程序来看,这个循环应该用来把n个人的编号存放到数组p中,总共是n个人,那么循环上界应该是n,从程序中可以知道循环变量是i,因此此空答案为i<=n。第(2)空在循环体中,从上面的分析已经知道,这个循环实现将n个人的编号存放到数组p中,第一个人的编号应该存放到数组下标为0的位置,而第二个人的编号就存放到数组下标为1的位置,依此类推。因此此空答案为p[i-1]。第(3)空在另一个循环体中,结合整个程序来看,不难推断出此循环体应该用来实现题目中的第二个与第三个要求。此空是用来给变量s1赋一个值,从后面的程序中可以推断出,变量s1中存放的是判断当前报数的人是否该出圈,如果为0,则出圈,因此此空答案为(s1+m-1)%i。第(4)空是给一个变量w赋一个值,从此空上面的程序我们知道找到了要出圈的人,根据题目要求,应将出圈人的编号置于数组的倒数第i个位置上,在将其存放到倒数第i个位置时肯定要移动数组中的元素,而元素的移动是以当前位置为前提的,那么需要将当前位置人的编号先保存到变量w中,而当前位置人的编号存放在数组,p[s1-1]中,因此此空答案为p[s1-1]。第(5)空很明显是给p[i-1]赋一个值,而p[i-1]正好是数组的倒数第i个位置,应该用来存放当前出圈人的编号,而编号在变量w中,因此此空答案为w。3、阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】给定函数fun的功能是:将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。【函数】intfun(char*c,intstatus){if((1)==’’)return1;else{if((2)&&(3)&&(4))(5)=’A’-’a’;return0;}}main(){intflag=1;charch;printf("请输入一字符串,用点号结束输入!\n");do{ch=getchar();flag=fun(&ch,flag);putchar(ch);}while(ch!=’.’);printf("\n");}标准答案:(1)*c(2)status(3)*c<=’z’(4)*c>=’a’(5)*c+知识点解析:本题考查在C语言中对字符串的处理。题目要求程序将从键盘上输入的每个单词的第一个字母转换为大写字母,而输入的各单词必须用空格隔开,用“.”结束输入。要实现这个功能,关键之一在于如何取出单词中的第一个字母,关键之二是如何实现大小写字母的转换。第(1)空是一个条件判断语句的条件,如果条件成立,则返回1,而从程序中可以看出,此条件判断语句是判断当前取到的字符是否等于空格字符。从主函数中可以看到,每次在调用功能函数fun()前都从输入的字符串中取出一个字符,并存放在变量ch中,而在调用函数时是将变量ch的地址传递给了指针变量c,因此此空的答案为*c。第(2)空、第(3)空和第(4)空应该结合起来看,它们都是条件判断语句的条件,这个条件判断语句下面的程序是将一个小写字母改变成一个大写字母,根据题目要求,此条件判断语句的条件应该是判断当前取到的字母是一个单词的第一个字母且是一个小写字母,再结合主函数来看,我们不难发现单词的第一个字母用一个标记变量flag标识,如果是第一个字母,这个标记变量flag的值为1,否则为0。要判断一个字母是否是小写字母,应该判断其ASCⅡ码值是否在a与z的ASCⅡ码值之间。所以这3个空的答案应该分别为status、*c<=’z’、*c>=’a’。第(5)空是在上面条件成立的情况下执行的一条语句,条件成立我们在上面已经分析过了,表明当前取到的字符是一个单词的第一个字母且是小写字母,此空所在语句的任务是将小写字母变成大写字母,根据上面的分析,因此可以得到此空答案为*c+。4、阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】编写程序,生成一个新文本文件,它由一个已知文本文件的所有偶数行组成。要求已知文本文件名和新文本文件名均从键盘输入。请填空完善程序。【C语言程序】#include<stdio.h>main(){FILE*oldf,*newf;charch,fname[20];inti;do{printf("Enternameofexistedtextfiletoberead:");scanf("%s",fname);if((oldf=fopen(fname,"r"))==NULL)printf("File%scan’topen!\n",fname);}while(oldf==NULL);do{printf("Entermaneofnewtextfiletobewritten:");scanf("%s",fname);if(((1)==NULL)printf("File%scan’topen!\n",fname);}while((2));i=1;while(!feof(oldf)){while((ch=fgetc(oldf))!=(3)){if(i%2==(4))fputc(ch,newf);}fputc(’\n’,newf);(5);}fclose(oldf);fclose(newf);}标准答案:(1)newf=fopen(fname,"w")(2)newf==NULL(3)’\n’(4)0(5)i=i+1(或i++)知识点解析:本题考查用C语言实现对文本文件的操作。题目要求程序生成一个新文本文件,它的内容由一个已知文本文件的所有偶数行组成,而已知文本文件名和新文本文件名均从键盘输入,题目的关键在于对文件的操作。下面来具体分析代码。第(1)空在一个循环体中,是条件判断语句的条件,此循环的作用我们不难从程序中看出,是用来打开新文本文件的,在C语言中要打开一个文件应该用函数fopen(),它的两个参数分别是其文件名和对文件操作的属性,根据题目意思,对这个文件的操作只有写操作。因此,此空答案为newf=fopen(fname,"w")。第(2)空是一个循环的判断条件,上面我们已经分析了该循环的作用,是用来打开新文本文件的,结合第一个文件的打开程序,我们很容易发现此空的答案为newf==NULL。第(3)空是一个二重循环第二层循环的判断条件,这个二重循环的作用是用来实现将已知文本文件的所有偶数行内容写到新文件中,这里需要注意每次取到的内容都是偶数行的内容,在对已知文本文件进行取内容时是逐行取的,那么条件判断语句是用来判断是否取完了一行内容,在C语言中,一般用换行符’\n’来标志一行的结束,因此此空答案为’\n’。第(4)空是循环下条件判断语句的条件,根据题目要求可以知道每次对新文件进行写的数据都是已知文本文件的偶数行的内容,那么在写之前应该首先判断内容是否是偶数行的内容。此空所在语句就是用来实现这一功能的,而偶数对2取余的结果都为0,因此此空答案为0。第(5)空是二重循环的最后一条语句,在上面的空中我们已经分析到,在对新文件进行写内容时要首先判断其内容所在行是否为偶数行,而当前行号存放在变量i中,整个程序都没有改变变量i的值,那么此空应该是用来改变变量i的值的,因此此空答案为i++。三、C++题(本题共1题,每题1.0分,共1分。)5、阅读以下说明,以及用C++在开发过程中所编写的程序代码,将应填入(n)处的字句写在对应栏内。【说明】在矩形类中重载关系运算符“>=”,采用友元,比较的依据是矩形面积的大小。重载算术运算符“+=”,采用成员函数,更新矩形对象的长与宽,分别加上形参矩形的长与宽。重载算术运算符+,利用构造函数,采用友元。【代码】classCrect{intlength,witdth;public;CRect(intl,intw){length=l;width=w;}friendintoperator>=(CRect&r1,CRect&r2){return(1)>=(2);//比较面积}voidoperator+=(CRect&r){(3);//求长(4);//求宽}friendoperater+(CRect&r1,CRect&r2){returnCRect((5));//利用构造函数}}标准答案:(1)r1.length*r1.width(2)r1.length*r1.width(3)length+=r.length(4)width+=r.width(5)r1.length+r2.length,r1.width+r2.width知识点解析:本题考查C++中的函数重载与友元。题目要求在矩形类中采用友元重载关系运算符“>=”,比较的依据是矩形面积的大小;采用成员函数重载算术运算符“+=”来更新矩形对象的长与宽,其功能是分别加上形参矩形的长与宽;重载算术运算符“+”,利用构造函数,也采用友元的方式。首先我们要了解一下友元的作用。需要在类的外部直接访问类的私有数据成员,在不改变类的数据成员安全性的前提下,使得类外部的函数或类能够访问类中的私有成员数据,这一功能可以通过友元的方式来实现。下面来具体分析程序。第(1)空与第(2)空要结合起来完成,它们是重载关系运算符“>=”的两个操作数,而根据题目要求,这个关系运算符的比较依据是矩形面积的大小,求矩形的面积是通过矩形的长和宽来实现的,这个函数的参数是两个矩形类对象,在定义矩形类时,分别把矩形的长和宽定义成了默认的私有成员变量。根据程序中函数的定义可以知道,这个函数被定义为友元函数,可以访问矩形类中的私有成员变量,因此这两个空的答案分别是用对象的长和宽计算其面积,即答案分别为r1.length*r1.width与r2.length*r2.width。第(3)空与第(4)空要结合起来完成,它们是重载算术运算符“+=”函数下面的操作,根据题目要求,这个算术运算符的作用是用来根据形参矩形的长与宽更新该矩形对象的长与宽,是该矩形对象的长与宽分别加上形参矩形对象的长与宽,根据注释,第(3)空用来更新其长,因此此空答案为length+=r.length;而第(4)空用来更新其宽,因此答案为width+=r.width。第(5)空在重载算术运算符“+”的函数下面,根据题目要求,此函数的实现是利用矩形类的构造函数和友元共同实现的。从程序中可以明显知道,此空是构造函数的参数,而构造函数的两个参数分别是矩形的长与宽。算术运算符“+”的作用我们大家也都非常熟悉,是用来计算两个操作数的和。重载算术运算符“+”的函数参数是两个矩形对象,那么构造函数中的两个参数应该分别是这两个矩形对象的长与宽的和。所以此空答案为r1.length+r2.length,r1.width+r2.width。四、JAVA题(本题共1题,每题1.0分,共1分。)6、阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。【说明】本程序根据输入的月份数,输出它是哪个季节。【代码】importjava.io.*;publicclassseason{publicstaticvoidmain(String[]args){Stringstrln="";(1)in=newInputStreamReader(System.in);BufferedReaderbuffln=newBufferedReader(in);System.out.print("Pleaseenteramonth(1-12):");try{strln=buffln.readLine();//从命令行读入数据}catch((2)){System.out.println(e.toStdng());}intmonth=(3)(strln);//将字符串转换成整数型intseason=0;if(month<12&&month>0)eseason=((month+10)%12)/3+1;//计算季节的公式(4)(season){case1:System.out.println("theseasonisSpringl");break;case2:System.out.println("theseasonisSummer!");case3:System.out.println("theseasonisFall!");case4:System.out.println("theseasonisWinter!");break;(5);System.out.println("thisisnotcorrectmonth!");}}}标准答案:(1)InputStreamReader(2)IOExceptione(3)Integer.parseInt(4)switch(5)default知识点解析:本题考查Java的基本语法知识与简单的算法实现。题目要求用Java语言实现根据输入的月份数,确定并输出这个月份的季节,这个算法应该是不难的,下面来具体分析程序。第(1)空很明显是定义一个变量in,它指向一个InputStreamReader类型的对象,那么这个变量in一定是一个。InputStreamReader类型的。因此,此空答案为InputStreamReader。第(2)空是catch的参数,在Java中,一般用try{}与catch{}结合起来使用,用来处理异常,其执行过程是先执行try{}函数体,发现异常才执行catch{}。从程序中可以知道,try{}的作用是从命令行读入数据,是一种输入操作,因此产生的应该是I/O异常,那么catch的参数应该是IOExceptione,所以此空答案为IOExceptione。第(3)空是给对象in的month属性赋一个值,这行语句的功能注释已经给出,是将字符串转变成整数型,这需要用到整型类的parseInt方法,因此,此空答案为Integer.parseInt。第(4)空很明显是一个函数名,结合题目要求与程序,不难推断出这个函数的功能是用来输出计算得到的季节,而从后面的程序中可以看出这是个选择执行函数,那么这个函数的函数名应该是switch,因此,此空答案为switch。第(5)空是在选择执行函数的最后面,在4种情况都考虑了之后,它考虑的应该是在匹配没有成功的条件下程序执行的情况,在多分支选择结构中,如果匹配不成功,则执行default后面的语句,因此,此空答案为default。软件水平考试(初级)程序员下午(应用技术)模拟试卷第3套一、流程图题(本题共1题,每题1.0分,共1分。)1、阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。【说明】已知头指针分别为La和lb的有序单链表,其数据元素都是按值非递减排列。现要归并La和Lb得到单链表Lc,使得Lc中的元素按值非递减排列。程序流程图如下所示:标准答案:(1)pa->data<=pb->data(2)pc->next=pa(3)pc=pb(4)pb=pb->next(5)pc->next=pa?pa:pb知识点解析:本题考查程序流程图和有序链表的归并。题目要求我们归并头指针分别为La和Lb的有序单链表,组成一个新的有序单链表Lc,而Lc又是指向La的。首先,我们来了解一下单链表的结构。单链表中一般有两个域,一个是数据域,用来存放链表中的数据;另一个是指针域,用来存放指向下个结点的指针。其归并的过程应该是先比较链表La和Lb中第一个元素,将较小的从其链表中取出放到k中,再取下一个结点的值去比较,重复这个过程,直到一个链表被全部取完,再将另一个链表剩下的部分连接到Lc后面即可。下面,我们来看程序流程图的内容。首先是用两个指针变量pa和pb分别指向La和Lb的当前待比较插入的结点,而pc指向Lc表中当前最后一个结点。再下面是一个条件判断语句,其作用是判断链表La和Lb是否为空,如果有一个为空,只要将另一个链表剩下的部分连接到Lc后面,程序应该就可以结束了。第(1)空是条件判断语句的条件,根据我们上面的分析,再结合流程图下面的内容,我们可以知道,这个条件语句的作用是比较当前待插入的两个值的大小,而指针变量pa和pb分别指向La和Lb的当前待比较插入的结点,因此,此空的答案为pa->data<=pb->data。第(2)空是在条件为真的情况下执行的语句,如果条件判断为真,应该将pa所指结点连接到pc所指结点后面,因此,pc所指结点的指针域应该存放pa所指结点的地址。所以,此空的答案为pc->next=pa。第(3)空和第(4)空都是在条件为假的情况下执行的语句,如果条件为假,说明pb所指结点的值小于pa所指结点的值,应该将pb所指结点连接到pc所指结点后面,图中已经实现这一功能,要我们完成的是在插入后的后继工作。由于pc指向的是Lc表中当前最后一个结点,在插入一个结点后,要修改pc的值。在将pb所指结点插入后,链表中的最后一个结点就是pb所指结点,第(3)空的答案应该为pc=pb。执行完这些功能后,指针pb应该要往后移动,即指向下一个结点,第(4)用来完成这个功能,所以答案为pb=pb->next。在前面,我们已经讲到如果链表La和Lb有一个为空,只要将另一个链表剩下的部分连接到Lc后面即可。第(5)空就是用来完成这个功能的,但我们不知道具体是哪个链表为空,还需要判断,因此,此空答案为pc->next=pa?pa:pb。二、C语言题(本题共3题,每题1.0分,共3分。)2、阅读以下函数说明和C语言函数,将应填入(n)处的语句写在对应栏内。【函数2.1说明】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。【函数2.1】Fun1(intn){inti;for(i=2;i<=n;i++){while((1)){if(n%i==0){printf("%d*",i);(2);}elsebreak;}}printf("%d",\n);}【函数2.2说明】下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第3、4、5只猴子都是这样做的,问海滩上原来最少有多少个猴子?【函数2.2】main(){inti,m,j,k,count;for(i=4;i<10000;i+=4){count=0;(3);for(k=0;k<5;k++){(4);i=j;if(j%4==0)(5);elsebreak;}i=m;if(count==4){printf("%d\n",count);break;}}}标准答案:(1)n!=i(2)n=n/i(3)m=i(4)j=i/4*5+1(5)count++知识点解析:本题考查C语言中正整数分解质因数算法和猴子分桃算法的实现。在程序2.1中,要求将一个正整数分解质因数。我们先来了解一下质因数的概念,一个自然数的因数中,为质数的因数叫做这个数的质因数。把一个合数,用质因数相乘的形式表示出来,叫做分解质因数。如90=2*3*3*5,其中2,3,5都是质数。在对数n进行分解质因数时,应先找到一个最小的质数i,然后按下述步骤完成:(1)判断这个质数i是否等于n,如果相等,则说明分解质因数的过程已经结束,打印出结果即可。(2)如果n≠i,但n能被i整除,则i是n的质因数,应打印出i的值,并用n除以i的商,作为新的正整数n。(3)如果n不能被i整除,则用i+1作为i的值,重复执行第(1)步。通过代码我们已经知道了最小的质数为2,第(1)空是循环的判断条件,结合我们上面的分析,应该是判断质数i是否等于n,因此,此空答案为n!=i。第(2)空在条件判断语句下,条件n%i==0成立,说明n能被i整除,根据分析,应打印出i的值,并用n除以i的商,作为新的正整数n。代码中已经实现了对i的输出,第(2)空的任务是用n除以i的商,作为新的正整数n,因此,答案为n=n/i。在程序2.2中,要求我们求出原来海滩上的桃子数,这个数的特点是除以5余1,且减去它的商和余数后再除以5又余1,一直这样下去,直到最后一次。要求这样一个有特点的数,我们可以在一个较大的范围里编程去找具有这种性质的数。结合代码我们知道,程序设计是从4到10000这个范围里去找具有这种特征的数的基数。第(3)空所在位置是第一层循环下面,应该是给变量赋初值阶段,结合后面的程序,可以发现m是用来临时存放当前求的基数乙因此,此空答案为m=i。第(4)空在第二层循环下面,这个循环的作用是利用当前的基数i来求桃子数,那么求解的过程肯定是分桃过程的逆向过程。即此空的答案为i=i/4*5+1。第(5)空在条件判断语句下面,如果条件成立,则执行此语句。我们接着看下面的程序,发现程序中有语句if(count==4),而在程序中一直没有出现变量count的值改变的语句,而它的初值是0,因此,此空肯定用来改变count的值的,再结合猴子分桃的特性,可以得到此空的答案为count++。3、阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。【说明】下面的程序构造一棵以二叉链表为存储结构的二叉树。【函数】BitTree*createbt(BitTree*bt){BitTree*q;structnode*s[30];intj,i;charx;printf("i,x=");scant("%d,%c",&i,&x);while(i!=0&&x!=’$’){q=(BitTree*}malloc(sizeof(BitTree));//生成一个结点(1);q->lchild=NULL;q->rchild=NULL;(2);if((3)){j=i/2;//j为i的双亲结点if(i%2==0)(4);//i为j的左孩子else(5);//i为j的右孩子}printf("i,x=");scanf("%d,%c",&i,&x);}returns[i];}标准答案:(1)q->data=x(2)s[i]=q(3)i!=1(4)s[j]->lchild=q(5)s[j]->rchild=q知识点解析:本题考查二叉树的构造。题目要求构造一棵二叉树,而二叉树的性质如下:如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i≤n),有:(1)如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲是结点[i/2]。(2)如果2i>n,则结点i为叶子结点,无左孩子:否则,其左孩子是结点2i。(3)如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1。下面我们来看程序。程序中声明了一个结点指针数组,用来保存生成的树中结点。用从键盘输入的方式来确定要插入的字符x和此结点在二叉树中的位置i(这个位置是指在完全二叉树中编号的位置)。第(1)空是在生成一个新结点后的操作,生成了一个新结点后,自然要将从键盘输入的字符x值存放进来,以及修改结点的两个指针域。程序中指针域都赋了空,因此,第(1)空的任务应该是将字符x写进来,因此,此空答案为q->data=x。第(2)空是在对结点完成操作后的操作,根据题目意思,生成的结点应该要保存到数组s中,此数组是一个指针数组,保存结点时,是将结点的地址保存进数组中相应的位置,因此,此空答案为s[il=q。第(3)空是条件判断语句的条件,结合下面的程序可以知道,此条件语句用来判断当前结点是不是根结点,如果不是,才执行条件语句中的内容。根据上面的分析,如果i=1,则结点i无双亲,是二叉树的根,因此,此空的答案为i!=1。第(4)空处后面有注释,说明i是j的左孩子结点,这个时候我们应该让j结点的左孩子指针指向结点i,此空就是要实现这一功能。而结点,j被存放在数组s中的第j个位置,因此,此空答案为s[i]->lchild=q。从程序中很容易看出,第(5)空与第(4)空功能相似,只是说i是j的右孩子结点,因此,让j结点的右孩子指针指向结点乙此空答案为s[j]->rchild=q。4、阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。【说明】本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。【函数】#include<stdio.h>#include<malloc.h>#include<ctype.h>#include<string.h>#defineINF"text.in"#defineOUTF"word.our’typedefstructtreenode{char*word;intcount;structtreenode*left,*right;}BNODE;intgetword(FILE*fpt,char*word){charc;c=fgetc(tpt);if(c==EOF)return0;while(!(tolower(c)>=’a’&&tolower(c)<=’z’)){c=fgetc(fpt);if(c==EOF)return0;}/*跳过单词间的所有非字母字符*/while(tolower(c)>=’a’&&tolower(c)<=’z’){*word++=c;c=fgetc(fpt);}*word=’\0’;return1;}voidbinary_tree(BNODE**t,char*word){BNODE*ptr,*p;intcompres;p=NULL;(1);while(ptr)/*寻找插入位置*/{compres=strcmp(word,ptr->word);/*保存当前比较结果*/if(!compres){(2);return;}else{p=ptr;ptr=compres>0?ptr->right:ptr->left;}}ptr=(BNODE*)malloc(sizeof(BNODE));ptr->left=ptr->right=NULL;ptr->word=(char*)malloc(strlen(word)+1);strcpy(ptr->word,word);(3);if(p==NULL)*t=ptr;elseif(compres>0)p->right=ptr;elsep->left=ptr;}voidmidorder(FILE*fpt,BNODE*t){if(t==NULL)return;midorder(fpt,(4));fprintf(fpt,"%s%d\n",t->word,t->count);midorder(fpt,t->right);}voidmain(){FILE*fpt;charword[40];BNODE*root=NULL;if((fpt=fopen(INF,"r"))==NULL){printf("Can’topenfile%s\n",INF);return;}while(getword(fpt,word)==1)binary_tree((5));fclose(fpt);fpt=fopen(OUTF,"w");if(fpt==NULL){printf("Can’topenfife%s\n",OUTF);return;}midorder(fpt,root);fclose(fpt);}标准答案:(1)ptr=*t(2)ptr->count++(3)ptr->count=1(4)t->left(5)&root,word知识点解析:本题考查在C语言中实现字母的统计和有序二叉树的建立及遍历。题目要求统计一篇英文短文中不同单词及出现次数,并将这些单词及其出现的次数用一棵有序二叉树存储,然后中序遍历该二叉树,将遍历经过的二叉树上的结点的内容输出。内容的输出是按词典编辑顺序将单词及出现次数输出的,因此二叉树的排序是按单词在词典中编辑顺序进行的,并且有序二叉树是动态生成的。本题目的关键是有序二叉树是动态生成的,我们先来看其生成的步骤:(1)如果相同键值的结点已在二叉排序中,则不再插入,只需修改其count的值即可;(2)如果二叉排序树为空树,则以新结点为根建立二叉排序树;(3)根据要插入结点的键值与插入后父结点的键值比较,就能确定新结点是父结点的左子结点,还是右子结点,并作相应插入。重复这几步,直到单词统计结束。下面我们来分析代码。函数getword()已经完全实现了,用来统计短文中的单词,并返回1,说明此单词出现了一次。函数binary_tree()是用来生成有序二叉树的。函数midorder()用来实现中序遍历。第(1)空在函数binary_tree()中,结合程序不难看出,此空应该是赋初值,而且是给指针变量ptr赋值。函数binary_tree()的形参中有一个指针变量*t,用来传递待插入到有序二叉树中的结点地址,在这里是让指针变量ptr指向这个地址,因此答案为ptr=*t。第(2)空在条件判断语句if(!compres)下,而compres存放的是上步的比较结果值,如果条件判断语句结果为真,说明word与ptr->word的值相等,即树中已经存在该字母结点,根据有序二叉树的生成步骤知道,不需要再插入,只需修改其count的值即可,因此,第(2)空答案为ptr->count++。第(3)空在动态生成了新结点后面。生成了一个新结点后,自然要对新结点的几个域值进行赋初值,程序中对指针域都赋了空,对字符指针域也赋了值,剩下的只有count值没有被修改,那么此空应该是用来修改count的值。在一个字母对应的结点刚插入树中时,它肯定是第一次出现,因此,此空答案为ptr->count=1。第(4)空在函数midorder()中,此函数的功能是实现对有序二叉树的中序遍历。它是用递归方法来实现的,如果树不为空,应该先对其左子树进行递归遍历,然后才是右子树,因此,第(4)空答案为t->left。第(5)空是当主函数调用函数binary_tree()时,需要传递的参数。根据binary_tree()的定义,我们知道它的第一个参数是指向有序二叉树的二重指针,而第二个参数是指向当前需要处理的字母的指针。在主函数中,表明有序二叉树是一重指针root,而存放当前需要处理字母的是word数组。在一重指针与二重指针进行参数传递时,需要注意加取地址运算符“&”,因此,此空答案为&root,word。三、C++题(本题共1题,每题1.0分,共1分。)5、阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。【说明】本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当n=5时,对应的螺旋方阵如下:11615141321724231231825221141920211056789【C++代码】#include"stdio.h"#include"iostream,h"intarray[11][11];inttemp;intROW;voidgodown(int&m,int&a){for(temp=1;temp<=ROW;temp++)if(array[temp][a]==0)array[temp][a]=(1);a++;}voidgoright(int&m,int&b){for(temp=1;temp<=ROW;temp++)if(array[b][temp]==0)array[b][temp]=m++;b--;}voidgoup(int&&c){for(temp=ROW;temp>0;temp-)if(array[temp][c]==0)array[temp][c]=m++;c--;}voidgoleft(int&m,int&d){for(temp=ROW;temp>0;temp--)if(array[d][temp]==0)array[d][temp]=m++;(2);}voidmain(){inta,b,c,d,max,m;cin>>ROW;cout>>end1;for(a=1;a<=ROW;a++)for(b=1;b<=ROW;b++)(3);m=1;a=d=1;b=c=ROW;max=(4);whiie(m<=max){godown(m,a);(5)(m,b);goup(m,c);goleft(m,d):}for(a=1;a<=ROW;a++){for(b=1;b<=ROW;b++)printf("%3d",array[a][b]);cout<<end1;}}标准答案:(1)m++(2)d++(3)array[a][b]=0(4)ROW*ROW(5)goright知识点解析:本题考查C++中螺旋方阵的实现。题目要求在用户输入该方阵的行列数后,自动生成对应的螺旋方阵。首先我们来简单分析一下螺旋方阵的特点,顾名思义,其基本结构是成螺旋形状的,按照螺旋的方向数值逐渐增大,直到最中间的一点结束。程序中分别用4个函数来实现其螺旋方向向下、向右、向上和向左时,数组中相应元素的变化,结合程序可以发现数组的初值是全0。第(1)空在螺旋方向向下的实现函数中,当螺旋方向向下时,二维数组中列不变而逐行加1,从程序中可以看出此空所在行的作用就是用来改变数组中元素的值,结合整个程序知道变量m中存放的是当前位置的数值,因此,此空答案为m++。第(2)空在螺旋方向向左的实现函数中,当螺旋方向向左时,二维数组中行不变而随列下标temp的变化逐列加1,直到数组元素不为0,这个时候说明已经到了被螺旋线经过的列,因此,要往后退一列即列下标变量d加1,此空答案为d++。第(3)空在一个二重循环下面,程序声明了一个二维数组且没有初值,结合程序可以推断出此空的任务就是给数组赋初值。而根据上面的分析,数组的初值应该是全0,因此,此空答案为array[a][b]=0。第(4)空很明显是给变量max赋初值,这要求先去弄清楚变量max的作用。由语句while(m<=max)我们可以推断出变量max中存放的是最大的数据项,而一个n阶的方阵中最多有n×n个元素,从程序中可以知道,这是一个ROW阶的方阵,因此,此空答案为ROW*ROW。第(5)空是调用上面的4个函数,根据螺旋方阵的生成规则,应该是先向下,接着向右,再向上,最后向左,结合程序我们知道此空是调用向右的函数。因此,此空答案为goright。四、JAVA题(本题共1题,每题1.0分,共1分。)6、阅读以下说明和Java代码,将应填入(n)处的语句写在对应栏内。【说明】主窗口有一个按钮、一个文本框和一个复选框,初始时窗口大小不能调整,选中复选框后窗口大小可以调整,如果撤销复选框的选择,则窗口的大小又不能调整,如下图所示。【Java代码】importjava.awt.*;importjava.awt.event.*;classMyFrameextendsFrameimplementsItemListener,ActionListener{Checkboxbox;TextAreatext;Buttonbutton;MyFrame((1)){super(s);box=newCheckbox("设置窗口是否可调整大小");text=newTextArea(12,12);button=(2)("关闭窗口");button.addActionListener(this);box.addltemListener(this);setBounds(100,100,200,300);setVisible(true);add(text,BorderLayout.CENTER);add(box,BorderLayout.SOUTH);add(button,BorderLayout.NORTH);setResizable((3));validate();}publicvoiditemStateChanged(ItemEvente){if(box.getState()==true){setResizable(true);}else{setResizable(false);}}publicvoidactionPerformed(ActionEvente){(4);}}classsimple{publicstaticvoidmain(Stringargs[]){(5)("simple");}}标准答案:(1)Strings(2)newButton(3)false(4)dispose()(5)newMyFrame知识点解析:本题考查Java的程序界面设计与窗口大小改变的实现。题目要求主窗口中有一个按钮、一个文本框和一个复选框,初始时窗口大小不能调整,选中复选框后窗口大小可以调整,如果撤销,则窗口的大小又不能调整。第(1)空很明显是窗口类MyFrame的构造函数的参数,通过对函数体进行[分析]可以发现,函数体中出现了一个未定义的变量s,而窗口类MyFrame的构造函数的参数一般是窗口名,应该是字符串型变量。因此,此空答案为Strings。第(2)空是给button变量赋一个值,此空后面的参数表示关闭窗口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协调医患关系的责任方
- 护理礼仪的文化差异
- 四川省泸县第五中学2025-2026学年高一上学期12月月考语文试题(含答案)
- 腰椎术后康复设备使用
- 胸痹的饮食护理建议
- 护理质量改进的PDCA实践
- 中职护理精神科护理要点
- 2025 七年级数学上册直线相交与平行初步认识课件
- 脑梗护理中的多学科协作
- 委托代理理论视角下中小企业信贷市场信用困境剖析与破局之道
- 老年人能力、综合征评估量表、综合评估基本信息表、护理服务项目清单
- 教育教学微型课题申请·评审表
- 江苏省2024-2025学年上学期七年级英语期中易错题
- 装载机铲斗的设计
- 大学生创新创业基础教育智慧树知到期末考试答案章节答案2024年湖北第二师范学院
- JJG 621-2012 液压千斤顶行业标准
- JTG∕T F30-2014 公路水泥混凝土路面施工技术细则
- 国开作业《建筑测量》学习过程(含课程实验)表现-参考(含答案)33
- 电力线路维护检修规程
- 华信咨询-中国斗轮堆取料机行业展望报告
- (完整word版)高分子材料工程专业英语第二版课文翻译基本全了
评论
0/150
提交评论