阅读以下两个说明、c函数和问题,将解答写入答题纸的对应栏内。【说明1】函数main()的功能旨在对输入的一个正整数n,计算12+22+32+…+n2,但是对该函数进行测试后没有得到期望的结果。【c函数】1.输入5

题目

阅读以下两个说明、c函数和问题,将解答写入答题纸的对应栏内。

【说明1】

函数main()的功能旨在对输入的一个正整数n,计算12+22+32+…+n2,但是对该函数进行测试后没有得到期望的结果。

【c函数】

1.输入5测试上述main函数时,显示结果如下所示。

input an integer:5

result:-582598909

2.将行号为7的代码修改为:prinff(”n=%d\nresuh:%d\n”,n,sum);并再次

输入5测试main函数,显示结果如下所示。

input an interger:5

n=2293632

result:-582598909

阅读以上两个说明、c函数和问题,将解答写入答题纸的对应栏内。

【问题1】

请给出上述main函数中需要修改的代码行号,并给出修改后的整行代码。

【说明2】

函数test_f2{}编译时系统报告有错,修改后得到函数12_B{}。对函数12_B{}

进行编译时顺利通过,在某些C系统中执行时却由于发生异常而不能正确结束。

【c函数2】

【问题2】(1)请指出函数test_f2中不能通过编译的表达式;(2)请指出可能导致函数f2_B运行异常的表达式。

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

() 阅读下列说明,回答问题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分) 根据等价类表设计能覆盖所有等价类的测试用例。

第2题:

阅读以下说明,回答问题,将解答填入对应的解答栏内。

[说明] 将一个正整数分解质因数。例如:输入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)

}

else

break;

}

}

printf (“%d”,n);}


正确答案:(1) i=2;i<=n;i++ (2) n ! =i (3) n%i==0 (4) n=n/i;
(1) i=2;i<=n;i++ (2) n ! =i (3) n%i==0 (4) n=n/i; 解析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

第3题:

试题三(共 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; i<strlen(s); i++)

if (s[i] != ' ') tstr[k++] = s[i];

return tstr;

}

【问题 3】(6分)

函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。


正确答案:

试题三参考答案
【问题1】
(1)18              (3分)
(2)求两个整数的最小公倍数         (2分)
     考生解答含义与最小公倍数相同即可给分

【问题2】
9  4           (2分,每个数字1分)
1  4           (2分,每个数字1分)

【问题3】
缺陷:返回了局部数据(或变量,或数组)的指针(或地址)  (3分)
考生解答与上述含义相同即可给分

修改方法:用malloc(或realloc)函数申请局部变量(或数组)  (3分)
考生解答中含有“动态”或“堆区”一词或者即可给分

第4题:

阅读以下函数说明和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);

}


正确答案:(1)a[n-1]+sum(an-1)或者a[0]+sum(a+1n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1n-1);
(1)a[n-1]+sum(a,n-1)或者a[0]+sum(a+1,n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1,n-1); 解析:本题考查C语言函数和一些基本运算。
下面我们分别来分析这几个函数。在函数2.1中,题目要求用此递归函数求数组前 n个元素之和。递归函数的特点是在函数体中不停地调用函数本身,只是将其函数的参数范围改变。题目中要求我们求数组前n个元素之和,我们可以这样理解,即前n个元素之和等于第n个元素加上前n-1个元素之和,现在的问题转化成如何求前n-1个元素之和。同样的道理,可以将求前n-1个元素之和转化成求前n-2个元素之和,直到这个数小于0。从函数2.1的代码中可以知道,在计算以前,首先判断n与0的关系,如果n小于0,说明数组中无元素,因此,返回0值;如果n大于等于0,说明数组中有元素,应该返回的结果是第n个元素加上前n-1个元素之和,而前n-1个元素之和是调用函数本身来计算的。因此,第(1)空和第(2)空的答案分别是a[n-1)+sum(a,n-1),return()。
在函数2.2中,题目要求我们在三个数中取最大数,在数学中,我们从三个数中取最大数时,一般是首先拿其中两个数比较,取较大的数再与第三个数比较,再取其较大的数,这个数就是三个数中的最大数。从函数2.2的代码中知道,三个数a、b、c,两个整型变量temp与max。根据求三个数中最大数的数学过程和函数中已给出的代码可知,第(3)空处语句应该为temp=(a>b)?a:b,求得a、b中较大数并存放在变量temp中。第(4)空处语句为max=(temp>c)?temp:c。
在函数2.3中,题目要求判断数组a[]的前n个元素是否是不递增的。不递增返回1,否则返回0。要判断前n个元素是否是不递增的,需要判断前n-1个元素是否是不递增的,以及第n个元素与第n-1个元素的关系。此处与函数2.1一样,用的都是递归函数,只是出口不同,在函数2.1中,只要数组中没有元素了,递归结束,这里只要第n个元素大于第n-1个元素,则返回0,递归结束。又由if(a[0]a[1])语句可知,在每次调用函数时,都将其数组中的第一个元素与第二个元素比较来作为递归的出口,如果结果为假,就说明数组的前面两项的关系是不递增的,在下次调用中不用再考虑第一项。因此第(5)空应该是dec(a+1,n-1)。

第5题:

阅读以下说明和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 i

s=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);

}


正确答案:(1)array+10 (2)array+1 (3)*p>*max (4)k=*max (5)*p=array[0]
(1)array+10 (2)array+1 (3)*p>*max (4)k=*max (5)*p=array[0]

第6题:

阅读以下函数说明和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;

}


正确答案:(1)m!=n;(2)return n或return m;(3)i8;(4)k*10;(5)p++
(1)m!=n;(2)return n或return m;(3)i8;(4)k*10;(5)p++

第7题:

阅读以下函数说明和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");

}


正确答案:(1)*c (2)status (3)*c='z' (4)*c>='a' (5)*c+
(1)*c (2)status (3)*c='z' (4)*c>='a' (5)*c+ 解析:本题考查在C语言中对字符串的处理。
题目要求程序将从键盘上输入的每个单词的第一个字母转换为大写字母,而输入的各单词必须用空格隔开,用“.”结束输入。要实现这个功能,关键之一在于如何取出单词中的第一个字母,关键之二是如何实现大小写字母的转换。
第(1)空是一个条件判断语句的条件,如果条件成立,则返回1,而从程序中可以看出,此条件判断语句是判断当前取到的字符是否等于空格字符。从主函数中可以看到,每次在调用功能函数fun()前都从输入的字符串中取出一个字符,并存放在变量ch中,而在调用函数时是将变量ch的地址传递给了指针变量c,因此此空的答案为*c。
第(2)空、第(3)空和第(4)空应该结合起来看,它们都是条件判断语句的条件,这个条件判断语句下面的程序是将一个小写字母改变成一个大写字母,根据题目要求,此条件判断语句的条件应该是判断当前取到的字母是一个单词的第一个字母且是一个小写字母,再结合主函数来看,我们不难发现单词的第一个字母用一个标记变量flag标识,如果是第一个字母,这个标记变量flag的值为1,否则为0。要判断一个字母是否是小写字母,应该判断其ASCⅡ码值是否在a与z的ASCⅡ码值之间。所以这3个空的答案应该分别为status、*c='z'、*c>='a'。
第(5)空是在上面条件成立的情况下执行的一条语句,条件成立我们在上面已经分析过了,表明当前取到的字符是一个单词的第一个字母且是小写字母,此空所在语句的任务是将小写字母变成大写字母,根据上面的分析,因此可以得到此空答案为*c+。

第8题:

●试题二

阅读下列程序或函数说明和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】

#includestdio.h

#define N 100

int 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)*s == *t(2) *s - *t

【解析】*s *t相等才执行循环体。返回二者差值,恰好符合题目要求。

【答案】(3) arow][col>max (4) row == 0(5) max<min

【解析】当前值比max大,则把它赋给maxmax是本行最大值。初始化min为第一行的max。该行的maxmin小,则将max赋给min

 

第9题:

阅读以下说明,以及用C++在开发过程中所编写的程序代码,将应填入(n)处的字句写在对应栏内。

【说明】

在下面函数横线处填上适当的字句,使其输出结果为:

构造函数.

构造函数.

1,2

5,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;

}


正确答案:(1)cout"析构函数.\n" (2)a1 (3)a1—>print() (4)delete (5)delete
(1)cout"析构函数.\n" (2)a1 (3)a1—>print() (4)delete (5)delete 解析:本题考查用C++语言对输出的实现。
题目中没有什么条件,只给出了输出结构,要求程序能实现这个输出。下面来具体分析代码。
第(1)空很明显是类AA的析构函数的函数体,类的析构函数一般在撤销一个对象时调用,根据题目的要求,要输出析构函数这样的结果,而在程序中没有与此相关的操作,那么此空应该是用来实现这个功能的,借鉴构造函数中的内容,我们很容易就得出此空答案为cout"析构函数.\n"。
第(2)空在主函数中,很明显此空所在的语句是创建一个AA类的对象,并让一个AA型的指针变量指向这个对象。在函数开始的时候声明了两个AA型的指针变量a1和a2,而a2在下面已经有了值,那么这里只有用变量a1,因此此空答案为a1。
第(3)空是在创建了两个对象后执行的语句,根据程序不难推断出,这里应该要实现对象a1的数据输出,那么就要调用函数print(),因此此空答案为a1->print()。
第(4)空所在的语句是在实现了构造函数与数据输出后执行的语句,从题目要求来分析,这里应该要调用对象的析构函数来输出“析构函数”这样一个结果,上面我们已经分析到了对象的析构函数一般在撤销对象时调用。从对象的执行过程来分析,在对象的所有处理完成后也应该撤销对象来释放所占的资源,那么此空的任务应该是用来撤销a1对象,在C++中一般用关键字delete,因此此空答案为delete。
第(5)空和第(4)空的情况一样,因此此空答案为delete。

第10题:

阅读下列函数说明和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) n% base (2) n! =0 (3) b[c[i]] (4) j++ i-- (5) str[i]! =str[j]
(1) n% base (2) n! =0 (3) b[c[i]] (4) j++, i-- (5) str[i]! =str[j] 解析:(1)~(3)函数2.1的基本思想是“除base取余”,即从低位开始以n除以base的余数作为转化后的一位c[i],再以n除以base的商作为新的n,继续进行转化,直至除法商0为止。最后将所得的c[i]作为下标,从数组b中找出对应的数码表示,即b[c[i]]。
(4)~(5)此循环初始时,i和j充当str的头和尾指针,循环执行过程中,两指针同时以步长1向str的中间移动,比较所指字符是否相等,若不等则表明str不是回文字符串。

更多相关问题