单选题
单选题
案例分析题试题一
阅读下列说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内
案例分析题阅读以下说明和C代码,填写代码中的空(1)~(6),将解答写入答题纸的对应栏内
案例分析题试题六
阅读下列说明和 C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内
案例分析题试题三
阅读以下代码和问题, 回答问题, 将解答填入答题纸的对应栏内
问答题阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。{{B}}[{{/B}}说明{{B}}]{{/B}}求连续函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法。为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与f(b)符号相反(a<b),则在区间(a,b)中必然存在f(x)的根。因为当x从a变到b时,连续函数的值将从正变到负(或从负变到正),必然要经过0。区间(a,b)就是根的初始范围。取该区间的中点m,如果f(m)=0,则根就是m。如果f(a)与f(m)符号相反,则根一定在区间(a,m)中;如果f(m)与f(b)符号相反,则根一定在区间(m,b)中。因此,根的范围缩小了一半。依此类推,将区间一半一半地分下去,当区间的长度很小(达到根的精度要求,例如0.001)时,或者当区间中点处的函数值几乎接近于0(即绝对值小于预先规定的微小量,例如0.001)时,近似计算就可以结束了。以下流程图描述了用二分法近似计算区间(a,b)中f(x)的根的过程。{{B}}[{{/B}}流程图{{B}}]{{/B}}
问答题[Vsual Basic 程序代码]
Private Sub CmdSelect_Cliek()
For i = O To List2.ListCount - 1
If Listl.Text = List2.List(i) Then Exit Sub '不要重复选择
Next i
List2.Addltem{{U}} (1) {{/U}} '在List2中增添List1中所选的项
End Sub
Private Sub CrndSelAll_Click()
List2.Clear '先删除List2中的已有项
For i = 0 To {{U}}(2) {{/U}} '对List1中所有各项做循环处理
List2.Addltem {{U}}(3) {{/U}} '将该项增添到 List2中
Next i
End Sub
Private Sub CmdDelete_Cliek()
If List2.Listlndex >= O Then '如果List2中有选中的项,
List2.Removeltem {{U}} (4) {{/U}} '则删除所选的项
End If
End Sub
Private Sub CmdDelAll_Cliek()
{{U}}(5) {{/U}}
End Sub
问答题阅读以下说明和C函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内。[说明1]函数f(doubleeps)的功能是:利用公式计算并返回π的近似值。[C函数1]doublef(doubleeps){doublen=1.0,s=1.0,term=1.0,pi=0.0;while(fabs(term)>=eps){pi=pi+term;n=______;s=______;term=s/n;}returnpi*4;}[说明2]函数fun(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符,形成一个十进制整数(最多8位)。例如,若str中的字符串为“iyt?67kpf3g8d5.j4ia2e3p12”,则函数返回值为67385423。[C函数2]longfun(char*str){inti=0;longnum:0;char*p=str;while(i<8++i;}______;}returnnum;}
问答题【说明】 以下【C程序】的功能是从文件text_01.ini中读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到文件word_xml.out中。 该C程序采用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立。然后中序遍历该二叉树,将遍历经过的二叉树上节点的内容输出。 程序中的外部函数 int getword(FILE *fpt,char *word) 从与fpt所对应的文件中读取单词置入word,并返回1;若已无单词可读,即到文件尾部时,则函数返回0。【C程序】#include <stdio.h>#include <malloc.h>#include <ctype.h>#include <string.h>#define INF "TEXT_01.INI"#define OUTF "WORD_XML.OUT"typedef struct treenode char *word; int count; struct treenode *left, *right; BNODE;int getword(FILE *fpt,char *word);void binary tree(BNODE **t,char *word) BNODE *ptr, *p; int cmpres; p = NULL; (1) ; while (ptr) /*寻找插入位置*/ cmpres = strcmp(word, (2) ); /* 保存当前比较结果*/ if (!cmpres) (3) return; else (4) ; ptr = cmpres > 0 ? ptr->right : ptr->left; ptr = (BNODE *)malloc(sizeof(BNODE)); ptr->right = ptr->left = NULL; ptr->word = (char *)malloc(strlen(word)+1); strcpy(ptr->word,word); ptr->count = 1; if (p == NULL) (5) ; else if (cmpres > 0) p->right = ptr; else p->left = ptr; void midorder(FILE *fpt, BNODE *t) if ( (6) ) return; midorder(fpt , t->left); fprintf(fpt , " %s %d/n " , t->word , t->count); midorder(fpt , t->right); void main() FILE *fpt; char word[40]; BNODE *root = NULL; if ((fpt = fopen(INF , "r")) == NULL) printf("Can't open file %s/n",INF); return; while (getword(fpt,word) == 1) binary_tree( (7) ); fclose(fpt); fopen(OUTF,"w"); midorder(fpt, root); fclose(fpt);
问答题【说明】
设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
【函数】
void Locate( int
while(p!=frist
if(p! =first) /*链表中存在x*/
{{{U}} (2) {{/U}};
<结点类型说明>
* current = P; /*从链表中摘下这个结点*/
Current -> prior -> next = current -> next;
Current -> next -> prior = current -> prior;
P = current -> prior; /*寻找重新插入的位置*/
While(p! =first
Current-> next = {{U}}(4) {{/U}}; /*插入在P之后*?
Current -> prior = P;
P -> next -> prior = current;
P->next={{U}} (5) {{/U}};
}
else printf("Sorry. Not find! /n"); /*没找到*/
}
问答题[说明]
本程序使用类来管理员工的通讯地址信息。已知程序的输出为:
输出记录:5
姓名:王丽华
街道地址:中华路15号
市:襄樊市
省;湖北省
邮政编码:430070
[C++程序]
#include < iostream, h >
#include < string, h >
class employee.
{ protected:
char name[10];
char street[ 20 ];
char city[10];
char{{U}} (1) {{/U}}[10];
char post[7];
int no;
{{U}} (2) {{/U}}:
{{U}}(3) {{/U}}(char [] ,char [] ,char [] ,char [] ,char [] ,int);
void changename ( char n [] ) { strcpy ( name, n); }
void changestreet( char s[] ) { strcpy(street,s) ;}
void changecity ( char c [] ) { strcpy ( city, c ); }
void changeprov( char p [] ) { strcpy(prov,p); }
void changeno(int nnm) {{{U}} (4) {{/U}};}
void display( );
};
employee::{{U}} (3) {{/U}}(char n[] ,char s[] ,char c[] ,char p1[] ,char p2[] ,int nam)
{ strcpy(name,n);
strcpy ( street, s);
strcpy ( city, c);
strcpy ( prov, p1 );
strcpy ( post, p2 );
no = nam; }
void employee:: display( ) { cont< <"输出记录: "< <no< <endl;
cout< < "姓名: "< < name < < endl;
coot < < "街道地址: "< < street < < endl;
cout < < "市: "< < city < < endl;
cout< <"省: "< <prov < <endl;
cout < <"邮政编码: "< < post < < endl;
}
void main( ) { employee cmp("王华" ,"中华路15号" ,"武汉市","湖北省","430070", 1 );
emp. changename( "五丽华" );
emp. changecity ( "襄樊市" );
emp. changeno(5);
{{U}}(5) {{/U}};
问答题[说明]给定一个十进制整数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用于记录每次除法所得的商值。[流程图]
问答题【程序2.1说明】 求所有满足如下条件的三位数:它除以11得的商等于它各位数字的平方和。例如 550,除以11商为50,50=52+52+02。 【程序2.1】 void main() int i, j,n,s; for(i=100;i<=999;i++) n=i; j=n/11; s=0; while( (1) ) (2) n/=10; if( (3) ) printf("%d/t",i); 【程序2.2说明】 本程序输入一字符串,将其中的大写字母改变成小写字母。 【程序2.2】 void main() int i=0; char s[120]; scanf("%s",s); while( (4) ) if( (5) ) s[i]=s[i]- 'A'+'a'; i++; printf("%s/n",s);
问答题【说明】
希赛教育集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应聘者的成绩从高分至低分的顺序进行排队录取。公司的录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。
程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都做了录取处理。
程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组rz[]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。
【程序】
#include<stdio.h>
#include<malloc.h>
#define M 20
#define PEMARK 5
typedef struct stu{
int no, total, z[2], sortm, zi;
struct stu *next;
}STU;
struct rzmode{
int Imt, count;
STU *next;
}rz[M];
STU *head=NULL, *over=NULL;
int all
FILE *fp;
char dataf[]="pp07.dat";
print(STU *p){
for(;p!=NULL;p=p->next)
printf("%d(%d)/t",p->no,p->total);
}
insert(STU **p, STU *u){
STU *v, *q;
for(q=*p;q!=NULL;v=q,{{U}} (1) {{/U}})
if(q->sortm<u->sortm)break;
if(q==*p){{U}} (2) {{/U}};
else{{U}} (3) {{/U}};
U->next=q;
}
main(){
int zn, i, no, total, z1, z2;
STU *p, *v, *q;
fp=fopen(dataf, "r");
if(fp==NULL){
printf("Can't open file %s./n",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+={{U}} (4) {{/U}};
}
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;
{{U}} (5) {{/U}};
}
fclose(fp);
for(;all ){
p=head; head=head->next;
if(rz[p->z[p->zi]].count<{{U}} (6) {{/U}}){
rz[p->z[p->zi]].count++;
insert(
all--;
continue;
}
if(p->zi>=1){
p->next=over;over=p;
continue;
}
p->sortm-=DEMARK;{{U}} (7) {{/U}};
insed(
}
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");
}
问答题试题七(15分,每空3分)阅读以下应用说明及VisualBasic部分程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[应用说明]设一个简单的“通讯录”存储在一个ACCESS类型的数据库表中,包括姓名、电话和email三个字段。下面的应用程序实现对“通讯录”数据库表中的记录进行增加、删除及修改处理,其运行界面如下:(1)数据控件(data1)与“通讯录”数据库表相连接,用户可通过“??”和“??”按钮指定表中的当前记录。(2)文本框Txt_name、Txt_phone和Txt_email分别与数据库表中的“姓名”、“电话”和“email”字段绑定,用于显示当前记录的内容。(3)应用程序启动时,“确定”按钮(Cmd_ok)和“取消”按钮(Cmd_cancel)不可操作,文本框中显示表中的第一条记录,这时文本框处于不可操作状态。(4)单击“增加”按钮(Cmd_add)或“修改”按钮(Cmd_modify)后,方可以编辑记录内容,同时“增加”、“删除”、“修改”和“退出”按钮变为不可操作状态。“增加”和“修改”操作需通过“确定”和“取消”按钮确认。(5)单击“删除”按钮(Cmd_del)后,弹出对话框,再单击“确定”按钮,当前记录被删除。[程序代码]PrivateSubenableop(isEnabledAsBoolean)Txt_name.Enabled=isEnabled:Txt_phone.Enabled=isEnabledTxt_email.Enabled=isEnabledCmd_ok.Enabled=isEnabled:Cmd_cancel.Enabled=isEnabledCmd_add.Enabled=NotisEnabled:Cmd_del.Enabled=NotisEnabledCmd_end.Enabled=NotisEnabled:Cmd_modify.Enabled=NotisEnabledEndSubPrivateSubForm_Load()Callenableop(False)Data1.RefreshIfData1.Recordset.RecordCount=0ThenCmd_del.Enabled=False:Cmd_modify.Enabled=(1)EndIfEndSubPrivateSubCmd_add_Click()'单击“增加”按钮的代码Callenableop((2))Data1.Recordset.AddNew'在数据库表中添加一个新记录Txt_name.(3)EndSubPrivateSubCmd_del_Click()'单击“删除”按钮的代码OnErrorGoToerror3ans=MsgBox("确定删除吗?",vbYesNo+vbInformation,"操作提示!")If(ans=vbYes)ThenData1.Recordset.(4)Data1.Recordset.MoveNextIfData1.Recordset.EOFThenData1.RefreshEndIfExitSuberror3:MsgBoxErr.Description,vbOKOnly,"错误提示!"EndSubPrivateSubCmd_ok_Click()'单击“确定”按钮的代码OnErrorGoToerror1Data1.Recordset.(5)Callenableop(False)ExitSuberror1:MsgBoxErr.Description,vbOKOnly,"错误提示!"Data1.UpdateControlsCallenableop(False)EndSub’“修改”和“取消”按钮的程序代码(略)
问答题【说明】 本程序根据输入的月份数,输出它是哪个季节。 【代码】 import java.io.*; public class season public static void main(String[] args) String strln=""; (1) in=new InputStreamReader(System.in); BufferedReader buffln=new BufferedReader(in); System.out.print("Please enter a month(1-12):"); try strln=buffln.readLine();//从命令行读入数据 catch( (2) ) System.out.println(e.toStdng()); int month= (3) (strln);//将字符串转换成整数型 int season=0; if(month<12 //计算季节的公式 (4) (season) case 1: System.out.println("the season is Springl"); break; case 2: System.out.println("the season is Summer!"); case 3: System.out.println("the season is Fall!"); case 4: System.out.println("the season is Winter!"); break; (5) ; System.out.println("this is not correct month!");
问答题[说明]某小型家电超市开发了下面的程序,用以实现商品提货信息的汇总和输出功能。程序的运行界面如下图所示:程序界面包含两个控件数组,分别是提货商品复选框控件数组Check1以及提货数量文本框控件数组Text1(相同下标的复选框和文本框相对应),提货清单的显示由List控件实现,按钮“打印清单”和“清除”分别名为Command1和Command2。[VisualBasic代码]’提货商品复选框的单击事件响应代码PrivateSubCheck1_Click(IndexAsInteger)IfCheck1(Index).Value=1Then(1).SetFocusEndSub’按钮“打印清单”的单击事件响应代码PrivateSubCommand1_Click()Dimi,n,priceAsInteger,sumAsLong,titleAsStringsum=0Fori=OTo4SelectCaseiCase0:title="电视机":price=3580Case1:title="微波炉":price=660Case2:title="电冰箱":price=1850Case3:title="DVD":price=2880Case4:title="空调":price=2500EndSelectIf(2)=1AndTextl(i).Text<>""Then(3)title&Text1(i).Text&"台"n=n+Val(Textl(i))sum=(4)EndIfNextiIfsum<>0Then(3)"共:"&n&"台,"&"合计金额:"&sum&"元。"EndIfEndSub’按钮“清除”的单击事件响应代码PrivateSubCommand2_Click()(5)EndSub
问答题【说明】 魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。 奇数阶魔方阵的生成方法如下: (1)第一个位置在第一行正中。 (2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。 (3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为: 8 1 6 3 5 7 4 9 2 了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。 【程序】 #include <stdio.h> #define MAX 15 void main() { int n; int m=1; int i,j; int a[MAX][MAX]; printf("Please input the rank of matrix:"); scanf("%d", i=0; {{U}} (1) {{/U}} while({{U}} (2) {{/U}}) a[i][j]=m; m++; i--; j++; if((m-1)%n==0 } if(j>(n-1)) //超出上界 {{U}} (4) {{/U}} if(j>(n-1)) {{U}} (5) {{/U}} } for(i=0;i<n;i++) //输出魔方阵 for(j=0;j<n;j++) { if(a[i][j]/10==0) printf("%d ",a[i][j]); //对程序无影响,只是使输出的数每一列对齐 else printf("%d ",a[i][j]); if(j==(n-1)) printf("/n"); } }
问答题阅读下列说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即GPA=Wg+Ag。
设一个学生共修了n门课程,则其加权平均成绩(Wg)定义如下:
其中,gradei、Ci分别表示该学生第i门课程的百分制成绩及学分。
学生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加m项学科竞赛):
其中,li和Si分别表示学生所参加学科竞赛的级别和成绩。
对于社会活动和学科竞赛都不参加的学生,其附加分按活动分为0计算。
下面的程序实现计算学生综合成绩的功能,每个学生的基本信息由抽象类Student描述,包括学号(stuNo)、姓名(name)、课程成绩学分(grades)和综合成绩(GPA)等,参加社会活动的学生由类ActStudent描述,其活动分由Apoints表示,参加学科竞赛的学生由类CmpStudent描述,其各项竞赛的成绩信息由awards表示。
【C++代码】
#include
#include
using namespace std;
const int n=5; /*课程数*/
const int m=2; /*竞赛项目数*/
class Student{
protected:
int stuNo;string name;
double GPA; /*综合成绩*/
int(*grades)[2]; /*各门课程成绩和学分*/
public:
Student(const int stuNo,const string&name,int grades[][2]){
this->stuNo=stuNo;this->name=name;this->grades=grades;
}
Virtual~Student(){}
int getstuNo(){/*实现略*/}
string getName(){/*实现略*/}
____(1)____;
double computeWg(){
int totalGrades=0,totalCredits=0:
for(int i=0;i<N;i++){
totalGrades+=grades[i][0]*grades[i][1];totalGredits+=grades[i][1];
}
return GPA=(double)totalGrades/totalCredits;
}
};
class ActStudent;public Student{
int Apoints;
public;
ActStudent(const int stuNo,const string&name,int gs[][2],int Apoints)
:____(2)____{
this->Apoints=Apoints:
}
double getGPA(){return GPA=____(3)____;}
};
class CmpStudent:public Student{
private:
int(*awards)[2];
public:
cmpstudent(const int stuNo,const string&name,int gs[][2],int awards[][2])
:____(4)____{ this->award=award;}
double getGPA()f
int Awards=0;
for(int i=0;i<M;i++){
Awards+=awards[i][0]*awards[i][1]:
}
Return GPA=____(5)____;
}
};
int main()
{ //以计算3个学生的综合成绩为例进行测试
int g1[][2]={{80,3},{90,2},{95,3},{85,4},{86,3}},
g2[][2]={{60,3},{60,2),{60,3},{60,4},{65,3}},
g3[][2]={{80,3},(90,2},{70,3},{65,4},{75,3}}; //课程成绩
int c3[][2]={{2,3},{3,3)}; //竞赛成绩
Student*student[3]={
new ActStudent(101,”John”,g1,3), //3为活动分
new ActStudent(102,”Zhang”,g2,0),
new ActStudent(103,”Li”,g3,c3),
};
//输出每个学生的综合成绩
for(int i=0;i<3;i++)
cout<<____(6)____<<end1;
delete*student;
return 0;
}