问答题【说明】
本程序用古典Eratosthenes;筛选法求从2起到指定范围内的素数。如果要找出2~10中的素数,开始时筛中有2~10的数,然后取走筛中最小的数2,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9;重复上述步骤,再取走最小数3,宣布它为素数,并取走3的倍数,于是留下5、7。反复重复上述步骤,直到筛中为空时,工作结束,求得2~10中的全部素数。
【代码】
# include <stdio.h>
# define MAX 22500
/*程序中用数组sieve表示筛子,数组元素sieve[i]的值为1时,表示数i在筛子中,值为-1时表示数i已被取走*/
main()
{ unsigned int i, range, factor, k;
int sieve[MAX];
printf("please input the range:");
scanf("%d", /* range 指出在多大的范围内寻找素数*/
for(i=2; i<=range; i++)
{{U}} (1) {{/U}};
factor=2;
while (factor<=range)
{ if({{U}} (2) {{/U}}) /* 筛中最小数是素数 */
{ printf("%d/t", factor);
k=factor;
while (k<=range) /*移走素数的倍数 */
{ {{U}} (3) {{/U}};
k={{U}} (4) {{/U}};
}
}
{{U}} (5) {{/U}};
}
}
问答题
问答题(5)
问答题试题八(15 分,每空3 分)
阅读以下说明和C++程序,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
下面程序的功能是计算并输出某年某月的天数。
[C++程序]
#include
using namespace std;
(1) Month{Jan, Feb, Mar, Apr,May,Jun, Jul, Aug, Sep,Oct,Nov,Dec};
class Date{
public:
Date(int year, Month m_month){
(2) = year;
if(m_month Dec) month = Jan;
else month = m_month;
};
~Date(){};
bool IsLeapYear(){
return ((year % 4 == 0
};
int CaculateDays(){
switch( (3) ){
case Feb:{
if( (4) ) return 29;
else return 28;
}
case Jan: case Mar: case May: case Jul: case Aug: case Oct:
case Dec: return 31;
case Apr: case Jun: case Sep: case Nov: return 30;
}
};
private:
int year;
Month month;
};
void main(){
Date day(2000,Feb);
cout << day. (5) ();
}
问答题[说明]下面的流程图用于统计一个英文句子中单词的个数N。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。[流程图]
问答题【说明】 函数print(BinTreeNode*t; DateType DateType int i, top; top = 0;//置空栈 while(t! = NULL ST[top]. ptr = t; ST[top]. tag = 0; (2) ; if(t!= Null (3) ;i ++) printf("%d" ,ST[top]. ptr ->data); else while( (4) ) top--; if(top>0) ST[top]. tag = 1; (5) ;
问答题从下列3道试题(试题5至试题7)中任选1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。阅读以下应用说明及VisualBasic程序代码,根据要求回答问题1至问题4。[说明]某文件管理系统的图片浏览器如图3-19所示。运行程序时,用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名后,在图像框中将显示出相应的文件图像。在开发过程中,假设驱动器列表框名为drvFile,目录列表框名为dirFile,文件列表框名为filFile,选择文件类型组合框名为cboFile,图像框名为IMGonClick=over(this)title=放大Show。图3-19图片浏览器[VisualBasic程序]PrivateSubForm_Load()IMGonClick=over(this)title=放大Show.Stretch=TruecboFile.Addltem"位图文件(*.bmp)"cboFile.Addltem"图标文件(*.ico)"cboFile.Addltem"图元文件(*.wmf)"cboFile.Addltem"JPEG文件(*.jpg)"cboFile.Addltem"GIF文件(*.gif)"cboFile.ListIndex=0{{U}}(1){{/U}}EndSubPrivateSubdrvFile_Change(){{U}}(2){{/U}}EndSubPrivateSubdirFile_Change(){{U}}(3){{/U}}EndSubPrivateSubcboFile_Click(){{U}}(4){{/U}}Case0filFile.Pattern="*.bmp"Case1filFile.Pattern="*.ico"Case2filFile.Pattern="*.wmf"Case3filFile.Pattern="*.jpg.Case4filFile.Pattern="*.gif"EndSelectEndSubPrivateSubfilFile_Click()If{{U}}(5){{/U}}ThenIMGonClick=over(this)title=放大Show.Picture=LoadPieture(filFile.Path+filFile.FileName)ElseIMGonClick=over(this)title=放大Show.Picture=LoadPicture({{U}}(6){{/U}}+"/"+{{U}}(7){{/U}})EndIfEndSub
问答题[说明] 函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。[函数2.1] void PrintPrime(int UpBound) printf("2," ); for(i=3; i<UpBound; i+ =2) int k = sqrt(i); for(j=3; j<= k; (1) ) /*检查i是否有3到k以入的奇因数*/ if( (2) ) break; fi( (3) ) printf("%d", i); [函数2.2说明] 递归函数invert(int a[],int k),int k)的功能是将数组a中的前k个元素逆置。[函数2.2] void invert(int a[ ], int k) int t; if ( (4) ) invert( (5) ); t=a[0]; a[0] =a[k-1]; a[k-l]=t;
问答题【说明】
以下程序的功能是设计一个栈类stack<T>,并建立一个整数栈。
【程序】
#include < iostream. h >
#include < stdlib. h >
const int Max =20; //栈大小
template < class T >
class stack{ //栈元素数组
T s[Max]; //栈顶下标
int top;
public:
stack( )
{
top =-1; //栈顶初始化为-1
}
void push( const T //item入栈
T pop( ); //出栈
int stackempty( ) const; //判断栈是否为
};
template < class T >
void stack <T >::push(const T
exit(1);
}
top ++
s[top] = item;
}
template < class T >
T stack<T> ::pop()
{
T temp;
if(top=={{U}} (2) {{/U}})
{
cout <<"栈为空,不能出栈操作" < < endl;
exit(1);
}
temp =s[top];
top --;
return temp;
}
template < class T >
int stack < T >:: stackempty( ) const
{ return top == -1;
{
void main( )
{
stack <int> st;
int a[] ={1,2,3,4,5};
cout <<"整数栈" <<endl;
cout <<"入栈序列:" <<endl;
for(int i=0;i<4;i ++)
{
cout <<a[i] <<" ";
{{U}} (3) {{/U}};
}
cout << endl <<"出栈序列";
while({{U}} (4) {{/U}})
tout<<{{U}} (5) {{/U}}<<" ";
cout< < endl;
}
问答题【说明】请完成下列Java程序。程序的执行结果是生成一个具有一个TextField类型的对象in、Button类型的对象btn和Label类型的对象out图形用户界面,程序的功能是计算用户输入数的平方,如图3所示。注意:请勿改动main()主方法和其他已有的语句内容,仅在下划线处填入适当的语句。【程序】importjava.awt.*;importjava,awt.event.*;publicclasssquarepublicstaticvoidmain(Stringargs[])(1)classAppFrameextendsFrameTheAdapterTestlistener=newTheAdapterTest();TextFieldin=newTextField(5);Buttonbtn=newButton("计算");Labelout=newLabel("用于显示计算结果");publicAppFrame()setLayout(newFlowLayout());add(in);add(btn)add(out);btn.addActionListener(newBtnActionAdapter());addWindowListener(listener);setSize(400,100);show();classBtnActionAdapterimplements(2)publicvoidactionPerformed((3))Strings=in.getText();doubled=(4)doublesq=d*d;out.setText(d+"的平方是:"+sq);classTheAdapterTestextendsWindowAdapterpublicvoidwindowCIosing((5))System.exit(1)
问答题[说明]某种传感器的输出值Ratio依赖于环境温度temp(-40℃≤temp≤50℃)。对一组环境温度值(ITEMS个),已经测量得到了相应的Ratio值(如表4-10表格所示)。表4-10粗略地描述了曲线Ratio(temp)。表4-10曲线Ration(temp)的列表值环境温度temp传感器的输出值Ratio-40℃0.20-20℃0.60-10℃0.800℃1.0010℃1.1730℃1.5050℃1.80校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,需要用更多的列表值细致地描述曲线K(temp),如表4-11所示。表4-11曲线K(temp)的列表值环境温度temp校正系数K-40℃5.00-39℃4.55-38℃4.17-37℃3.85…………-20℃1.67-19℃1.61……^-10℃1.25-9℃1.22…………-19℃0.56在表4-11中,各温度值所对应的K值是对表4-10进行线性插值再求倒数得到的,具体的计算方法如下。1)根据temp值,在表4-10中用二分法查找;2)若找到相应的温度值,则按相应的Ratio值求倒数得到K值;3)若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和Ratio2,再按如下公式计算K值:在程序中,当temp高于50℃或低于-40℃C时,设定K=0。[C程序]#includetypedefstructintTemp;/*环境温度*/doubleRatio;/*传感器的输出值*/CURVE;#defineITEMS7doubleGetK(intTemp,CURVE*p,intn)/*用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值*/intlow,high,m;doubleStep;low=0;high=n-1;if((Temp<p->Temp)||(Temp>(p+high)->Temp))return0.0;/*超出温度范围时返回0.0*/while(low<=high)m=(1);if(Temp==(p+m)->Temp)return(2);if(Temp<(p+m)>Temp)high=m-1;elselow=(3);p+=high;Step=((4))/((p+1)->Temp-p->Temp);return1.0/(p->Ratio+Step*((5));voidmain()intDegree;doublek;CURVECurve[ITEMS]=-40,0.2,-20,0.60.,-10,0.8,0,1.0,10,1.17,30,1.50,50,1.8;printf("环境温度校正系数/n");for(Degree=-40;Degree<=50;Degree++)k=GetK(Degree,Curve,ITEMS);printf("%3d%4.2f/n",Degree,k);
问答题[说明]下面的流程图实现了正整数序列{K(1),K(2),…,K(n)}的重排,得到的新序列中,比K(1)小的数都在K(1)的左侧,比K(1)大的数都在K(1)的右侧。以n=6为例,序列{12,2,9,13,21,8}的重排过程为:{12,2,9,13,21,8}→{2,12,9,13,21,8}→{9,2,12,13,21,8}→{8,9,2,12,13,21}[流程图]
问答题试题四(共15分)阅读以下应用说明以及用VisualBasic编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[应用4.1]设应用程序的运行窗口内有一个文字标签(Label)以及一个框架,其中有三个复选框(chk1,chk2,chk3),各个复选框单击事件过程的程序代码如下:PrivateSubchk1_Click()Label.fontBold=chk1.ValueEndSubPrivateSubchk2_Click()Label.fontItalic=chk2.ValueEndSubPrivateSubchk3_Click()Label.fontUnderLine=chk3.ValueEndSub三个复选框chk1、chk2、chk3的功能分别是:(1)。[应用4.2]设应用程序的运行窗口内有两个文本框Txt1和Txt2,其初始内容为空。在Txt1文本框中输入一个数值,当光标离开此文本框(例如进入文本框Txt2)时,执行的程序代码如下:PrivateSubTxt1_LostFocus()dimxasdoublex=Val(Txt1.Text)Ifx100ThenTxt1.Text=""MsgBox$("请重新输入!")Txt1.SetFocusElseTxt2.Text=Txt1.TextEndIfEndSub该程序代码的功能是:若在文本框Txt1中输入的数值小于0或大于100,当光标离开此文本框时,(2);否则,将其值复制到文本框Txt2中。[应用4.3]在下面的应用中,当窗口内发生Click事件时,窗口内将显示如图4-1所示的杨辉三从下角形(每一行都是二项式展开的系数)。请完善程序代码。图4-1PrivateSubForm_Click()Dimi,j,cAsInteger,StrTempAsStringDima(9)AsIntegera(0)=0:a(1)=1:StrTemp=Str(a(1))+Space(3)CurrentX=(ScaleWidth-TextWidth(StrTemp))/2PrintStrTempForj=2To9a(j)=1Forc=j-1To2Step-1a(c)=(3)Next(4)=""Forc=1TojStrTemp=StrTemp&Str((5))&Space(5-Len(Str(a(c))))NextCurrentX=(ScaleWidth-TextWidth(StrTemp))/2PrintStrTempNextEndSub
问答题【说明】【C程序1】用回溯算法来产生由0或1组成的2m个二进位串,使该串满足以下要求。视串为首尾相连的环,则由m位二进制数字组成的2m个子序列,每个可能的子序列都互不相同。例如,如果m=3,在串11101000首尾相连构成的环中,由3位二进制数字组成的每个可能的子序列都在环中恰好出现一次,它们依次是111,110,101,010,100,000,001,011,如图2-14所示。【C程序2】是求“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为W1,W2,…,Wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。【C程序1】#defineN1024#defineM10intb[N+M-1]intequal(intk,intjintm)inti;for(i=0;i<m;i++if(b[k+i](1))return0;return1;intexchange(intk,intm,intv)while(b[k+m-1)==v)b[kncm--i]=!v(2);(3)=v;returnk;init(ihtv)intkfor(k=0;K=N+M-1;k++)b[k]=v;main()intm,v,k,n,j;printf('Enterm(l<m<10),vv=0,v=1)/n");scanf("%d%d,n=0x01<<m;init(!v);k=0;while((4)<n)for(j=0;j<k;j++)if(equal(k,j,m))k=exchange(k,m,v)j=(5);for(k=0;k<n;k++)print("%d/n",b[k]);【C程序2】#include<stdio.h>#defineN7#defineS15intw[N+1]=0,1,4,3,4,5,2,7;intknap(intS,intn)if(S==0)return1;if(s<0||(s>0if((6)))printf("4d",w[n]);return1;return(7)main()if(knap(S,N)printf("OK:/n");elseprintf("NO!/n")
问答题[说明] 已知以下C++程序运行时的输出结果如下。 1:1 1:1 1:1 [C++程序] 01 #include <iostream> 02 using namespace std; 03 class Stock 04 protect: 05 (1) ; 06 Stock(int n, int pr=1) 07 shares = n; share_val=pr; 08 ; 09 void ~Stock() ; 10 public: 11 //成员函数 12 void output() 13 (2) << shares << ":" << share_val << endl; 14 15 private: 16 //成员变量 17 int shares; 18 int share_val; 19 ; 20 21 void main() 22 Stock a(1);a.output 23 Stock b;b.output 24 Stock c = Stock ();c.output 25 1. [问题1] 请根据C++程序运行时的输出结果,将代码中(1)、(2)空缺处的内容补充完整。
问答题[说明] 类Queue表示队列,类中的方法如表4-12所示。 表4-12 类Queue中方法说明表 方法 说明 IsEmpty() 判断队列是否为空,如果队列不为空,返回true;否则,返回false Enqueue(object NewNode) 入队操作 Dequeue() 出队操作。如果队列为空,则抛出异常 类Node表示队列中的元素;类EmptyQueueException给出了队列中的异常处理操作。 [Java代码] public class testmain //主类 public static viod main (string args[]) Queue q= new Queue; q.enqueue("first!"); q.enqueue("second!"); q.enqueue("third!"); (1) while(true) system.out.println(q.dequeue()); catch( (2) ) public class Queue //队列 node m_firstnode; public Queue()m_firstnode=null; public boolean isempty() if (m_firstnode= =null) return true; else return false; public viod enqueue(object newnode) //入队操作 node next = m_firstnode; if (next = = null) m_firstnode=new node(newnode); else while(next.getnext() !=null) next=next.getnext(); next.setnext(new node(newnode)); public object dequeue() (3) //出队操作 object node; if (is empty()) (4) else node =m_firstnode.getobject(); m_firstnode=m_firstnode.getnext(); return node; public class node //队列中的元素 object m_data; node m_next; public node(object data) m_data=data; m_next=null; public node(object data,node next) m_data=data; m_next=next; public void setobject(object data) m_data=data; public object getobject(object data) return m_data; public void setnext(node next) m_next=next; public node getnext() return m_next; public class emptyqueueexception extends (5) //异常处理类 public emptyqueueexception() system. out. println ( "队列已空!" );
问答题【说明】 给定函数fun的功能是:将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。 【函数】 int fun(char *c,int status) if( (1) =='') return 1; else if( (2) return 0; main() int flag=1; char ch; printf("请输入一字符串,用点号结束输入!/n"); do ch=getchar(); flag=fun( putchar(ch); while(ch!='.'); printf("/n");
问答题【说明】 在矩形类中重载关系运算符“>=”,采用友元,比较的依据是矩形面积的大小。重载算术运算符“+=”,采用成员函数,更新矩形对象的长与宽,分别加上形参矩形的长与宽。重载算术运算符+,利用构造函数,采用友元。 【代码】 class Crect int length,witdth; public; CRect(int l,int w) length=l; width=w; friend int operator>=(CRect//比较面积 void operator+=(CRect//求长 (4) ;//求宽 friend operater+(CRect //利用构造函数
问答题[函数2.1说明] 函数strcpy的功能是将字符串str2的内容复制到字符申str1。[函数2.1] (1) strcpy (char *slr1, const char *str2) char * temp; while( * str2!='/0') *cp++ = (2) ; (3) ='/0'; return str1;[函数2.2说明] 函数int strcmp(const char *str1, const char *str2)的功能是按字典序比较两个字符串str1和str2的大小。当str1<str2时返回-1,当str1>str2时返回1,否则返回0。[函数2.2]int strcmp(const char *str1, const char *str2) while( *str1= =* str2) if(* s1= = (4) ) return 0; s1++; (5) ; if( *str1<*str2) return -1; return 1;
问答题[说明]
本程序中预设了若干个用户名和口令。用户输入正确的用户名后,可以查找对应的口令,一旦输入结束标记“end”,程序结束。
[Java代码]
import java. io. *:
public class User {
public String user;
public Siring pass;
public User() { }
public User( String u,String p) {
user=u;
pass=p;
}
public String {{U}}(1) {{/U}} () { return this. user; }
public String {{U}}(2) {{/U}} () { return this. pass; }
public static void main(String[] args) {
User ua[]={new User("Li","123456"), new User("wang","654321"),
new User("Song","666666")};
while(true) {
InputStreamReader reader = new InputStreamReader(System. in);
BufferedReader inpul = new BnfferedReader(reader);
System. out. print("Enter your name:");
String name = null;
try { name = input. readLine();}
catch (IOException ex) {}
if({{U}} (3) {{/U}}) break;
int i;
for (i=0;i<3;i++) {
if (name. equals(ua[i]. getUser())){
System. out. println("密码:"+ua[i].getPass());
{{U}} (4) {{/U}};
}
}
if ({{U}} (5) {{/U}}) System. out. println("该用户不存在!");
}
}
}
