问答题【说明】 函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为 typedef struct node int key; struct node * next; *LinkedList; 【函数】 int DelA_InsB ( LinkedList La, LinkdeList Lb,int key1,int key2,,int len) LinkedList p,q,s,prep,pres; int k; if( ! La->next || ! Lb-> next ||| en <=0)return-1; p = La -> next;prep = La; while(pp = p -> next; if( ! p) return - 1; /*在表A中不存在键值为key1的结点*/ q=p;k=1; while(q k++; if( ! q)return -1; /*表A中不存在要被删除的len个结点*/ s = Lb -> next; (3) ; while(s s =s->next; if( ! s) return - t; /*表B中不存在键值为key2的结点*/ (4) =q-> next; /*将表A中的len个结点删除*/ q->next= (5) ; pres -> next = p; /*将len个结点移至表B */ return 0;
问答题试题四
阅读以下说明和C 代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
函数MultibaseOutput(long n, int B)的功能是:将一个无符号十进制整数n 转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B 进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C 代码中的符号常量及栈的类型定义如下:
#define MAXSIZE 32
typedef struct {
int *elem; /* 栈的存储区 */
int max; /* 栈的容量,即栈中最多能存放的元素个数 */
int top; /* 栈顶指针 */
}Stack;
[C 代码]
int InitStack(Stack *S, int n) /* 创建容量为n 的空栈 */
{ S->elem = (int *)malloc(n * sizeof(int));
if(S->elem == NULL) return -1;
S->max = n; (1) = 0 ; return 0;
}
int Push(Stack *S, int item) /* 将整数item 压入栈顶 */
{ if(S->top == S->max){ printf("Stack is full!/n"); return -1;}
(2) = item ; return 0;
}
int StackEmpty(Stack S) { return (!S.top) ? 1 : 0; } /* 判断栈是否为空 */
int Pop(Stack *S) /* 栈顶元素出栈 */
{ if(!S->top) { printf("Pop an empty stack!/n"); return -1;}
return (3) ;
}
void MultibaseOutput(long n, int B)
{ int m; Stack S;
if (InitStack( return;}
do {
if (Push( return;}
n = (5) ;
}while(n != 0);
while(!StackEmpty(S)) { /* 输出B 进制的数 */
m = Pop(
if(m < 10) printf("%d", m); /* 小于10,输出数字 */
else printf("%c", m + 55); /* 大于或等于10,输出相应的字符 */
}
printf("/n");
}
问答题试题三(共15分)阅读以下说明和C函数,填补函数代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。[说明]队列是一种常用的数据结构,其特点是先入先出,即元素的插入在表头、删除在表尾进行。下面采用顺序存储方式实现队列,即利用一组地址连续的存储单元存放队列元素,同时通过模运算将存储空间看作一个环状结构(称为循环队列)。设循环队列的存储空间容量为MAXQSIZE,并在其类型定义中设置base、rear和length三个域变量,其中,base为队列空间的首地址,rear为队尾元素的指针,length表示队列的长度。例如,容量为8的循环队列如图3-1所示,初始时创建的空队列如图3-1(a)所示经过一系列的入队、出队操作后,队列的状态如图3-1(b)所示(队列长度为3)。下面的C函数1、C函数2和C函数3用于实现队列的创建、插入和删除操作,请完善这些代码。[C函数1]创建一个空的循环队列。[C函数2]元素插入循环队列。[C函数3]元素出循环队列。
问答题阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。[说明]设计RGB方式表示颜色的调色板,进行绘图。其类图如下图所示。该程序的Java代码附后。类图[Java代码]//颜色类classMyColor{privateintred,green,blue;publicMyColor(){red=0;green=0;blue=0;}publicMyColor(intred,intgreen,intblue){this.red=red;this.green=green;this.blue=blue;}//其他方法略publicStringtoString(){return"Red:"+red+"\tGreen:"+green+"\tBlue"+blue;}}//调色板类classPalette{publicintnumber;//颜色数private______palette;//颜色表publicPalette(){number=256;palette=newMyColor[number];}publicPalette(MyColor[]palette,intnumber)______=number;______=palette;}//其他方法略publicStringtoString(){Stringstr="";for(inti=0;i<number;i++){str+=i+":"+palette[i]+"\n";}returnstr;}}//绘图类classDrawing{public______intCOLORNUMBER=16;publicstaticvoidmain(String[]args){Palettepalette;intred,green,blue;MyColor[]color=newMyColor[COLORNUMBER];for(inti=0;i<COLORNUMBER;i++){red=(int)(Math.random()*256);green=(int)(Math.random()*256);blue=(int)(Math.random()*256);color[i]=______(red,green,blue);}palette=newPalette(color,COLORNUMBER);System.out.println(palette);}}
问答题[说明]以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n为小于256的任意自然数。首先读入正整数Key(Key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如图4-12所示。图4-12密文字符环示意图加密时从S1位置起顺时针计数,当数到第Key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第Key个字符位置时,将原文中字符C2放入其中,并从环中除去该字符位置;依此类推,直至n个原文字符全部放入密文环中。由此产生的S1S2……Sn即为原文的密文。例如,原文:OneWorldOneDream。当Key=5时,其密文为:meOnWlanDoOedrer;当Key=6时该原文的密文为:oeDnOedrrOnWmale。程序使用示例如图4-13所示。图4-13程序使用示例在[C程序]中,将电码的原文存入字符数组old[],加密钥匙存入在整数变量Key中。函数decode用于将原文old加密并返回密文字符数组的首指针。其中,函数采用一个双向循环链表CODE来表示密文环。函数strlen用于计算一个字符串中个数(不包括字符串结尾符'/0/)。为了简单起见,程序中假设内存容量足以满足动态存贮单元分配的要求。[C程序]#include<stdio.h>#include<alloc.h>#defineCR13typedefstructnode{charch;structnode*forward;/*Linktonextnode.*/structnode*backward;/*Linktopreviousnode.*/}CODE;main(){char{{U}}(1){{/U}},old[256];intstrlen(),key,num=0;printf("/nPleaseinputthetelegraph:/n")while(num<255old[{{U}}(2){{/U}}]='/0';do{printf("/nPleaseinputKey=?(Key>1):");scanf("%d",}while(key<=1);printf("/nThedecodeoftelegraph:'%s'is:/n'%s'/n",old,decode(old,key));char*decode(old,key);char*old;intkey;{char*new;intlength,count,i;CODE*loop,*p;length=strlen(old);loop=({{U}}(3){{/U}})malloc(length*sizeof(CODE));for(i=1;i<length-1;i++){loop[i].forward=loop[i].backward=}loop[0].backward=loop[0].forward=loop[length-1].forward=loop;loop[length-1].backward=for(p=loop,i=0;i<length;i++){for(count=1;count<key;count++)p={{U}}(4){{/U}};p->ch=*old++;p->backward->forward={{U}}(5){{/U}};p->forward->backward={{U}}(6){{/U}};p=p->forward;}new=(char*)malloc((length+1*sizeof(char));for(i=0;i<length;i++)new[i]=loop[i].ch;new[length]='/0';return(new)}intstrlen(s)char*s;{intlen=0;while({{U}}(7){{/U}}!='/0')len++;return(len);}
问答题[说明] 本程序的功能是产生一个抽奖游戏中的随机数组合。抽奖的规则是从自然数1至50中无重复抽取6个数。为了保证抽取的无重复性,将50个自然数放在数组source中。每抽取了一个数,就用数组的最后一个数来改写这个被抽中的数,并把数组的长度减1。为使输出更为清晰,把抽取出来的6个数放在数组target中,经过排序(Arrays类中的sou方法实现排序)然后输出。注:Math.random方法返回一个在0(包含)到1(不包含)之间的随机浮点数。[Java代码] import java. util. *;public class DrawOut public static void main (String[ ] args) int n =50; int k =6; int[ ] source = new int[n]; for(int i=0; i < (1) ;i++) source[i] = i + 1; int[ ] target = new int[k]; //将抽中的数字从source数组中取出,放入到target数组 for (int i = 0; i < (2) ; i+ +) int r = (int) (Math. random() * (3) ); target[i] = source[r]; .... [r] = (4) ; (5) ; Arrays. sort(target); for (int i = 0; i < target, length; i + + ) System. out. prinfln ( target [i] );
问答题【说明】本程序对某电码文(原文)进行加密形成密码文,其加密算法如下:假定原文为C1,C2,C3,…,Cn加密后形成的密文为S1,S2,S3,…,Sn,首先读入正整数key(key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示:加密时从S1位置起顺时针计数,当数到第key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第key个字符位置时,将原文中字符C2放入其中,并从环中除去该字符位置:依次类推,直至n个原文字符全部放入密文环中。由此产生的S1S2…Sn即为原文的密文。例如,当Key=3时,原文thisisadecodingsystem的密文为:aotgnhediysdimietsncss当Key=4时,该原文的密文为:ssdtydhtegiasiscnmeion本程序将电码的原文存放在字符数组old中,加密钥匙存放在整数key中。函数decode用于将原文old加密并返回密文字符数组的首指针。其中函数采用一个双向循环链表CODE来表示密文环:函数strlen用于计算一个字符串中的字符个数(不包括字符串结尾符'/O')。为了简单起见,程序中假设内存容量足以满足动态存储单元分配的要求。#include<stdio.h>#include<stdlib.h>typedefstructnodecharch;structnode*forward;/*Linktonextnode.*/structnode*backward;/*Linktopreviousnode.*/CODE;intstrlen(char*s)intlen=0;while(*s++!='/0')len++;return(len);char*decode(char*otd,intkey)char*New;intlength,count,i;CODE*loop,*p;length=strlen(old);loop=(CODE*)malloc(length*sizeof(CODE));for(i=1;i<length-1;i++) loop[i],forward=(1)loop[0].backward=loop[0],forward=loop[length-1].forward=loop;(2)for(p=loop,i=0;i<length;i++) for(count=1;count<key;count++p=p->forward;(3)p->backward->forward=p->forward;p->forward->backward=p->backward;(4)New=(char*)malloc((length+1)*sizeef(char));for(i=0;i<length;i++)(5)New[length]='/0';return(New);voidmain()charold[256];intkey,num=0;printf("/nPleaseinputthetelegraph:/n");while(num<255old[(num==255)?num:num-1]='/0';doprintf("/nPleaseinputKey(Key>1):");scanf("%d",while(key<=1);printf("/nThedecodeoftelegraph:'%s'is:/n'%s'/n",old,decode(old,key));
问答题【说明】
本题中的函数encode()和decode()分别实现对字符串的变换和复原。其中变换函数encode()顺序考查已知字符串的字符,按以下规则逐组生成新字符串:
(1)若已知字符串的当前字符不是数字字符,则将该字符复制在新字符串中。
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中。
(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中。
(4)以上述一次变换为一组,在不同组之间另插入一个下划线“_”用于分隔。例如,encode()函数对字符串26a3t2的变换结果为666_a_tttt_2。
复原函数decode()做与变换函数encode()相反的工作。即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中略过变换函数,为不同组之间添加的一个下划线字符。
假定调用变换函数encode()时的已知字符串中不含下划线字符。
【函数】
int encode(char *instr, char *outstr){
char *ip, *op, c; int k,n;
ip=instr; op=outstr;
while(*ip){
if(*ip>='0'
c={{U}} (2) {{/U}};
for(k=0; k<n;k++)
*op++=c;
}
else{{U}} (3) {{/U}};
*op++='_';
ip++;
}
if(op>outstr)op--;
{{U}} (4) {{/U}};
return op-outstr;
}
int decode(char *instr, char *outstr){
char *ip, *op, c; int n;
ip=instr; op=outstr;
while(*ip){
c=*ip; n=0;
while(*ip==c n++;
}
if({{U}} (5) {{/U}})*op++='0'+n-1;
*op++=c;
if({{U}} (6) {{/U}})ip++;
}
*op='/0';
return op-outstr;
}
问答题阅读以下说明和Java代码,填充程序中的空缺,将解答填入答题纸的对应栏内。[说明]某应急交通控制系统(TraficControlSystem)在红灯时控制各类车辆(Vehicle)的通行,其类图如下图所示,在紧急状态下应急车辆在红灯时可通行,其余车辆按正常规则通行。类图下面的Java代码实现以上设计,请完善其中的空缺。[Java代码]abstractclassVehicle{publicVehicle(){}abstractvoidrun();};interfaceEmergency{______;______;};classCarextendsVehicle{publicCar(){}voidrun(){/*代码略*/}};ClassTruckextendsVehicle{publicTruck(){}voidrun(){/*代码略*/}};classPoliceCar______{booleanisEmergency=false;publicPoliceCar(){}publicPoliceCar(booleanb){this.isEmergency=b;}publicbooleanisEmergent(){return______}publicvoidrunRedLight(){/*代码略*/}};/*类Ambulance、FireEngine实现代码略*/publicclassTraficControlsystem{/*交通控制类*/privateVehicle[]V=newVehicle[24];intnumVehicles;publicvoidcontrol(){for{inti=0;i<numVehicles;i++){if(V[i]instanceofEmergency}else______.run();}}voidadd(Vehiclevehicle){v[numVehicles++]=vehicle;}/*添加车辆*/voidshutDown(){/*代码略*/}publicstaticvoidmain(String[]args){TraficControlSystemtcs=newTraficControlSystem();tcs.add(newCar());tcs.add(newPoliceCar());tcs.add(newAmbulance());tcs.add(newAmbulance(true));tcs.add(newFireEngine(true));tcs.add(newTruck());tcs.add(newFireEngine());tcs.control();tcs.shutDown();}}
问答题[说明] 下面的词典类Dic实现了简单的英译汉功能。程序运行后的输出为“我是一个学生”。[C++程序]#include <iostream.h>#include <string.h>#define Max 100class Dic int top; char words[Max] [12]; char mean[Max] [20]; public: Die()top=0; void add(char w[],char m[]) strcpy(words[top],w); strcpy(mean[top],m); (1) ; void trans(char str[]) int i=0,j=0,k=0,s; char w[12],h[200]; while(l) if(str[i]! ='' //读取单词的一个字符,记录在w中 else w[j]='/0'; for(s=0;s < top;s++) if(strcmp(words[s],w) (2) 0) break; if(s<top) //找到了,翻译成对应的mean[s] strcpy(w,mean[s]); j= (3) ; else //未找到,翻译成(unknown) strcpy(w,"(unknown)"; j=9; for(s=0;s<j;s++) h[k++]=w[s]; if(str[i]=='/0') (4) ; break; j=0; i++; cout<<h<<endl; ;void main() Dic obj; obj.add("I","我"); obj.add("am","是"); obj.add("student","学生"); obj.add("a","一个"); obj.trans(" (5) ");
问答题【说明】
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。
函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)表示year是(或不是)闰年。
【C语言函数】
int count_5_13(int year)
{
int date; /*date为0表示星期日,为1~6分别表示星期一至星期六*/
long days=0; /*days记录天数*/
int m,y,c=0; /*c用于表示黑色星期五的个数*/
if (year<1900) return-1;
/*计算从1900年1月1日起至给定年份year的1月13日间隔的天数*/
days=12;
for (y= 1900; y < year; y++) {
days +=365;
if (isLeapYear(y)) {{U}}(1) {{/U}};
}
date=((days%7) +1) %7; /*算出给定年份year的1月13日是星期几*/
c=({{U}} (2) {{/U}}) ?1:0;
for(m=1;{{U}} (3) {{/U}};m++) {
switch (m) {
case 1:case 3: case 5: case 7:case 8:case 10:case 12:
days=31; break;
case 4: case 6: case 9: case 11:
days=30; break;
case 2:days=28;
if({{U}} (4) {{/U}}) days=29;
break;
}/*end of switch*/
date=((days%7)+ {{U}}(5) {{/U}})%7;
if (date==5) c++;
} /*end of for*/
return c;
}
问答题(5)
问答题阅读以下说明和C函数,填补C函数中的空缺(1)~(6),将解答写在答题纸的对应栏内。[说明]函数numberOfwords(charmessage[])的功能是计算存储在message字符数组中的一段英文语句中的单词数目,输出每个单词(单词长度超过20时仅输出其前20个字母),并计算每个英文字母出现的次数(即频数),字母计数时不区分大小写。假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略,即不会出现类似don't形式的词,单词之后都为空格或标点符号。函数中判定单词的规则是:(1)一个英文字母串是单词;(2)一个数字串是单词;(3)表示名词所有格的撇号(')与对应的单词看作是一个单词。除上述规则外,其他情况概不考虑。例如,句子“Thel990'switnessedmanychangesinpeople'sconceptsofconservation.”中有10个单词,输出如下:The1990'switnessedmanychangesinpeople'sinpeople'sconceptsofconservation函数numberOfwords中用到的部分标准库函数如下表所述。
问答题[说明] C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在以下[C++程序]中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息。 [C++程序] #include <iostream.h> template <class T> class Array; template <Class T> class ArrayBody friend (1) ; T* tpBody; int iRows,iColumns, iCurrentRow; ArrayBody(int IRsz, int iCsz) tpBody = (2) ; iRows = iRsz; iColumns = iCsz; iCurrentRow = -1; Public: T row_error = column_error =false; try if (iCurrentRow < 0 || iCurrentRow >= iRows) row_error = true; if (j<0 || j>= iColumns) column_error = true; if (row_error == true || column_error == true) (3) ; catch(char) if (row_error == true) cerr << "行下标越界[" << iCurrentRow << "]"; if (column_error = true) cerr << "列下标越界[" << j << "]"; cout << "/n"; return tpBody[iCurrentRow * iColumns + j]; ~Arraygody()delete[]tpBody; ; template <class T> class Array ArrayBody<T> tBody; Public; ArrayBody<T> return tBody; Array(int iRsz, int iCsz) : (5) ; void main() Array<int> a1(10,20); Array<double> a2(3,5); int b1; double b2; b1 = a1[-5][10]; //有越界提示:行下标越界[-5] b1 = a1[10][15]; //有越界提示:行下标越界[10] b1 = a1[1][4]; //没有越界提示 b2 = a2[2][6]; //有越界提示:列下标越界[6] b2 = a2[10][20]; //有越界提示:行下标越界[10]列下标越界[20] b2 = a2[1][4]; //没有越界提示
问答题[说明]
下面的词典类Dic实现了简单的英译汉功能。程序运行后的输出为“我是一个学生”。
[C++程序]
#include <iostream.h>
#include <string.h>
#define Max 100
class Dic
{ int top;
char words[Max] [12];
char mean[Max] [20];
public:
Die(){top=0;}
void add(char w[],char m[]){
strcpy(words[top],w);
strcpy(mean[top],m);
{{U}}(1) {{/U}};
}
void trans(char str[]) {
int i=0,j=0,k=0,s;
char w[12],h[200];
while(l) {
if(str[i]! ='' //读取单词的一个字符,记录在w中
else {
w[j]='/0';
for(s=0;s < top;s++)
if(strcmp(words[s],w) {{U}}(2) {{/U}} 0) break;
if(s<top) //找到了,翻译成对应的mean[s]
{ strcpy(w,mean[s]); j={{U}} (3) {{/U}};}
else //未找到,翻译成(unknown)
{ strcpy(w,"(unknown)"}; j=9; }
for(s=0;s<j;s++)
h[k++]=w[s];
if(str[i]=='/0') {{{U}} (4) {{/U}}; break;}
j=0;
}
i++;
}
cout<<h<<endl;
}
};
void main()
{ Dic obj;
obj.add("I","我");
obj.add("am","是");
obj.add("student","学生");
obj.add("a","一个");
obj.trans("{{U}} (5) {{/U}}");
}
问答题【说明】以下【C程序】能将自然数1,2,…,N2按蛇形方式逐个存入N阶矩阵。换言之,程序从anO开始到aOn。为止(n=N-1)顺序填入自然数,交替地对每一斜列从左上元素向右下元素或从右下元素向左上元素存数。例如,当N=5时,程序输出结果如图2-12所示;当N=8时,程序输出结果如图2-13所示。【C程序】#include<stdio.h>#defineSIZE10inta[SIZE][SIZE],k;main()inti,j,n,N;for(N=3;N<=SIZE;N++)k=1;makeArray(n=N-1);printf("/nN=%d;/n",n+1);for(i=0;i<=n;i++)for(j=0;j<=n;j++)printf("%4d",a[i][j]);printf("/n");makeline(introw_start,intcol_start,introwend)/*完成矩阵一条斜线的整数填写*/inti,j,sign=(1);for(i=row_start,j=colstart;(2);i+=sign,j+=sign)a[i][j]=k++;makeArray(intn)/*完成矩阵每条斜线的整数填写*/intd;for(d=1;d<=(3);d++)if(d<=n)if(d%2)makeline((4));elsemakeline((5));elseif(d%2)makeline((6));elsemakeline((7));
问答题[函数2.1说明]
下面程序的功能是:将由键盘输入的某个十进制数转换成对应的R进制数并输出。这里R是 2到16的整数,由键盘输入。例如,输入n=128,base=13后的输出为9B。
[函数2.1]
#include <stdio.h>
main()
{ char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int c[64],n,i=0,base;
printf("Enter a number:");scaaf("%d",
printf("Enter new base:");scanf("%d",
do{c[i]={{U}} (1) {{/U}};
i++;
n=n/base;
}while({{U}} (2) {{/U}});
printf("Transmit new base:");
for(- -i;i>=0;- -i)printf("%c",{{U}} (3) {{/U}});
}
[函数2.2说明]
所谓回文字符中是指正序和逆序拼写相同的字符串,例如astrtsa,adgdtdgda等。下面函数int fun(char *str)的功能是判断字符串str是否是回文,当字符串是回文时,函数返回1,否则返回0。
[函数2.2]
int fun(char *str)
{ int i,j,l;
for(i=0;str[i]! ='/0';i++);
l=i/2;
for(j=0,i- -;j<=1;{{U}} (4) {{/U}})
if({{U}} (5) {{/U}}) return 0;
return 1;
}
问答题试题七(15分,每空3分)阅读以下说明及VisualBasic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]某个文本文件中存放了若干个非零数值有效数据,每个数据占一行,最后一行以数字“0”作为结束标志。下面的程序用于计算该文件中这些数据之和,其运行窗口如下:用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名,再单击“累计”按钮,就能在“总计”文本框中看到该文本文件中的数据之和。在开发过程中,设驱动器列表框名为Drive1,目录列表框名为Dir1,文件列表框名为File1,存放数据的文本文件名为D:\test\vb7\data.txt,“累计”按钮名为sum,“总计”文本框(TextBox)名为text1。[VisualBasic代码]PrivateSubDrive1_Change()Dir1.Path=(1)'用户选择的驱动器反映到目录列表框中EndSubPrivateSubDir1_Change()File1.Path=(2)'用户选择的文件夹改变文件列表框内容EndSubPrivateSubsum_Click()Dim(3)AsNewFileSystemObject,(4)AsTextStream'创建自己的文件系统对象,说明自己的文本流对象IfRight(Dir1.Path,1)="\"ThenSetmyTextFile=fso.OpenTextFile(Dir1.Path+File1.FileName)ElseSetmyTextFile=fso.OpenTextFile(Dir1.Path+"\"+File1.FileName)EndIfS=0Dod=Val(myTextFile.ReadRow)S=S+dLoopWhile(5)Text1.Text=Str$(S)EndSub
问答题[说明]给定一个十进制整数A,将其转换为R进制数的方法是:将A的整数部分逐次除以R,直到商等于0为止,将所得的余数由低位到高位排列在一起,就得到了对应R的进制数。以A=11,R=2为例,11÷2=5…1,5÷2=2…1,2÷2=1…0,1÷2=0…1中各式的余数依次为:1,1,0,1,于是与A对应的二进制数为1011。下面的流程图实现了将十进制数2597转换为八进制数的功能,其中:(1)循环1执行除法运算并将余数依次记录在数组a中(假定数组长度足够长),如a[1],a[2],……,a[k];(2)循环2则用于将这些余数按逆序输出,即a[k],a[k-1],……,a[1];(3)图中i,j分别是循环1和循环2中的循环变量;(4)图中q用于记录每次除法所得的商值。[流程图][问题1]将流程图中的(1)~(4)处补充完整,其中(1)~(3)处要求使用C语言格式书写:(1)处为逻辑表达式,(2)、(3)两处为算术表达式;(4)则须按照“循环变量名:循环初值,循环终值,增量”格式描述。[问题2]该算法运行的结果{{U}}(5){{/U}}。
问答题[说明]设某单位Acess数据库中有一张员工信息表,其中记录了员工编号、姓名、性别等基本信息。下面的应用程序利用数据控件(Data)实现了对这张表中记录的增加、删除和修改操作。其运行界面如下:在开发过程中,数据控件Data1与员工数据表相连接,各文本框、“性别”组合列表框Combo1、“政治面貌”组合列表框Combo2都分别与数据表的相应字段绑定,界面上从左到右各操作按钮分别取名为CmdAdd、CmdDel、CmdUpdate和CmdExit。[VisualBasic代码]PrivateSubForm_Load()'加载窗体Combo1.{{U}}(1){{/U}}"男"Combo1.{{U}}(1){{/U}}"女"Combo2.{{U}}(1){{/U}}"党员"Combo2.{{U}}(1){{/U}}"团员"Combo2.{{U}}(1){{/U}}"群众"EndSubPrivateSubCmdAdd_Cliek()'增加记录Datal.Recordset.AddNewEndSubPrivateSubCmdDel_Click()'删除记录Datal.Recordset.{{U}}(2){{/U}}Datal.Recordset.MoveNextEndSubPrivateSubCmdUpdate_Click()'修改记录IfDatal.ReadOnly={{U}}(3){{/U}}AndDatal.Recordset.UpdatableThenDatal.Recordset.EditDatal.Recordset.{{U}}(4){{/U}}ElseMsgBox"数据表不允许修改!"EndIfEndSubPrivateSubCmdExit_Click()'退出程序DimretAsLongret:MsgBox("真的要退出吗?",vbQuestion+vbYesNo,"退出")If{{U}}(5){{/U}}ThenDatal.Reeordset.CloseEndEndffEndSub
