C++ 练习错题总结

C++语言程序设计(第4版):

第二章:

1、C++有哪几种数据类型?简述其值域。编程显示你使用的计算机中的各种数据类型的字节数。

答:

#include 
int main()
{
	cout<<"The size of an int is:\t\t"<

2、运行下面的程序,观察其输出,与你的设想是否相同?

#include 
using namespace std;
int main()
{
	unsigned int x;
	unsigned int y=100;
	unsigned int z=50;
	x=y-z;
	cout<<"Difference is: "<
答:

        程序运行输出:

        Difference is: 50

        Now difference is:4294967246

        注意,第二行的输出并非-50,注意x、y、z的数据类型。

3、若a=1,b=2,c=3,下列各式的结果是什么?

(1)a | b -c

(2)a ^ b & -c

(3)a & b | c

(4)a | b & c

答:

        1、-1

        2、1

        3、3

        4、3

        解释:&、|、^:分别是与、或、异或运算符,还有取反~、移位(左移<<和右移>>),在这里第2小题中,负数要先取补码再进行计算

(取负数的补码=该数的反码的最末位加1)。


第三章:

1、什么叫内联函数?它有哪些特点?

答:

        定义时使用关键字inline的函数叫做内联函数;

        编译器在编译时在调用处用函数体进行替换,节省了函数传递、控制转译等开销;

        内联函数体内不能有循环语句和switch语句;

        内联函数的定义必须出现在内联函数第一次被调用之前;

        对内联函数不能进行异常接口声明;


2、函数原型中的函数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?

答:

        不必一致,所有的参数是根据位置和类型而不是名字来区分。



《C++语言程序设计》往届试卷真题--阳光大学生网.pdf:

选择题:

3、在下面的二维数组定义中,哪一个是正确的。___

A. int a[5][];     B. int a[][5];     C. int a[][];     D. int a[](10);

答案:B;解释:C++语言程序设计P192


4、下面的哪一个函数头格式不正确?___

A. AA(int a,int b)     B. AA(int a,int b=0)     C. AA(int a=0,int b=0)     D. AA(int a=0,int b)

答案:D;解释:http://zhidao.baidu.com/link?url=wEJYBYKFiEZqwmgOUYKRv77AB6dQO9wgEnykqSxefID-eaLY_mLnOmlKLeUcQKHiIlA3-Y12y3TnFr6QzMuOmq


5、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:___

A. AB operator  +(AB& a,AB& b);     B. AB operator +(AB& a);     C. operator +(AB a);     D. AB& operator +();

答案:B;不解释。


6、当需要使用ostrstream流泪定义一个流对象并联系一个字符串时,应在文件开始使用include命令,使之包含___文件。

A. iostream.h     B. stdlib.h     C. strstrea.h     D.fstream.h

答案:C;不知道解释。


填空题:

8. 假定a是一个一位数组,则a[i]的指针访问方式为_____。

答案:*(a+i);不解释了。


9. 假定一个结构类型的定义为“struct C { double* a[5]; int n; };”,则该类型的大小为___字节。

答案:24;解释:http://pppboy.blog.163.com/blog/static/30203796201082494026399/先看完里面的三个准则以及sizeof(指针类型)=4,那么sizeof(a)=4*5=20,20+4=24,这里还不存在字节对齐问题呢。


11. 假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为___。

答案:N;解释:数组A[N]有N个对象,故离开作用域,系统在完成对象删除前均会一一调用各个对象的析构函数。


写出下列函数的功能:

1. 

int SC(int a,int b,int c) {
     if(a

答案:求出a,b,c三个数中的最大值并返回;不解释。


4.

#include 
#include 
void JC(char* fname,int n)
     //可把以fname所指字符串作为文件标示符的文件称为fname文件
{
     ofstream fout(fname,ios::out | ios::binary);
     int x;
     for(int i=0;i>x;
          fout.write((char*)&x,sizeof(x));
     }
     fout.close();
}

答案:向二进制文件fname写入由键盘输入的n个整数;不解释。


编程:

编写一个函数fun(),首先从键盘上输入一个4行4列的一个实数矩阵到一个二维数组a[4][4]中,接着求出主对角线上元素之乘积,最后返回这个乘积。

答案:

double fun()
{
      double a[4][4];
      int i,j;
      cout<<"输入一个4*4的数值矩阵:";
      for(i=0;i<4;i++)
            for(j=0;j<4;j++) cin>>a[i][j];
      double p=1;
      for(i=0;i<4;i++) p*=a[i][j];
      return p;
}
解释:主对角线值的是从a[i][i]这一条,且题目要求编写一个函数去完成所有功能。

你可能感兴趣的:(C++)