习题 2
2.1 简述标识符定义。指出下列用户自己定
义的标识符中哪些是合法的?哪些是非法的?
如果是非法的,为什么?
答:
xy √ Book√ 3ab×(不能数字开头) x_2
√ switch×(保留字) integer√
page-1 × ( 不 能 包 含 “ - ” )
MyDesk√ #NO×(不能包含“#”)
y.5×(不能包含“.”)
char×(保留字)
_name √
2.2. C++语言中有哪些数据类型?
答:
整型
基本类型
实型
C++数据类型
字符型 char
无值型 void
数组
指针
导出类型
结构体
2.3 什么是常量?什么是变量?
答:
在程序执行过程中,其值不能被改变的量
类
图 2.1 C++的数据类型
共同体
称为常量。
在程序执行过程中,其值可以改变的量称
为变量。变量必须用标识符来命名。
2.4 下列常量的表示在 C++中是否合法?
若合法,指出常量的数据类型;若非法,指出
原因。
答:
-123 √(整型,十进制) 0321√(整型,
八 进 制 ) .567 √ ( 浮 点 型 , 十 进 制 小 数 )
1.25e2.4 ×(指数部分有“.”,必须是整
数)
32L√(长整型,十进制)
'\t'√(字符型,字符常量) "Computer"√
(字符型,字符串常量)
'x'√ (字符型,字符常量) "x"√(字符
型,字符串常量) '\85'×(85 不是八进数)
2.5 字符常量与字符串常量有什么区别?
答:
C++中字符常量为用单引号括起来的单个
字符,而字符串常量为用双引号括起来的多个
字符,且字符串最后加入结束标志’\0’。
2.6 求出下列算术表达式的值:
( 1 ) x+a%3*(int)(x+y)%2/4
x=2.5,y=4.7,a=7
设
答:
按优先级先计算强制类型转换:(int)
(2.5+4.7)=7
再 按 左 结 合 性 计 算 :
2/
*7
%
a%3*7%2/4=7%3*7%2/4=1
4=7%2/4=1/4=0
最后计算 x+0=2.5+0=2.5
( 2 ) (float)(a+b)/2-(int)x%(int)y
设
a=2,b=3,x=3.5,y=2.5
答:
按优先级先计算强制类型转换:(float)
(a+b)/2=5.0 /2=2.5
短整型 short int
整型 int
长整型 long int
最
单精度型 float
双精度型 double
(int)x%(int)y=(int)3.5%(int)2.5=3%2=1
后
计
算
(float)(a+b)/2-(int)x%(int)y=2.5-1=1.5
(3)'a'+x%3+5/2-'\24'
'a'+x%3+5/2-'\24'=97+8%3+5/2-24=97+2+2-
设 x=8
20=81
‘\24’为八进制,‘\24’=024(八进制)=2*8+4
(十进制)=20(十进制)
'a'的 ASCII 码为 97
2.7 写出以下程序的运行结果。
#include
void main(void)
{ int i,j,m,n;
i=8;j=10;
m=++i;n=j++;
//i=9
m=9 ,n=10 j=11
cout<(4)(a+b)/2*h
2.9 在 C++语言中如何表示“真”和“假”?
系统又是如何判断一个量的“真”和“假”的?
答:
C++语言中用“1”表示“真”,“0”表
示“假”。
系统判断“真”和“假”的方法为:一个
量非零为“真”,等于零为“假”
2.10 设有变量说明:
int a=3,b=2,c=1;
求出下列表达式的值:
(1)a>b
(2)a<=b
(3)a!=b
(4)(a>b)==c
(5)a-b==c
解:(1)1 (2) 0 (3)1 (4)1 (5)
1
2.11 设有变量说明:
int a=3,b=1,x=2,y=0;
求出下列表达式的值:
(1)(a>b)&& (x>y)
(2)a>b && x>y
(3)(y||b) && (y||a)
(4)
y||b && y||a
= 1 && 1=1
&& 1=1
(5)!a || a>b
解:(1)(a>b)&& (x>y)=(3>1) && (2>0)
(2)a>b && x>y=3>1 && 2>0 = 1
( 3 ) (y||b) && (y||a)= (0||1) &&
(0||3)=1 && 1=1
(4)y||b && y||a = y|| (b && y) ||a =0 ||
(1 && 0) || 3=0 || 0 || 3= 0 || 3 =1
(5)!a || a>b =!3 || 3>1 =0 || 1 =1
2.12 设有变量说明:
int w=3,x=10,z=7;
char ch='D';
求出下列表达式的值。
(1)w++||z++
(2)!w>z
(3)w && z
(4)x>10 || z<9 = 10>10 || 7<9 = 0 || 1 =1
(5 )ch>='A' && ch<='Z' = 'D'>='A' &&
'D'<='Z' =1 && 1 =1
2.13 设 a、b 的值分别为 6、7;指出分别运
算下列表达式后 a、b、c、d 的值。
(1)c=d=a
b+=b
(3)c=b/=a
d=(c=a/b+15)
(2)
(4)
解:
( 1 ) c=d=a
a=6,b=7,c=6,d=6
( 2 ) b+=b
a=6,b=14,c,d 不定
( 3 ) c=b/=a
a=6,b=1,b=1,c=1,d 不定
4
(
)
d=(c=6/7+15)=(c=0+15)=15
a=6,b=7,c=15,d=15
c=(d=6)
=6
b=b+b=14
c=(b=b/a)=(b=7/6)=1
d=(c=a/b+15)
2.14 设 a、b、c 的值分别为 5、8、9;指出
分别运算下列表达式后 x、y 的值。
(1)y=(a+b,b+c,c+a)
(2)x=a,y=x+b
解:
(1)y=(a+b,b+c,c+a) =(5+8,8+9,9+5)
=(13,17,14)=14
)
(
2
y=14
x=a,
(x=5,y=x+b)=(5,y=5+8)=(5,y=13)=13
y=13
y=x+b
=
x=5,
2.15 设计一个程序,从键盘输入一个圆的
半径,求其周长和面积。
解:
# include
void
{
main()
float r,L,S;
cout<<"请输入园的半径:";
cin>>r;
L=2*3.14*r;
S=r*r*3.14;
cout<<"r="<10 || z<9
w=4,z=8)
(5)ch>='A' && ch<='Z'
解:
(1)w++|| z++ = 3 || 7 =1 (先用后加,
(2)!w>z =!3 > 7 = 0 >7 = 0
(3)w && z = 3 && 7 =1
2.16 设计一个程序,从键盘输入一个小写
字母,将它转换成大写字母。
解:
# include
void
{
main()
char c,C;
cout<<"请输入小写字母:";
cin>>c;
C=c-0x20;
//此为十六进制,也可
以用十进制 C=c-32;
cout<<"C="<
# include
main()
{
int a,b,c,n,m;
cout<<"请输入三位十进制整数:";
cin>>n;
a=n/100;
b=n%100/10;
c=n%100%10;
m=c*100+b*10+a;
cout<<"m="<习题 3
3.1 程序的三种基本控制结构是什么?
答:
程序的三种基本控制结构是:顺序程序结
构、分支程序结构、循环结构程序结构。
3.2 C++语言中的语句分哪几类?
答:
C++语言中的语句分为 6 类,即:说明语
句、控制语句、函数调用语句、表达式语句、
空语句、复合语句。
3.3 怎样区分表达式和语句?
答:
表达式与语句的区别是:表达式不需要用
分号结尾,而语句必须以分号结尾。
3.4 程序的多路分支可通过哪二种语句来
实现?说出用这两种语句实现多路分支的区
别。
答:
程序的多路分支可用 if 语句嵌套实现与
switch 语句来实现。switch 语句只能用于条件表
达式的值为整型或字符型的场合,而 if 语句可
用于条件表达式为任意类型值的场合。
3.5 使用 switch 开关语句时应注意哪些问
题?
型;
答:
使用 switch 开关语句应注意:
(1)必须用 break 才能退出当前 case 语句;
(2)表达式值与常量值只能是整型或字符
(3)每个 case 后面的常量表达式的值必
实现当型循环结构。do while 用于实现直到型循
环结构。while、for 语句用于先判断循结束后执
行循环体场合,而 do while 用于先执行循环体
后判断循环结束的场合。
3.7 分支程序与循环程序常用于解决哪些
实际问题?
答 :
能够用分支与循环结构程序解决的实际问
题有:累加和、连乘积、求一批数的和及最大
值与最小值、求数列的前 n 项、判素数、求两
个整数的最大公约数和最小公倍数、用迭代法
求平方根、用穷举法求不定方程组的整数解、
打印图形等等。
3.8 continue 语句与 break 语句均用于循环
结构,在使用上有何区别?
答:
break 语句只能用在循环语句和 switch 语句
中,其功能是终止循环语句和 switch 语句的执
行。
continue 语句只能用在循环语句中,其功能
是结束本次循环,重新开始下一次循环。
3.9 程序的正常终止与异常终止有何区别,
分别用什么函数来实现?使用这些函数时应包
含什么头文件?
答:
程序的正常终止用 exit()函数来完成,此时
系统要做终止程序执行前的收尾工作,如关闭
该程序打开的文件。释放变量所占用的存储空
间(不包括动态分配的存储空间)等。
程序的异常终止用 abort ()函数来完成,系
统不做结束程序前的收尾工作,直接终止程序
的执行。
使用这两个函数时应包含 stdlib.h 头文
须互不相同;
件?
(4)case 后可有多个语句,而不必用花
括号。
3.6 用于实现循环结构的循环语句有哪三
种? 分别用于实现哪二种循环结构?这三种循
环语句在使用上有何区别?
答:
实 现 循 环 结 构 的 循 环 语 句 有 while 、do
while、for 三种语句。while、for 语句分别用于
3.10 写出下列程序的运行结果:
#include
void main(void)
{ int a=2,b=-1,c=2;
if (a}
解:运行结果:2
3.11 写出下列程序的运行结果:
#include
void main(void)
{ int i=10;
switch (i)
{ case 9:i=i+1;
case 10:i=i+1;
case 11:i=i+1;
default :i=i+1;
}
cout<
void main()
{ float x,y;
cout<<"please Input x:";
cin>>x;
if (x<2)
y=-x+2.5;
else if (x>=2 && x<4)
y=2-1.5*(x-3)*(x-3);
else
y=x/2-1.5;
cout<<"y="<
void main()
{ int i;
cout<<"请输入一个整数:";
cin>>i;
if (i>0)
if (i % 2==0)
cout<
void main()
{ int a,b,c,temp;
cout<<"please Input a,b,c:";
cin>>a>>b>>c;
if (a
void main()
{ float x,y;
cout<<"please
Input
palne
coordinate
(x,y):";
cin>>x>>y;
if (x>0 && y>0)
cout<<"("<0)
case
cout<0 && y<0)
cout<<"("<
void main()
{ float x,y;
char op;
cout<<"please Input x op y:";
cin>>x>>op>>y;
switch(op)
{
case
cout<
void main(void)
{ int a,b;
float r,tax,prise;
cout<<"please Input prize :";
cin>>a;
if (a>=5000)
b=10;
else
b=a/500;
switch(b)
{ case 0: r=0;break;
case 1: r=3;break;
case 2:
case 3: r=5;break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: r=8;break;
case 10: r=12;break;
default :cout<<"Input error!";
}
tax= a*r/100;
prise=a*(1-r/100);
cout<<"Tax rate:"<
void main(void)
{ int n=4;
while (--n)
cout<
void main(void)
{ int x=3;
do
cout<
void main(void)
{ int i=0,j=0,k=0,m;
for (m=0;m<4;m++)
switch (m)
{ case 0:i=m++;
case 1:j=m++;
case 2:k=m++;
case 3:m++;
}
cout<
void main()
{ int i,n;
float s;
cout<<"Please Input n:";
cin>>n;
s=0;
i=1;
while (i<=n)
{
s=s+1.0/i;
i++;
}
cout<<"s="<
void main()
{ int i,n;
float s;
cout<<"Please Input n:";
cin>>n;
for(s=0,i=1;i<=n;i++) s=s+1.0/i;
cout<<"s="<1),直到最后一项小于 10-4 为止。
解:用当型语句求解
方法一:
# include
# include
void main(void)
{ int i;
float x,y,z;
cout<<"Please Input x:";
cin>>x;
if (x>1)
{ i=1; y=1;