(3) a+=a+b||e (4) a&b+c++ (5) -a&&b-c (6) k=b=c=a 解答:
本题主要考查表达式中运算符的优先级与结合性。请参阅表2.1。为了避免出错,建议读者在书写表达式时完整书写括号。 (1)答案为:(a+b)-((c--)%b)
(2)答案为:a>b?b:(c>d?a:(c 例题5:请根据下列题意写出相应的表达式。 (1) 有a、b、c、max四个变量a、b、c中的最大值,并将结果放入max中。 (2) 年龄在1到100之间(包含1和100,年龄用变量age表示)。 (3) 公式。 (4) 判断一年是否为闰年,年用year表示。满足下列两个条件之一即为闰年:① 能被4整除但不能被100整除 ②能被400整除。 解答: (1) 主要考查对条件表达式的理解和书写。答案为:max=a>b?(a>c?a:c):(b>c?b:c)。 (2) 主要考查对逻辑表达式的理解和书写。答案为:1<=age&&age<=100。 (3) 主要考查如何在计算机中表示一个数学公式。答案为:(a+b)*h/2。 (4) 主要考查对逻辑表达式的理解和书写。答案为: (year%4==0&&year0!=0)||(year@0==0)。 例题6:下列选项中两个表达式的运算结果相同的是( )。 (a)3/2和3.0/2.0 (b)3/2和3.0/2 (c) 3/2.0和3.0/2.0 (d) 3/2.0和3/2 解答: 本题考查数据类型及表达式中数据类型的隐式转换。3/2中两个操作数都为整型,运算结果仍为整型即1;3.0/2和3/2.0中一个操作数为整型另一个为浮点型,运算时整型隐式转换为浮点型,运算结果也为浮点型即1.5;3.0/2.0两个操作数均为浮点型,结果也为浮点型即1.5。答案为:(c)。 例题7: 下列程序的运行结果为:______________。 #include int a=2,b=4,i=0,x; x=a>b&&++i; cout<<\:\ cout<<\:\} 解答: 本题主要考查“短路”表达式的运算。对于表达式中的“与”运算而言,只要有一个操作数为假,结果为假。所以当第一个操作数为假时,不在求解其它操作数。对于表达式中的“或”运算而言,只要有一个操作数为真,则结果为真。所以当第一个操作数为真时,不在求解其它操作数。本题中a>b为假,所以表达式a>b&&++i为假,而++i没有执行。故i为0。答案 为:x:0 i:0 例题8:求解下列各表达式的值(其中x的值为100)。 (1) (a=1,b=2,c=3) (2) 1|3<<5 (3) 'a'+3&&!0%1 (4) x%2?“odd”:” even” 解答: (1) 逗号表达式的值是其最后一个表达式的值。答案为:3。 (2) <<运算符的优先级高于|运算符,所以先算3<<5结果为96(二进制1100000),然后与1 做按位与运算则结果为97(二进制1100001)。答案为:97。 (3) 参与本题的运算符,按优先级由高到低依次是:!运算符、算术运算符、逻辑运算符。 'a'+3时字符型首先隐式转换成整型然后相加结果为100,!0%1即1%1结果为0,100&&0结果为0。答案为:0。 (4) 算术表达式的优先级高于条件表达式,所以先算x%2结果为0,0?”odd”:”even”结 果为”even”。本题完成判断一个数是奇数还是偶数,若该数为奇数,则表达式的值为”odd”,为偶数,则表达式的值为”even”。答案为:”odd”。 例题9:下列程序运行结果为:_______________。 #include int a=23; double b=23.123456789; cout< cout< cout< cout< cout< cout< 解答: 本题主要考查对格式化输入输出的掌握。 ①本题主函数中第三行输出a,b,’\\t’为转义字符,其含义是跳过一个制表位。不设置输出宽度时,默认输出6位有效数字,超出部分四舍五入。所以该行输出为:23 23.1235。 ② setprecision(n)设置显示精度,最少显示一位有效数字。如果不重新设置,则其保持效力,所以使用完后要还原为6位默认值。第四行中设置setprecision(0)与setprecision(1)作用相同,结果显示一位有效数字即为:2e+001。 ③ setiosflags(ios::fixed)为固定的浮点显示,其后跟setprecision(n)表示小数点后显示精度为n。所以第五行输出结果为:23.1234568。 ④ setiosflags(ios::scientific)为指数显示,当其整数部分宽度大于设置的显示精度(默认为6位)时,以指数形式显示结果。否则根据设置的(或默认的)显示精度显示n位有效数字。所以第六行输出结果为:23.12346。 ⑤ setiosflags(ios::showbase)为指定在数值前输出进制。hex置基数为16,且该操作保持效力,所以使用完后应该恢复为默认值10进制。第九行输出结果为:0x17 0x17。 ⑥setw(n) 设域宽为n个字符,setfill(c) 设填充字符为c ,setiosflags(ios::left)为左对齐。第十一行输出结果为:23********。 答案为: 23 23.1235 2e+001 23.1234568 23.12346 0x17 0x17 23******** 【习题】 一、 选择题 1. 下列数据类型不是C++语言基本数据类型的是( )。 (a)字符型 (b)整型 (c)浮点型 (d)数组 一、 下列字符列中,可作为C++语言程序自定义标识符是( )。选择题 2. (a)x (b)-var (c)new (d)3i 3. 下列数中哪一个是8进制数( )。 (a)0x1g (b)010 (c)080 (d)01b 4. 已知a=1,b=2,c=3,则表达是++a||-b&&++c的值为( )。 (a)0 (b)1 (c)2 (d)3 5. 下列表达式选项中,( )是正确的。 (a)++(a++) (b)a++b (c)a+++b (d)a++++b 6. 已知枚举类型定义语句为:( )。 enum color{RED,BLUE,PINK=6,YELLOW,GREEN,PURPLE=15}; 则下列叙述中错误的是( )。 (a)枚举常量RED的值为1 (b)枚举常量BLUE的值为1 (c)枚举常量YELLOW的值为7 (d)枚举常量PURPLE的值为15 7. 下列程序的运行结果正确的是( )。 #include const double pi=3.1415926; cout< < < (a) 3.142 3.142 **3.14159260 (b) 3.14 3.142 **3.14159260 (c) 3.14 3.14 3.14159260** (d) 3.14 3.142 ***3.1415926 8. 若int x=3,y=5;则表达式x&y++%3的值为( )。 (a)0 (b)1 (c)2 (d)3 9. 下列常量正确的是( )。 (a) ”hello (b)1FL (c) 3.14UL (d) 1.8E-3 World” 10. 若char x=97;,则变量x包含几个字符( )。 (a)1个 (b)2个 (c)4个 (d)8个 二、 填空题 1. c++语言标示符是以字母或__________开头的,由字母、数字、下划线组成。 2. 在C++语言中,char型数据在内存中的存储形式是__________。 3. 在内存中,存储字符‘x’占用1个字节,存储字符串“x”要占用________个字节。 4. 符号常量可以用宏定义define和__________表示。 5. 转义字符序列中的首字符是_________。 6. 空字符串的长度是__________。 7. 表达式cout<<’\\n’;还可以表示为__________。 8. 若要为unsigned int定义一个新的名字UINT应采用的语句是__________。 9. 以下程序不借助第3个变量实现a,b值得交换,请填空。 #include int a,b; cout<<”输入a,b:”; cin>>a>>b; a=___a+b_______; b=_____a-b_____; a=______(a-b)/2; cout< 10. 大多数C++程序都要包含头文件__________。该文件中包含了所有输入/输出流操作 所需的基本信息。当使用带参数的操作时,程序中必须包含头文件__________。 三、 编程题 1. 编写一个程序,输入一个三位数,分别输出该数的百位、十位和个位。 2. 编写一个程序打印出各种基本数据类型、几个你自己定义的复合数据类型的大小。 使用sizeof运算符。 【参考答案】 一、 选择题 1. d 2. a 3. b 4. b 5. c 6. a 7. b 8. c 9. d 10. a 二、 填空题 1. 下划线 2. ASCII 3. 2 4. const 5. \\ 6. 0 7. cout< 8. typedef unsigned int UINT; 9. a+b a-b a-b 10. iomanip.h iostream.h 三、 编程题 1. #include int num,var1,var2,var3; cout<<\请输入一个三位数:\ cin>>num; if(num>999||num<100) //用于检查输入数据的合法性 cout<<\您的输入有误!\ else { var1=num/100; var2=(num-var1*100)/10; var3=num; cout<<\百位数为:\ <<\十位数为:\ <<\个位数为:\ } } 2. #include int array[10]; enum month{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}; char *p; cout<<\ <<\ <<\ <<\ <<\ <<\ <<\ <<\ <<\ <<\ <<\ <<\ }