logo资料库

2005下半年程序员考试真题及答案-下午卷.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
2005 下半年程序员考试真题及答案-下午卷 试题一至试题三是必答题 试题一(15 分,每空 3 分) 阅读下列说明和流程图,将应填入___(n)___处的字句写在答题纸的对应栏内。 [流程图说明] 流程图 1-1 描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都 删除,但保留非空字符的空白。例如,原字符串" File Name ",处理变成"File Name" 。 流程图 1-2、流程图 1-3 、流程图 1-4 分别详细描述了流程图 1-1 中的框 A、B、C。 假设原字符串中的各个字符依次存放在字符数组 ch 的各元素 ch(1) 、ch(2) 、?、ch(n) 中,字符常量 KB 表示空白字符。 流程图 1-1 的处理过程是:先从头开始找出该字符串中的第一个非空白字符 ch(i),再 从串尾开始向前找出位于最末位的非空白字符 ch(j) ,然后将 ch(i) 、?、ch(j) 依次送入 ch(1) 、ch(2)、?中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在流程 图中,strlen 是取字符串长度函数。 [流程图 1-1]
[流程图 1-2]
[流程图 1-3] [流程图 1-4] [问题] 在流程图 1-1 中,判断框 P 中的条件可表示为:i > ___(5)___ 试题二(15,每空 3 分) 阅读以下函数说明和 C 语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。 [说明] 函数 int find_Max_Min(int a[ ],int n) 的功能是:找出 n 个元素的数组 a 中的最大 元素和最小元素并输出,返回查找过程中元素的比较次数。查找方法如下:比较 a[0] 和 a[n-1], 若 a[0] 大,则交换 a[0] 和 a[n-1] 的值;再比较 a[1] 和 a[n-2] ,若 a[1] 大, 则交换 a[1] 和 a[n-2] 的值;依此类推,直到所有的元素都比较完。然后在数组的前半区 从前往后找出小元素,在后半区从后往前找出大元素。 [函数] int find_Max_Min(int a[ ],int n) { /* 找出 n 个元素的数组 a 中的最大元素、最小元素并输出,返回查找过程中元素的
比较次数*/ int i,Count = 0; int temp,Maxnum,Minnum; for(i = 0; i < n/2; i++){ Count = Count + 1; if(a[i]>a[_____(1)_____ ] { /* 数组元素交换代码略*/ } } Maxnum=a[n-1]; Minnum=a[0]; for(i = 1; i < n/2+ n%2; i++){ /*元素比较次数计数*/ Count = _____(2)_____ ; Minnum = _____(3)_____ ? a[i]:Minnum; Maxnum = _____(4)_____ ? _______(5)_____:Maxnum; /* 找出最大元素*/ /* 元素比较次数计数*/ /*找出最小元素*/ } printf("Max=%d\n,Maxnum"); printf("Min=%d\n",Minnum); return Count; } 试题三(15 分,每空 3 分) 阅读以下说明和 C 语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。 [说明] 某种传感器的输出值 Ratio 依赖于环境温度 temp(-40℃≦temp≦50℃)。对一组环境温 度值(ITEMS 个),人们已经测量得到了相应的 Ratio 值(见表 1)。该表粗略地描述了曲 线 Ration(temp) 。 表 1 曲线 Ration(temp) 的列表值 表 2 曲线 K(temp)的列表值 环境温度 temp 传感器的输出值 Ratio 环境温度 temp 校正系数 K -40℃ -20℃ -10℃ 0℃ 10℃ 30℃ 50℃ 0.20 0.60 0.80 1.00 1.17 1.50 1.80 -40℃ -39℃ -38℃ -37℃ … -20℃ -19℃ … -10℃ -9℃ … 50℃ 5.00 4.55 4.17 3.85 … 1.67 1.61 … 1.25 1.22 … 0.56 校正系数 K 是 Ratio 的倒数,因此也依赖于环境温度 temp 。在数据处理中,人们需要 用更多的列表值细致地描述曲线 K(temp ),如表 2 所示。在表 2 中,各温度值所对应的 K 值是对表 1 进行线性插值再求倒数得到的,具体的计算方法如下: 1. 根据 temp 值,在表 1 中用二分法查找; 2. 若找到相应的温度值,则按相应的 Ratio 值求倒数得到 K 值; 3. 若没找到相应的温度值,则可确定 temp 所在的温度区间[Tp1,Tp2] ,同时获得了
相应的 Ratio1 和 Ratio2 ,再按如下公式计算 K 值: Step = (Ratio1 - Ratio2)/(Tp1 - Tp2) K = 1.0/(Ratio1 + Step * (temp - Tp1)) 在程序中,当 temp 高于 50℃或低于-40℃时,设定 K=0。 [程序] #include typedef struct{ int Temp; double Ratio; /*环境温度*/ /*传感器的输出值*/ }CURVE; #define ITEMS 7 double GetK(int,CURVE *,int); void main() { int Degree; double k; CURVE Curve[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); } } double GetK(int Temp,CURVE *p,int n) { /* 用二分法在 n 个元素的有序表 p 中查找与 Temp 对应的传感器输出值*/ int low,high,m; double Step; low = 0; high = n-1; if ((Temp < p->Temp)||(Temp > (p+high)->Temp)) return 0.0; /* 超出温度范围时返回 0.0*/ while (low <= high){ m =_____(1)_____; if (Temp == (p+m)->Temp) return _____(2)_____ ; if (Temp < (p+m)->Temp) high = m-1; else low = _____(3)_____ ; } p += high; Step = (_____(4)_____)/((p+1)->Temp - p->Temp); return 1.0/(p->Ratio + Step * (_____(5)_____)); } 试题四至试题五选答 1 道
试题四(15 分,每空 3 分) 阅读以下应用说明以及用 Visual Basic 开发过程中进行的属性设置和所编写的程序代 码,将应填入_____(n)_____处的字句写在答题纸的对应栏内。 [应用说明] 启动某应用程序运行的登录窗口如下: 其中的标签(Label1)"用户名(U)"对应文本框 Username ,标签(Label2)"密码(P) "对应文本框"Password" 。当用户在 Username 文本框中输入用户名"ali88" ,在 Password 文本框中输入"zmkm"( 显示的字符均为"*") ,并单击"确定"按钮时,就会弹出应用程序的 主窗口 frmAPP ,而该登录窗口就会卸载。 如果用户名或密码输入错误,则会弹出报警信息框。当用户单击其中的"确定" 按钮后, 登录窗口"Password" 文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码, 必要时用户还可以再修改用户名,再次做登录尝试。本应用程序允许发生 3 次输入错误。在 第 3 次输入错误后,就会立即退出该应用程序。 在弹出登录窗口后,当按键"Alt+U" 时光标就会停留在 Usename 文本框中;当按键 "Alt+P" 时光标就会停留在 Password 文本框中。当用户按"Enter" 键时,就相当于单击" 确定"按钮;当用户按"Esc"键时,就相当于单击"取消"按钮,立即退出该应用程序。 [属性设置] 在开发过程中,部分控件及属性设置如下: 属性 属性值 Caption ____(1)____ 命令按钮 CmdCancel Caption Cancel [程序代码] Private Sub cmdOK_Click() _____(3)_____ As Integer If ___(4)___ Then '静态变量 time 的说明 对象 标签 文本框 文本框 对象名 Label2 Username Password 命令按钮 CmdOK Text Text Password Caption Default (空白) (空白) * 确定 ____(2)___ 取消 True
Unload Me ____(5)_____ Else '卸载本登录窗口 '弹出应用程序主窗口 frmAPP MsgBox(" 用户名密码错!") Times = times+1 Password.Text = "" Password.SetFocus '清除密码框中的内容 '将光标定位于密码框 If times = 3 Then End End If End Sub Private Sub cmdCancel_Click() End End Sub 试题五(共 15 分) 阅读以下说明和 C 语言函数,将应填入__(n)__ 处的字句写在答题纸的对应栏内。 [说明] 二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:若它的左子树非空,则左 子树上所有结点的值小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于 根结点的值;左、右子树本身就是两棵二叉排序树。 函数 insert_BST(char *dtr) 的功能是:对给定的字符序列按照 ASCII 码值大小关系 创建二叉排序树,并返回指向树根结点的指针。序列中重复出现的字符只建一个结点,并由 结点中的 Count 域对字符的重复次数进行计数。 二叉排序树的链表结点类型定义如下: typedef struct BSTNode{ char Elem; int Count; struct BSTNode *Lch,*Rch; /* 结点的字符数据*/ /*记录当前字符在序列中重复出现的次数*/ /* 结点的左、右指针*/ } *BiTree; [函数] BiTree insert_BST(char * str) { /*变量定义及初始化*/ BiTree root,parent,p; char _______(1)________; root = (BiTree)malloc(sizeof(struct BSTNode)); if (!root || *s=='\0') return NULL; root->Lch = root->Rch = NULL; root->Count = 1; root->Elem = *s++; for(;*s != '\0';s++){ ______(2)______; parent = NULL; while (p) {
/*p 从树根结点出发查找当前字符*s 所在结点*/ parent = p; if (*s == p->Elem) /*若树中已存在当前字符结点,则当前的字符计数值加 { p->Count++; break;} else /*否则根据字符*s 与结点*p 中字符的关系,进入*p 的左子树或右子树 if (*s > p->Elem) p = p->Rch; else p = p->Lch; /*while*/ } if (______(3)_____) { /*若树中不存在字符值为*s 的结点,则申请结点并插入 p = (BiTree)malloc(sizeof(struct BSTNode)); if (!p) return NULL; p->Lch = p->Rch = NULL; p->Count = 1; p->Elem = *s; /*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树 1*/ */ 树中*/ 插入*/ if (p->Elem > parent->Elem) ______(4)_____ = p; else _________(5)________ = p; } /*for*/ } return root; } 从下列的 3 道试题(试题六至试题八)中任选 1 道解答。 如果解答的试题数超过 1 道,则题号小的 1 道解答有效。 试题六(共 15 分) 阅读以下说明和 C++代码,将解答写入答题纸的对应栏内。 [说明] 类 Stock 的定义中有三处错误,分别在代码的第 04、06、10 行。请补齐下述代码中的 空缺 1,修改错误并给处修改后该行的完整代码,最后完善程序运行后的输出结果。 [C++ 代码] 01 02 03 04 05 06 07 08 09 #include using namespace std; class Stock{ protected: Stock(){shares=0; share_val=0.0; Output();} Stock(int n=0, double pr=3.5):_____(1)______{// 初始化 shares 值 为 n share_val=pr; Output();
分享到:
收藏