计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机软件水平考试
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
程序员(初级)
信息系统项目管理师(高级)
系统分析师(高级)
系统架构设计师(高级)
网络规划设计师(高级)
系统规划与管理师(高级)
软件评测师(中级)
软件设计师(中级)
网络工程师(中级)
多媒体应用设计师(中级)
嵌入式系统设计师(中级)
电子商务设计师(中级)
系统集成项目管理工程师(中级)
信息系统监理师(中级)
信息安全工程师(中级)
数据库系统工程师(中级)
信息系统管理工程师(中级)
软件过程能力评估师(中级)
计算机辅助设计师(中级)
计算机硬件工程师(中级)
信息技术支持工程师(中级)
程序员(初级)
网络管理员(初级)
信息处理技术员(初级)
电子商务技术员(初级)
信息系统运行管理员(初级)
网页制作员(初级)
多媒体应用制作技术员(初级)
PMP项目管理员资格认证
填空题[说明] 本程序的函数sum(int,i int total,int sigma,int rear,int d[],int n)用来从已知数组d的前n个元素中找出所有部分元素序列之和等于total的元素序列,约定数组d的元素都是正整数,且都小于等于total。 函数sum使用递归方法找出全部解答。参数i表示递归函数当前考虑元素d[i],参数sigma是调用前已选取的部分序列的元素和,参数rear是后面还未考虑的那部分元素的元素和。 函数对元素d[i]有两种可能的选择方案: (1)考虑元素d[i]被包含在新的部分元素序列中的可能性。如果在当前部分元素序列之后接上d[i],新序列的元素和不超过total,则函数将d[i]包含在当前部分元素序列中。如果新的部分元素序列的元素和等于total时,新的部分元素序列就是一个解答,函数将其输出;否则,若继续考虑后面的元素还有可能找到解答时,函数就递归去考虑后面的元素,寻找解答。最后,函数应恢复原来部分元素序列中不包含d[i]的状态。 (2)考虑元素d[i]不被包含在新的部分元素序列中的可能性。如果继续向d[i]之后考虑还是有希望能得到和为total的部分元素序列,函数将新序列不包含d[i也作为一种可能的选择,并递归去考虑后面的元素,寻找解答。 [程序1—7] #include<stdio.h> #define N 100 int a[N]; int fig[N]; sum(int i,im total,int sigma,int rear,int d[],int t) int j; /*考虑元素d[i]被包含在新的部分元素序列中的可能性*/ if(sigma+d[i]<=total) /*如果d[i]与当前序列的和不超过total*/ flg[i]=1; /*d[i]被考虑在当前部分元素序列中*/ if( (1) ==total) /*输出解*/ for(j=0;flg[j]==0;j++); printf("%4d=%d",total,d[j]); for(j++;j<=i;j++) if(flg[j]) printf("+%d",d[j]); printf("\n"); else /*继续考虑后面的元素有可能找到解答时*/ if(i<n-1&&rear+sigma>=total) sum(i+1,total, (2) ,rear-d[i],d,n); (3) ; /*考虑元素d[i]不被包含在新的部分元素序列中的可能性*/ if(i<n-1&&rear-d[i]+tigma>=total) sum(i+1,total, (4) ,rear-d[i],d,n); main() int ij,n,total,s,d; printf("输入total!/n");scanf("%d",&total); printf("输入n!/n");scanf("%d",&n); for(s=i=0;i<n;= printf("输入第%d个元素>0且<=%d)\n",i+1,total; scanf("%d",&d); if(d<1 || d>total) printf("出错,请重新输入!\n"); continue; S+=a[i++]=d; sum(0,total,0, (5) ,a,n); printf("\n\n");
进入题库练习
填空题阅读以下说明和C函数,填充函数中的空缺。 [说明] 函数Insert _key(*root,key)的功能是将键值key插入到*root指向根结点的二叉查找树中(二叉查找树为空时*root为空指针)。若给定的二叉查找树中已经包含键值为key的结点,则不进行插入操作并返回0;否则申请新结点、存入key的值并将新结点加入树中,返回1。 提示: 二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树: 若它的左子树非空,则其左子树上所有结点的键值均小于根结点的键值; 若它的右子树非空,则其右子树上所有结点的键值均大于根结点的键值; 左、右子树本身就是二叉查找树。 设二叉查找树采用二叉链表存储结构,链表结点类型定义如下: typedef struct BiTrrode{ int key _value; /*结点的键值,为非负整数*/ struct BiTnode *left,*right; /*结点的左、右子树指针*/ }BiTnode, *BSTree; [C函数] int Insert _key(BsTree *root,int key) { BiTnode *father=NULL,*p=*root,*s; while(______&&key!=p->key_value){/*查找键值为Key的结点*/ father=p; if(key<p->key_value)p=______; /*进入左子树*/ else p=______; /*进入右子树*/ } if (p) return 0; /*二叉查找树中已存在键值为key的结点,无须再插入*/ s=(BiTraode*)malloc(______);/*根据结点类型生成新结点*/ if (!s) return-1; s->key_value=key; s->left=NULL; s->right=NULL; if(!father) ______; /*新结点作为二叉查找树的根结点*/ else /*新结点插入二叉查找树的适当位置*/ if(key<father->key_value)father->left=s; else father->right=s; return 1: }
进入题库练习
填空题阅读以下说明和C程序,填充程序中的空缺。 [说明] 埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。 下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](i>0)的下标i对应自然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve[i]设置为0。 [C程序] #include <stdio.h> #define N 10000 int main() char sieve[N+1]=(0); int i=0,k; /*初始时2~N都放入sieve数组*/ for(i=2;______;i++) sieve[i]=1; for(k=2;;) /*找出剩下的数中最小者并用K表示*/ for(;k<N+1&&sieve[k]==0;______); if(______) break; print("%d/t",k); /*输出素数*/ /*从sieve中去掉k及其倍数*/ for(i=k;i<N+1;i=______) ______; return 0; /*end of main*/
进入题库练习
填空题阅读以下说明和C语言程序,填补空缺。 [说明] 某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行),现将某用户某月的通话数据存入一个文本文件“dial.txt”中,其数据格式如下: 拨入或拨出标记通话开始时间通话结束时间对方号码 注1:数据字段以一个空格作为分隔符。 注2:拨入和拨出标记均为小写字母。拨入标记为“i”,表示其他用户呼叫本机,本机用户不需付费;拨出标记为“o”,表示本机呼叫其他用户,此时本机用户需要付费。 注3:通话开始和结束时间的格式均为:HH:MM:SS。其中HH表示小时,取值00~23;MM表示分钟,取值00~59;SS表示秒,取值00~59。从通话开始到结束这段时间称为通话时间,假定每次通话时间以秒为单位,最短为1秒,最长不超过24小时。 注4:跨月的通话记录计入下个月的通话数据文件。 例如“o 23:01:12 00:12:15…”表示本次通话是本机呼叫其他用户,时间从23时01分12秒至次日的0时12分15秒,通话时间为71分03秒。 下面程序的功能是计算并输出该用户本月电话费(单位:元)。 通话计费规则为: (1)月通话费按每次通话费累加; (2)每次的通话费按通话时间每分钟0.08元计算,不足1分钟时按1分钟计费。 对于每次的拨出通话,程序中先分别计算出通话开始和结束时间相对于当日0点0分0秒的时间长度(以秒为单位),然后算出本次通话时间和通话费。 例如,若输入文件dial.txt的数据如下所示,则输出fee=7.44。 o 14:05:23 14:11:25 82346789 i 15:10:00 16:01:15 13890000000 o 10:53:12 11:07:05 63000123 o 23:01:12 00:12:15 13356789001 [C语句程序代码] #include<stdio.h> FILE *fin; int main( ) { char str[80]; int h1, h2, m1, m2, s1, s2; long t_start, t_end, interval; int c; double fee=0; fin=fopen("dial. txt", "r")j; if (!fin) return -1; while(!feof(fin)) { if(!fgets(str, 80, fin)) break; if({{U}} (1) {{/U}}) continue; h1=(str[2]-48)*10+str[3]-48; m1=(str[5]-48)*10+str[6]-48; s1=(str[8]-48)*10+str[9]-48; h2=(str[11]-48)*10+str[12]-48; m2=(str[14]-48)*10+str[15]-48; s2=(str[17]-48)*10+str[18]-48; t_start=h1*60*60+m1*60+s1; /*通话开始时间*/ t_end=h2*60*60+m2*60+s2; /*通话结束时间*/ if({{U}} (2) {{/U}}) /*若通话开始和结束时间跨日*/ interval={{U}} (3) {{/U}} -t_start+t_end; else interval=t_end-t_start; c={{U}} (4) {{/U}}; /*计算完整分钟数表示的通话时间*/ if(interval%60) {{U}} (5) {{/U}}; fee+=c*0.08; } fclose(fin); printf("fee=%.21f/n", fee); return 0; }
进入题库练习
填空题 阅读下列说明和C++代码,回答问题。 [说明] 已知下列程序运行时的输出应为: 1:1 1:1 1:1 [C++程序] 01 #include <iostream> 02 using namespace std; 03 class stick{ 04 protect; 05 {{U}} (1) {{/U}}{}; 06 Stock(int n, int pr=1) { 07 shares=n; share_val=pr; 08 }; 09 void~stock( ) {}; 10 public: 11 //成员函数 12 void output( ){ 13 {{U}} (2) {{/U}}<<shares<<":"<<share val<<endl; 14 } 15 private: 16 //成员变量 17 int shares; 18 int share_val; 19 }; 20 21 void main( ){ 22 Stock a(1); a. output( ); 23 Stock b; b. output( ); 24 Stock C=Stock( ); c.output( ); 25 } 请补齐上述代码中的空缺(1)和(2)。
进入题库练习
填空题[说明] 假设一个算术表达式中可以包含以下三种括号:“(”和“)”、“[”和“]”、“”和“”,并且这三种括号可以按照任意的次序嵌套使用。 下面仅考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式“[a.(b.5)]*c[]”中的括号是完全匹配的,而表达式“[a-(b-5]))*c”中的括号不是完全匹配的,因为“(”与“]”不能匹配,而且多了一个“)”,即缺少一个与“)”相匹配的“(”。 函数ifMatched(char expr[])的功能是用栈来判断表达式中的括号是否匹配,表达式以字符串的形式存储在字符数组expr中。若表达式中的括号完全匹配,则该函数的返回值为Matched,否则返回值为 该函数的处理思路如下: (1)设置一个初始为空的栈,从左至右扫描表达式。 (2)若遇上左括号,则令其入栈;若遇上右括号,则需要与栈顶的左括号进行匹配。 (3)若所遇到的右括号能与栈顶的左括号配对,则令栈顶的左括号出栈,然后继续匹配过程;否则返回Mismatched,结束判断过程。 (4)若表达式扫描结束,同时栈变为空,则说明表达式中的括号能完全匹配,返回Mached。 函数ifMached中用到了两种用户自定义数据类型BOOL和STACK,其中,BOOL类型的定义如下: STACK(即栈类型)的定义省略,栈的基本操作的函数原型说明如下: ● void InitStack(STACK*S):初始化一个空栈。 ● void Push(STACK*S,char e):将一个字符压栈,栈中元素数目增1。 ● void Pop(STACK*S):栈顶元素出栈,栈中元素数目减1。 ● char Top(STACK S):返回非空栈S的栈顶元素值,栈中元素数目不变。 ● int IsEmpty(STACK S):若S是空栈,则返回1,否则返回0。 [程序1—6] BOOL ifMatched(char expr[]) char*cptr; /*cptr指向表达式中的字符*/ STACK S; char e; InitStack(*cptr!='/0'; (1) if(*cptr=='('||*cptr=='['||*cptr=='') (2) ; else if(*cptr==')'||*cptr=='') if(IsEmpty(S)) return Mismatched; e= (3) ; /*取栈顶的左括号*/ if(*cptr==')/&&e !='(')return Mismatched; if(*cptr==']'&&e!='[')return Mismatched; if(*cptr==')'&&e!'')return Mismatched; (4) ; if( (5) )return Matched; return Mismatched;
进入题库练习
填空题阅读以下说明和C函数,将应填入______处的语句或语句成分写在对应栏内。 [说明1] 函数deldigit(char*s)的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成~个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再复制给s。 [C函数] void deldigit(char*s) char*t=(char*)malloc(______); /*申请串空间*/ int i,k=0; if(!t) return; for(i=0;i<strlen(s);i++= if(!(*(s+i)>='0'&&*(s+i)<='9')) t[k++]=______; ______='/0' /*设置串结束标志*/ strcpy(s,t); free(t); [说明2] 函数reverse(char*s,int len)的功能是用递归方式逆置长度为len的字符串s。例如,若串s的内容为“abcd”,则逆置后其内容变为“dcba”。 [C函数] void reverse(char*s,int len) char ch; if(______) ch=*s; *s=*(s+len-1); *(s+len-1)=ch; reverse(______);
进入题库练习
填空题[说明]下面流程图的功能是:在已知字符串A中查找特定字符串B,如果存在,则输出B串首字符在A串中的位置,否则输出-1。设串A由n个字符A(0)、A(1)、…、A(n-1)组成,串B由m个字符B(0)、B(1)、…、B(m-1)组成,其中n≥m>0。在串A中查找串B的基本算法如下:从串A的首字符A(0)开始,取子串A(0)A(1)…i(m-1)与串B比较;若不同,则再取子串A(1)A(2)…A(m)与串B比较,以此类推。例如,字符串“CABBRFFD”中存在字符子串“BRF”(输出3),不存在字符子串“RFD”(输出-1)。在流程图中,i用于访问串A中的字符(i=0,1,…,n-1),j用于访问串B中的字符(j=0,1,…,m-1)。在比较A(i)A(i+1)…A(i+m-1)与B(0)B(1)…B(m-1)时,需要对A(i)与B(0)、A(i+1)与B(1)、…、A(i+j)与B(j)、…逐对字符进行比较。若发现不同,则需要取下一个子串进行比较,以此类推。[流程图]本题流程图如图8-30所示。
进入题库练习
填空题[说明]函数sort(NODE*head)的功能是:用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻节点中的元素,若较小的元素在后面,则交换这两个节点中的元素值。其中,head指向链表的头节点。排序时,为了避免每趟都扫描到链表的尾节点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个节点。例如,对于图8-25(a)所示的链表进行一趟冒泡排序后,得到图8-25(b)所示的链表。链表的节点类型定义如下:typedefStruetNodeintdata;structNode*next;NODE;[C语言函数]voidsort(NODE*head)NODE*ptr,*preptr,*endptr;inttempdata;ptr=head->next;while(1)/*查找表尾节点*/ptr=ptr->next;endptr=ptr;/*令endptr指向表尾节点*/ptr=(2);while(ptr!=endptr)while((3))if(ptr->data>ptr->next->data)tempdata=ptr->data;/*交换相邻节点的数据*/ptr->data=ptr->next->data;ptr->next->data=tempdata;preptr=(4);ptr=ptr->next;endptr=(5);ptr=head->next;
进入题库练习
填空题阅读以下说明和C++代码,填充代码中的空缺。[说明]下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。[C++代码]#include<iostream>#include<cmath>usingnamespacestd;classGPointprivate:doublex,y;public:voidsetX(doublex)this->x=x;voidsetY(doubleY)this->y=Y;doublegetX()returnthis->x;doublegetY()returnthis->y;;classComputeDistancepublic:doubledistance(GPointa,GPointb)returnsqrt((a.getX()-b.getX())*(a.getX()-b.getx())+(a.getY()-b.getY())*(a.getY()-b.getY()));;intmain()inti,j,numberofP0ints=0;cout<<"输入点的个数:";cin>>numberOfPOints;______points=newGPoint[numberOfPoints];//创建保存点坐标的数组memset(points,0,sizeof(points));cout<<"输入"<<numberOfPoints<<"个点的坐标:";for(i=0;i<numberOfPoints;i++)doubletmpx,tmpy;Cin>>tmpx>>tmpy;points[i].setX(tmpx);points[i].setY(tmpy);______computeDistance=newComputeDistance();intp1=0,p2=1;//p1和p2用于表示距离最近的点对在数组中的下标doubleshortestDistance=computeDistance->distance(points[p1],points[p2]);//计算每一对点之间的距离for(i=0;i<numberOfPoints;i++)for(j=i+1;j<______;j++)doubletmpDistance=computeDistance->______;if(______)p1=i;p2=j;shortestDiStance=tmpDistance;cout<<"距离最近的点对是:(";cout"points[p1].getX()<<",”<<points[p1].getY()<<")和(";cout<<points[p2].getX()<<","<<points[p2].getY()<<")"<<endl;deletecomputeDiStance;return0;
进入题库练习
填空题{{B}}试题五{{/B}}阅读以下说明和C语言函数,回答问题。[说明]已知包含头节点(不存储元素)的单链表的元素已经按照非递减方式排序,函数compress(NODE*head)的功能是去掉其中重复的元素,使得链表中的元素互不相同。处理过程中,当元素重复出现时,保留元素第一次出现所在的节点。图8-29(a)、(b)是经函数compress()处理前后的链表结构示例图。链表的节点类型定义如下:typedefstructNode{intdata;structNode*next;}NODE;[C语言函数]voidcompress(NODE*head){NODE*ptr,*q;ptr={{U}}(1){{/U}};/*取得第一个元素节点的指针*/while({{U}}(2){{/U}}while(qfree(q);q=ptr->next;}{{U}}(5){{/U}}=ptr->next;}/*endofwhile*/}/*endofcompress*/
进入题库练习
填空题阅读以下说明和C函数,填充函数中的空缺。 [说明] 函数Insert _key(*root,key)的功能是将键值key插入到*root指向根结点的二叉查找树中(二叉查找树为空时*root为空指针)。若给定的二叉查找树中已经包含键值为key的结点,则不进行插入操作并返回0;否则申请新结点、存入key的值并将新结点DHA树中,返回1。 提示: 二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树: 若它的左子树非空,则其左子树上所有结点的键值均小于根结点的键值; 若它的右子树非空,则其右子树上所有结点的键值均大于根结点的键值; 左、右子树本身就是二叉查找树。 设二叉查找树采用二叉链表存储结构,链表结点类型定义如下: typedef struct BiTnode int key _value; /*结点的键值,为非负整数*/ struct BiTnode *left,*right; /*结点的左、右子树指针*/ BiTnode,*BSTree; [C函数] int Insert _key(BSTree *root,int key) BiTnode *father=NULL,*p=*root,*s; while(______&&key!=p->key _value)(/*查找键值为key的结点*/ father=p; if(key<p->key _value)p=______; /*进入左子树*/ else p=______; /进入右子树*/ if(p) return 0; /*二叉查找树中已存在键值为key的结点,无需再插入*/ s=(BiTnode *)malloc(______);/*根据结点类型生成新结点*/ if(!s)rettlrn -1; s->key _value=key; s->left=NULL; s->right=NULL; if(!father) ______; /*新结点作为二叉查找树的根结点*/ else /*新结点插入二叉查找树的适当位置*/ if(key<father->key _value)father->left=s; else father->right=s; return 1;
进入题库练习
填空题{{B}}试题二{{/B}}阅读以下说明和C程序,回答问题。 [说明] 下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。 ①在第一行的正中插入1。 ②新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。 ③若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。 例如,3阶魔方阵如下所示: 8 1 6 3 5 7 4 9 2 [C程序] #include<stdio.h> #include<stdlib.h> #define SIZE 50 main( ) { int row, col, n, value; int a[SIZE+1][SIZE+1]; /*不使用下标为0的元素*/ printf("请输入要输出魔方阵的阶数n(奇数, <%d):n=", SIZE); scanf("%d", if(!(n%2) || n<1 || {{U}}(1) {{/U}}){ printf("输入数据有误!/n"); exit(0); } row=1; col=(n+1)/2; value=1; while(value<={{U}} (2) {{/U}}) { a[row][col]=value; /*计算下一位置*/ if(value%n!=0){ row--; {{U}}(3) {{/U}}; if(row<1)row=n; if(col>n){{U}} (4) {{/U}}; } else row++; value={{U}} (5) {{/U}}; } printf("/n%d阶魔方阵如下所示:/n/n", n); for(row=1; row<=n; row++){ for(col=1; col<=n; col++) printf("%5d", a[row][col]); printf("/n"); } }
进入题库练习
填空题【说明】 以下程序的功能是计算三角形、矩形和正方形的周长并输出。 程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类 Figure提供了一个纯虚拟函数getGirth(),作为计算上述3种图形周长的通用接口。 【C++程序】 # include < iostream. h > # include < math. h > class Figure { public: virtual double getGirth() =0; //纯虚拟函数 }; class Rectangle: 1 { protected: double height; double width; public: Rectangle(){}; Rectangle( double height, double width) { this→height = height; this→width = width; } double getGirth ( ) { return 2 ; } }; class Square: 3 { public: Square( double width) { 4 ; } }; class Triangle: 5 { double la; double lb; double lc; public: Triangle( double la,double lb,double lc){ this→la = la; this→Lb = lb; this→lc = lc; } double getGirth ( ) { } return la + lb + lc; } }; void main( ) { Figure * figures = { new Triangle ( 2,3,3 ),new Rectangle (5,8) , new Square 5 }; for (inti =0;i<3;i++){ cout < < "figures [" < < i < <" ] girth =" < < ( figures [ i ] ) →getGirth ( ) < < end1; } }
进入题库练习
填空题{{B}}试题六{{/B}}阅读以下说明和流程图,填补流程图中的空缺。[说明]下面流程图的功能是:在已知字符串A中查找特定字符串B,如果存在,则输出B串首字符在A串中的位置,否则输出-1。设串A由n个字符A(0)、A(1)、…、A(n-1)组成,串B由m个字符B(0)、B(1)、…、B(m-1)组成,其中n≥m>0。在串A中查找串B的基本算法如下:从串A的首字符A(0)开始,取子串A(0)A(1)…i(m-1)与串B比较;若不同,则再取子串A(1)A(2)…A(m)与串B比较,以此类推。例如,字符串“CABBRFFD”中存在字符子串“BRF”(输出3),不存在字符子串“RFD”(输出-1)。在流程图中,i用于访问串A中的字符(i=0,1,…,n-1),j用于访问串B中的字符(j=0,1,…,m-1)。在比较A(i)A(i+1)…A(i+m-1)与B(0)B(1)…B(m-1)时,需要对A(i)与B(0)、A(i+1)与B(1)、…、A(i+j)与B(j)、…逐对字符进行比较。若发现不同,则需要取下一个子串进行比较,以此类推。[流程图]本题流程图如图8-30所示。
进入题库练习
填空题[说明] 对于具有n个元素的整型数组a,需要进行的处理是删除a中所有的值为0的数组元素,并将a中所有的非0元素按照原顺序连续地存储在数组空间的前端。下面分别用函数CompactArr_v1和CompactArr_v2来实现上述处理要求,函数的返回值为非零元素的个数。 函数CompactArr_v1(int a[],intn)的处理思路是:先申请一个与数组a的大小相同的动态数组空间,然后顺序扫描数组a的每一个元素,将遇到的非0元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组a中。 函数CompactArr_v2(int a[],int n)的处理思路是:利用下标i(初值为0)顺序扫描数组a的每一个元素,下标k(初值为0)表示数组a中连续存储的非0元素的下标。扫描时,每遇到一个数组元素,i就增1,而遇到非0元素并将其前移后k才增1。 [程序1-4] int CompactArr_v1(int a[],int n) int i,k; int*temp=(int*)malloc(n* (1) if(!temp) return-1; for(i=0,k=0;i<n;i++) if(a[i]!=0) (2) =a[i]; for(i=0; (3) ;i++) a[i]=temp[i]; return k; [程序1-5] int CompactArr v2(int a[],int n) int i,k; for(i=0,k=0;i<n;i++) if(a[i]!=0) (4) =a[i]; return k;
进入题库练习
填空题阅读以下说明和C++代码,将应填入______处的语句或语句成分写在对应栏内。 [说明] 某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。 [C++代码] #include <iostream> #include <fstream> #include <string> using namespace std; class Student private: string sNO; //学号 int credit;//分数 public: Student(string a,int b)sNO=a;credit=b; Student() int getCredit(); void out(); ; ______::getCredit() return credit; ______::out() Cout<<"SNO:"<<sNO<<",Credit="<<credit<<endl; class SortStudent public: void sort(Student *s,int n); SortStudent() ; void SortStudent::sort(Student *s,int n) for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) if(s[i].______<s[j].______> Student temp=s[i];s[i]=s[j];s[j]=temp; int main(int argc,char* argv[]) const int number=100; //学生总数 ifstream students; students.open("students.txt"); if(!students.is open()) throw 0; Student *testStudent=______[number]; int k=0; string s; while(getline(students,s,'/n'))//每次读取一个学生的学号和成绩 Student student(s.substr(0,s.find(',')),atoi(s.substr(s.find(',')+1).c_str())); testStudent[k++]=student; Students.closeo; ______; ss.sort(testStudent,k); cout<<"top 30%:"+endl; for(k=0;k<number*0.3;k++) testStudent[k].out(); delete[]testStudent; return 0;
进入题库练习
填空题阅读以下说明和C函数,将应填入______处的语句或语句成分写在对应栏内。[说明]已知单链表L含有头节点,且节点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删节点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。例如,某单链表如图1所示。若令minK为20,maxK为50,则删除后的链表如图2所示。链表节点类型定义如下:typedefStructNodeintdata;structNode*next;Node,*LinkList;[C函数]intDeleteList(LinkListL,intminx,intmaxK)/*在含头节点的单链表L中删除大于minx且小于maxK的元素*/______*q=L,*p=L->next;/*p指向第一个元素节点*/intdeiTag=0;while(p)if(p->data<=minK)iq=p;p=______;elseif(p->data<maxK=/*找到删除满足条件的节点*/q->next=______free(p);p=______;delTag=1;elsebreak;if(______)return-1;return0;
进入题库练习
填空题阅读以下说明和Java程序,填充程序中的空缺,将解答填入对应栏内。[说明]下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。[Java代码]importJava.util.Scanner;classGPoint{privatedoubiex,y;publicvoidSetX(aoublex){this.x=x;}publicvoidsetY(doubley){this.y=y;}publicdoublegetX(){returnthis.x;}publicdoublegetY(){returnthis.y;}classFindNearestPoints{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.print("输入点的个数:");intnumberOfPoints=input.nextint();________points=newGPoint[numberOfPoints];//创建保存点坐标的数组System.out.print("请输入"+numberOfPoints+"个点的坐标");for(inti=0;i<;i++){points[i]=________;points[i].setX(input.nextDouble());points[i].setY(input.nextDouble());}FindNearestPointsfnp=newFindNearestPoints();intp1=0,p2=1;//p1和p2用于表示距离最近的点对在数组中的下标doubleshortestDistance=fnp.getDistance(points[p1],points[p2]);//计算每一对点之间的距离for(inti=0;i<;i++){for(intj=1+1;j<________;j++){doubletmpDistance=fnp.________;//计算两点间的距离if(________){p1=i;p2=j;shortestDistance=tmpDistance;}}}System.out.println("距离最近的点对是("+points[p1].getX()+","+points[p1].getY()+")和("+points[p2].getX()+","+points[p2].getY()+")");}publicdoublegetDistance(GPointpt1,GPointpt2){retumMath.sqrt((pt2.getX()-pt1.getX())*(pt2.getX()-ptllgetX())+(pt2.getY()-pt1.getY())*(pt2.getY()-pt1.getY());}}
进入题库练习
填空题【函数1.2说明】 函数merge(int a[],int n,int b[],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。 【函数1.2】 void merge(int a[ ],int n,int b[ ],int m,int *c) { int i,j; for(i=j:0;i<n && j<m;) *c++ =a[i] <b[j]? a[i++]:b[j++]; while(i<n) 1 ; while(j<m) 2 ; }
进入题库练习