"<
return0;
}
4.用enum定义4个枚举常量Flase、FALSE、TRUE、True,使其值分别等于bool类型中的false、false、true、true。
想一想这样做的好处是什么?
若使用const来定义,则如何进行?
并比较这两种定义的优缺点。
答案:
enum{False=false,FALSE=false,TRUE=true,True=true};
好处:
因为VC++中对大小写是敏感的,为了防止用户输入中大小写出错的情况,所以分别又定义了表示true和false的两种形式。
constboolFalse=false;
constboolFALSE=false;
constboolTRUE=true;
constboolTrue=true;
优缺点:
用enum一次可以定义多个整型标识符变量,而const定义的标识符常量由其数据类型决定;
另外,用const定义看不出其关联性。
5.用const常量代替圆周率3.1415926,分别输入半径40和928.335,求圆面积。
要求先输出圆周率和半径,再输出其面积。
答案:
#include
usingnamespacestd;
constdoublePI=3.1415926;
intmain()
{
doubleradius1=40,radius2=928.335;
doublearea1,area2;
area1=PI*radius1*radius1;
area2=PI*radius2*radius2;
cout<<"圆周率:
"<"<"<cout<<"圆周率:
"<"<"<return0;
}
6.设学生人数是一个常数50,编程输出下列结果(双引号也要输出):
“Howmanystudentsinyourclass?
”
“50”
答案:
#include
usingnamespacestd;
constintSTDNO=50;
intmain()
{
cout<<'\"'<<"Howmanystudentsinyourclass?
"<<'\"';
cout<cout<<'\"'<return0;
}
7.设有语句:
charc1,c2,c3;
cin>>c1>>c2>>c3;
若在执行过程中,输入:
‘a’‘b’‘c’
则cin执行后,c1、c2、c3的值分别是什么?
若输入:
abcdef
则cin执行后,c1、c2、c3的值又分别是什么?
答案:
输入‘a’‘b’‘c’后,c1的值为‘,c2的值为a,c3的值为’
输入abcdef后,c1的值为a,c2的值为b,c3的值为c
8.设有语句:
inta,b,c;
cin>>hex>>a>>oct>>b>>dec>>c;
cout<若在执行过程中,输入:
121212
指出cin执行后,a、b、c的值分别是什么?
输出的结果是什么?
答案:
输出结果是:
121212
a、b、c的值分别是18,10和12
第三章运算符和表达式
1.将下列代数式写成C++的表达式:
(1)
=sqrt(pow(sin(x),2.5))
(2)
=((a+b)*h)/(2*m)
(3)
=exp(x*x)/sqrt(2*3.1415926)
2.求出下列算数表达式的值:
(1)5+7/3*4=13
(2)23.5+9/5+0.5=25.0
(3)8+2*9/2=17
(4)’a’+23=97+23=120
(5)设x=2.5,y=4.7,a=7
x+a%3*(int)(x+y)%2/4=2.5+1*int(7.2)%2/4=2.5+7%2/4=2.5+1/4=2.5
(6)设x=3.5,y=2.5,a=2,b=3
(float)(a+b)/2-(int)x%(int)y=2.5-1=1.5
(7)设x=8
‘a’+x%3+5/2-‘\24’=97+2+2-20=81
3.在下列表达式中,哪些是合法的赋值表达式?
哪些不是?
为什么?
(a,b,c,x,y都是已定义的int型变量)
(1)a=b=4.5+7.8是
(2)c=3.5+4.5=x=y=7.9不是,因为4.5是常量不能作为左值
(3)x=(y=4.5)*45是
(4)a=x++=++y不是,x++不能作为左值
4.写出下面表达式运算后a的值,设原来的a都是10.
(1)a+=a<=>a=a+a=20
(2)a%=(7%2)<=>a=a%(7%2)=10%1=0
(3)a*=3+4<=>a=a*(3+4)=70
(4)a/=a+a<=>a=a/(a+a)=10/20=0
(5)a-=a<=>a=a-a=0
(6)a+=a-=a*=a<=>a+=a-=100=>a+=0=>a=0
5.设m,n的值分别为10,8,指出下列表达式运算后a,b,c,和d的值。
(1)a=m+++n++=10+8=18
(2)b=m+++++n=10+9=19
(3)c=++m+++n=11+9=20
(4)d=m--+n++=10+8=18
6.设a,b,c的值分别为5,8,9;指出下列表达式运算后x,y和z的值
(1)y=(a+b,c+a)=(13,14)=14
(2)x=y=a,z=a+bx=5y=5z=13
(3)y=(x=a*b,x+x,x*x)=(x=40,80,1600)=1600x=40
(4)x=(y=a,z=a+b)=(y=5,z=13)=13y=5z=13
7.设有变量:
floatx,y;
inta,b;
指出运算下列表达式后x,y,a和b的值。
(1)x=a=3.523
x=3y为nulla=3b为null
(2)a=x=3.523
x=3.523y为nulla=3b为null
(3)x=a=y=3.523
x=3.0y=3.532a=3b为null
(4)b=x=(a=25,15/2)
x=7.5y为nulla=25b=7
8.若有charx=15;使得x的第0位(即二进制位的最右边的那一位,或称最低位)为0,其余位保持不变的赋值表达式是什么?
x=x&~1(其中1是由
即pow(2,0)算出来的)
9.用sizeof运算符编写一段测试程序,测试本机中各基本数据类型或字符串所占的字节数,并将其填写到下表中,然后分析其结果。
基本数据类型
所占字节数
基本数据类型或字符串
所占字节数
char
1
float
4
short
2
double
8
int
4
longdouble
8
long
4
“\nCh\t\v\0ina”
10
#include
usingnamespacestd;
intmain()
{
cout<<"char类型所占字节数为"<cout<<"short类型所占字节数为"<cout<<"int类型所占字节数为"<cout<<"long类型所占字节数为"<cout<<"float类型所占字节数为"<cout<<"double类型所占字节数为"<cout<<"longdouble类型所占字节数为"<cout<<"字符\nCh\t\v\0ina所占字节数为"<return0;
}
10.从键盘输入一个三位数,从左到右用a,b,c表示各位的数字,记为abc.现要求依次输出从右到左的各位数字,即输出另外三位数cba。
试设计程序。
#include
usingnamespacestd;
intmain()
{
intn,a,b,c,m;//n为输入的三位数,m为需要输出的三位数
cout<<"请输入一个三位数:
";
cin>>n;
if(n<=999&&n>=000)
{
c=n%10;
b=(n/10)%10;
a=((n/10)/10)%10;
m=c*100+b*10+a;
cout<<"数字"<}
else
cout<<"输入不正确"<return0;
}
第四章基本语句和基本程序结构
1.设有变量inta=3,b=4,c=5;求下列表达式的值:
(1)a+b>c&&b==c7>5&&4==5True&&FalseF
(2)a||b+c&&b>c3||9&&4>53||9&&F3||FT||FT
(3)!
a||!
c||bF||F||4T
(4)a*b&&c+a15&&8T
2.设a,b,c的值分别是15,18,19,指出下列表达式运算后x,y,a,b,c的值
(1)x=a
表达式运算:
x=T||c++=T此时x=T,a=15,b=18,c=19
(2)y=a>b&&c++
表达式运算:
y=F&&c++=F此时y=F,a=15,b=18,c=19
(3)x=a+b>c&&c++
表达式运算:
x=33>19&&c++=T此时x=T.a=15,b=18,c=20
(4)y=a||b++||c++
表达式运算:
y=T||b++||c++=T此时y=T,a=15,b=18,c=19
3.输入三个整数a,b,c要求按照从小到大的顺序输出
方法一:
#include
usingnamespacestd;
intmain()
{
inta,b,c,temp;
cout<<"请输入三个整数:
"<cin>>a>>b>>c;
if(a>b)/*如果a>b,交换a与b的值*/
{
temp=a;a=b;b=temp;
}
if(a>c)/*如果a>c,交换a与c的值*/
{
temp=a;a=c;c=temp;
}
if(b>c)/*如果b>c,交换b与c的值*/
{
temp=b;b=c;c=temp;
}
cout<<"这三个数从小到大的排列为"<cout<<"a="<cout<<"b="<
cout<<"c="<return0;
}
方法二:
#include
usingnamespacestd;
intmain()
{
inta,b,c,temp;
cout<<"请输入三个整数:
"<cin>>a>>b>>c;
if(a>b)/*如果a>b,交换a与b的值*/
{
temp=a;a=b;b=temp;
}
if(b>c)/*如果a>c,交换a与c的值*/
{
temp=b;b=c;c=temp;
}
if(a>b)/*如果b>c,交换b与c的值*/
{
temp=a;a=b;b=temp;
}
cout<<"这三个数从小到大的排列为"<cout<<"a="<<<"b="<
<<"c="<return0;
}
4.有一个数学函数
写一个程序,输入x,输出y.
#include
usingnamespacestd;
intmain()
{
intx,y;
cout<<"请输入x:
";
cin>>x;
if(x>=10)y=x-1;
elseif(x>1)y=2*x+2;
elsey=3*x*x+3*x-1;
cout<<"y的值为"<return0;
}
5.给出一个百分制的成绩,要求输出成绩为A,B,C,D.其中,85分以上为A,75~84分为B,65~74分为C,65分以下为D。
#include
usingnamespacestd;
intmain()
{
floatfScore;
cout<<"请输入一个百分制的成绩:
";
cin>>fScore;
if(fScore>100||fScore<0)
cout<<"输入的分数无效"<elseif(fScore>=85)
cout<<"A"<elseif(fScore>=75)
cout<<"B"<elseif(fScore>=65)
cout<<"C"<else
cout<<"D"<return0;
}
6.选(D)
7.求下列循环次数
(1)for(inti=0,x=0;!
x&&i<=5;i++)循环了6次
(2)while(inti=0)i--;循环了0次
(3)inti=5;
do{
cout<}While(i!
=0);
循环了无数次
8.编程求100以内被7或5整除的最大自然数
#include
usingnamespacestd;
intmain()
{
intmax;
for(inti=1;i<=100;i++)
{
if(i%5==0||i%7==0)max=i;
}
cout<<"这个最大的自然数是"<return0;
}
9.分析下列程序的输出结果
(1)x=5,y=4,z=1
(2)k=4
(3)<><><>#
10.Fibonacci数列中的前两个数是1和1,从第三个数开始,每个数等于前两个数之和。
编程计算并输出次数列中的前30个数。
#include
#include
usingnamespacestd;
intmain()
{
intsum=0,a=1,b=1;
for(inti=1;i<=6;i++)
{
for(intj=1;j<=5;j++)
{
if(i==1&&j<=2)
cout<else{
sum=a+b;
cout<a=b;
b=sum;
}
}
cout<}
return0;
}
11.编程求n!
,即
#include
#include
usingnamespacestd;
intmain()
{
intn,m=1;
cout<<"请输入n:
";
cin>>n;
for(inti=0;i=1;n--){m*=n;}*/
{
m*=(n-i);
}
cout<<"n的阶乘为"<return0;
}
12.从键盘上输入一个整数n的值,按下式求出y的值,并输出n和y的值(y用浮点数表示)
y=1!
+2!
+3!
+……+n!
方法一:
#include
#include
usingnamespacestd;
intmain()
{
intn,y=0,m=1;
cout<<"请输入n:
";
cin>>n;
for(intj=0;j{
for(inti=0;i{
m*=(n-i-j);
}
y+=m;
m=1;
}
cout<<"y的值为"<return0;
}
方法二:
#include
usingnamespacestd;
intmain()
{
intn,m=1;
doubley=0.0;
cout<<"请输入n:
";
cin>>n;
for(inti=1;i<=n;i++)
{
m*=i;y+=m;
}
cout<<"y的值为"<return0;
}
13.用泰勒级数求e的近似值,直到最后一项小于
为止。
方法一:
#include
#include
usingnamespacestd;
intmain()
{
doublee=0.0,m=1;
intn=1;
do{
m=m*(m+1);
n++;
}while(m<10*10*10*10*10*10);
for(intj=0;j{
m=1.0;
for(inti=0;i{
m*=(n-i-j);
}
e+=(1.0/m);
}
cout<<"e的值为"<return0;
}
方法二:
#include
using