
第2章 C++语法基础 思专与练习 一、判斯想(正璃的在思后的括号内打·”,情误的在咖后的括号内打“X) 1.在变量定义tsum,SUM:中sum和SUM是两个相同的变量名。() 答案:X 解新:+中的图拉区分大小兰.故m和S代表不国的盟拉。这里思为玉国变量: 2.字符申ha在内存中占那的存储空闻是5个字节。() 答案:X 解新4山中。用夏明号“::”括起的字符序字行击。它在内在在结时以空字许“”结速占一 个字节的在结空,又一个字花占1个字节的存储空明,字护击”h四心本身有5个字抗。在加上一个空字 :极应占据的的空间是6个字节, 3.在C+语言中,"A和R是等价的,《 答案:× 解新4+业,用双引号”括起老的字许序品字符电,明单号“”场配米的最C+中的字并。 AA不等代, 4.C++表达式4/7和4.07的植是相幕的,且都为d0u6地型。() 答案:X 解新因4是整数,40是实数,位47参,407才为u恤型, 5,关氟表达式ab>℃等价于a=心对,时也等价于=b℃( 答案:× 解新:关系表达式c第价于b✉,但不等价于一的c,因为在C+中一这值 运夏抗。一为关题这按的整王。 6.数组是一种构通野数据,甲是若干相同类型的数累的集合。《) 答案:√ 解斯:助组头C请产中一种生常重要的数据水型,国干的通类型,数组是具有相四的数里类型日技二 光次序排的一州变量的患企体,均成一个导周的这生变量称数阁元素。 二,填空愿, 1.signedchar荧型的植域范围是 至之间的整数。 答案:-128+127 静新:由(有许号字抗型),字抗长度1字节。表元的数指放思长送-江, 2.m和61类型的数累分别占用—制个字节, 答案:44 解精:组和血水型的长度都为4,故其领型的超指也都为4, 3.10a磁和d0ute类型的数据分别占用一和一个字节. 答案:48 解桥1水型的长度方4,h:数型的长度为器.故求置的数据占用4个字5,h养型 的数湖占用8个字节。 4.b0ol和char黄型的最都分别占用一和 一个字节。 答案:11
第 2 章 C++语法基础 思考与练习 一、判断题(正确的在题后的括号内打“√”,错误的在题后的括号内打“×”) 1. 在变量定义 int sum , SUM; 中 sum 和 SUM 是两个相同的变量名。( ) 答案:× 解析:C++中的标识符区分大小写。故 sum 和 SUMe 代表不同的标识符,这里即为不同变量; 2. 字符串"china"在内存中占据的存储空间是 5 个字节。( ) 答案:× 解析:C++中,用双引号“" "”括起来的字符序列是字符串,它在内存存储时以空字符“\0”结束占一 个字节的存储空间,又一个字符占 1 个字节的存储空间,字符串"china"本身有 5 个字符,在加上一个空字 符,故应占据的存储空间是 6 个字节。 3. 在 C++语言中,”A”和’A’是等价的。( ) 答案:× 解析:C++中,用双引号“" "”括起来的字符序列是字符串,用单引号“'”括起来的是 C++中的字符, 故”A”和’A’不等价。 4. C++表达式 4/7 和 4.0/7 的值是相等的,且都为 double 型。( ) 答案:× 解析:因 4 是整数,4.0 是实数,故 4/7 为整型,4.0/7 才为 double 型。 5. 关系表达式 a=b>c 等价于 a=(b>c) ,同时也等价于 a==b>c。( ) 答案:× 解析:关系表达式 a=b>c 等价于 a=(b>c),但不等价于 a==b>c。因为在 C++中’=’为赋值 运算符,==为关系运算符的等于。 6. 数组是一种构造型数据,即是若干相同类型的数据的集合。( ) 答案:√ 解析:数组是 C 语言中一种非常重要的数据类型,属于构造类型。数组是具有相同的数据类型且按一 定次序排列的一组变量的集合体,构成一个数组的这些变量称为数组元素。 二、填空题: 1. signed char 类型的值域范围是 至 之间的整数。 答案:-128 +127 解析:signed char(有符号字符型),字符长度 1 字节,表示的数据范围是-128~127。 2. int 和 float 类型的数据分别占用 和 个字节。 答案:4 4 解析:int 和 float 类型的长度都为 4,故其类型的数据也都为 4。 3. float 和 double 类型的数据分别占用 和 个字节。 答案:4 8 解析:float 类型的长度为 4,double 类型的长度为 8,故 float 类型的数据占用 4 个字节,double 类型 的数据占用 8 个字节。 4. bool 和 char 类型的数据分别占用 和 个字节。 答案:1 1

解新型的长度为山,李型的长度:放李型的数那占用1个字整,小■为型的起 国小用1个字节, 5.unsigned shortint和m类堂的长度分别为一和一 答演:24 解物四如t(无行号整型)类型的长度为。世类型的长度为4.放mdht旦 的数温占用2个字节,美型的的据占用4个之节, 三、选舞想 1.设mta=12,共行完请句a+=a:=aa后,a的植是〔a A552日.264C.144D.-264 答整:D 解所1生热斤表法式·:里:到入以,接看热行表法式:■ eu三4,2成D 2,要求以下程序的功能是计算:8■1+12+13+=+110 oid main】 (l08t8=10 for Gint n=10:nz1.n-) 5■5+1 cout 0&8x>10 答案:A 解新>0的相反表达式为心0,0的相反表达式为>10,再将理辑与85改为速辑减:故选 A 4.D01y=5的相反表达式为《3, A.xc=0 llyt=5 B.xe=0 &&yhs Cx0■y=5 D.o0&6y==5 答老:B 解新>0的相反表达式为x《0.y5的相反表达式为5,用将湿氧发位为理细与8&.拉进日 5.设x和y均为b0c最。则×&8y为真的条料是() A它均为真B.其中一个为真 C.它们均为程D.其中一个为假 答案:A 解所多与亚到与运算的两个子表达式都为真时,与运草的表沾式才为真,战透A 8.设第和y均为b0c最,则xy为程的条件是《》. A它均为真B.其中一个为真 C.它们均为程D.其中个为餐
解析:bool 类型的长度为 1,char 类型的长度为 1,故 bool 类型的数据占用 1 个字节,char 类型的数 据占用 1 个字节。 5. unsigned short int 和 int 类型的长度分别为 和 。 答案:2 4 解析:unsigned short int(无符号短整型)类型的长度为 2,int 类型的长度为 4,故 unsigned short int 的数据占用 2 个字节,int 类型的数据占用 4 个字节。 三、选择题 1. 设 int a = 12,执行完语句 a + = a - = a * a 后,a 的值是( )。 A. 552 B. 264 C. 144 D. -264 答案:D 解析:先执行表达式 a - =a*a,即 a=a-a*a,则 a=12-12*12=-132;接着执行表达式 a=a+a,则 a=(-132)+(-132)=-264。故选 D 2. 要求以下程序的功能是计算:s = 1 + 1/2 + 1/3 + … +1/10 void main( ) { float s = 1.0; for (int n = 10; n > 1; n -- ) s = s + 1/n; cout 1; n -- ) C. s = s + 1/n; D. cout 0 && x10 B. x10 C. x0 && x>10 答案:A 解析:x>0 的相反表达式为 x10 ,再将逻辑与&&改为逻辑或||,故选 A。 4. x>0 || y==5 的相反表达式为( )。 A. x0 || y!=5 D. x>0 && y==5 答案:B 解析:x>0 的相反表达式为 x<=0,y==5 的相反表达式为 y!=5 ,再将逻辑或||改为逻辑与&&,故选 B。 5. 设 x 和 y 均为 bool 量,则 x && y 为真的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假 答案:A 解析:参与逻辑与运算的两个子表达式都为真时,与运算的表达式才为真,故选 A 6. 设 x 和 y 均为 bool 量,则 x || y 为假的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假

答案,C 解析:参与逐圳设写管的两个子表达式都为程时,或瑶章的表达式才为假。故境C 7.字符串a+612n的长度为《). A6B.7C.8D.9 答案:日 解种以下每行长度为: b 1 2 通【转义字中,后限n表示横行。n古长度I】 目.程定下列x和y均为t型变量,则不正确的献编为(): A.xmy++B.x++my++C.xm++y D.++x=++y 答案:日 所表达式x+与变量x不等,这样的表述式不能出现在量值运算行的左侧, 9.下列的符号常量定文中,储误的定文是(入 A.const M=10:B.const int M-20: C.const charch:D.const bool mark=true; 答案:C 黄定义符号常域时,必领为该常量初始化,国C的定义语句中浸有为由们始化,所以是情说的 建义请句,故选C, 四、耕析愿 1.假定有如下变量定文: int a=3.b=5.cm0: 10atx=25=82z=14: chah1=8h2='5'h3'0h4 要求计算下列表达式的值及坛算后表达式所港及的各变量的值。 Cxe(inty%a 答离:4.5 静1回物将y强制转换为整型数据8。格后计章=3归2,所以 Hm为-2542-5。 xz"b++bbx.b++ 答室:42,。为7,b为43 解所面旦号表达式,先执行=6+,得=14”5=7=6:然后共行-得b=6=2 量后执行b4,且延号表达式的值等于b4,即42,然后bW1,即b=43, c小4=小3-2+ch1 答室: ni的yz+r0nt▣ 答案:13 解m0-5.sAe-/1-8.所以ny2+BAng=5+8-13 国8b)8sc&sr-yi58b++
答案:C 解析:参与逻辑或运算的两个子表达式都为假时,或运算的表达式才为假,故选 C 7. 字符串”a+b=12\n”的长度为( )。 A. 6 B. 7 C. 8 D. 9 答案:B 解析:以下每行长度为 1: a + b = 1 2 \n 【转义字符\ ,后跟 n 表示换行,\n 占长度 1】 8. 假定下列 x 和 y 均为 int 型变量,则不正确的赋值为( )。 A. x+=y++ B. x++=y++ C. x=++y D. ++x=++y 答案:B 解析:表达式 x++与变量 x 不等,这样的表述式不能出现在赋值运算符的左侧。 9. 下列的符号常量定义中,错误的定义是( )。 A. const M=10; B. const int M=20; C. const char ch; D. const bool mark=true; 答案:C 解析:定义符号常量时,必须为该常量初始化, 而 C 的定义语句中没有为 ch 初始化,所以是错误的 定义语句,故选 C。 四 、辨析题 1. 假定有如下变量定义: int a=3,b=5,c=0; float x=2.5,y=8.2,z=1.4; char ch1=’a’,ch2=’5’,ch3=’0’,ch4; 要求计算下列表达式的值及运算后表达式所涉及的各变量的值。 ①x+(int)y%a 答案:4.5 解 析 : (int)y 将 y 强 制 转 换 为 整 型 数 据 8 , 然 后 计 算 8%a=8%3= 2 , 所 以 x+(int)y%a=2.5+2=4.5。 ②x=z*b++,b=b*x,b++ 答案:42,x 为 7,b 为 43 解析:逗号表达式,先执行 x=z*b++,得 x=1.4*5=7,b=6;然后执行 b=b*x,得 b=6*7=42; 最后执行 b++,且逗号表达式的值等于 b++,即 42,然后 b 增 1,即 b=43。 ③ch4=ch3-ch2+ch1 答案:’\’ ④int(y/z)+(int)y/(int)z 答案:13 解析:int(y/z)=5,(int)y/(int)z =8/1=8,所以 int(y/z)+(int)y/(int)z =5+8=13 ⑤!(a>b)&&c&&(x*=y)&&b++

答案:0,b为$ 脑所(理舞植为1,c亚算值为0,由于湿氧与近算中只要其中一个表达式的值为0, 则整个理辑表达式的值黄为0,所以P候或x一与域+的值为所b时+不序执行,放s为5, ach3o+=a°clk++ 暮案:1,e为0 新只要出提一个n右边不再悟。表达式中3逻相植0,b+=”逻辑的1,后 南的C中不再共行,放表达式的值为,变量g为以, ⑦z(a1) 答室:6 前折2的值为12.h1)的值为2,故Q-2》-6,6, 2判断下列厚生是常量,。哪年是度量。 ①const int n=i0 。为常量 新所:是定义常量的关键字,后面定义的n为常量, ②intm5 m为变量 团字符常量 ④char ch-gh为变量 @1 nt amray512345外 数组名为常量。数组元素为变量 新所数组名是指向该数烟首元素的常值细针,放为常量:数相元素值是可变的,故为 变量 char s0 Hello:数图麦量 新所:数组元素中的值是可变的,故也粹该数组序为数组变量, ⑦China° 字符申常量 解所下+话言中用双州号括起来的字符串是字节事常量。 3.将下列算式或叔运用C+麦达式提述, 0+ma+7(r-314 答表:P2+agrtisin0rsn+eegP作314 ②y仪y)+摆 答室:8yxy*x @a≠b≠c. 答案:a-bda=e最b ④bs20,并且字符ch不为0. 答:k0-0kkh- x3sin55◆gd(r=3.14) 若案:"x"“55*314/10满314 @}e2712 答案:10*e州ab制 a+为4r 将室:a+h-4满a+h
答案:0,b 为 5 解析:!(a>b)逻辑值为 1、c 逻辑值为 0,由于逻辑与运算中只要其中一个表达式的值为 0, 则整个逻辑表达式的值就为 0,所以!(a>b)&&c&&(x*=y)&&b++的值为 0;b++不再执行,故 b 为 5。 ⑥ch3||(b+=a*c)||c++ 答案:1,c 为 0 解析:只要出现一个 true,右边不再做。表达式中 ch3 逻辑值 0,(b+=a*c)逻辑值 1,后 面的 C++不再执行。故表达式的值为 1,变量 c 为 0。 ⑦z=(a>1) 答案:6 解析:(a>1) 的值为 2,故(a>1)=12/2=6,z=6。 2. 判断下列哪些是常量,哪些是变量。 ① const int n=10; n 为常量 解析:const 是定义常量的关键字,后面定义的 n 为常量。 ② int m=5; m 为变量 ③ 'a' 字符常量 ④ char ch='a' ch 为变量 ⑤ int array[5]={1,2,3,4,5}; 数组名为常量,数组元素为变量 解析:数组名是指向该数组首元素的常值指针,故为常量;数组元素值是可变的,故为 变量 ⑥ char s[]="Hello"; 数组变量 解析:数组元素中的值是可变的,故也将该数组称为数组变量。 ⑦ "China" 字符串常量 解析:C++语言中用双引号括起来的字符串是字符串常量。 3. 将下列算式或叙述用 C++表达式描述。 ① 2 2 sin ( ) 2 x c + + ( = 3.14 ) 答案:PI/2+aqrt(sin(x)* sin(x)+c*c) (PI=3.14) ② ay (x-y) +x 答案:a*y*(x-y)+x ③ a b c 。 答案:(a!=b)&&(a!=c)&&(b!=c) ④ b 20 ,并且字符 ch 不为'\0'。 答案:(k<=20)&&(ch!='\0') ⑤ 3 x d sin55 ( = 3.14 ) 答案:x*x*x*sin(55*3.14/180)/( 3.14*d) ⑥ 1 3 a b e − (e=2.71828) 答案:1.0/3*exp(a-b) ⑦ 2 4 b a b h a h t + − + 答案:(a+b*b*h-b/4)/(a+h/t)

me+×sin508-271828 答案:州a产i50*314n 五、程序编可那 1,第写一个程序,从健查输入梯形的上藏、下底和高的值(浮点数),计算并输出其面积, 答常: indudeciostream.h> woid main() Qd则A变量dd内象,分期表小梯形的上藏,下底,高和面积 C0U长请输入一个梯形的上底,下盛和高:” cinxxbdxxxodxxh s=(sd+xd)"h/2 Cous<”上底为ds一,下度为d高为s中国的稀形的南积为,<≤6n重 2.编写一个程序,将用户输入的数字(06)转换成粗应的星期值输出,如:用户输入3,则程序输 出0 dnesday.用户输入0.则输出3nd8y.如是用户输入的数摆不合法,则输出“dont know what you mean!". 答案 用样请句实现 indludeciostream.h woid maino { int n; C0uk请输入一个0-6之间的整数:“ Gn≥n ifin==1)coute<Monday: else if(n=-2)coutTuesday". eise if(n==3)couteeWednesday else if(nmm4)cout<"Thursday" else ifn=5)6ou长干1d es8in6)6e3ahu时dy else ifin=-0)coutc<"Sunday else coutee dont know whatyou meanfecendl 用i小实理 indudeiostream.h void main() int n; C0uK请输入一个0-6之闻的整数: cincon swilchinK case 1coutc"Monday"break case 2coutce"Tuesday"break;
⑧ sin50 a b e + (e=2.71828) 答案:exp(a+b)*sin(50*3.14/180) 五、程序编写题 1. 编写一个程序,从键盘输入梯形的上底、下底和高的值(浮点数),计算并输出其面积。 答案: #include void main() { float sd,xd,h,s;//变量 sd,xd,h,s,分别表示梯形的上底、下底、高和面积 cout>sd>>xd>>h; s=(sd+xd)*h/2; cout void main() { int n; cout>n; if(n==1) cout void main() { int n; cout>n; switch(n){ case 1:cout<<"Monday";break; case 2:cout<<"Tuesday";break;

case 3 coutWednesday"break. case 4 coutee"Thursday"break: Ca地5 cout<"Friday break case 6 cout"Saurday"break case Ocout<"Sunday"break; efaultcoutc<dontknew whatyou mean≤≤end }
case 3:cout<<"Wednesday";break; case 4:cout<<"Thursday";break; case 5:cout<<"Friday";break; case 6:cout<<"Saturday";break; case 0:cout<<"Sunday";break; default:cout<<"don't know what you mean!"<<endl; } }