《C/C++工程师综合练习卷》

前言

前天拿这个《C/C++工程师综合练习卷》练习了一下,现将错题以及精题分析总结。

错题分析与总结

2 . 下面的程序可以从1….n中随机等概率的输出m个不重复的数。这里我们假设n远大于m,填充空缺语句。

knuth(int n, int m){srand((unsigned int)time(0));for (int i = 0; i < n; i++) {if ( ) {cout << i << endl;( );}}}

A. rand()%(n-i) <= m m– B. rand()%(n-i) < m m– C. rand()%(n-i) >= m m++ D. rand()%(n-i) > m m++

分析:

总结:

3 . 以下prim函数的功能是分解质因数。括号内的内容应该为?

void prim(int m, int n) {if (m > n){while () n++;();prim(m, n);cout << n << endl;} }

A . ram/n m/=n B . m/n m%=n C . m%n m%=n D . m%n m/=n

分析:分解质因数是将一个数差分为几个质数相乘,首先找到一个n可以被m整除,整除就是余数为0才能跳出循环,而如果只是做除法,只有当m < n的时候才会出现等于0。这与if的条件判断相互冲突。

答案:D

总结:错选C

7 . 下面关于虚函数和函数重载的叙述不正确的是? A . 虚函数不是类的成员函数 B . 虚函数实现了C++的多态性 C . 函数重载允许非成员函数,而虚函数则不行 D . 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定

分析:虚函数是类内定义的成员函数,所以A的说法明显不对; 虚函数和函数重载都实现了C++的多态性,但是表现形式不同,函数重载调用根据参数个数、参数类型等进行区分,而虚函数则是根据动态联编来确定调用什么,故,BD说法正确; 函数重载既可以是类的成员函数也可以是非成员函数,比如:

int fun(int a);int fun(int a, int b);

这就是非成员重载,但是虚函数就必须是成员函数,否则就会失效,所以C选项也是正确的。

答案:A

总结:错选了C

10 . 下面程序运行后的结果为?

char str[] = “glad to test something”;char *p = str;p++;int *p1 = static_cast<int *=””>(p);p1++;p = static_cast<char *=””>(p1);printf(“result is %s\n”, p);

A . glad to test something B . ad to test something C . test something D . to test something

分析:该题的关键是要认清楚强制类型转换后指针的类型,p的类型是char * , p++后p指向str数组的第二个元素,即字母l的位置。 p1的类型是int * , p1++后p1指向的位置增加4个细节,指向str数组中的第6个元素,即t的位置。 因此最后p的内容为“to test something“

答案:D

总结:错选B

13 . 在Java中,以下关于方法重载和方法重写描述正确的是? A . 方法重载和方法的重写实现的功能相同 B . 方法重载出现在父子关系中,方法重写是在同一类中 C . 方法重载的返回值类型必须一致,参数项必须不同 D . 方法重写的返回值类型必须相同。(或是其子类)

分析:方法重载的返回值的类型可以不同,因为判断方法重载的方法主要是根据方法的参数不同来判定;方法重写的返回值类型需要相同,重写就是子类继承了父类的方法,并在此方法上重写属于自己的特征,既然是继承过来的,那么它的返回值类型就必须要相同。

答案:D

总结:错选C

16 . In the main() function, after ModifyString(text) is called, what’s the value of ‘text’?

int FindSubString( char* pch ){int count = 0;char * p1 = pch;while ( *p1 != ‘\0’ ){if ( *p1 == p1[1] – 1 ){p1++;count++;}else {break;}}int count2 = count;while ( *p1 != ‘\0’ ){if ( *p1 == p1[1] + 1 ){p1++;count2–;}else {break;}}if ( count2 == 0 )return(count);return(0);}void ModifyString( char* pText ){char * p1 = pText;char * p2 = p1;while ( *p1 != ‘\0’ ){int count = FindSubString( p1 );if ( count > 0 ){*p2++ = *p1;sprintf( p2, “%i”, count );while ( *p2 != ‘\0’ ){p2++;}p1 += count + count + 1;}else {*p2++ = *p1++;}}}void main( void ){char text[32] = “XYBCDCBABABA”;ModifyString( text );printf( text );}

A . XYBCDCBABABA B . XYBCBCDAIBAA C . XYBCDCBAIBAA D . XYBCDDBAIBAB

分析:FindSubString()中 用到了“回文段落跳过” *p1 == p1[1] – 1,即看该字符串是不是递增的,即x后面是y,y后面是z,然后用count记录 *p1 == p1[1] + 1,即看该字符串是不是递减的,即z后面是y,,y后面是x,然后用count2递减 若回文则返回 回文子串长度,若不回文则返回0

在人生的道路上,谁都会遇到困难和挫折,

《C/C++工程师综合练习卷》

相关文章:

你感兴趣的文章:

标签云: