填空题阅读以下函数说明和C语言函数,将应填入 (n) 的字句写在答题纸的对应栏内。 [说明1] 函数int fun1(int m, int n)的功能是:计算并返回正整数m和n的最大公约数。 [函数1] int fun1(int m, int n) while ( (1) ) if (m>n) m=m-n; else n=n-m; (2) ; [说明2] 函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符形成一个十进制整数(最多8位)。 例如,若字符串str的值为“f3g8d5.ji2e3p12fkp”,则函数返回值为3852312。 [函数2] long fun2(char *str) int i=0; long k=0; char *p=str; while (*p!='\0' ++i; (5) ; return k;
填空题[说明] 假设银行整存整取存款不同期限的月息利率分别为:0.63%(1年),0.66%(2年),0.69%(3年),0.75%(5年),0.84%(8年),其中,利息=本金*月息利率*12*存款年限。 现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。 设2000元存20年,其中1年存i1次,2年存i2次,以此类推,则到期时存款人应得到的本利合计为: 2000*(1+rate1)i1*(1+rate2)i2*(l+rate3)i3*(l+rate5)i5*(l+rate8)i8 其中,rateN为对应存款年限的利率。年限还有如下限制条件: 0≤i8≤2 0≤i5≤(20-8*i8)/5 0≤13≤(20-8*i8-5*i5)/3 0≤i2≤(20-8*i8-5*i5-3*i3)/2 0≤i1=20-8*i8-5*i5-3*i3-2*i2 用穷举法穷举出所有的i8、i5、i3、i2、i1,代入求本利的公式计算出最大值。 [函数] #include<stdio.h> #include<math. h> void main() int i8, i5, i3, i2, i1, n8, n5, n3, n2, n1; float max=0, term; clrscr(); for (i8=0;i8<3;i8++) /*穷举所有可能的存款方式*/ for (i5=0; i5<= (20-8*i8)/5;i5++) for (i3=0; (1) ; i3++) for (i2=0; (2) ; i2++) i1=20-8 *18-5 *i5-3 *i3-2 *12: (3) ; /*计算到期时的本利合计*/ if( (4) ) (5) ; n1=i1; n2 =i2; n3 =i3; n5=i5; n8 =i8; printf("For maxinum profit, he should so save his money in a bank:/n"); printf(" made fixed deposit for 8 year: %d times /n",n8); printf(" made fixed deposit for 5 year: %d times/n",n5); printf(" made fixed deposit for 3 year: %d times/n",n3); printf(" made fixed deposit for 2 year: %d times/n",n2); printf(" made fixed deposit for 1 year: %d timesYn",n1); printf(" Toa1: %.2f/n", max); /*输出存款方式*/ puts ("/n Press any key to quit...”); getch();
填空题[说明]已知递推数列:a(1)=1,a(2s)=a(s),a(2s+1)=a(s)+a(s+1)(s为正整数)。试求该数列的第n项与前n项中哪些项最大?最大值为多少?算法分析:该数列序号分为奇数或偶数两种情况做不同递推,所得数列呈大小有规律的摆动。设置a数组,赋初值a(1)=1。根据递推式,在循环中分项序号s(2~n)为奇数或偶数作不同递推:每得一项a(s),即与最大值max作比较,如果a(s)>max,则max=a(i)。最后,在所有项中搜索最大项(因最大项可能多于一项),并打印最大值max。[问题]将流程图中的(1)~(5)处补充完整。注:流程图中(1)循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。[流程图]
填空题[说明] 编写一个Applet程序,接受HTML文件传递的整数参数,根据该参数指定Applet中文本框的长度。编写对应的HTML文件运行这个Applet。[Java 代码]import java. applet.*;import java. awt.*;public class chuangdics extends (1) TextField tf=new TextField (); int tfLength=0; public void init() try tfLength=Integer. parseInt( (2) ("length")); tf. setColumns (tfLength); add (tf); catch (NumberFormatException nfe) tf. (3) ("HTML 文件传人的参数格式错误。"); add(tf); [HTML 代码]<html><head> <title> (4) </title></head><body> <hr><applet code=chuangdics width=700 height=150><param name=length value=20> (5) <hr></body></htmI>
填空题[说明] 编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。 [Java 代码] import java. io.* ; public class abc public static void main ( (1) ) int i, n=10, max=0, min=0, temp=0; try BufferedReader br = new BufferedReader ( new InputStreamReader ( System.in ) ); max = min =Integer. parselnt ( br. readLine ( ) ); . (2) ( IOExccption e ) ; for ( i=2 ; i<=n ; i++ ) try BufferedReader br = new (3) ( new InputStreamReader ( System. in ) ); temp = (4) ( br. readLine ( )); if (temp>max ) max=temp; if (temp<min) (5) catch (IOException e ) ; System.out.println ( "max="+max+"/nmin="+min );
填空题[说明]下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。注:返回值用pos表示。[问题]将流程图的(1)~(5)处补充完整。
填空题[函数2.1说明] 将一个正整数分解质因数。例如:输入90,打印出90=2×3×3×5。 [函数2.1] fun 1 ( int n ) int i; for ( i=2;i<=n; i++) while (( (1) ) if (n %i==0 ) printf ( "%d*",i ); (2) else break; printf ( "%d",n ) ; [函数2.2说明] 下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第3、第4、第5只猴子都是这样做的,问海滩上原来最少有多少个桃子? [函数2.2] main ( ) int i, 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) ; else break; i=m; if ( count==4 ) printf ( "%d/n", count) ; break;
填空题阅读以下说明和C++程序,将应填入 (n) 处的字句写在对应栏内。 [说明] 下面程序输出一个矩形面积,以及矩形区域上的假想的作物产量。 [C++程序] #include <iostream.h> class crop_assessment int actual_crop; int ideal_crop; public: void set(int in_actual,int in_ideal) actual crop=in_actual; ideal_crop=in_ideal; int get_actual_crop(void) (1) ; int get_ideal_crop(void) (2) ;) ; Class lot_size int length; int width; (3) crop; public: void set(int 1,int w,int a,int i) length=1; width=w; crop.set(a,i); int get_area(void)return length*width; int get_data(void)return (4) ; int get_data2(void)freturn (5) ; int main() Los_size small,medium; small.set(5,5,5,25); medium.set(10,10,10,50); cout<<"For a small lot of area"<<smallget_area()<<“/n”; cout<<"the actual crops are$"<<small.get_data2()<<"/n"; cout<<"and ideal crops are$”<<small.get_data()<<"/n"; cout<<"For a medium Lot of area"<<medium.get area()<<:/n”; cout<<"the actual crops are$"<<medium.get_data2()<<"/n"; cout<<"and ideal crops are$"<<medium.get_data()<<"/n"; return 0;
填空题【说明】
本题给出四个函数,它们的功能分别是:
1.int push(PNODE*top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。
2.int pop(PNODE*top,int*e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。
3.int enQueue(PNODE*tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。
4.int deQueue(PNODE*tail,int*e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。
以上四个函数中,返回值为。表示操作成功,返回值为-1表示操作失败。
栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:
typedef struct node {
int value;
struct node * next;
} NODE, * PNODE;
【函数1】
int push(PNOOE * top,int e)
{
PNODE p = (PNODE) malloc (sizeof (NODE));
if (! p) return-1;
p->value=e;
{{U}} (1) {{/U}};.
*top=p;
return 0;
}
【函数2】
int pop (PNODE * top,int * e)
{
PNODE p = * top;
if(p == NULL) return-1;
* e = p->value;
{{U}} (2) {{/U}};
free(p);
return 0;
}
【函数3】
int enQueue (PNODE * tail,int e)
{ PNODE p,t;
t= *tail;
p = (PNODE) malloc(sizeof(NODE));
if(!p) return-1;
p->value=e;
p->next=t->next;
{{U}}(3) {{/U}};
* tail = p;
return 0;
}
【函数4】
int deQueue(PNODE * tail,int * e)
{ PNODE p,q;
if(( * tail)->next == * tail) return-1;
p= (* tail)->next;
q = p ->next;
* e =q ->value;
{{U}} (4) {{/U}}=q->next;
if(,tail==q){{U}} (5) {{/U}};
free(q);
return 0;
}
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明1]
函数int factors(int n)的功能是判断整数n(n>=2)是否为完全数。如果n是完全数,则函数返回0,否则返回-1。
所谓“完全数”是指整数n的所有因子(不包括n)之和等于n自身。例如:28的因子为1,2,4,7,14,而28=1+2+4+7+14,因此28是“完全数”。
[C函数1]
int factors(int n)
{ int i,S;
for(i=l,s=0;i<=n/2;i++)
if(n%i==O) {{U}}(1) {{/U}};
if({{U}} (2) {{/U}})return 0;
rerurn -1;
}
[说明2]
函数int maxint(int a[],int k)的功能是用递归方法求指定数组中前k个元素的最大值,并作为函数值返回。
[C函数2]
int maxint(int a[],int k)
{ int t;
if({{U}} (3) {{/U}})return {{U}}(4) {{/U}};
t=maxint(a+1, {{U}}(5) {{/U}})j
return(a[0]t) ? a[0] :t;
}
填空题【说明】该应用程序是用来求一元二次方程和一元一次方程的,其运行如图2所示。当用户在对应方程系数的文本框(txt1、txt2和txt3)中输入数值后,单击“解方程”按钮(cmdcalculate),解方程并将解显示在Ⅺ和K2对应的文本框中(txt4和txt5)中。若是一个一元一次方程,只显示在X1对应的文本框中,若无解则弹出对话框。下面的代码是“解方程”按钮的Click事件的代码。【程序代码】PrivateSub{{U}}(1){{/U}}()a=Val(Txt1.Text):b=Val(Txt2.Text);c=Val(Txt3.Text)Ifa=0ThenIfb=0ThenMsgBox"方程无解!",vbOKOnly,"提示"Txt4.Text=""Txt5.Text=""ElseTxt4.Text={{U}}(2){{/U}}Txt5.Text=""EndIfElsedelta={{U}}(3){{/U}}If{{U}}(4){{/U}}ThenMsgBox"方程无解!",vbOKOnly,"提示"Txt4.Text=""Txt5.Text=""ElseTxt4.Text=Str$(((-1)*b+Sqr(delta))/(2*a))Txt5.Text={{U}}(5){{/U}}EndIfEndIfEndSub
填空题[说明]下面的流程图用来说明如何在数组中的指定位置插入一个数。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述;SIZE定义位数组的大小。[问题]将流程图的(1)~(5)处补充完整。
填空题【说明4.1】
假设两个队列共享一个循环向量空间(如图1-2所示),其类型Queue2定义如下:
typedef struct {
DateType data [MaxSize];
int front[2],rear[2];
}Queue2;
对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。函数.EnQueue (Queue2*Q,int i,DaleType x)的功能是实现第i个队列的入队操作。
【函数4.1】
int EnQueue(Queue2 * Q, int i, DateType x)
{ /*若第i个队列不满,则元素x入队列,并返回1;否则,返回0*/
if(i<0‖i>1) return 0;
if(Q->rear[i]==Q->front[{{U}} (1) {{/U}}]
return 0;
Q->data[{{U}} (2) {{/U}}]=x;
Q->rear[i]=[{{U}} (3) {{/U}}];
return 1;
}
【说明4.2】
函数BTreeEqual(BinTreeNode*T1,BinTtneNode*T2)的功能是递归法判断两棵二叉树是否相等,若相等则返回1,否则返回0。函数中参数T1和T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同,并且对应结点的值也相同时,才被认为相等。
已知二叉树中的结点类型BinTreeNode定义为:
struct BinTreeNode {
char data;
BinTreeNode * left, * right;
};
其中dau为结点值域,leR和risht分别为指向左、右子女结点的指针域,
【函数4.2】
int BTreeEqual(BinTreeNode * T1, BinTreeNode * T2)
{
if(Ti == NULL /*若一棵为空一棵不为空,则不等*/
else if({{U}} (5) {{/U}}) return 1; /*若根结点值相等并且左、右子树*/
/*也相等,则两棵树相等,否则不等*/
else return 0;
}
填空题【说明】
在窗体上画一个名称为Combo1的组合框,画两个名称分别Labe11、Labe12及Caption属性分别为“城市名称”和空白的标签。程序运行后,当在组合框中输入一个新项后按回车键 (ASCII码为13)时,如果输入的项在组合框的列表中不存在,则自动添加到组合框的列表中,并在Labe12中给出提示“已成功添加输入项”;如果存在,则在Labe12中给出提示“输入项已在组合框中”。
【程序】
Private Sub Combo1{{U}} (1) {{/U}}(KeyAscii As Integer)
If KeyAscii={{U}} (2) {{/U}}Then
For i=0 To{{U}} (3) {{/U}}
If Combo1. Text={{U}} (4) {{/U}}Then
Labe12. Caption ="输入项已在组合框中"
Exit Sub
End If
Next i
Label2. Caption ="已成功添加输入项"
Combo1.{{U}} (5) {{/U}}Combo1.Text
End If
End Sub
填空题【说明】在窗体上设计两个文本框和两个标签,标签上显示:“摄氏温度:”和“华氏温度:”,文本框一个用于输入摄氏温度数,一个用于输出对应的华氏温度。摄氏温度与华氏温度的转换公式为:c=(5/9)×(f-32)要求:对输入的摄氏温度数有检查功能,以拒绝接收非数字字符。运行界面如图所示。【VisualBasic代码】PrivateSubCommandl_Click()Text1=""Text2=""Text1.Enabled=TrueText2.Enabled=TrueText1.SetFocusEndSubPrivateSubCommand2Click()EndEndSubPrivateSubFormLoad()Text1=""Text2=""Text1.Enabled=FalseText2.Enabled=FalseEndSubPrivateSubTextl_Change()Text2.Text=(1)EndSubPrivateSubTextl_KeyPress(KeyAsciiAs(2))If(3)ThenIfChr(KeyAscii)<"0"Or(4)Then(5)EndIfEndIfEndSub
填空题[说明]
求树的宽度,所谓宽度是指在二叉树的各层上,具有结点数最多的那一层的结点总数。本算法是按层次遍历二叉树,采用一个队列q,让根结点入队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。
[函数]
int Width ( BinTree *T
{
int front=-1, rear=-1; /*队列初始化*/
int flag=0, count=0, p; /*p用于指向树中层的最右边的结点, flag 记录层中结点数的最大值*/
if ( T!=Null)
{
rear++;
{{U}} (1) {{/U}};
flag=1;
p=rear;
}
while ({{U}} (2) {{/U}})
{
front++;
T=q [front]];
if (T->lchild!=Null )
{
roar+-+;
{{U}} (3) {{/U}};
count++;
}
if ( T->rchild!=Null )
{
rear++; q[rear]=T->rchild;
{{U}} (4) {{/U}};
}
if (front==p ) // 当前层已遍历完毕
{
if({{U}} (5) {{/U}})
flag=count;
count=0;
p=rear, //p 指向下一层最右边的结点
}
}
return ( flag );
}
填空题【说明】 设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在Date类中设计如下重载运算符函数: Date operator + (int days) : 返回某日期加上天数得到的日期。 Date operator - (int days) : 返回某日期减去天数得到的日期。 int operator - (Date //day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date int year, month, day //年,月,日 int leap(int); //判断是否闰年 int dton(Date month = m; day = d; void setday(intd)day = d; void setmonth(int m) month = m; void setyear(int y) year =y; int getday() return day; int getmonth() return month: int getyear() return yea; Date operator + (int days) //+运算符重载函数 static Date date; int number = (1) date = ntod(number) return date Date operator - (int days) //-运算符重载函数 staffs Date date; int number= (2) ; number - = days; date = ntod(number) return date; int operator - (Date return days; void disp() cout<<year<<"."<<month<<". "<<day<<endl; ; int Date: :leap( int year) if( (4) ) //是闰年 return 1; //不是闰年 else return0: int Date:: dton( Date for(y=1;y<=d. year;y++) if( (5) )days+ =366; //闰年时加366天 else days + = 365; //非闰年时加365天 for(m =0;m<d. month-1;m++) if( (6) ) days += day_tab[1] [m]; else days +=day_tab[0] [m]; days + = d. day; return days; Date Date::ntod(intn) //将从元0年0月0日的天数转换成日期 int y=1,m = 1,d,rest = n,lp; while(1) if(leap(y)) if(rest<= 366) break; else rest - = 366; else //非闰年 if(rest = 365 ) break; else rest-=365; y++; y--; Ip = leap(y); while(1) if(lp) //闰年 if(rest>day_tab[1] [m - 1]) rest -= day_tab[1] [m-1]; else break; else //非闰 if(rest>day_tab[0] [m -1]) rest -= day_tab[0] [m-1]; else break; m++; d = rest; return Date(y;m,d); void main() Date now(2003,10,1) ,then(2005,6,5); cout<<" now:";now. disp(); cout<<" then:";then. disp(); cout<<"相差天数:"<<(then-now)<<endl; Date dl = now + 1000,d2 = now - 1000; cout<<"now + 1000:" ;d1. disp(); cout<<" now - 1000:" :d2. disp();
填空题[程序5.1说明] 下列程序运行时,当单击窗体后,从键盘输入一个字符,判断该字符是字母字符、数字字符还是其他字符,并做相应的显示。窗体上无任何控件,并禁用Ase和Chr函数,Select Case语句中禁用枚举值。[Visual Basic代码]Private Sub Form Load ()Dim x As String*1X= (1) (“请输入单个字符”,“字符”)Select Case UCase ( (2) )Case (3) 。Print X+“是字母字符”Case (4) Print X+ “是数字字符”Case ElsePrint X+“是其他字符”End Select[程序5.2说明] 在窗体上画一个名称为Timer1的计时器和一个名称为Labe11的标签。当运行程序后,将在标签中显示当前时间的数字时钟(包括时:分:秒)。[Visual Basic代码]Private Sub Fom_Load ()Timer1.Interval=1000EndSubPrivate Sub Timer1_ timer() (5) EndSub
填空题[流程图说明]下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按由小到大的顺序排列,M是给定的常数。[流程图]此流程图中,比较“K(I)+K(J):M”最少执行次数约为(5)。
填空题【流程图说明】下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data,left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。【算法说明】【流程图】将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:typedefstructnodeintdata;structnode*left;structnode*right;NODE;【算法】NODE*SearchSortTree(NODE*tree,inte)if(tree!=NULL)if(tree->data<e)(4) ;//小于查找左子树elseif(tree->data<e)(5); //大于查找左子树elsereturntree;returntree;
