《C++程序设计基础》(第4版)(上)习题与解答第1章基本数据与表达式1.1选择题1.一个最简单的C++程序,可以只有一个(C)。(A)库函数(B)自定义函数(C)main函数(D)空函数2.用C++语言编写的源程序要成为目标程序必须要经过(D)。(A)解释(B)汇编(C)编辑(D)编译3.C++程序中的简单语句必须以(B)结束。(A)冒号(B)分号(C)空格(D)花括号4.假设有说明inta=0;doublex=5.16;,则在以下语句中,(C)属于编译错误。(A)x=a/x;(B)x=x/a;(C)a=a%x;(D)x=xa;5.执行C++程序时出现的“溢出”错误属于(C)错误。(A)编译(B)连接(C)运行(D)逻辑6.在下列选项中,全部都是C++关键字的选项为(C)。(A)whileIFStatic(B)breakchargo(C)sizeofcaseextern(D)switchfloatinteger7.按C++标识符的语法规定,合法的标识符是(A)。(A)_abc(B)new(C)π(D)age8.在C++语句中,两个标识符之间(A)不能..作为C++的分隔符。(A)数字(B);(C):(D)+9.下列正确的八进制整型常量表示是(B)。(A)0a0(B)015(C)080(D)0x1010.下列错误的十六进制整型常量表示是(C)。(A)0x11(B)0xaf(C)0xg(D)0x1f11.在下列选项中,全部都合法的浮点型数据的选项为(B)。(A)1e3.515.2e4(B)12.341e+50.1E12(C)0.2e212345.e5(D)5.0e(1+4)0.18e+212.在下列选项中,正确的字符常量为(D)。(A)a(B)'name'(C)a(D)'\101'13.在下列选项中,(D)不能..交换变量a和b的值。(A)t=b;b=a;a=t;(B)a=a+b;b=a-b;a=a–b;(C)t=a;a=b;b=t;(D)a=b;b=a;14.关于下列语句,叙述错误的是(A)。inti=10,p=&i;(A)p的值为10(B)p指向整型变量i(C)p表示变量i的值(D)p的值是变量i的地址15.有以下变量说明,下面不正确...的赋值语句是(B)。inta=5,b=10,c;intp1=&a,p2=&b;(A)p2=b;(B)p1=a;(C)p2=p1;(D)c=p1(p2);16.有以下变量说明,下面正确的语句是(B)。inta=10,b;int&pa=a,&pb=b;(A)&pb=a;(B)pb=pa;(C)pb=&pa;(D)pb=pa;17.执行下面语句序列后,a和b的值分别为(B)。inta=5,b=3,t;int&ra=a;int&rb=b;t=ra;ra=rb;rb=t;(A)3和3(B)3和5(C)5和3(D)5和518.在下列运算符中,(D)优先级最高。(A)=(B)=(C)+(D)19.在下列运算符中,(D)优先级最低。(A)!(B)&&(C)!=(D)?:20.已知inti=1,j=2;,则表达式i+++j的值为(C)。(A)1(B)2(C)3(D)421.已知inti=1,j=2;,则表达式++i+j的值为(D)。(A)1(B)2(C)3(D)422.在下列表达式选项中,(C)是正确。(A)++(a++)(B)a++b(C)a+++b(D)a++++b23.已知inti=0,j=1,k=2;,则逻辑表达式++i||j&&++k的值为(B)。(A)0(B)1(C)2(D)324.执行下列语句后,x的值是(D),y的值是()。intx,y;x=y=1;++x||++y;(A)不确定(B)0(C)1(D)225.设x为整型变量,不能..正确表达数学关系1<x<5的C++逻辑表达式是(A)。(A)1x5(B)x==2||x==3||x==4(C)1x&&x5(D)!(x=1)&&!(x=5)26.已知intx=5;,执行下列语句后,x的值为(C)。x+=x-=xx;(A)25(B)40(C)–40(D)2027.设inta=1,b=2,c=3,d=4;,则以下条件表达式的值为(A)。ab?a:cd?c:d(A)1(B)2(C)3(D)428.以下逗号表达式的值为(D)。(x=45,x5),x+25(A)25(B)20(C)100(D)451.2根据下列数学表达式写出C++算术表达式1.11111xy2.x{x[x(ax+b)+c]+d}+e3.ln101abab4.1cos48°25.cot2211xx6.lg(a2+ab+b2)【解答】1.1/(1+1/(1+1/(x+y)))2.x*(x*(x*(a*x+b)+c)+d)+e3.log(1+pow(fabs((a+b)/(a–b)),10)4.sqrt(1+3.14159/2*cos(48*3.14159/180))5.1/tan((1-x*x)/(1+x*x))或者cos((1-x*x)/(1+x*x))/sin((1-x*x)/(1+x*x))6.log10(a*a+a*b+b*b)1.3用逻辑表达式表示下列条件1.i被j整除2.n是小于正整数k的偶数3.1≤x<104.x、y其中有一个小于z5.y[–100,–10],并且y[10,100]6.坐标点(x,y)落在以(10,20)为圆心,以35为半径的圆内7.三条边a,b和c构成三角形8.年份Year能被4整除,但不能被100整除,或者能被400整除【解答】1.i%j==02.(nk)&&(n%2==0)3.1=x&&x104.xz||yz5.!(y=-100&&y=-10)&&!(y=10&&y=100)6.sqrt(pow((x-10),2)+pow((y-20),2))357.a+bc&&b+ca&&c+ab8.(year%4==0)&&(year%100!=0)||(year%400==0)1.4阅读下列程序,写出运行结果1.#includeiostreamusingnamespacestd;intmain(){inta=1,b=2;boolx,y;cout(a++)+(++b)endl;couta%bendl;x=!ab;y=a--&&b;coutxendl;coutyendl;}【解答】42012.#includeiostreamusingnamespacestd;intmain(){intx,y,z,f;x=y=z=1;f=--x||y--&&z++;coutx=xendl;couty=yendl;coutz=zendl;coutf=fendl;}【解答】x=0y=0z=2f=13.#includeiostream#includeiomanipusingnamespacestd;intmain(){inta=123;int&ra=a;intpa=&a;coutsetw(5)decasetw(5)octrasetw(5)hexpaendl;}【解答】1231737b1.5思考题1.什么是数据类型?变量的类型定义有什么作用?【解答】数据“类型”是对数据的抽象。类型相同的数据有相同的表示形式、存储格式以及相关的操作。定义一个变量时,计算机根据变量的类型分配存储空间,并以该类型解释存放的数据。2.普通数据类型变量和指针类型变量的定义、存储和使用方式有何区别?请编写一个程序验证之。【解答】变量类型定义存储使用方式数据类型标识符数据值通过名访问即直接访问对变量内容操作指针类型*标识符地址值通过指针变量的地址值间址访问对象验证程序:#includeiostreamusingnamespacestd;intmain(){inta,b,c;couta,b,c=;cinabc;//对普通数据类型变量赋值int*pa=&a,*pb=&b,*pc=&c;//用变量地址值初始化指针变量couta,b,c=a,b,cendl;/名访问,输出a,b,c的值coutpa,pb,pc=pa,pb,pcendl;//输出指针变量的地址值//间址访问,输出pa,pb,pc指向的变量的赋值cout*pa,*pb,*pc=*pa,*pb,*pcendl;}3.什么是数据对象的引用?对象的引用和对象的指针有什么区别?请用一个验证程序说明之。【解答】引用是为数据对象定义别名。引用与指针有以下几点区别:(1)引用名不是内存变量,而指针变量要开辟内存空间。(2)引用名需要在变量定义与变量名绑定,并且不能重定义;指针变量可以在程序中赋给不同的地址值,改变指向。(3)程序中用变量名和引用名访问对象的形式和效果一样;指针变量通过间址访问对象。验证程序:#includeiostreamusingnamespacestd;intmain(){inta;couta=;cina;intra=a;int*pa=&a;couta的值:aendl;couta的地址:&aendl;coutra的值:raendl;coutra的地址:&raendl;coutpa所指向的变量的值:*paendl;coutpa的地址:paendl;}4.数据对象在C++中有几种不同的访问方式?请编写一个程序验证之。【解答】数据对象在C++中的访问方式有:名访问,引用(别名)访问,间址访问。验证程序:#includeiostreamusingnamespacestd;intmain(){inta;couta=;cina;a=a+5;//名访问cout&aendl;//输出变量地址cout*(&a)endl;//地址访问,输出变量值int*pa=&a;//说明指针变量,指向变量acout*paendl;//间址访问,输出变量值int&ra=a;//ra是a的引用coutraendl;//引用访问,输出变量a的值}5.为了约束对数据对象的值进行只读操作,C++采用什么方式?请进行简要归纳。【解答】约束数据对象只读形式如下:约束对象说明形式标识常量const类型常量标识符=常量表达式;指针常量类型*const指针;指向常量的指针const类型*指针;或者类型const*指针;指向常量的指针常量const类型*const指针;或者类型const*const指针;常引用const类型&引用名=对象名;6.什么是表达式?表达式值的类型由什么因素决定?使用不同运算符连接以下3个变量,请写出5个以上获得值为true的表达式。inta=1,b=2;doublex=0.5;【解答】表达式是由数据和运算符,按求值规则,表达一个值的式子。表达式值的类型的决定因素为操作数的类型。(1)如果运算符左右操作数类型相同,运算结果也是相同类型。(2)如果运算符左右操作数类型不同,首先把类型较低(存储要求,示数能力较低)的数据转换成类型较高的数据,然后运算。(3)赋值表达式的类型由被赋值变量的类型决定。当把一个表达式的值赋给一个变量时,系统首先强制把运算值转换成变量的类型,然后执行写操作。6个值等于true的表达式:(1)ba&&ax(2)(a+b)!=x(3)a||(b+x)(4)a==(b*x)(5)a-bx(6)(a/x==b)7.阅读以下程序,分析下面语句序列中每一个字符“”和“&”的含义,并写出输出结果。#includeiostreamusingnamespacestd;intmain(){inta=10,b=20;intp=&a,q=&b;p=