题目详情
当前位置:首页 > 职业培训考试
题目详情:
发布时间:2024-05-22 03:02:58

[简答题]阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。 [说明1] 函数isPrime(int n)的功能是判断n是否为素数。若是,则返回1,否则返回0。素数是只能被1和自己整除的正整数。例如,最小的5个素数是2,3,5,7,11。 [C函数] int isPrime(int n) { int k, t; if (n==2) return 1; if(n<2 || ______)return 0; /*小于2的数或大于2的偶数不是素数// t=(int)Sqrt(n)+1; for(k=3; k<t; k+=2) if(______) return 0; return 1; } [说明2] 函数int minOne(int art[],int k)的功能是用递归方法求指定数组中前k个元素中的最小者,并作为函数值返回。 [C函数]int minOne(int arr[],int k){int t;assert(k>0);if(k==1)return ______;t=minOne(arr+1,______);if(arr[0]<t)return amr[0];return ______;}

更多"[简答题]阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对"的相关试题:

[简答题]阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。 [说明] 函数removeDuplicates(chai *str)的功能是移除给定字符串中的重复字符,使每种字符仅保留一个,其方法是:对原字符串逐个字符进行扫描,遇到重复出现的字符时,设置标志,并将其后的非重复字符前移。例如,若str指向的字符串为"aaabbbbscbsss",则函数运行后该字符串为"absc"。 [C代码] voidremoveDuplicates(char *str) { inti,len=strlen(str); /*求字符串长度*/ if(______)return; /*空串或长度为1的字符串无需处理*/ for(i=0;i<len;i++){ int flag=0; /*字符是否重复标志*/ int m; for(m=______; m<len;m++){ if(Str[i]==str[m]){ ______; break; } } if (flag) { int n,idx=m; /*将字符串第idx字符之后、与str[i]不同的字符向前移*/ for(n=idx+1; n<len; n++) if(Str[n]!=str[i]){ str[idx]=str[n];______; } str[______]='\0'; /*设置字符串结束标志*/ } } }
[简答题]阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明1】递归函数is_elem(char ch, char *set)的功能是判断ch中的字符是否在set表示的字符集合中,若是,则返回1,否则返回0。【C代码1】 int is_elem (char ch ,char*set){ If(*set==‘\0’) return 0; else If((1)) return 1; else return is_elem((2))} 【说明2】函数char*combine(char* setA,char *setB)的功能是将字符集合A(元素互异,由setA表示)和字符集合B(元素互异,由setB表示)合并,并返回合并后的字符集合。 【C代码2】 char*combine(char *setA, char*setB){ int i,lenA, lenB, lenC; lenA=strlen(setA); lenB=strlen(setB); char*setC=(char*)malloc(lenA+lenB+1);if(!setC)return NULL;strncpy(setC,setA,lenA); //将setA的前lenA个字符复制后存入setClenC = (3);for(i=0;i<lenB;i++) if((4)) //调用is_elem判断字符是否在setA中 setC[lenC++]=setB[i]; (5) =‘/0’; //设置合并后字符集的结尾标识return setC;}
[简答题]阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】某文本文件中保存了若干个日期数据,格式如下(年/月/日):2005/12/12013/2/291997/10/111980/5/15....但是其中有些日期是非法的,例如2013/2/29是非法日期,闰年(即能被400整除或者能被4整除而不能被100整除的年份)的2月份有29天,2013年不是闰年。现要求将其中自1985/1/1开始、至2010/12/31结束的合法日期挑选出来并输出。下面的C代码用于完成上述要求。【C代码】 #include <stdio.h>typedef struct{int year, month, day;/* 年,月,日*/}DATE; int isLeap Year(int y) /*判断y表示的年份是否为闰年,是则返回1,否则返回0*/{return((y%4==0 && y%100!=0)Il(y%400==0));} int isLegal(DATE date) /*判断date表示的日期是否合法,是则返回1,否则返回0*/{int y=date.year,m=date.month,d=date.day;if(y<1985 II y>2010 II m<1 II m>12 II d<l II d>31) return 0;if((m==4 ll m==6 ll m==9 II m==11)&&(1) ) return 0;If(m==2){if(isLeap Year(y) && (2)) return 1;elseif(d28) return 0;}return 1;} Int Lteq(DATE d1,DATE d2)/*比较日期d1和d2,若d1在d2之前或相同则返回1,否则返回0*/{Long t1,t2;t1=d1.year*10000+d1.month*100+d1.day;t2=d2.year*10000+d2.month*100+d2.day;if((3)) return 1;else return 0;} int main(){DATE date,start={1985,1,1},end={2010,12,30};FILE*fp; fp=fopen(“d.txt”,”r”);If((4))return-1; while(!feof(fp)){if(fscanf(fp,”%d%d%d”,date.year,date.month,date.day)!=3)break;if((5)) /*判断是否为非法日期*/continue;if((6)) /*调用Lteq判断是否在起至日期之间*/printf(“%d%d%d\n”,date.year,date.month,date.day);}fclose(fp);Return 0;}
[简答题]第二题 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位置,依此类推,第i趟从n-i+1个元素中选出最小元素,将其交换至第i个位置,通过n-1趟选择最终得到非递减排序的有序序列。 问题:2.1 【代码】 #include <stdio.h> void selectSort(int data[ ],int n) //对 data[0]~data[n-1]中的n个整数按非递减有序的方式进行排列 { int i,j,k; int temp; for(i=0;i<n-1;i++){ for(k=i,j=i+1;(1);(2)) //k表示data[i]~data[n-1]中最小元素的下标 if(data[j]<data[k]) (3) if(k!=i) { //将本趟找出的最小元素与data[i]交换 temp=data[i]; (4) ;data[k]=temp; } } } int main() { int arr[ ]={79,85,93,65,44,70,100,57}; int i,m; m=sizeof(arr)/sizeof(int); //计算数组元素的个数,用m表示 (5); //调用selectSort对数组arr进行非递减排序 for((6);i <m;i++) //按非递减顺序输出所有的数组元素 printf(“%d\t”,arr[i]); printf(“\n”); return 0; }
[简答题]阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】下面的程序利用快速排序中划分的思想在整数序列中找出第 k 小的元素(即 将元素从小到大排序后,取第 k 个元素)。对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数 作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准 值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和 右子序列分别进行快速排序,最终得到非递减的有序序列。例如,整数序列“19, 12, 30, 11,7,53, 78, 25"的第 3 小元素为 12。整数序列“19, 12,7,30, 11, 11,7,53. 78, 25, 7"的第 3 小元素为 7。函数 partition(int a[], int low,int high)以 a[low]的值为基准,对 a[low]、 a[low+l]、…、a[high]进行划分,最后将该基准值放入 a[i] (low≤i≤high),并 使得 a[low]、a[low+l]、,..、A[i-1]都小于或等于 a[i],而 a[i+l]、a[i+2]、..、 a[high]都大于 a[i]。函 教 findkthElem(int a[],int startIdx,int endIdx,inr k) 在 a[startIdx] 、 a[startIdx+1]、...、a[endIdx]中找出第 k 小的元素。【代码】#include <stdio.h>#include <stdlib.h> Int partition(int a [],int low, int high){//对 a[low..high]进行划分,使得 a[low..i]中的元素都不大于 a[i+1..high]中的 元素。int pivot=a[low]; //pivot 表示基准元素 Int i=low,j=high;while(( 1) ){While(i<j&&a[ j]>pivot)--j; a[i]=a[ j] While(i<j&&a[i]>pivot)++i; a[ j]=a[i]}(2) ; //基准元素定位 return i;}Int findkthElem(int a[],int startIdx,int endIdx, int k){//整数序列存储在 a[startldx..endldx]中,查找并返回第 k 小的元素。if (startldx<0 ||endIdx<0 || startIdx>endIdx || k<1 ||k-l>endIdx||k-1<startIdx)Return-1; //参数错误 if(startIdx<endldx){int loc=partition(a, startIdx, endldx); ∥进行划分,确定基准元素的位置 if (loc==k-1) ∥找到第 k 小的元素return (3) ;if(k-l <loc)//继续在基准元素之前查找 return findkthElem(a, (4) ,k);else //继续在基准元素之后查找 return findkthElem(a, (5) ,k);}return a[startIdx]; }int main(){int i, k; int n;int a[] = {19, 12, 7, 30, 11, 11, 7, 53, 78, 25, 7}; n= sizeof(a)/sizeof(int) //计算序列中的元素个数 for (k=1;k<n+1;k++){for(i=0;i<n;i++){ printf(“%d/t”,a[i]);}printf(“\n”);printf(“elem %d=%d\n,k,findkthElem(a,0,n-1,k));//输出序列中第 k 小的元素}return 0;}
[简答题]试题五(共 15 分)阅读以下说明和 Java 程序,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下 Jave 代码实现一个简单客户关系管理系统(CrM) 中通过工厂 (Customerrfactory )对象来创建客户(Customer) 对象的功能。客户分为创建成功的客户 (realCustomer) 和空客户(NullCustomer) 。空客户对象是当不满足特定条件时创建或获取的对象。类间关系如图 5-1 所示。【Java 代码】Abstract class Customer﹛Protected String name;()boolean isNil()()String getName();﹜ Class realCustomer ()Customer﹛Public realCustomer(String name )﹛ return false; ﹜﹜ Class NullCustomer()Customer﹛Public String getName()﹛ return ″Not Available in Customer Database″; ﹜Public boolean isNil()﹛ return true; ﹜﹜ class Customerfactory {public String[] names = {"rob","Joe","Julie"};public Customer getCustomer(String name) {for (int i = 0; i < names.length;i++) {if (names[i].())﹛return new realCusωmer(name);﹜﹜return ()﹜﹜ Public class CrM﹛Public viod get Customer()﹛Customerfactory()Customer customer1-cf.getCustomer(″rob″);Customer customer2=cf.getCustomer(″rob″);Customer customer3= cf.getCustomer(″Julie″);Customer customer4= cf.getCustomer(″Laura″);System.out.println(″customer1.getName());System.out.println(″customer2getName());System.out.println(″customer3.getName());System.out.println(″customer4.getName());﹜ Public static viod main (String[]arge)﹛CrM crm =new CrM();Crm,getCustomer();﹜﹜/*程序输出为:CustomerrobNot Available in Customer DatabaseJulieNot Available in Customer Datable*/int main()﹛CrM*crs=newCrM();Crs->getCustomer();Crs->getCustomer();Delete crs;return();﹜/*程序输出为:CustomerrobNot Available ini Customer DatabaseJulieNot Available in Customer Database
[简答题]阅读以下说明和C代码,填充代码中的空缺,将解答填入答题纸的对应栏内。 [说明1] 下面的函数countChar(char*text)统计字符串text中不同的英文字母数和每个英文字母出现的次数(英文字母不区分大小写)。 [C代码1] int countChar(char *text) { int i,sum=0; /*sum保存不同的英文字母数*/ char *ptr; int c[26]={0); /*数组C保存每个英文字母出现的次数*/ /*c[0]己录字母A或a的次数,c[1]记录字母B或b的次数,依此类推*/ ptr=______; /*ptr初始时指向字符串的首字符*/ while (*ptr) { if (isupper(*ptr) ) c [*ptr-'A']++; else if (islower(*ptr)) c[*ptr-'a']++; ______; /*指向下一个字符*/ } for(i=0;i<26; i++) if(______)sum++; return sum; } [说明2] 将下面C代码2中的空缺补全后运行,使其产生以下输出。 f2:f2:f2:2 f3:f3:1 [C代码2] #include<stdio.h> int f1(int(*f)(int)); int f2(int); int f3(int); int main() { printf("%d\n",f1(______)); printf("%d\n",f1(______)); return 0; } int f1(int(*f)(int)) { int n=0; /*通过函数指针实现函数调用,以返回值作为循环条件*/ while (______) n++; return n; } int f2(int n) { printf("f2:"); return n*n-4; } int f3(int n) { printf("f3:"); return n-1; }
[简答题]阅读以下说明和C代码,填写代码中的空(1)~(6),将解答写入答题纸的对应栏内。【说明】下面的C代码在输入的100个英文单词中找出最小单词和最大单词。约定每个单词是仅由英文字母构成的字符串,且都不超过20个字符。单词的大小按照字典序定义。例如,单词“entry”大于“enter”、“art”小于“ article”、“an”等于“An”。 【C代码】#include <stdio.h>#define NUMBER 100int isValid(const char *s1); //若字符串s1仅包含英文字母则返回1,否则返回0char toLower(char ch); //将大写字母转换为小写字母int usr_strcmp(char *s1, char *s2); //比较字符串s1和s2,相等时返回0, //s1大则返回正整数,s1小则返回负整数void usr_strcpy(char *s1,const char *s2); //字符串s2拷贝给s1 int main(){ char word[32]; char maxWord[32]="", minWord[32] =""; int numWord=0; while(num Word<NUMBER) { scanf("%s", (1) ); / /输入一个单词存入word if(is Valid(word)) { if (0==num Word) {usr_strcpy(min Word,word);usr_strcpy(max Word,word);} num Word++; if( (2) >0) / /调用usr_strcmp比较单词 usr_strcpy(max Word, word); / /用max Word记下最大单词 else if( (3) <0) / /调用usr_strcmp比较单词 usr_strcpy(min Word,word); / /用min Word记下最小单词 } } printf("max Word=%s min Word=%s\n",max Word,min Word); return 0;}int is Valid(const char *s){ for(; *s ; s++) if(!(*s>='a' && *s<='z') && !(*s>='A' && *s<='Z')) return 0; return 1; } char toLower(char ch){ //若ch为大写字母则返回其小写形式,否则直接返回原字符 if(ch>='A' && ch<='Z') ch= (4) +'a'; return ch;} int usr_strcmp(char *s1,char *s2){ //按字典序比较两个英文单词,若s1表示的单词大,则返回正整数, //若s1表示的单词小,则返回负整数;否则返回0 for(; (5) ;) { if(toLower(*s1)==toLower(*s2)) {s1++,s2++;} else break; } return(toLower(*s1) - toLower(*s2));} void usr_strcpy(char *s1,const char *s2){ //将s2表示的字符串复制给s1 for(; (6) ;) *s1++= *s2++; *s1='\0';}
[简答题]阅读下列说明和C代码,回答问题,将解答填入答题纸的对应栏内。【说明1】 函数deldigit(char *s) 的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再拷贝给s。【C函数】 void deldigit(char *s) { char *t = (char *)malloc( (1) ); /*申请串空间*/ int i, k = 0; if (!t) return; for(i = 0; i < strlen(s); i++) if ( !(*(s+i)>=’0’ && *(s+i)<=’9’) ) { t[k++] = (2) ; } (3) = ’\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 ( (4) ) { ch = *s; *s = *(s+len-1); *(s+len-1) = ch; reverse( (5) ); } }
[简答题]阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。 阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。 【说明1】 函数deldigit(char *s) 的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再拷贝给s。 【C函数】 char *t = (char *)malloc( (1) ); /*申请串空间*/ int i, k = 0; if (!t) return; for(i = 0; i < strlen(s); i++)if ( !(*(s+i)>=’0’ && *(s+i)<=’9’) ) { t[k++] = (2) ;} (3) = ’\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 ( (4) ) { ch = *s; *s = *(s+len-1); *(s+len-1) = ch; reverse( (5) ); }}
[简答题] 阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。 [说明] 下面的函数sort(int n,int a[])对保存在数组a中的整数序列进行非递减排序。由于该序列中的元素在一定范围内重复取值,因此排序方法是先计算出每个元素出现的次数并记录在数组b中,再从小到大顺序地排列各元素即可得到一个非递减有序序列。例如,对于序列6,5,6,9,6,4,8,6,5,其元素在整数区间[4,9]内取值,因此使数组元素b[0]~b[5]的下标0~5分别对应数值4~9,顺序地扫描序列的每一个元素并累计其出现的次数,即将4的个数记入b[0],5的个数记入b[1],依此类推,9的个数记入b[5]。最后依次判断数组b的每个元素值,并将相应个数的数值顺序地写入结果序列即可。 对于上例,所得数组b的各个元素值如下: 1.jpg 那么在输出序列中写入1个4、2个5、4个6、1个8、1个9,即得4,5,5,6,6,6,6,8,9,从而完成排序处理。 [C函数] void sort(int n,int a[]) { int *b; int i, k, number; int minimum=a[0],maximum=a[0]; /*minimum和maximum分别表示数组a的最小、最大元素值*/ for(i=1; i<n; i++){ if(______) minimum=a[i]; eiSe if (______) maximum=a[i]; } number=maximum-minimum+1; if(number<=i)return; b=(int*)calloc(number,sizeof(int)); if(!b) return; for(i=0;i<n; i++){/*计算数组a的每个元素值出现的次数并记入数组b */ k=a[i]-minimum; ++b[k]; } /*按次序在数组a中写入排好的序列*/ i=______; for(k=0; k<number; k++) for(; ______; --b[k] ) a[i++]=minimum+______; }
[简答题]阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接插入排序是一种简单的排序方法,具体做法是:在插入第i个关键码时,k1,k2,…,ki-1已经排好序,这时将关键码ki依次与关键码ki-1,ki-2,…,进行比较,找到ki应该插入的位置时停下来,将插入位置及其后的关键码依次向后移动,然后插入ki。例如,对{17,392,68,36}按升序作直接插入排序时,过程如下:第1次:将392(i=1)插入有序子序列{17},得到{17,392};第2次:将68(i=2)插入有序子序列{17,392},得到{17,68,392};第3次:将36(i=3)插入有序子序列{17,68,392},得到{17,36,68,392},完成排序。下面函数 insertSort用直接插入排序对整数序列进行升序排列,在main函数中调用insertSort并输出排序结果。 【C代码】void insert Sort(int data[],int n)/*用直接插入排序法将data[0]~ data[n-1]中的n个整数进行升序排列*/{ int i,j; int tmp; for(i=1; i<n;i++){ if(data[i]<data[i-1]){ //将data[i]插入有序子序列data[0]~data[i-1] tmp=data[i]; //备份待插入的元素 data[i]=(1); for(j=i-2;j>=0 && data[j] > tmp;j----) //查找插入位置并将元素后移 (2); (3) =tmp; //插入正确位置 }/*if*/ }/*for*/}/*insertSort*/ int main(){ int *bp,*ep; int n,arr[]={17,392,68,36,291,776,843,255}; n = sizeof(arr) / sizeof(int); insertSort(arr,n); bp= (4) ; ep = arr+n; for( ;bp<ep; bp++) //按升序输出数组元素 printf("%d\t", (5) ); return 0;阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接插入排序是一种简单的排序方法,具体做法是:在插入第i个关键码时,k1,k2,…,ki-1已经排好序,这时将关键码ki依次与关键码ki-1,ki-2,…,进行比较,找到ki应该插入的位置时停下来,将插入位置及其后的关键码依次向后移动,然后插入ki。例如,对{17,392,68,36}按升序作直接插入排序时,过程如下:第1次:将392(i=1)插入有序子序列{17},得到{17,392};第2次:将68(i=2)插入有序子序列{17,392},得到{17,68,392};第3次:将36(i=3)插入有序子序列{17,68,392},得到{17,36,68,392},完成排序。下面函数 insertSort用直接插入排序对整数序列进行升序排列,在main函数中调用insertSort并输出排序结果。 【C代码】void insert Sort(int data[],int n)/*用直接插入排序法将data[0]~ data[n-1]中的n个整数进行升序排列*/{ int i,j; int tmp; for(i=1; i<n;i++){ if(data[i]<data[i-1]){ //将data[i]插入有序子序列data[0]~data[i-1] tmp=data[i]; //备份待插入的元素 data[i]=(1); for(j=i-2;j>=0 && data[j] > tmp;j----) //查找插入位置并将元素后移 (2); (3) =tmp; //插入正确位置 }/*if*/ }/*for*/}/*insertSort*/ int main(){ int *bp,*ep; int n,arr[]={17,392,68,36,291,776,843,255}; n = sizeof(arr) / sizeof(int); insertSort(arr,n); bp= (4) ; ep = arr+n; for( ;bp<ep; bp++) //按升序输出数组元素 printf("%d\t", (5) ); return 0;}
[简答题]阅读以下说明和C函数,填充(1)~(5)的空缺,将解答填入答题纸的对应栏内。 【说明】编写程序,对于从键盘输入的3个实数a、b、c,计算实系数一元二次方程的根并输出所求的根。 【函数】 #include<stdio.h> #include<stdlib.h> #include<math.h> Main() { float a,b,c,delta,x1,x2; printf("Enter a,b,c"); scanf("%f%f%f",&a,&b,&c)); if((1)) if((2)) printf("Input error!\n"); else printf("The single root is %f\n",(3)); else { delta=b*b-4*a*c; if((4)) { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("x1=%8.2f\nx2=%8.2f\n",x1,x2,); } else if(delta==0) printf("x1=x2=%8.2f\n",(5)); else { Printf("z2=%8.2f+%8.2f*i\n",-b/(2*a),sqrt(-delta)/)(2*abs(a))); Printf("z2=%8.2f-%8.2f*i\n",-b/(2*a),sqrt(-delta)/(2*abs(a))); } }}
[简答题]阅读以下说明和C函数,填充(1)~(5)的空缺,将解答填入答题纸的对应栏内。【说明】编写程序,对于从键盘输入的3个实数a、b、c,计算实系数一元二次方程的根并输出所求的根。 【函数】 #include<stdio.h> #include<stdlib.h> #include<math.h> Main() { float a,b,c,delta,x1,x2; printf("Enter a,b,c"); scanf("%f%f%f",&a,&b,&c)); if((1)) if((2)) printf("Input error!\n"); else printf("The single root is %f\n",(3)); else { delta=b*b-4*a*c; if((4)) { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("x1=%8.2f\nx2=%8.2f\n",x1,x2,); } else if(delta==0) printf("x1=x2=%8.2f\n",(5)); else { Printf("z2=%8.2f+%8.2f*i\n",-b/(2*a),sqrt(-delta)/)(2*abs(a))); Printf("z2=%8.2f-%8.2f*i\n",-b/(2*a),sqrt(-delta)/(2*abs(a))); } }}
[简答题]第四题 阅读以下说明、C函数和问题,回答问题1和问题2将解答填入答题纸的对应栏内。 【说明】 当数组中的元素已经排列有序时,可以采用折半查找(二分查找)法查找一个元素。下面的函数biSearch(int r[],int low,int high,int key)用非递归方式在数组r中进行二分查找,函数biSearch_rec(int r[],int low,int high,int key)采用递归方式在数组r中进行二分查找,函数的返回值都为所找到元素的下标;若找不到,则返回-1。 【C函数1】 int biSearch(int r[],int low,int high,int key) //r[low..high] 中的元素按非递减顺序排列 //用二分查找法在数组r中查找与key相同的元素 //若找到则返回该元素在数组r的下标,否则返回-1 { int mid; while((1)) { mid = (low+high)/2 ; if (key ==r[mid]) return mid; else if (key<r[mid]) (2); else (3); }/*while*/ return -1; }/*biSearch*/ 【C 函数 2】 int biSearch_rec(int r[],int low,int high,int key) //r[low..high]中的元素按非递减顺序排列 //用二分查找法在数组r中查找与key相同的元素 //若找到则返回该元素在数组r的下标,否则返回-1 { int mid; if((4)) { mid = (low+high)/2 ; if (key ==r[mid]) return mid; else if (key<r[mid]) return biSearch_rec((5),key); else return biSearch_rec((6),key); }/*if*/ return -1; }/*biSearch_rec*/ 问题:4.1 (12分) 请填充C函数1和C函数2中的空缺,将解答填入答题纸的对应栏内。 问题:4.2 (3分) 若有序数组中有n个元素,采用二分查找法查找一个元素时,最多与( )个数组元素进行比较,即可确定查找结果。 (7)备选答案: A.[log2(n+1)] B.[n/2] C.n-1 D.n
[简答题]阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。 【说明】 某企业实施数据机房建设项目,机房位于该企业业务综合楼二层,面积约50平方米。机房按照国 家B类机房标准设计,估算用电量约50KW,采用三相五线制电源输入,双回路向机房设备供电, 对电源系统提供三级防雷保护。要求铺设抗静电地板、安装微孔回风吊项,受机房高度影响,静 电地板高20厘米。机房分为配电间和主机间两个区域,分别是15和35平方米。配电间配置市电 配电柜、UPS主机及电池柜等设备;主机间配置网络机柜、服务器机柜以及精密空调等设备。 项目的功能模块如图1-1所示。 问题:1.1(4分) 数据机房设计标准分为(1) 类,该项目将数据机房设计标准确定为B类,划分依据是(2)。 问题:1.2(6分) 该方案对电源系统提供第二、三级防雷保护,对应的措施是(3) 和(4) 。机房 接地一般分为交流工作接地、直流工作接地、保护接地和(5) ,若采用联合接地的方式将电源保 护接地接入大楼的接地极,则接地极的接地电阻值不应大于(6) 。 (3)~(4)备选答案: A.在大楼的总配电室电源输入端安装防雷模块 B.在机房的配电柜输入端安装防雷模块 C.选用带有防雷器的插座用于服务器、工作站等设备的防雷击保护 D.对机房中UPS不间断电源做防雷接地保护。 问题:1.3(4分) 在机房内空调制冷一般有下送风和上送风两种方式。该建设方案采用上送风的方式,选择该方式的原因是 (7) 、 (8) 。 (7)~(8)备选答案: A.静电地板的设计高度没有给下送风预留空间 B.可以及时发现和排除制冷系统产生的漏水,消除安全隐患 C.上送风建设成本较下送风低,系统设备易于安装和维护D.上送风和下送风应用的环境不同,在IDC机房建设时要求采用上送风方式。 问题:1.4 (6分) 网络布线系统通常划分为工作区子系统、水平布线子系统、配线间子系统、 (9)、管理子系统和建筑群子系统等六个子系统。机房的布线系统主要采用(10)和(11)。 问题:1.5(5分) 判断下述观点是否正确(正确的打√;错误的打×)。 1. 机房灭火系统,主要是气体灭火,其灭火剂包括七氟丙烷、二氧化碳、气溶胶等对臭氧层无破坏的灭火剂, 分为管网式和无管网式。 (12) 2.机房环境监控系统监控的对象主要是机房动力和环境设备,比如配电、UPS、空调、温湿度、烟感、红外、 门禁、防雷、消防等设备设施。 (13) 3.B级机房对环境温度要求是18℃~28℃,相对湿度要求是40%~70%。 (14) 4.机房新风系统中新风量值的计算方法主要按房间的空间大小和换气次数作为计算依据。 (15) 5.机房活动地板下部的电源线尽可能地远离计算机信号线,避免并排敷设,并采取相应的屏蔽措施。(16)
[简答题]阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 模式匹配是指给定主串t和子串s,在主串t中寻找子串s的过程,其中s称为模式。如果匹配成功,返回s在t中的位置,否则返回-1 。 KMP算法用next数组对匹配过程进行了优化。KMP算法的伪代码描述如下: 1.在串t和串s中,分别设比较的起始下标i=j=0。 2.如果串t和串s都还有字符,则循环执行下列操作: (1)如果j=-l或者t[i]=s[j],则将i和j分别加1,继续比较t和s的下一个字符; (2)否则,将j向右滑动到next[j]的位置,即j =next[j]。 3.如果s中所有字符均已比较完毕,则返回匹配的起始位置(从1开始);否则返回-1. 其中,next数组根据子串s求解。求解next数组的代码已由get_next函数给出。【C代码】 (1)常量和变量说明 t,s:长度为悯铂Is的字符串 next:next数组,长度为Is (2)C程序 #include <stdio.h> #include <stdlib.h> #include <string.h> /*求next[]的值*/ void get_next( int *next, char *s, int Is) { int i=0,j=-1; next[0]=-1;/*初始化next[0]*/ while(i < ls){/*还有字符*/ if(j==-1l ls[i]==s[j]){/*匹配*/ j++; i++; if( s[i]==s[j]) next[i] = next[j]; else Next[i] = j; } else j = next[j]; } } int kmp( int *next, char *t ,char *s, int lt, int Is ) { Int i= 0,j =0 ; while (i < lt && (1) ){ if( j==-1 || (2) ){ i ++ ; j ++ ; } else (3) ; } if (j >= ls) return (4) ; else return -1; } 【问题1】(8分) 根据题干说明,填充C代码中的空(1)~(4). 【问题2】(2分) 根据题干说明和C代码,分析出kmp算法的时间复杂度为(5)(主串和子串的长度分别为It和Is,用O符号表示)。 【问题3】(5分) 根据C代码,字符串“BBABBCAC”的next数组元素值为(6)(直接写素值,之间用逗号隔开)。若主串为“AABBCBBABBCACCD”,子串为“BBABBCAC”,则函数Kmp的返回值是(7)。
[简答题]阅读下列说明和 C 代码,回答问题 1 和问题 2,将解答填入答题纸的对应栏内。【说明】某公司购买长钢条,将其切割后进行出售。切割钢条的成本可以忽略不计,钢条的长度为整英寸。已知价格表 P,其中中 Pi(i=1,2,...,m)表示长度为 i 英寸的钢条的价格。现要求解使销售收益最大的切割方案。求解此切割方案的算法基本思想如下:假设长钢条的长度为 n 英寸,最佳切割方案的最左边切割段长度为 i 英寸,则继续求解剩余长度为 n-i 英寸钢条的最佳切割方案。考虑所有可能的 i,得到的最大收益 rn对应的切割方案即为最佳切割方案。rn的递归定义如下:rn =max1≤ i ≤n(pi +rn-i)对此递归式,给出自顶向下和自底向上两种实现方式【C 代码】/*常量和变量说明n:长钢条的长度P[]:价格数组*/#define LEN 100int Top_Down_Cut_Rod(int P[], int n){/*自顶向下*/ int r = 0; int i; if (n == 0){ return 0; } for (i = 1; (1); i++){ int tmp = P[i] + Top_Down_Cut_Rod(p, n - i); r = (r >= tmp) ? r : tmp; } return r;}int Bottom_Up_Cut_Rod(int p[], int n){ /*自底向上*/ int r[LEN] = { 0 }; int temp = 0; int i, j; for (j = 1; j <= n; j++){ temp = 0; for (i = 1; (2); i++){ temp = (3); } (4); } return r[n];}【问题 1】(8 分)根据说明,填充 C 代码中的空(1)~(4)。 【问题 2】(7 分)根据说明和 C 代码,算法采用的设计策略为(5)。求解 rn时,自顶向下方法的时间复杂度为(6);自底向上方法的时间复杂度为(7)(用 O 表示)。
[简答题]阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 模式匹配是指给定主串t和子串s,在主串t中寻找子串s的过程,其中s称为模式。如果匹配成功,返回s在t中的位置,否则返回-1。 KMP算法用next数组对匹配过程进行了优化。KMP算法的伪代码描述如下: 1.在串t和串s中,分别设比较的起始下标i=j=0。 2.如果串t和串s都还有字符,则循环执行下列操作: (1)如果j=-l或者t[i]=s[j],则将i和j分别加1,继续比较t和s的下一个字符; (2)否则,将j向右滑动到next[j]的位置,即j =next[j]。 3.如果s中所有字符均已比较完毕,则返回匹配的起始位置(从1开始);否则返回-1。 其中,next数组根据子串s求解。求解next数组的代码已由get_next函数给出。 【C代码】 (1)常量和变量说明 t,s:长度为lt和ls的字符串 next:next数组,长度为ls (2)C程序 #include <stdio.h>#include<stdlib.h>#include<string.h>/*求next[]的值*/void get_next( int*next, char *s, int ls) { inti=0,j=-1; next[0]=-1;/*初始化next[0]*/ while(i< ls){/*还有字符*/ if(j==-1lls[i]==s[j]){/*匹配*/ j++; i++; if(s[i]==s[j]) next[i]= next[j]; else Next[i]= j; }else j = next[j]; }} int kmp( int*next, char *t ,char *s, int lt, int ls ) { Inti= 0,j =0 ; while(i < lt && (1) ){ if(j==-1 || (2) ){ i++ ; j++ ; }else (3) ;}if (j >= ls)return (4) ;else return-1;} 【问题1】(8分) 根据题干说明,填充C代码中的空(1)~(4). 【问题2】(2分) 根据题干说明和C代码,分析出kmp算法的时间复杂度为(5)(主串和子串的长度分别为It和Is,用O符号表示)。 【问题3】(5分) 根据C代码,字符串"BBABBCAC"的next数组元素值为(6)(直接写素值,之间用逗号隔开)。若主串为"AABBCBBABBCACCD",子串为"BBABBCAC",则函数Kmp的返回值是(7)。

我来回答:

购买搜题卡查看答案
[会员特权] 开通VIP, 查看 全部题目答案
[会员特权] 享免全部广告特权
推荐91天
¥36.8
¥80元
31天
¥20.8
¥40元
365天
¥88.8
¥188元
请选择支付方式
  • 微信支付
  • 支付宝支付
点击支付即表示同意并接受了《购买须知》
立即支付 系统将自动为您注册账号
请使用微信扫码支付

订单号:

请不要关闭本页面,支付完成后请点击【支付完成】按钮
恭喜您,购买搜题卡成功
重要提示:请拍照或截图保存账号密码!
我要搜题网官网:https://www.woyaosouti.com
我已记住账号密码