问答题试题二(共15分)阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。[说明]函数removeDuplicates(char*str)的功能是移除给定字符串中的重复字符,使每种字符仅保留一个,其方法是:对原字符串逐个字符进行扫描,遇到重复出现的字符时,设置标志,并将其后的非重复字符前移。例如,若str指向的字符串为“aaabbbbscbsss”,则函数运行后该字符串为“absc”。[C代码]
问答题【说明】
以下【C++程序】用于实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数主要有:
createList():创建按指数降序链接的多项式链表,以表示多项式:
reverseList():将多项式链表的表元链接顺序颠倒:
multiplyList(ListL1,ListL2)计算多项式L1和多项式L2的乘积多项式。
【C++程序】
#include <iostream.h>
class List;
class Item {
friend class List;
private:
double quot ;
int exp ;
Item *next;
Public:
Item(double_quot,int_exp)
{{{U}} (1) {{/U}};}
};
class List{
private:
Item *list;
Public:
List(){
list=NULL:
}
void reverseList();
void multiplyList(List L1,List L2);
void createList();
};
void List::createList()
{ Item *p,*U,*pre;
int exp;
double quot;
list = NULL;
while (1) {
cout << "输入多项式中的一项(系数、指数) :" << endl;
cin >> quot >> exp:
if ( exp<0 )
break ; //指数小于零,结束输入
if ( quot=0 )
continue;
p = list;
while ({{U}} (2) {{/U}}) { //查找插入点
pre = p;
p = p->next;
}
if ( p != NULL
continue ;
}
u ={{U}} (3) {{/U}};
if (p == list)
list = u;
else
pre->next = u;
u ->next = p;
}
}
void List::reverseList()
{ Item *p, *u;
if ( list==NULL )
return;
p = list ->next;
list -> next = NULL;
while ( p != NULL) {
u = p -> next;
p ->next = list;
list = p;
p = u;
}
}
void List::multiplyList ( List L1, List L2 )
{ Item *pL1,*pL2,*u;
int k, maxExp;
double quot;
maxExp ={{U}} (4) {{/U}}:
L2.reverseList();
list=NULL;
for ( k = maxExp;k >= 0;k-- ){
pL1 = L1.list;
while ( pL1 != NULL
pL2 = L2.1ist;
while (pL2 NULL
quot = 0.0;
while (pL1 != NULL
pL2 = pL2 -> next;
} else if ( pL1 -> exp + pL2 -> exp > k )
pL1 = pL1 -> next;
else
pL2 = pL2 -> next;
}
if ( quot !=0.0 ) {
u = new item( quot, k );
u -> next = list;
list = u;
}
}
reverseList ();
L2. reverseList ():
}
void main()
{ List L1,L2,L;
cout << "创建第一个多项式链表/n";
L1.createList();
cout << "创建第二个多项式链表/n";
L2.createList();
L.multiplyList (L1,L2);
}
问答题[函数2.1说明]
函数void find(int *a, int n, int * max, int * min)的功能是在长度为n的整型数组a中,查找最大元素和最小元素的下标。main()中给出了调用find函数的一个实例。
[函数2.1]
#include<stdio.h>
void find(int *a, int n,int *max,int * min)
{ int i;
*max =* min=0;
for(i=1;i<n;i+ +)
if(a[i]>a[* max]) {{U}}(1) {{/U}};
else if(a[i]<a[*min]) {{U}}(2) {{/U}};
return;
main()
{ int a[]={4,6,8,9,0,6},max,min;
find(a,6,{{U}} (3) {{/U}});
printf("%5d%5d/n", max,min);
}
[函数2.2说明]
以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符串分别是abcdefg和abceef,则输出为abc。
[函数2.2]
#include <stdio.h>
main()
{ char str1[100],str2[100],str[100],c;
int i=0,s;
printf("/nInput string 1:");gets(str1);
printf("/nInput string 2:");gets(str2);
while(({{U}} (4) {{/U}})
i++;
}
printf("%s/n",str);
}
问答题【说明】本应用程序的运行窗口如图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=(1)S=0If(K>0)ThenForj=1To9If(2)ThenS=S+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100ElseS=S+(3)*taxPrate(j-1)/100ExitForEndIfNextjEntIf(4)=Str$(S)EndSubPrivateSubCmd_quit_Click()EndEndSubPrivateSubForm_Load()Txt_tax.Text=""Txt_salaw.Text=""Txt_base.Text=800Txt_tax.Locked=TrueTxt_base.Enabled=(5)EndSub
问答题【说明】
已知某数列的前两项为2和3,其后继项根据当前最后两项的乘积按下列规则生成:
(1)若乘积为一位数,则该乘积即为数列的后继项;
(2)若乘积为二位数,则该乘积的十位数和个位数依次作为数列的两个后继项。
本程序输出该数列的前n项以及它们的和。其中,函数sum(n,pa)返回数列的前n项之和,并将生成的前n项存放于首指针为pa的数组中。程序中规定输入的n值必须大于2并且不超过给定的常数值MAXNUM。
例如:若输入n值为10,则程序输出如下内容:
sum(10)=44
2 3 6 1 8 8 6 4 2 4
#include<stdio.h>
#define MAXNUM 100
int sum(int n,int *pa){
int count,total,temp;
*pa=2;
{{U}} (1) {{/U}}=3;
total=5; count=2;
while(count++<n){
temp+=*(pa-1)**pa;
if(temp<10){
total+=temp;
*(++pa)=temp;
}
else{
{{U}} (2) {{/U}}=temp/10;
total+=*pa;
if(count<n){
count++;pa++;
{{U}} (3) {{/U}}=temp%10;
total+=*pa;
}
}
}
{{U}} (4) {{/U}};
}
main(){
int n,*p,*q,num[MAXNUM];
do{
printf("Input N=?(2<N<%d):",MAXNUM+1);
scanf("%d",
}while({{U}} (5) {{/U}});
printf("/nsum(%d)=%d/n",n,sum(n,num));
for(p=num,q={{U}} (6) {{/U}};p<q;p++)printf("%4d",*p);
printf("/n");
}
问答题【说明】 单击窗体上的“测试”(cmdTest)按钮,出现一个输入框,要求输入一串字符,将该字符串中的非字母字符删除后,显示在窗体中的一个文本框(txtShow)中。 【程序代码】 Private Sub cmdTest_Click( ) Dim strT1 ,strT2 As String Dim strCh As (1) Dim intL As Integer Dim intl As Integer strT1 = (2) ("请输入一串字符","字符串输入") intL = (3) strT2 = " " For intl = I To intL strCh = Mid ( strT1, intl, 1 ) If(strCh>"A"And (4) ) Or (strCh >"a" And suCh <"z" )Then strT2 = strT2 + strCh End If Next intl txtShow. Text= (5) End sub
问答题阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。
【说明】 有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race
condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下【C代码1】给出了一种实现方法。
【C代码1】 int flag[2];
/+flag数组,初始化为FALSE*/ Enter_Critical_Section(int
my_task_id, int other_task_id) { while
(flag[other_task_id]==TRUE); /*空循环语句*/
flag[my_task_id]=TRUE; }
Exit_Critical_Section(int my_task_id, int other_task_id) {
flag[my_task_id]=FALSE; }
当一个进程要访问临界资源时,就可以调用【C代码1】给出的这两个函数。【C代码2】给出了进程0的一个例子。
【C代码2】 Enter_Critical_Section(0,1);
……使用这个资源…… Exit_Critical_Section(0,1);
……做其他的事情……
问答题【应用说明】本应用运行时,由用户输入一个正整数n后自动产生n个正整数,然后按照用户的指定要求对该组数进行处理。该应用的运行界面如下图所示:1.窗体中有两个文本框。(txtSrc,txtObj)、两个标签(lblSrc,lblObj)、三个命令按钮(cmdGendat,cmdProc,cmdQuit)和一个弹出式菜单(procMenu,初始时不可见)。2.文本框txtSrc(由标签lblSrc提示)用于显示产生的数据,文本框txtObj(由标签lblObj提示)用于显示处理结果,要求每行显示一个整数。3.程序启动时,命令按钮cmdProc(运算要求)不可用。单击命令按钮cmdGendat(产生数据)后,提示用户输入一个n的值并生成n个正整数存入数组元素a(1)~a(n),然后将数据逐行显示在txtSrc中,并设置命令按钮cmdProc可用。4.单击命令按钮cmdProc(运算要求)后弹出菜单。选择菜单项并单击后,进行相应处理并将结果显示在txtObj中,同时将lblObj的标题改为该菜单项表示的处理命令。弹出式菜单“运算要求”的结构如下表所示:{{B}}标题{{/B}}{{B}}名称{{/B}}{{B}}层次{{/B}}运算要求procMenu1排序Sorting2递增排序Ascend3递减排序Descend3找特殊数SpecNum2中位数MidNum3求均数AvgNum3一个整数序列的中位数是指对该序列进行非递减(增)排列后最中间位置上的元素。若序列长度为偶数,则取中间两个元素的平均值为其中位数。【属性设置】为实现单击命令按钮cmdProc后弹出“运算要求”菜单(procMenu),设计时需将procMenu的{{U}}(1){{/U}}属性设置成false。供(1)选择的属性:DefaultEnabledScaleModeStyleVisible【VisualBasic程序代码】Dima()ASInteger,nAsIntegerPrivateSubForm_Load()txtSrc.Text="":txtObj.Text="":{{U}}(2){{/U}}=FalseEndSubPrivateSubcmdGendat_Click()'生成正整数序列并存入数组aOnErrorGoToErrorhandlern=InputBox$("请输入数组元素个数:","输入序列长度")If(n<1)ThenMsgBox"输入数据错误!",vbOKOnly,"提示:"GoToErrorhandler:EndIfReDima(n)AsIntegers=""Fori=1Ton'将生成的正整数存入a(1)~a(n)中a(i)=Int(Rnd*10000):s=s&Str$(a(i))&vbCrLfNexttxtSrc.Text=s{{U}}(3){{/U}}'设置运算要求命令按钮可用Errorhandler:EndSubPrivateSubcmdProc_Click()PopupMenuprocMenuEndSubPrivateSubMidNum_Click()'求中位数lblObj.Caption=MidNum.Caption&":"Fori=1Toround((n+1)/2>'用选择排序法对数组a进行部分排序a(0)=a(i):k=i'a(0)用作临时变量,暂存第i次选出的最小元素Forj=i+1TonIfa(j)<a(0)Thena(0)=a(j):k={{U}}(4){{/U}}EndIfNextIfk<>iThena(k)=a(i):a(i)=a(0)EndIfNextIfn/2-n/2>0Then'n为奇数时,取中间一个数txtObj.Text-Str$(a({{U}}(5){{/U}})Else'n为偶数时,取中间两个数的平均值txtobj.Text=Str$(Int((a(n/2)+a(n/2+1))/2))EndIfEndSub'其他代码略
问答题[说明]下图是一个简易文本编辑器程序的运行界面:用户打开磁盘上的某个文件后,可以直接对文本进行编辑,也可以利用界面提供的按钮完成相应操作。主要操作介绍如下:(1)打开文件:打开文件对话框,其中仅显示“*.txt”类型的文件。用户选中某一文件后,其内容将呈现于界面文本框内;(2)查找:提示用户输入要查找的内容,将首次出现的查找内容以蓝色高亮标记;(3)替换:若文本框中已选中某段文本,则提示用户输入要替换的内容,在文本框中完成替换。在开发过程中,文本框名为Text1,“打开文件”、“保存文件”、“查找”、“替换”、“退出”按钮分别命名为Command1至Command5。[VisualBasic代码]DimfileNameAsStringDimfsoAsNew(1),tsAsObject’打开文本文件PrivateSubCommand1_Click()CommonDialog1.Filter="*.txt"CommonDialog1.ShowOpenfileName=(2)’保存所打开的文件名Setfso=CreateObjeet("Scripting.FileSystemObject")Setts=fso.OpenTextFile(fileName,ForReading)IfNotts.AtEndOfStreamThenText1.Text=(3)EndIfts.CloseEndSub’保存文本文件PrivateSubCommand2_Click()Setts=fso.OpenTextFile(fileName,ForWriting)(4)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(5)>0Then’若已经选中了要替换的文本object=InputBox("输入要替换的字符串:")Text1.SelText=object’替换文本ElseMsgBox"请先选中要替换的文本!"EndIfEndSub’退出程序PrivateSubCommand5_Click()EndEndSub
问答题
问答题[说明]
以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数:empty判断堆栈是否为空;push进行人栈操作;pop进行出栈操作。
[C++程序]
#include "stdafx. h"
#include <iostream, h>
eonst int maxsize = 6;
class stack {
float data[ maxsize];
int top;
public:
stuck(void);
~ stack(void);
bool empty(void);
void push(float a);
float pop(void);
};
stack: :stack(void)
{ top =0;
cout < < "stack initialized." < < endl;
}
stack:: ~stack(void) {
cout < <" stack destoryed." < < endl;
bool stack:: empty (void) {
return{{U}} (1) {{/U}};
void stack: :push(float a)
if(top= =maxsize) {
cout < < "Stack is full!" < < endl;
return;
data[top] =a;
{{U}}(2) {{/U}};
}
float stack:: pop (void)
{ if({{U}} (3) {{/U}}){
cout< < "Stack is undcrflow !" < < endl;
return 0;
{{U}}(4) {{/U}};
return{{U}} (5) {{/U}};
}
void main( )
{ stack s;
coat < < "now push the data:";
for(inti=l;i< =maxsize;i+ +) {
cout< <i< <" ";
s. push(i);
}
coat < < endl;
cout< < "now pop the data:";
for(i = 1 ;i < = maxsize ;i + + )
cout< <s. pop()< <" ";
}
问答题[说明]
本程序接收输入的学生信息,包括学号、姓名,成绩,原样输出信息并计算学生的平均成绩。其中学生粪Stud除了包括no(学号)、name(姓名)和grade(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有一个构造函数、一个普通成员函数disp()和一个静态成员函数 avg()用于计算平均分。
[C++程序]
#include <stdio.h>
#include <string.h>
class Stud
{ int no;
char name [10];
int deg;
{{U}}(1) {{/U}} int sum;
static int num;
public:
Stud(int n,char na[],int d) {
no=n;
deg=d;
strcpy(name,na);
{{U}}(2) {{/U}};
{{U}}(3) {{/U}};
}
static double avg() { return {{U}}(4) {{/U}};}
void disp() { printf("% -5d% -8s%3d/n",no,name,deg);}
};
int Stud:: sum = 0;
int Stud:: num=0;
void main()
{
Stud s1(1,"Li",81), s2(2,"Zhao",84.5),s3(3,"Zhang",87);
printf("/nNo. Name Grade/n");
s1.disp();
s2.disp();
s3.disp();
printf("Avg=%g/n/n", {{U}}(5) {{/U}});
}
问答题【函数2.1说明】
递归函数sum(int a[], int n)的返回值是数组a[]的前n个元素之和。
【函数2.1】
int sum (int a[],int n)
{
if(n>0) return{{U}} (1) {{/U}};
else{{U}} (2) {{/U}};
}
【函数2.2说明】
有3个整数,设计函数compare(int a,int b,int c)求其中最大的数。
【函数2.2】
int compare (int a, int b, int c )
{ int temp, max;
{{U}}(3) {{/U}}a:b;
{{U}}(4) {{/U}}temp:c;
}
【函数2.3说明】
递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回 1,否则返回0。
【函数2.3】
int dec( int a[], int n )
{
if(n<=1) return 1;
if(a[0]<a[1]) return 0;
return{{U}} (5) {{/U}};
}
问答题【算法说明】 为便于描述屏幕上每个像素的位置,在屏幕上建立平面直角坐标系。屏幕左上角的像素设为原点,水平向右方向设为X轴,垂直向下方向设为Y轴。 设某种显示器的像素为128×128,即在每条水平线和每条垂直线上都有128个像素。这样,屏幕上的每个像素可用坐标(x,y)来描述其位置,其中x和y都是整数,0≤x≤127, 0≤y≤127。 现用一维数组MAP来存储整个一屏显示的位图信息。数组的每个元素有16位二进位,其中每位对应一个像素,“1”表示该像素“亮”,“0”表示该像素“暗”。数组MAP的各个元素与屏幕上的像素相对应后,其位置可排列如下: MAP(0),MAP(1),…,MAP(7) MAP(8),MAP(9),…,MAP(15) MAP(1016),MAP(1017),…,MAP(1023) 下述算法可根据用户要求,将指定坐标(x,y)上的像素置为“亮”或“暗”。 在该算法中,变量X,Y,V,S,K都是16位无符号的二进制整数。数组BIT中的每个元素BIT(K)(K=0,…,15)的值是左起第K位为1,其余位均为0的16位无符号二进制整数,即BIT(K)的值为215-k。 【算法】 第1步 根据用户指定像素的位置坐标(x,y),算出该像素的位置所属的数组元素 MAP(V)。这一步的具体实现过程如下: 1.将x送变量X,将y送变量Y; 2.将Y左移{{U}} (1) {{/U}}位,仍存入变量Y; 3.将X右移{{U}} (2) {{/U}}位,并存入变量S; 4.计算Y+S,存入变量V,得到像素的位置所属的数组元素MAP(V)。 第2步 算出指定像素在MAP(V)中所对应的位置K(K=0,…,15)。这一步的具体实现过程如下:将变量X与二进制数{{U}} (3) {{/U}}进行逻辑乘运算,并存入变量K。 第3步 根据用户要求将数组元素MAP(V)左起第K位设置为“1”或“0”。这一步的具体实现过程如下: 1.为把指定像素置“亮”,应将MAP(V)与BIT(K)进行逻辑{{U}} (4) {{/U}}运算,并存入MAP(V)。 2.为把指定像素置“暗”,应先将BIT(K)各位取反,再将MAP(V)与BIT(K)进行逻辑{{U}} (5) {{/U}}运算,并存入MAP(V)。
问答题【说明】 下面程序完成从键盘读入一个字符串,然后采用parseInt方法将其转换为一个相应的整数。 import java.io.*; public class testThrows public static (1) readString() (2) IOException int ch; String r=""; boolean done=false; while( (3) ) ch=System.in.read(); if(ch<0 || ch=0xd) //处理回车符中第一个符号 done=true; else r=r+(char)ch; return r; public static void main(Stling args[]) String str; (4) str=readString(); (5) (IOException e) System.out.println("error"); return; System.out.println("input integer: "+Integer.parselnt(str));
问答题
问答题【说明】
冒泡排序算法,作为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={{U}} (1) {{/U}};
for(j={{U}} (2) {{/U}};{{U}} (3) {{/U}};{{U}} (4) {{/U}})
{//从下往上冒泡
if(slist[j]<slist[j-1])
{
temp=slist[j];
slist[j]=slist[j-1];
slist[j-1]=temp;
noswap={{U}} (5) {{/U}};
}
}
if(noswap)break;
}
}
问答题从下列3道试题(试题5至试题7)中任选1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。阅读以下应用说明及VisualBasic程序代码,根据要求回答问题1至问题4。【说明】某学期成绩管理系统的“增、删、改数据表中的记录”对话框如图1-19所示。图1-19对话框中共定义了6个标签、6个文本框、4个命令按钮和1个Data数据控件。其中Data数据控件是VisualBasic的标准控件。利用它能方便地创建应用程序与数据库之间的连接,并实现对数据资源的访问。【添加】(cmdAdd)按钮用于向学生成绩数据表添加一条空记录:【修改】(cmdEdit)按钮用于修改当前所显示的一条数据记录:命令按钮【删除】(cmdDelete)用于删除当前显示的一条数据记录;单击【退出】(cmdExit)按钮,系统将退出图1-19所示的对话框。表1-13是学生成绩表结构的示例;表1-14是学生成绩表的示例。图1-19将表1-14数据库中的记录信息显示到相应的文本框中。要在各文本框(txtStu(i),i=0,1,2,3,4,5)中显示Data数据控件所连接的数据表中的数据,必须将文本框与Data数据控件进行绑定。{{B}}表1-13学生成绩表结构{{/B}}字段名类型大小 字段名类型大小班级Text6语文Integer2(默认)学号Text8数学Integer2(默认)姓名Text10英语Integer2(默认) {{B}}表1-14学生成绩示例表{{/B}}班级学号姓名语文数学英语AA40001张薇958690BB40001谢新677181AA40002刘红948986CC40001张斌788886………………【VisualBasic程序】PrivateSubForm_Load()Fori=0To5txtStu(i).Locked=TrueNextiEndSubPrivateSubcmdAddClick()cmdEdit.Enabled=NotcmdEdit.Enabled{{U}}(1){{/U}}Fori=0To5txtStu(i).Locked=NottxtStu(i).LockedNextiIfcmdAdd.Caption="添加"Then{{U}}(2){{/U}}Datal.Caption="新记录"cmdAdd.Caption="保存"cmdExit.Caption="取消"txtStu(0).SetFocusElseDatal.Recordset.Update{{U}}(3){{/U}}cmdAdd.Caption="添加"EndIfEndSubPrivateSubcmdEdit_Click()cmdAdd.Enabled=NotcmdAdd.EnabledcmdDelete.Enabled=NotcmdDelete.EnabledFori=0To5txtStu(i).Locked=NottxtStu(i).LockedNextiIfcmdEdit.Caption="修改"ThenDatal.Recordset.EditcmdEdit.Caption="保存"cmdExit.Caption="取消"Else{{U}}(4){{/U}}cmdEdit.Caption="修改"EndIfEndSubPrivateSubcmdDelete_Click()answer=MsgBox("确实删除该记录吗?",vbYesNo+vbQuestion,"警告")Ifanswer=vbYesThenDatal.Recordset.Delete{{U}}(5){{/U}}IfDatal.Recordset.EOFThen{{U}}(6){{/U}}EndIfEndIfEndSubPrivateSubcmdExit_Click()IfcmdExit.Caption="退出"ThenEndElse{{U}}(7){{/U}}cmdAdd.Enabled=TruecmdEdit.Enabled=TruecmdDelete.Enabled=TrueFori=0To5txtStu(i).Locked=NottxtStu(i).LockedNexticmdExit.Caption="退出"cmdAdd.Caption="添加"cmdEdit.Caption="修改"{{U}}(8){{/U}}EndIfEndSubPrivateSubDatal_Reposition()Datal.Caption="第"&{{U}}(9){{/U}}.AbsolutePosition+1&"条记录"EndSub
问答题[说明]本程序将自然数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=({{U}}(1){{/U}}>=0)?1:-1;for(i=row_start,j=col_start;(row_end-i)*sign>=0;i+=sign,j+=sign)a[i][j]={{U}}(2){{/U}};}voidmakeArray(intn)/*完成矩阵每条斜线的整数填写*/{intd;for(d=1;d<={{U}}(3){{/U}};d++)if(d<=n+1)if(d%2)makeline({{U}}(4){{/U}});elsemakeline(n+1-d,0,n);elseif(d%2)makeline({{U}}(5){{/U}});elsemakeline(0,d-n-1,2*n-d+1);}voidmain(){intn,N=5;k=1;n=N-1;makeArray(n);write(n);}
问答题[说明]某银行新近开通外汇定期存款业务。为方便用户查询不同存款方式下的日利率、计算本利,特开发了日利率查询及本利计算程序,其运行窗口如下图所示。用户只要在界面上选择相应的存款方式(包括外汇币种、存期等),便可单击按钮一查询存款日利率。若输入一定数量的本金。程序还会根据所选择的存期计算并输出本利和。在开发过程中,选择币种和存期的组合框(ComboBox)名分别为Combo1和Combo2,单旋钮(CommandButton)“个人单位”和“金融机构”分别名为Option1和Option2,用于输入本金的文本框(TextBox)名为Price,“输出日利率”和“计算本利和”按钮(CommandButton)分别名为Command1和Command2。且已知,第i类币种、第j类存期之下,个人单位与金融机构的存款日利率分别存放于数组元素interestRate(i,j,0)和interestRate(i,j,1)中,其中i,j从0开始计数。[VisualBasic代码]DiminterestBate(50,10,2)AsSingle’通用声明PrivateSubForm_Load()……’为数组interestRate赋初值EndSub’根据所选择的币种、存期等信息确定日利率FunctiongetInterestRate()DimstrCurrency,strTimeAsString,i,j,k,intDaysAsIntegerstrCurrency=Combo1.TextstrTime=Combo2.TextFori=0ToCombol.ListCount-1IfCombol.List(i)=strCurrencyThen(1)NextForj=0ToCombo2.ListCount-1IfCombo2.List(j)=strTimeThen(1)NextIf(2)=TrueThenk=0Else:k=1EndIf(3)=interestRate(i,j,k)EndFunction’输出日利率PrivateSubCommund1_Click()MsgBox"日利率为"&getInterestRate()EndSub’输出本利和PrivateSubCommand2_Click()DimstrTimeAsString,intDaysAsInteger,sngCorpus,sngResultAsSinglestrTime=Combo2.TextsngCorpus=CSng(Text1.Text)(4)’计算存款天数(以每月30天计)Case"一个月":intDays=30Case"三个月":intDays=90Case"六个月":intDays=120EndSelect’计算并输出本利和sngResult=sngCorpus+(5)MsgBox"本利之和为:"&sngResultEndSub
