C/C++错题集整理(一)

1、以下数字在表示为double(8字节的双精度浮点数)时存在舍入误差的有()。

A.的平方根   B.10的30次方     C.0.1    D.0.5

解析:ABC  A超出了double型能表示的最大界限。小数点后的位权应该是2的负数次方才没有误差,其他情况都有误差,即小数点后的第一位位权应该为2的-1次,即0.5,第二位也就是2的-2次,即0.25

2、以下程序输出结果是——()

class A
{
public:
virtual void func(int val = 1)
{
std::cout << "A->" << val << std::endl;
}
virtual void test()
{
func();
}
};
class B : public A
{
public:
void func(int val = 0)
{
std::cout << "B->" << val << std::endl;
}
};
int main(int argc, char* argv[])
{
B*p = new B;
p->test();
return 0;
}

解析:B->1 

绝不重新定义继承而来的缺省参数值!

1
2
3
B*p = newB;
 
p->test();
p->test()执行过程如下
       (1) 由于B类中没有覆盖(重写)基类中的虚函数test(),因此会 调用基类A中的test()
       (2) A中test()函数中继续调用虚函数 fun(),因为虚函数执行动态绑定,p此时的动态类型(即目前所指对象的类型)为B*,因此此时调用虚函数fun()时, 执行的是B类中的fun();所以先输出“ B->”;
       (3)  缺省参数值是静态绑定,即此时 val的值使用的是基类 A中的缺省参数值,其值在编译阶段已经绑定,值为1,所以输出“ 1”;
       最终输出“ B->1”。切记: 绝不重新定义继承而来的缺省参数值!

3、 一个C语言源程序是由函数组成。
4、JAVA不使用指针,不支持头文件,不支持宏定义,JAVA可以动态分配内存;C++比较适合一些底层处理,JAVA比较适合开发应用,可以是WEB,也可以是手机端的Android。
5、程序的开发过程:编辑、编译预处理、编译、连接、运行。
6、判断字符串 s1 是否大于字符串 s2,应当使用 if (strcmp(s1, s2)>0),要是 if (strcmp(s1, s2))的话,如果是小于的话,就是if(-1),这时候还是判断为真的,所以得用>0来表示大于。
若s1==s2,则返回零;
若s1
若s1>s2,则返回正数
7、 重载运算符保持原运算符的优先级和结合性不变。

运算符重载时要遵循以下规则:

  (  1  ) 除了类属关系运算符  "  .  "  、成员指针运算符  "  .*  "  、作用域运算符  "  ::  "  、sizeof运算符和三目运算符  "  ?:  "  以外,C  ++  中的所有运算符都可以重载。
 
(
  2  ) 重载运算符限制在C  ++  语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。
 
(
  3  ) 运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。
 
(
  4  ) 重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
 
(
  5  ) 运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。
 
(
  6  ) 运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。
8、 要想使语句 cout<   显示   Hello!,STR   不可定义为()。
A.char STR[] = "Hello!" B.char STR[6] = "Hello!" C.char *STR="Hello!" D.#define STR "Hello!"

解析:B 
char STR[] = "Hello!";
有六个字符,  cout << sizeof(STR); 的结果是7,因为 后面还有一个结束符 "\0"
9、
下面的程序段()
注:第行程序前的数字为行号
/*1*/void main()
/*2*/{
/*3*/float a[10]={0.0};
/*4*/int i;
/*5*/for(i = 0; i < 3; i++) scanf("%d", &a[i]);
/*6*/for(i = 0; i < 10; i++) a[0] = a[0] + a[i];
/*7*/printf("%f\n", a[0]);
/*8*/}
解析:第5行有错误。
若为/*5*/for(i = 0; i < 3; i++) scanf("%  f ", &a[i]);就对了。
%f是单精度浮点数的格式,%lf是双精度浮点数格式。
%d整形。
10、 对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数。
解析:错误。某些运算符必须重载位成员函数,比如  operator new;
某些运算符必须重载为非成员函数,比如  operator >>...
11、声明枚举的三种方法

声明枚举变量三种方法

1、先声明枚举类型后定义枚举类型变量

enum WeekdayType  
{  
    sun,mou,tue,wed,thu,fri,sat  
};  
enum WeekdayType today,yesterday,tomorrow;

2、声明枚举类型的同时定义枚举类型变量

enum WeekdayType  
{  
    sun,mou,tue,wed,thu,fri,sat   
}today,yesterday,tomorrow;

3、直接定义枚举类型变量

enum  
{  
    sun,mou,tue,wed,thu,fri,sat  
}today,yesterday,tomorrow;

你可能感兴趣的:(笔试题目)