问答题[说明]某单位组织一次职业技术考核比赛,由十名评委对选手的现场表现打分(0到100以内的数值)。本程序接收原始评分后,去掉一个最高分、一个最低分,最后计算并输出选手最后得分。在接收输入第i个评分时,若输入数据的类型、范围不正确,程序将给出相应提示,并等待下一次输入,直至正确接收第i个评分为止。程序的运行界面如下:在开发过程中,文本框名为Text1,界面上有上至下三个按钮分别取名为CmdMark、CmdReresh和CmdExit。[VisualBasic代码]PrivateSubCmdMark_Click()’按钮“输入评分”的单击事件响应代码DimiAsInteger,tempAsVariant’声明变量Dimmarks(1To10),maxMark,minMark,sumMark,markAsSinglesumMark=0Text1.Text=“编号”&Chr(9)&“评分”&vbCrLfFori=1To10’接收十个评分输入DoWhile1=1’验证并接收第i个评委的评分temp=InputBox(“请输入”&i&“号评委的评分:”)If(1)IsNumeric(temp)ThenMsgBox“数据类型错误,请重试!”ElseIfCSng(temp)<0OrCSng(temp)>100ThenMsgBox“数值范围错误,请重试!”Else:ExitDoEndIfLoopmarks(i)=CSng(temp)Ifi=1ThenmaxMark=(2):minMark=(2)Ifmarks(i)>maxMarkThenmaxMark=marks(i)IfminMark>marks(i)Then(3)sumMark=sumMark+marks(i)Text1.Text=Text1.Text&i&Chr(9)&marks(i)&vbCrLf输出第i个评委的评分Nextmark=((4))/8’计算选手最后得分Text1.Text=Text1.Text&"去掉一个最高分:"&maxMark&vbCrLf&_"去掉一个最低分:"&minMark&vbCrLf&_"选手最后得分:"&markEndSubPrivateSubCommand2_Click()’按钮“刷新屏幕”的单击事件响应代码(5).Text=“单击”输入评分“按钮,开始统分……”EndSubPrivateSubCommand3_Click()按钮“退出程序”的单击事件响应代码EndEndSub
问答题【说明】
本程序输出10000之内的所有完全数。完全数是指等于其所有因子和(包括1,但不包括这个数本身)的数。例如:6=1×2×3,6=1+2+3,则6是一个完全数。
【程序】
public class PerfectNum
{
Public static void main(String args[])
{
int count=1;
for(int i=1; i<10000; i++)
{
int y=0;
for(int j=1; j<i; j++)
if({{U}} (1) {{/U}})
y={{U}} (2) {{/U}}
if({{U}} (3) {{/U}})
{
System.out.print({{U}} (4) {{/U}}+String.valueOf('/t'));
{{U}}(5) {{/U}}
If(count%3==0)
System.out.printin();
}
}
}
问答题【说明】
著名的四色定理指出任何平面区域均可以用4种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。
【函数】
# include <stdio.h>
#define N 10 /*要着色的N个区域*/
void output(int color[]) /*输出一种着色方案 color[i]的值为区域i所着颜色*/
{
int i;
for (i=0; i<N; i++)
printf("%4d", color[i]);
printf("/n");
}
int back(int *ip, int color[j] /*回溯*/
int c=4;
while (c==4)
{
if (*ip<=0)
return 0:
--(*ip);
c={{U}} (1) {{/U}};
color[*ip]=-1;
}
return c;
}
/*检查区域i,考查c种颜色的可能性 */
int colorOK(iht i, int c, int adj[][N], int color[])
{
int j;
for(j=0; j<i; j++)
if ({{U}} (2) {{/U}})
return 0;
return 1;
}
/*为区域i选一种可着的颜色*/
int select(int i, int c, int adj[][N], int color[])
/*寻找各种着色方案 adj[i][j]=1表示区域i与区域j不相邻*/
{
int k;
for (k=c; k<=4; k++) /*4种颜色*/
if (colorOK({{U}} (3) {{/U}}))
return k;
return 0;
}
int coloring(int adj[][N])
{
int color[N], i, c, cnt;
for (i=0; i<N; i++) color[i]=-1:
i=c=0; cnt=0;
while (1)
[
if ((c={{U}} (4) {{/U}})==0)
{
c=back(
if (c==0)
return cnt;
}
else
{
{{U}}(5) {{/U}};
i++;
if(i==N)
{
output(color);
++cnt;
c=back(
}
else
c=0;
}
}
}
void main()
{
int adj[N][N]={ {0, 1, 0, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 1, 1, 0, 1, 1, 1, 1, 0},
{0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 1, 0, 1, 1, 0, 0, 1, 1},
{1, 0, 0, 1, 0, 1, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0, 1, 0, 0, 1},
{1, 1, 1, 0, 0, 1, 0, 0, 1, 0},
{1, 1, 0, 0, 0, 0, 0, 0, 1, 1},
{1, 1, 1, 1, 0, 0, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 0, 1, 1, 0}
};
printf("共有%d 组解./n", coloring(adj));
问答题[说明] 本程序中预设了若干个用户名和口令。用户输入正确的用户名后,可以查找对应的口令,一旦输入结束标记“end”,程序结束。[C++程序]#include <iostream. h>#include <string. h>class User protected: char user[10]; char pass[7]; public: User(char[ ],char[]); (1) return user; (2) return pass;;User::User(char u[],char p[]) strcpy(user,u); strcpy(pass,p); void main() User ua[]=User("Li","123456"),User("wang","654321"),User("Song","666666") char name[10]; while(1) cout< < "输入用户名:"; cin> >name; if( (3) = =0) break; for(int i=0;i<3;i+ +) if(strcmp(name,ua[i].getuser()) = =0) cout< <"密码:" < < ua[i].getpass() < <endl; (4) ; if( (5) )cout< <"该用户不存在!" < <endl;
问答题[函数2.1说明]Fibonacci数列中头两个数均为1,从第三个数开始,每个数等于前两个数之和。下述程序计算Fibonacci数列中前15个数,并以每行5个数的格式输出。[函数2.1]#include<stdio.h>main()inti,f,f1=1,f2=1;printf("%5d%5d",f1,f2);for(i=3;i<=15;i++)f=(1);printf("%5d",f);if((2)==0)printf("/n");f1=12;(3);[试题一流程图][函数2.2说明]函数fun(char*str1,char*str2)的功能是将字符串str2拼接到str1之后。[函数2.2]fun(char*str1,char*str2)inti,j;for(i=0;str1[i]!='/0';i++);for(j=0;str2[j]!='/0';j++)(4);(5);
问答题【说明】 计算n的合数。一个整数n可以有多种划分,使其划分的一列整数之和为n。例如,整数5的划分为: 5 4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 共有7种划分。这种划分的程序如下所示。 【程序】 #include <stdio.h> int n[1000],m,k; void output sum() int j; for(j=0;n[j]!=0;j++) printf("%d/t",n[j]); printf("/n"); void sum(int i) if(m-n[i]<n[i]) m=m-n[i]; (1) i++; n[i+1]=0; else (2) m-=n[i]; i++; if(m!=n[i]) sum(i); else output_sum(); if(n[i]>1) n[i]--; (3) else while((n[i]==1) (4) if(i!=0) (5) sum(i); void main() int i; scanf("%d", m=k=n[0]; for(i=1;i<=k;i++) n[i]=0; while(n[0]!=1) n[0]--; i=0; sum(0); m=k;
问答题【说明】
对20个数进行排序,可以利用选择法,即从后19个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后18个进行比较,并进行交换。
【函数】
#define N 20
main()
{
int i,j,min,tem,a[N];
printf("please input twenty num:/n");
for(i=0;i<N;i)
{
printf("a[%d]=",i);
scanf("%d",
}
printf("/n");
for(i=0;i<N;i)
printf(",",a[i]);
printf("/n");
for(i=0;{{U}} (1) {{/U}};i)
{
min={{U}} (2) {{/U}};
for(j={{U}} (3) {{/U}};j<N;j++)
if({{U}} (4) {{/U}})
min=j;
tem=a[i];
{{U}} (5) {{/U}};
a[min]=tem;
}
printf("After sorted /n");
for(i=0;i<N;i++)
printf(",",a[i]);
}
问答题【说明】本程序通过移动滑动条修改颜色RGB值,从而控制颜色。程序中有一个面板、3个标签和3个滑动条,标签和滑动条一一对应,分别对应三原色红、绿、蓝,任意拖动其中的一个滑动条,所对应的颜色值就会发生变化,面板的颜色也会发生对应的变化,如下图所示,滑动条值的范围是0~255。【Java代码】importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasssimpleextendsJFrameimplementsAdjustmentListenerpublicsimple()setTitle("simple");setSize(300,200);addWindowListener(newWindowAdapter()publicvoidwindowClosing((1))System.exit(0););ContainercontentPane=getContentPane();JPanelp=(2);p.setLayout(newGridLayout(3,2));p.add(redLabel=newJLabel("Red0"));p.add(red=newJScrollBar(Adjustable.HORIZONTAL,0,0,0,255));red.setBlocklncrement(16);red.addAdjustmentListener(this);p.add(greenLabel=(3)("Green0"));p.add(green=newJScrollBar(Adjustable.HORIZONTAL0,0,0,255));greensetBIocklncrement(16);green.addAdjustmentListener(this);p.add(blueLabel=newJLabel("Blue0"));p.add(btue=newJScrollBar(Adjustable.HORIZONTAL,0,0,0,255));blue,setBIocklncrement(16);blue.addAdjustmentListener(this);contentPane.add(p,"South");colorPanet=newJPanel();colorPanet.setBackground(newColor(0,0,0));contentPane.add((4),"Center");publicvoidadjustmentValueChanged(AdjustmentEventevt)redLabel.setText("Red"+red.getValue());greenLabel.setText("Green"+green.getValue());blueLabel.setText("Blue"+blue.getValue());coiorPanel.setBackground(newColor(red.getValue(),green.getValue(),blue.getValue()));colorPanel.repaint();publicstaticvoidmain(String[]args)JFramef=(5);f.show();privateJLabelredLabel;privateJLabelgreenLabel;privateJLabelblueLabel;privateJScrollBarred;privateJScroilBargreen;privateJScrollBarblue;privateJPanelcolorPanel;
问答题【说明】 某超市集团为发展业务向社会公开招聘N个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加集团组织的考试。该集团公司将按应聘者的成绩从高分至低分的顺序进行排队录取。具体录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿录取。 以下C程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都作了录取处理后跳出。 C程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组 rzl)的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。【C程序】#include#define N 36#define EDMARK 5typedef struct stu int no, total, z[2], sortm, zi; struct stu *next; STU;struct rznode int lmt, count; STU *next; rz [N];STU *head = NULL, *over = NULL;int allFILE *fp;char dataf [ ] = "zp2008.dat" ;print(STU *p) for (;p!=NULL; p = p->next) printf( "%d(%d) /t" , p->no, p->totalinsert(STU **p, STU *u) STU *v, *q; for (q = *p;q != NULL; v = q , (1) ) if (q-> sortm < u->sortm) break; if ( q == *p) (2) ; else (3) ; u->next = q ;main ( ) int zn, i, no, total, zl, z2 ; STU *p, *v, *q; fp = fopen(dataf, "r" ); if (fp == NULL) printf ("Can't open file %s.kn" ,dataf); exit (0); fscanf (fp, "%d" , for (all = 0, i = 1; i <= zn; i++) fscanf (fp, "%d", rz[i].count = 0; rz[i].next = NULL; all += (4) ; for (;;) if (( fscanf(fp, "%d%d%d%d" , p = ( STU *) malloc (sizeof (STU)); p->no = no; p->total = p->sortm = total; p->zi = 0; p->z[0] = z1; p->z[1] = z2; (5) ; fclose (fp); for (;all ) p = head; head = head->next; if (rz[p->z[p->zi]].count < (6) ) rz[p->z[p->zi]].count ++; insert( all--; continue; if (p->zi >= 1 ) p->next = over; over = p; continue; p->sortm -= DEMARK; (7) ; insert( for (i = 1; i <= zn; i++ ) printf("%d:/n" ,i); print( rz[i ].next); printf(" /n"); printf( "over:/n" ); print(head); print(over); printf(" /n");
问答题【说明】 冒泡排序算法,作为Orderedlist<T,size>类的成员函数,last是有序表的元素个数。 template<typename T,int size>void Orderedlist<T,size>∷BubbleSort() bool noswap; //交换标志 int i,j; T temp; for(i=0;i<last;i++) noswap= (1) ; for(j= (2) ; (3) ; (4) ) //从下往上冒泡 if(slist[j]<slist[j-1]) temp=slist[j]; slist[j]=slist[j-1]; slist[j-1]=temp; noswap= (5) ; if(noswap)break;
问答题试题四(共15分)阅读以下说明和C函数,填补代码中的空缺(1)~(6),将解答填入答题纸的对应栏内。[说明]二叉树的宽度定义为含有结点数最多的那一层上的结点数。函数GetWidth()用于求二叉树的宽度。其思路是根据树的高度设置一个数组counter[],counter[i]存放第i层上的结点数,并按照层次顺序来遍历二叉树中的结点,在此过程中可获得每个结点的层次值,最后从counter[]中取出最大的元素就是树的宽度。按照层次顺序遍历二叉树的实现方法是借助一个队列,按访问结点的先后顺序来记录结点,离根结点越近的结点越先进入队列,具体处理过程为:先令根结点及其层次号(为1)进入初始为空的队列,然后在队列非空的情况下,取出队头所指示的结点及其层次号,然后将该结点的左子树根结点及层次号入队列(若左子树存在),其次将该结点的右子树根结点及层次号入队列(若右子树存在),然后再取队头,重复该过程直至完成遍历。设二叉树采用二叉链表存储,结点类型定义如下:GetWidth()函数中用到的函数原型如下所述,队列的类型名为QUEUE:[C函数]
问答题【说明】【算法4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出相应的提示信息,如图1-18所示。在【算法4-1】中,slack为一整数栈。算法中各函数的说明如表1-11所示。表1-11各函数的功能说明表函数名函数功能push(inti)将整数i压入栈stack中Pop()stack的栈顶元素出栈Empty()判断stack栈是否为空。若为空,函数返回1,否则函数返回0Nextch()读取文本文件中的下一个字符,并返回该字符的ASCII值,将字符所在的行号及字符在行中的位置分别存储到变量row和col中,若遇到文件结束符,则将变量EOF置为trueKind(charch)判断字符ch是左括号还是右括号,若是左括号,函数返回1:若是右括号,函数返回2;若两者都不是,函数返回0【算法4-1】将栈stack置空,置EOF为falseCh<-nextch();while(notEOF) k←kind(ch); if(k== (1) ) push( (2) ); push( (3) ); elseif(k== (4) ) if(notempty()) pop(); pop();) else 显示错误信息(缺少对应左括号或右括号): 显示行号row:显示列号col:) Endif Endif Ch<-nextch();endwhileif(notempty()) 显示错误信息(缺少对应左括号或右括号): While(notempty()) row<-pop(); col<-pop(): 显示行号row:显示列号col;) EndwhileEndif 为了识别更多种类的括号,对【算法4-1】加以改进后得到【算法4-2】。【算法4-2】能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(charch)的参数及其对应的返回值如表1-12所示。 表1-12函数kind(charch)的参数及其对应的返回值ch()[]其他返回值1234567【算法4-2】将栈stack置空,置EOF为falseCh<-nextch();while(notEOF)k<-kind(ch);if(k>0)if(判断条件1)push((5));push((6));push((7));elseif(判断条件2and判断条件3)pop();pop();pop();else显示错误信息(缺少对应左括号或右括号);显示行号row;显示列号col;)endifendifch<-nextch();)endwhileif(notempty())显示错误信息(缺少对应左括号或右括号);While(notempty())Pop();row<-pop():col<-pop();显示行号row;显示列号col;))endwhileendif1.【问题1】请将【算法4-1】和【算法4-2】中,(1)~(7)空缺处的内容补充完整。
问答题【说明】 IC卡和200卡都是从电话卡派生的。下面的程序将电话卡定义为抽象类。其中 balance为双精度变量,代表电话卡中的余额;cardNumber是长整型变量,代表电话卡的卡号;password是整型变量,代表电话卡的密码;connectNumber是字符串变量,代表电话卡的接入号码;connected是布尔变量,代表电话是否接通。 performDial()实现各种电话接通后的扣除费用的操作。其中200卡每次通话扣除0.5元的通话费用和附加费用;IC卡每次通话扣除0.9元的通话费。TimeLeft()方法用于测试电话卡余额还可以拨打电话的次数。performConnection()用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。 【程序】 abstract class PhoneCard doubte balace; (1) perfermDial(); double getBalance() return balance; double TimeLeft() double current=balance; int times=0; do (2) times++; white(balance>=0); balance=current; return times-1; abstract class Number_PhoneCard extends PhoneCard long cardNumber: int password; String connectNumber; Boolean connected; Boolean performConnection(long cn, int pw) if(cn==cardNumber return true; else return false; class IC Card (4) boolean performDial() if(balance>0.9) balance-=0.9; return true; else return false; class D200_Card (4) static double additoryFee; static additoryFee=0.1; boolean performDial() if(balance>(0,5+additeryFee)) (5) return true; else return false;
问答题【说明】 下面是一个Applet程序,其功能是输出已定义好的两个变量x和chr。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 import java. awt.*; (1) (2) int x=10; (3) Label output1; Label output2; (4) output1 = new Label("定义int类型变量"+"x,的初值为"+x); output2 = new Label("定义char类型变量"+"chr,的初值为"+chr); add(output1); add(output2); <HTML> <HEAD> <TITLE> ex34_3 </TITLE> </HEAD> <BODY> (5) width=400 height=400> </applet> </BODY> </HTML>
问答题【说明】 进行两个整数之间的比较,由考生通过输入窗口分别输入两个整数,程序比较出结果。例如:先后输入的两个数分别为25和36。 比较结果显示: 25!=36 25<36 25<=36 【Java代码】 import javax.swing.JOptionPane; public class Java3 public static void main(String args[]) String (1) // 用户输入第1个字符串 secondNumber, // 用户输入第2个字符串 result; // 包含输出 int number1, // 比较的第1个数 number2; // 比较的第2个数 // 用户输入的第1个字符串 firstNumber = JOptionPane. (2) ("Enter first integer:"); //读用户输入的第2个字符串 secondNumber = JOptionPane.showlnputDialog("Enter second integer:"); 将字符串类型转换成整数类型 number1= Integer. (3) (firstNumber); number2= Integer.parselnt(secondNumber); result= "": if ( (4) ) result=number1+"=="+number2; if (number1 != number2) result=number1+"!="+number2; if (number1<number2) result=result+"/n"+number1+"<"+ number2; if (number1>number2) result=result+"/n"+number1+">"+number2; if (number1<=number2) result=result+"/n"+number1+"<="+number2; if (numbed>=number2) result=result+"/n"+number1+">="+number2; //显示结果 JOptionPane. (5) .( null, result, "Comparison Results", JOptionPane. INFORMATION_MESSAGE); //程序正常退出 System.exit(0);
问答题【说明】
Stack类是java. ntil包中专门用来实现栈的工具类。以下Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入:123456,则输出:654321:输入:asdfeg,则输出:gefdsa。
【Java程序】
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class UseStack extends Applet implements ActionListener
{ Stack MyStack;
Label prompt=new Label("输入要反转字符:");
Button pushBtn=new Button("压栈");
Button popBtn=new Button("弹栈"); //反转
TextField input=new TextField(5);
int[] DrawStack =new int[10]; //记录堆栈中数据
int[] PoppedOut=new int[20]; //记录被弹出的数据
int StackCnt=0; //记录模拟堆栈的数组中的数据个数
String msg=" ";
public void init()
{ MyStack=new Stack();
add(prompt);
add(input);
add(pushBtn);
add(popBtn);
pushBtn.addActionListener(this);
{{U}} (1) {{/U}}
}
public void paint(Graphics g)
{ for (int i=10; i<StackCnt; i++) //模拟显示堆栈内部的数据排列情况
{ g.drawRect(50,200-i*20,80,20);
g.drawString(Integer.toString(DrawStack[i]),80,215-i*20);
}
for (int i=0;{{U}} (2) {{/U}}) //显示被弹出的数据
g.drawString(Integer.toString(PoppedOut[i]),200+i*20,100);
g.drawString("堆栈",70,236);
g.drawString("栈底",135,225);
g.drawString("栈顶",160,225-StackCnt*20);
g.drawString(msg,200,140);
}
public void actionPerformed({{U}} (3) {{/U}})
{ if (e.getAct ionCommand () == "压栈") //压栈操作
{ if(StackCnt<10)
{ MyStack.push(new Integer({{U}} (4) {{/U}} ));
DrawStack[StackCnt++]=Integer.parseInt(input.getText() );
input.setText (" ");
}
else
msg="输入数据过多,请先弹栈!"
}
else if (e.getActionCommand () == "弹栈") //弹栈操作
{ if({{U}} (5) {{/U}})
{ StackCnt--;
PoppedOut[PopCnt++]=[(Integer)(MyStack.pop())).intValue();
}
else
msg="堆栈已空,不能再弹栈!";
}
repaint();
}
}
问答题【说明】 编写程序,对于从键盘输入的3个实数a、b、c,计算实系数一元二次方程的根并输出所求的根。 【函数】 #include<sldio.h> #include<sldlib.h> #include<math.h> Main() float a,b,c,delta,x1,x2; printf("Enter a,b,c"); scanf("%f%f%f", if( (1) ) if( (2) ) printf("Input error!/n"); else printf("The single root is%f/n", (3) ); else delta=b*b-4*a*c; if( (4) ) x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("x1=%8.2f/nx2=%8.2f/n",x1,x2,); else if(delta==0) printf("x1=x2=%8.2f/n", (5) ; else Printf("z2=%8.2f+%8.2f*i/n",-b/(2*a),sqrt(-delta)/)(2*abs(a))); Printf("z2=%8.2f-%8.2f*i/n",-b/(2*a),sqrt(-delta)/(2*abs(a)));
问答题[说明]下图是一个简易文本编辑器程序的运行界面:用户打开磁盘上的某个文件后,可以直接对文本进行编辑,也可以利用界面提供的按钮完成相应操作。主要操作介绍如下:(1)打开文件:打开文件对话框,其中仅显示“*.txt”类型的文件。用户选中某一文件后,其内容将呈现于界面文本框内;(2)查找:提示用户输入要查找的内容,将首次出现的查找内容以蓝色高亮标记;(3)替换:若文本框中已选中某段文本,则提示用户输入要替换的内容,在文本框中完成替换。在开发过程中,文本框名为Text1,“打开文件”、“保存文件”、“查找”、“替换”、“退出”按钮分别命名为Command1至Command5。[VisualBasic代码]DimfileNameAsStringDimfsoAsNew{{U}}(1){{/U}},tsAsObject’打开文本文件PrivateSubCommand1_Click()CommonDialog1.Filter="*.txt"CommonDialog1.ShowOpenfileName={{U}}(2){{/U}}’保存所打开的文件名Setfso=CreateObjeet("Scripting.FileSystemObject")Setts=fso.OpenTextFile(fileName,ForReading)IfNotts.AtEndOfStreamThenText1.Text={{U}}(3){{/U}}EndIfts.CloseEndSub’保存文本文件PrivateSubCommand2_Click()Setts=fso.OpenTextFile(fileName,ForWriting){{U}}(4){{/U}}ts.CloseEndSub’查找字符串PrivateSubCommand3_Cliek()DimsearchAsString,positionAsIntegersearch=InputBox("输入要查找的字符串:")position=InStr(Text1.Text,search)’在文本中查找字符串Ifposition>0Then’若找到指定的字符串Text1.SelStart=position-1’设置选定文本的起始位置Text1.SelLength=Len(search)’设置选定文本的长度ElseMsgBox"没有发现要查找的字符串"EndIfEndSub’替换选中的字符串PrivateSubCommand4_Click()DimobjectAsStringIf{{U}}(5){{/U}}>0Then’若已经选中了要替换的文本object=InputBox("输入要替换的字符串:")Text1.SelText=object’替换文本ElseMsgBox"请先选中要替换的文本!"EndIfEndSub’退出程序PrivateSubCommand5_Click()EndEndSub
问答题【说明】 本程序利用非递归算法实现二叉树后序遍历。 【函数】 #include<stdio.h> #include<stdlib.h> typedef struct node/*二叉树的结点数据结构类型*/ char data; struct node *left; struct node *right; BTREE; void SortTreelnsert(BTREE **tree, BTREE *s) if(*tree==NULL)*tree=s; else if(s->data<(*tree)->data) SortTreelnsert( (1) ,s); else if(s->data>=(*tree)->data) SortTreelnsert( (2) ,s); void TraversalTree(BTREE *tree) BTREE *stack[1 000],*p; int tag[1000],top=0; p=tree; do while(p !=NULL) stack[++top]=p; (3) ; tag[top]=0; /*标记栈顶结点的左子树已进行过后序遍历*/ while(top>0 putchar(p->data); if(top>0)/*对栈顶结点的右子树进行后序遍历*/ (5) ; tag[top]=1; while(top>0); void PrintSortTree(BTREE *tree) if(tree !=NULL) printSortTree(tree->left); putchar(tree->data); pdntSortTree(tree->right); main() BTREE *root=NULL, *node; char ch; ch=getchar(); while(ch !='#') node=(BTREE*)malloc(sizeof(BTREE)); node->data=ch; node->left=node->right=NULL; SortTreelnsert( ch=getchar(); PrintSortTree(root); putchar('/n'); TraversalTree(root);
问答题[说明] 打保龄球是用一个滚球去打出10个站立的柱,将柱击倒。一局分10轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为10轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下: 1) 若某一轮的第一次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加两次滚球)。该轮得分为本次倒柱数(即10)与以后两次滚球所击倒柱数之和。 2) 若某一轮的第一次滚球未击倒10个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加一次滚球),该轮得分为本次倒柱数10与以后一次滚球所击倒柱数之和。 3) 若某一轮的两次滚球未击倒全部10个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。 总之,若一轮中一次滚球或两次滚球击倒10个柱,则本轮得分是本轮首次滚球开始的连续3次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。若一轮内二次滚球击倒柱数不足10个,则本轮得分即为这两次击倒柱数之和。表3-15是打保龄球计分的某个实例说明。 表3-15 某保龄球计分实例表 轮 1 2 3 4 5 6 7 8 9 10 附加 各轮第1次得分 10 10 10 7 9 8 8 10 9 10 8 各轮第2次得分 — — — 2 1 1 2 — 1 — 2 各轮得分 30 27 19 9 18 9 20 20 20 20 累计总分 30 57 76 85 103 112 132 152 172 192 以下[C程序]是模拟打一局保龄球的过程,统计各轮得分和累计总分。程序交互地逐轮逐次输入一次滚球击倒的柱数,计算该轮得分和累计总分。为记录一轮内击倒10柱,但还暂不能计算该轮得分和累计总分的情况,程序引入变量ok,用来记录当前已完成完整计算的轮次。程序每输入一次滚球击倒柱数,就检查还未完成完整计算的轮次,并计算。 [C程序] #include<stdio.h> #define N 13 struct int n; /* 一轮内滚球次球 */ int f; /* 第一次击倒柱数 */ int s; /* 第一次击倒柱数 */ int score; /* 本轮得分 */ int total; /* 至本轮累计总分 */ int m; /* 完成本轮得分计算,还需滚球次数 */ a[N]; int ok = 0; /* 已完成完整计算的轮次数 */ int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */ int d, j, k; static c=1; while (1) if(i <= 10) printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)/n", i, n, max ); else printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)/n", C++, max); scanf("%d , if (d >=0 printf(" 不合理的击倒柱数,请重新输入。/n") ) if (ok < (1) ) /* 对以前未完成计算的轮次分别计算得分与累计总分*/ for(j = ok+1; (2) ; j++) a[j].score += d; if (--a[j].m == 0) a[j].total = ( (3) ) + a[j].score; ok = (4) ; return d; main ( ) int i, first, second, k; /* i表示轮次 */ for ( i = 1 ; ok < 10 ; i++) a[i].score = a[i].f = first = ball(i,1,10); if ( first == 10) a[i].m = 2; a[i].n = 1; if (first < 10 if (first + second == 10) a[i].m = 1; (6) ; if (i <= 10 (7) ; printf( "各轮处1次得分"); for(k = 1; k <= 1; k++) printf("%5d", a[k].f); printf("/n 各轮第2次得分"); for(k=1; k <= i; k++) if (a[k].n < 2) printf(" /"); else printf("%5d", a[k].s); printf("/n 各轮得分"); for(k = 1; k <= ok; k++) printf("%5d", a[k].score); printf("/n 累计总分"); for(k = 1; k <= ok; k++) printf("%5d", a[k].total); printf("/n");
