📄 c++.txt
字号:
标准答案习题1
1.1 简述C++语言程序的结构特点。
答:
(1)C++程序由一个或多个函数组成,其中至少有一个主函数main(),程序从主函数开始执行,由主函数来调用其他函数。
(2)C++函数由说明部分与函数体组成,函数体由变量定义和执行语句两部分组成。其中函数体中语句和变量说明以分号结束。一般函数结构如下:
# 编译预处理命令
函数类型 <函数名>(形式参数)
{ /* 注释 */
变量说明;
执行语句; // 注释内容
}
(3)程序书写规则为同一层语句同列书写、内层语句缩进两个字符、函数定义在第一列书写。严格区分字母的大小写,即大写与小写代表两个不同变量。
(4)C++输入/输出通过流cin和cout来实现的
1.2 简述C++程序开发的步骤。
答:
(1)分析问题。根据实际问题,分析需求,确定解决方法,并用适当的工具描述它。
(2)编辑程序。编写C++源程序,并利用一个编辑器将源程序输入,保存到计算机中的某一个文件中。文件的扩展名为.cpp。
(3)编译程序。编译源程序,产生目标程序。目标程序文件的扩展名为.obj。
(4)连接程序。将一个或多个目标程序与库函数进行连接后,产生一个可执行文件。可执行文件的扩展名为.exe。
(5)运行调试程序。运行可执行文件,分析运行结果。若有错误进行调试修改。
在编译、连接和运行程序过程中,都有可能出现错误,此时要修改源程序,并重复以上过程,直到得到正确的结果为止。
1.3设计一个C++程序,输出以下信息:
***************
Hello!
***************
解:
# include <iostream.h>
void main()
{ cout<<" ***************"<<'\n';
cout<<" Hello!"<<'\n';
cout<<" ***************"<<'\n';
}
1.4设计一个C++程序,输入三个学生的成绩,求其总成绩。
解:
# include <iostream.h>
main()
{ int s1,s2,s3,sum;
cout<<"请输入三个学生的成绩:";
cin>>s1>>s2>>s3;
sum=s1+s2+s3;
cout<<"sum="<<sum<<'\n';
}
1.5设计一个C++程序,输入a、b二个整数,用sub()函数求两数之差。
解:
#include <iostream.h>
void main(void)
{ int sub(int x,int y);
int a,b,m;
cout<<"Input a,b:";
cin>>a>>b;
m=sub(a,b);
cout<<"a-b= "<<m<<endl;
}
int sub(int x,int y)
{ int z;
z=x-y;
return(z);
}
习题2
2.1简述标识符定义。指出下列用户自己定义的标识符中哪些是合法的?哪些是非法的?如果是非法的,为什么?
答:
xy √ Book√ 3ab×(不能数字开头) x_2 √ switch×(保留字) integer√
page-1×(不能包含“-”) _name√ MyDesk√ #NO×(不能包含“#”)
y.5×(不能包含“.”) char×(保留字)
2.2. C++语言中有哪些数据类型?
答: C++数据类型
基本类型
导出类型
整型
实型
字符型 char
无值型 void
短整型 short int
整型 int
长整型 long int
单精度型 float
双精度型 double
数组
指针
结构体
共同体
类
图2.1 C++的数据类型
2.3 什么是常量?什么是变量?
答:
在程序执行过程中,其值不能被改变的量称为常量。
在程序执行过程中,其值可以改变的量称为变量。变量必须用标识符来命名。
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
再按左结合性计算:a%3*7%2/4=7%3*7%2/4=1 *7 % 2/ 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
(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' 设x=8
'a'+x%3+5/2-'\24'=97+8%3+5/2-24=97+2+2-20=81
‘\24’为八进制,‘\24’=024(八进制)=2*8+4(十进制)=20(十进制)
'a'的ASCII码为97
2.7 写出以下程序的运行结果。
#include <iostream.h>
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<<i<<'\t'<<j<<'\n';
cout<<m<<'\t'<<n<<'\n';
}
答:
程序运行结果:
9 11
9 10
2.8 将下列数学表达式写成C++中的算术表达式。
(1) (2)
(3) (4)h
解:算术表达式
(1) (a+b)/(x-y)
(2)sqrt(p*(p-a)*(p-b)*(p-c))
(3)sin(x)/2/m 或 sin(x)/(2*m)
(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
(5)!a || a>b
解: (1)(a>b)&& (x>y)=(3>1) && (2>0) = 1 && 1=1
(2)a>b && x>y=3>1 && 2>0 = 1 && 1=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
(5)ch>='A' && ch<='Z'
解:
(1)w++|| z++ = 3 || 7 =1 (先用后加,w=4,z=8)
(2)!w>z =!3 > 7 = 0 >7 = 0
(3)w && z = 3 && 7 =1
(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 (2)b+=b
(3)c=b/=a (4)d=(c=a/b+15)
解:
(1)c=d=a c=(d=6) =6 a=6,b=7,c=6,d=6
(2)b+=b b=b+b=14 a=6,b=14,c,d不定
(3)c=b/=a c=(b=b/a)=(b=7/6)=1 a=6,b=1,b=1,c=1,d不定
(4)d=(c=a/b+15) d=(c=6/7+15)=(c=0+15)=15 a=6,b=7,c=15,d=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 y=14
(2)x=a, y=x+b = (x=5,y=x+b)=(5,y=5+8)=(5,y=13)=13 x=5, y=13
2.15设计一个程序,从键盘输入一个圆的半径,求其周长和面积。
解:
# include <iostream.h>
void main()
{ float r,L,S;
cout<<"请输入园的半径:";
cin>>r;
L=2*3.14*r;
S=r*r*3.14;
cout<<"r="<<r<<'\n';
cout<<"L="<<L<<endl;
cout<<"S="<<S<<endl;
}
2.16设计一个程序,从键盘输入一个小写字母,将它转换成大写字母。
解:
# include <iostream.h>
void main()
{ char c,C;
cout<<"请输入小写字母:";
cin>>c;
C=c-0x20; //此为十六进制,也可以用十进制 C=c-32;
cout<<"C="<<C<<'\n';
}
2.17从键盘输入一个三位数abc,从左到右用a、b、c表示各位的数字,现要求依次输出从右到左的各位数字,即输出另一个三位数cba,例如:输入123,输出321,试设计程序。(算法提示:a=n/100,b=(n-a*100)/10,c=(n-a*100)%10,m=c*100+b*10+a)
解:
# include <iostream.h>
# include <math.h>
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="<<m<<'\n';
}
习题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后面的常量表达式的值必须互不相同;
(4)case后可有多个语句,而不必用花括号。
3.6 用于实现循环结构的循环语句有哪三种? 分别用于实现哪二种循环结构?这三种循环语句在使用上有何区别?
答:
实现循环结构的循环语句有while 、do while、for三种语句。while、for语句分别用于实现当型循环结构。do
while用于实现直到型循环结构。while、for语句用于先判断循结束后执行循环体场合,而do while用于先执行循环体后判断循环结束的场合。
3.7 分支程序与循环程序常用于解决哪些实际问题?
答 :
能够用分支与循环结构程序解决的实际问题有:累加和、连乘积、求一批数的和及最大值与最小值、求数列的前n项、判素数、求两个整数的最大公约数和最小公倍数、用迭代法求平方根、用穷举法求不定方程组的整数解、打印图形等等。
3.8 continue语句与break语句均用于循环结构,在使用上有何区别?
答:
break语句只能用在循环语句和switch语句中,其功能是终止循环语句和switch语句的执行。
continue语句只能用在循环语句中,其功能是结束本次循环,重新开始下一次循环。
3.9程序的正常终止与异常终止有何区别,分别用什么函数来实现?使用这些函数时应包含什么头文件?
答:
程序的正常终止用exit()函数来完成,此时系统要做终止程序执行前的收尾工作,如关闭该程序打开的文件。释放变量所占用的存储空间(不包括动态分配的存储空间)等。
程序的异常终止用abort ()函数来完成,系统不做结束程序前的收尾工作,直接终止程序的执行。
使用这两个函数时应包含stdlib.h头文件?
3.10 写出下列程序的运行结果:
#include <iostream.h>
void main(void)
{ int a=2,b=-1,c=2;
if (a<b)
if (b<0) c=0;
else c=c+1;
cout<<c<<endl;
}
解:运行结果:2
3.11写出下列程序的运行结果:
#include <iostream.h>
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<<i<<endl;
}
解:运行结果:13
3.12 设计一个程序,判断从键盘输入的整数的正负性和奇偶性。
解:
# include <iostream.h>
void main()
{ int i;
cout<<"请输入一个整数:";
cin>>i;
if (i>0)
if (i % 2==0)
cout<<i<<" is positive even number"<<endl;
else
cout<<i<<" is positive odd number"<<endl;
else
if (i % 2==0)
cout<<i<<" is negative even number"<<endl;
else
cout<<i<<" is negative odd number"<<endl;
}
3.13 有下列函数:
-x+2.5 (x<2)
y= 2-1.5(x-3)2 (2≤x<4)
-1.5 (x≥4)
设计一个程序,从键盘输入x的值,输出y的值。
解:
# include <iostream.h>
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="<<y<<endl;
}
3.14设计一个程序,从键盘输入a、b、c三个整数,将它们按照从大到小的次序输出。
解:
# include <iostream.h>
void main()
{ int a,b,c,temp;
cout<<"please Input a,b,c:";
cin>>a>>b>>c;
if (a<b)
{temp=a;a=b;b=temp;} //a与b交换
if (a<c)
{temp=a;a=c;c=temp;} //a与c交换
if (b<c)
{temp=b;b=c;c=temp;} //b与c交换
cout<<a<<'\t'<<b<<'\t'<<c<<endl;
}
3.15 输入平面直角坐标系中一点的坐标值(x,y),判断该点是在那一个象限中或那一条坐标轴上。
解:
# include <iostream.h>
void main()
{ float x,y;
cout<<"please Input palne coordinate (x,y):";
cin>>x>>y;
if (x>0 && y>0)
cout<<"("<<x<<","<<y<<")"<<" is in first quadrant"<<endl;
else if (x<0 && y>0)
cout<<"("<<x<<","<<y<<")"<<" is in Second quadrant"<<endl;
else if (x<0 && y<0)
cout<<"("<<x<<","<<y<<")"<<" is in third quadrant"<<endl;
else if (x>0 && y<0)
cout<<"("<<x<<","<<y<<")"<<" is in four quadrant"<<endl;
else if (x==0 && y==0)
cout<<"("<<x<<","<<y<<")"<<" is on origin"<<endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -