考题
试题三(共 15分)阅读以下说明、C函数和问题,将解答写入答题纸的对应栏内。【说明 1】函数test_f1(int m, int n)对整数 m、n进行某种运算后返回一个整数值。【C函数 1】int test_f1(int m, int n){ int k;k = m n ? m : n;for(;(k%m!=0) || (k%n!=0);k++);return k;}【问题 1】(5分)(1)请写出发生函数调用test_f1(9,6)时,函数的返回值;(2)请说明函数test_f1的功能。【说明 2】设在某 C 系统中为每个字符分配 1 个字节,为每个指针分配 4 个字节,sizeof(x)计算为x分配的字节数。函数test_f2()用于测试并输出该C系统为某些数据分配的字节数。【C函数 2】void test_f2( ){ char str[] = "NewWorld"; char *p = str; char i = '\0';void *ptr = malloc(50);printf("%d\t", sizeof(str)); printf("%d\n", sizeof(p));printf("%d\t", sizeof(i)); printf("%d\n ", sizeof(ptr));}【问题 2】(4分)请写出函数test_f2()的运行结果。【说明 3】函数 test_f3(char s[])的功能是:将给定字符串 s 中的所有空格字符删除后形成的串保存在字符数组tstr中(串s的内容不变),并返回结果串的首地址。【C函数 3】char *test_f3 (const char s[]){ char tstr[50]={'\0'}; unsigned int i, k = 0;for(i=0; istrlen(s); i++)if (s[i] != ' ') tstr[k++] = s[i];return tstr;}【问题 3】(6分)函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。
考题
●试题二阅读下列程序或函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【函数2.1说明】函数strcmp()是比较两个字符串s和t的大小。若s<t函数返回负数;若s=t函数返回0;若s>t,函数返回正数。【函数2.1】int strcmp(char *s,char *t){ while(*s *t (1) ){s++;t++;}return (2) ;}【程序2.2说明】在n行n列的矩阵中,每行都有最大的数,本程序求这n个最大数中的最小一个。【程序2.2】#includestdio.h#define N 100int a[N][N];void main(){ int row ,col,max,min,n;/*输入合法n(<100),和输入n×n个整数到数组a的代码略*/for (row=0;row<n;row++){for(max=a[row][0],col=1;col<n;col++)if( (3) )max=a[row][col];if( (4) )min=max;else if( (5) )min=max;}printf ("The min of max numbers is %d\n",min);}
考题
() 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明] 使用等价类划分法为NextDate函数设计测试用例。 NextDate函数包含三个输入变量month、day、year(month、day、year均为整数,并且满足:1≤ month ≤12;1≤ day ≤31;1912 ≤year ≤2050),函数的输出为输入日期后一天的日期。 [问题1] (5分) 请列举出5种常用的黑盒测试用例设计方法。[问题2] (6分) 分析NextDate函数的规格说明,列出输入域等价类表。[问题3] (4分) 根据等价类表设计能覆盖所有等价类的测试用例。
考题
阅读以下函数说明和C语言函数,将应填入(n)的字句写在答题纸的对应栏内。[说明1]函数int fun1(int m, int n)的功能是:计算并返回正整数m和n的最大公约数。[函数1]int fun1(int m, int n){while ((1)) {if (m>n) m=m-n;else n=n-m;}(2);}[说明2]函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符形成一个十进制整数(最多8位)。例如,若字符串str的值为“f3g8d5.ji2e3p12fkp”,则函数返回值为3852312。[函数2]long fun2(char *str){int i=0;long k=0;char *p=str;while (*p!='\0' (3)) {if (*p>='0' *p<='9') {k=(4)+ *p - '0';++i;}(5);}return k;}
考题
阅读以下说明,回答问题,将解答填入对应的解答栏内。[说明] 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。main ( ){int n, i;printf ( "\n please input a number: \n");scanf ( "% d" ,u);printf ( "%d =" ,n);for((1)){while((2)){if((3)){ printf ("%d*",i);(4)}elsebreak;}}printf (“%d”,n);}
考题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】给定函数fun的功能是:将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。【函数】int fun(char *c,int status){if((1)=='')return 1;else{if((2)(3)(4))(5)='A'-'a';return 0;}}main(){int flag=1;char ch;printf("请输入一字符串,用点号结束输入!\n");do {ch=getchar();flag=fun(ch,flag);putchar(ch);}while(ch!='.');printf("\n");}
考题
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]编写一个函数,输入为偶数时,调用函数求1/2+?/+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n (利用指针函数)。[函数]include "stdio. h",main(){float peven (),podd (),dcall ();float sum;int n;while (1){scanf("%d",n);if (n>1)break;}if(n%2==0){printf("Even="):(1);}else{pfinff("Odd=");(2);}printf("%f",sum);}float peven (int n){float s;int is=1;for(i=2;i<=n;i+=2)(3);return (s);}float podd (n)int n;{float s;int i;s=0;for(i=1 i<=n;i+=2)(4);return (s);}float dcall(fp,n)float (*fp) ();int n;{float s;(5);returu (s);}
考题
阅读以下说明,以及用C++在开发过程中所编写的程序代码,将应填入(n)处的字句写在对应栏内。【说明】在下面函数横线处填上适当的字句,使其输出结果为:构造函数.构造函数.1,25,6析构函数析构函数.【C++代码】include "iostream.h"class AA{ public;AA(int i,int j){A=i; B=j;cout<<"构造函数.\n";}~AA(){(1);}void print();private:int A, B;};void AA∷print(){cout<<A<<","<<B<<endl;}void main(){AA *a1, *a2;(2)=new AA(1, 2);a2=new AA(5, 6);(3);a2->print();(4) a1;(5) a2;}
考题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。【函数2.1说明】递归函数sum(int a[], int n)的返回值是数组a[]的前n个元素之和。【函数2.1】int sum (int a[],int n){if(n>0) return (1);else (2);}【函数2.2说明】有3个整数,设计函数compare(int a,int b,int c)求其中最大的数。【函数2.2】int compare (int a, int b, int c ){ int temp, max;(3) a:b;(4) temp:c;}【函数2.3说明】递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回 1,否则返回0。【函数2.3】int dec( int a[], int n ){if(n<=1) return 1;if(a[0]<a[1]) return 0;return (5);}
考题
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。[函数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",n);printf("Enter new base:");scanf("%d",base);do{c[i]=(1);i++;n=n/base;}while((2));printf("Transmit new base:");for(- -i;i>=0;- -i)printf("%c",(3));}[函数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;(4))if((5)) return 0;return 1;}
考题
阅读以下说明和关系表,回答问题1~4,将解答对应的解答栏内。[说明]关系变量R{A,B,C,D,E,F}满足如下的函数依赖AD→E,AEB→D,B→CF,DE→B,DC→E,EC→FA,EF→DB,E→A求此模型的最小函数依赖集。
考题
阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。[函数2.1说明]函数void find(int *a, int n, int * max, int * min)的功能是在长度为n的整型数组a中,查找最大元素和最小元素的下标。main()中给出了调用find函数的一个实例。[函数2.1]include<stdio.h>void find(int *a, int n,int *max,int * min){ int i;*max =* min=0;for(i=1;i<n;i+ +)if(a[i]>a[* max]) (1);else if(a[i]<a[*min]) (2);return;main(){ int a[]={4,6,8,9,0,6},max,min;find(a,6,(3));printf("%5d%5d\n", max,min);}[函数2.2说明]以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符串分别是abcdefg和abceef,则输出为abc。[函数2.2]include <stdio.h>main(){ char str1[100],str2[100],str[100],c;int i=0,s;printf("\nInput string 1:");gets(str1);printf("\nInput string 2:");gets(str2);while(((4))(str1[i]!='\0')(str2[i]!='\0')){(5);i++;}printf("%s\n",str);}
考题
阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。[函数2.1说明]下面程序的功能是计算x和y的最小公倍数。[函数2.1]main(){ int m,n,d,r;seanf("%d %d",m,n);if(m<n) {r=m;m=n;n=r;}(1);while (d%n! =0) (2);printf("%d\n",d);}[函数2.2说明]下述程序接收键盘输入,直到句点“.”时结束。输入的字符被原样输出,但连续的空格输入将转换成一个空格。[函数2.2]include <stdio.h>main(){ char c,preChar='\0';c = getchar();while(c! = '.'){if((3)) putchar(c);else if(preChar! =' ') putchar(c);(4);c=(5);}}
考题
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。[函数2.1说明]Fibonacci数列中头两个数均为1,从第三个数开始,每个数等于前两个数之和。下述程序计算Fibonacci数列中前15个数,并以每行5个数的格式输出。[函数2.1]include <stdio.h>main(){ int i,f,f1=1,f2=1;printf("%5d%5d",f1,f2);for(i=3;i<=15;i++){f=(1);printf("%5d",f);if((2)= =0) printf("\n");f1=12;(3);}}[函数2.2说明]函数fun(char *str1,char *str2)的功能是将字符串str2拼接到str1之后。[函数2.2]fun(char *str1,char *str2){ int i,j;for(i=0;str1[i]!='\0';i++);for(j=0;str2[j]!='\0';j++) (4);(5);}
考题
阅读下列说明和代码,回答问题1和问题2,将解答卸载答题纸的对应栏内。【说明】某一本地口令验证函数(C语言环境,X86_32指令集)包含如下关键代码:某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数组userPassword中,如果两个数组中的内容相同则允许进入系统。【问题1】用户在调用gets()函数时输入什么样式的字符串,可以在不知道原始口令“Secret”的情况下绕过该口令验证函数的限制?【问题2】上述代码存在什么类型的安全隐患?请给出消除该安全隐患的思路。
考题
阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。【说明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(n2|| (1) ) return 0; /* 小于2的数或大于2的偶数不是素数 */ t=(int)sqrt(n)+1; for (k=3; kt; k+=2) if ( (2) ) return 0; return 1; } 【说明2】 函数int minOne(int arr[], int k)的功能是用递归方法求指定数组中前k个元素中的最小者,并作为函数值返回。 【C函数】 int minOne (int arr[], int k) { int t; assert (k0) ; if(k==1) return (3) ; t=minOne(arr+1, (4) ; if (arr[0]t) return arr[0]; return (5) ; }
考题
阅读以下说明和 C 函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内。 【说明 1】 函数 f(double eps) 的功能是:利用公式计算并返回 的近似值。【说明 2】 函数fun(char *str)的功能是:自左至右顺序取出非空字符串 str中的数字字符,形成一个十进制整数(最多 8 位)。例如,若 str中的字符串为 iyt?67kp f3g8d5.j4ia2e3p12, 则函数返回值为 67385423。
考题
试题二 ( 共15 分)阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。【 问题1 】分析下面的C 程序,指出错误代码(或运行异常代码)所在的行号。【C程序】【 问题2】函数inputArr(int a[], int n)的功能是输入一组整数(输入0或输入的整数个数达到n时结束)存入数组 a,并返回实际输入的整数个数。函数 inputArr 可以成功编译。但测试函数调用inputArr后,发现运行结果不正确。请指出错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行,使之符合上述设计意图。【C 函数】
考题
试题四(共 15 分)阅读以下说明和 C 函数代码,回答问题并将解答写在答题纸的对应栏内。[说明]著名的菲波那契数列定义式为f1 = 1 f2 = 1 fn = fn-1 + fn-2 (n = 3,4,…)因此,从第 1 项开始的该数列为 1,1,2,3,5,8,13,21,…。函数 fib1 和 fib2 分别用递归方式和迭代方式求解菲波那契数列的第 n 项(调用 fib1、fib2 时可确保参数 n 获得一个正整数) 。[C函数代码][问题 1](6 分)函数 fib1 和 fib2 存在错误,只需分别修改其中的一行代码即可改正错误。(1)函数 fib1 不能通过编译,请写出 fib1 中错误所在行修改正确后的完整代码;(2)函数 fib2 在n≤2 时不能获得正确结果,请写出 fib2 中错误所在行修改正确后的完整代码。[问题 2](3 分)将函数 fib1 和 fib2 改正后进行测试,发现前 46 项都正确,而第 47 项的值是一个负数,请说明原因。[问题 3](6 分)函数 fib1、fib2 求得菲波那契数列第 n 项(n40)的速度并不相同,请指出速度慢的函数名,并简要说明原因。
考题
阅读以下说明、C函数和问题,将解答写入答题纸的对应栏内。【说明1】函数test_fl(int m,im n)对整数m、n进行某种运算后返回一个整数值。【c函数1】int test_f1 (int m,int n){ int k;k=mn?m:n;for(; (k%m! =O) I I (k%n! =0);k++);return k;)【问题1】(5分)(1)请写出发生函数调用test_fl(9,6)时,函数的返回值;(2)请说明函数test_f1的功能。【说明2】设在某c系统中为每个字符分配1个字节,为每个指针分配4个字节,sizeof(x)计算为x分配的字节数。函数test_12Q用于测试并输出该c系统为某些数据分配的字节数。【c函数2】void test_f2(){ char str[] =“NewWorld”; char*p=str; char i=‘\0’; VOid*ptr=malloc(50);printf(”%d\t”,sizeof(str));printf(“%d\n”,sizeof(p)),printf(”%d\t”,sizeof(i)); printf(”%d\n”,sizeof(ptr));}【问题2】(4分)请写出函数test_f2()的运行结果。【说明3】函数test_f3(char S[])的功能是:将给定字符串S中的所有空格字符删除后形成的串保存在字符数组tstr中(串S的内容不变),并返回结果串的首地址。【C函数3】char*test_f3(const char s[])( char tstr[50]=(‘\0’); unslgned int i,k=0;for(i=0;i(strlen(s);i++)if(s[i]!=‘’)tstr[k++]=s[i];return tStr ;)【问题3】(6分)函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。
考题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明1]函数int function(int a)的功能是判断指定的正整数是否为素数,若是,返回1,否则返回0。[C函数1]int function(int a){ int yes,i;i=2;yes=1;while(i<=a/2 (1) ){if( (2) ) yes=0;i++;}return yes;}[说明2]函数int deleteARR(int*arr,intn)的功能是指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。函数返回值是互不相同的元素个数。[C函数2]int deleteARR(int*arr,int n){ int k,j;k=0;j=1;while(j<n){if( (3) )(4)=arr[j];j++;}return (5);}
考题
()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }
考题
阅读以下说明和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代码,回答问题(1)~(6),将解答填入答题纸的对应栏内。【说明】函数insertElem的功能是在元素升序排列的数组中加入一个新元素并保持数组元素升序排列的特点。在main函数中输入若干表示价格的实数,输入为0或负数或实数个数超出限定数量时终止,调用insertElem将价格按升序保存在数组pdata中,最后输出所输入的实数
考题
阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。
阅读以下说明和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 =’0’ if ( (4) ) { ch = *s; *s = *(s+len-1); *(s+len-1) = ch; reverse( (5) ); }}
考题
阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。
【问题 1】
分析下面的C 程序,指出错误代码(或运行异常代码)所在的行号。
【C 程序】
【问题 2】
函数inputArr(int a[], int n)的功能是输入一组整数(输入0或输入的整数个数达到n时结束)存入数组 a,并返回实际输入的整数个数。函数 inputArr 可以成功编译。但测试函数调用inputArr后,发现运行结果不正确。
请指出错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行,使之符合上述设计意图。
【C 函数】
考题
阅读以下说明和C函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内。
[说明1]
函数f(double eps)的功能是:利用公式
计算并返回π的近似值。
[C函数1] double f(doubleeps) { double n=1.0, s=1.0, term=1.0, pi=0.0; while ( fabs(term) >=eps ){ pi=pi+term; n= ______; s= ______; term=s/n; } return pi*4; }
[说明2]
函数fun(char *str)的功能是:自左至右顺序取出非空字符串str中的数字字符,形成一个十进制整数(最多8位)。例如,若str中的字符串为"iyt?67kp f3g8d5.j4ia2e3p12",则函数返回值为67385423。
[C函数2] long fun(char*str) { int i=0; long num: 0; char *p = str; while ( i<8 ++i; } ______; } return num; }