1、《C++次第 方案 基础》〔第4版〕〔上〕 习题与解答 第1章 全然 数据与表达 式 1.1 选择 题 1.一个最复杂 的C++次第 ,可以 只需一个〔 C 〕。 〔A〕库函数 〔B〕自定义 函数 〔C〕main函数 〔D〕空函数 2.用C++语言 编写的源次第 要成为目的 次第 必须 求通过〔 D 〕。 〔A〕阐明 〔B〕汇编 〔C〕编辑 〔D〕编译 3.C++次第 中的复杂 语句必须 以〔 B 〕终了。 〔A〕冒号 〔B〕分号 〔C〕空格 〔D〕花括号 4.假设 有阐明 int a=0; double x=5.16;
2、那么在以下语句中,〔 C 〕属于编译差错 。 〔A〕x=a/x; 〔B〕x=x/a; 〔C〕a=a%x; 〔D〕x=x*a; 5.实行 C++次第 时出现的“溢出〞差错 属于〔 C 〕差错 。 〔A〕编译 〔B〕连接 〔C〕运行 〔D〕逻辑 6.在以下选项中,全部 全然 上 C++关键 字的选项为〔 C 〕。 〔A〕while IF Static 〔B〕break char go 〔C〕sizeof case extern 〔D〕switch float integer 7.按C++标识符的
3、语法则 那么,合理 的标识符是〔 A 〕。 〔A〕_abc 〔B〕new 〔C〕π 〔D〕"age" 8.在C++语句中,两个标识符之间〔 A 〕不克不迭 作为C++的离开 符。 〔A〕数字 〔B〕; 〔C〕: 〔D〕+ 9.以下精确 的八进制整型常量表示 是〔 B 〕。 〔A〕0a0 〔B〕015 〔C〕080 〔D〕0x10 10.以下差错 的十六进制整型常量表示 是〔 C 〕。 〔A〕0x11 〔B〕0xaf 〔C〕0xg 〔D〕0x1f 11.在以下选项中,全部 都合理 的浮点型数据的选项为〔 B 〕
4、 〔A〕-1e3.5 15. 2e-4 〔B〕12.34 -1e+5 0.1E-12 〔C〕0.2e-2 -12345. e-5 〔D〕5.0e〔1+4〕 0.1 8e+2 12.在以下选项中,精确 的字符常量为〔 D 〕。 〔A〕"a" 〔B〕'name' 〔C〕a 〔D〕'\101' 13.在以下选项中,〔 D 〕不克不迭 交换 变量a跟 b的值。 〔A〕t=b; b=a; a=t; 〔B〕a=a+b; b=a-b; a=a–b; 〔C〕t=a; a=b; b=t; 〔D〕
5、a=b; b=a; 14.关于 以下语句,表达 差错 的选项是〔 A 〕。 int i=10, *p=&i; 〔A〕p的值为10 〔B〕p指向整型变量i 〔C〕*p表示 变量i的值 〔D〕p的值是变量i的所在 15.有以下变量阐明,上面不精确 的赋值语句是〔 B 〕。 int a=5, b=10, c; int *p1 = &a, *p2 = &b; 〔A〕*p2 = b; 〔B〕p1 = a; 〔C〕p2 = p1; 〔D〕c = *p1 *(*p2); 16.有以下变量阐明,上面精确 的语句是〔 B 〕。 in
6、t a=10, b; int &pa=a, &pb=b; 〔A〕&pb = a; 〔B〕pb = pa; 〔C〕pb = &pa; 〔D〕*pb = *pa; 17.实行 上面语句序列后,a跟 b的值分不为〔 B 〕。 int a=5, b=3, t; int &ra=a; int &rb=b; t=ra; ra=rb; rb=t; 〔A〕3跟 3 〔B〕3跟 5 〔C〕5跟 3 〔D〕5跟 5 18.在以下运算符中,〔 D 〕优先级最高。 〔A〕<= 〔B〕*= 〔C〕+ 〔D〕* 19.在以下运算符中,〔 D 〕优先级最低。
7、 〔A〕! 〔B〕&& 〔C〕!= 〔D〕? : 20.已经清楚 int i=1, j=2;,那么表达 式 i+++j 的值为〔 C 〕。 〔A〕1 〔B〕2 〔C〕3 〔D〕4 21.已经清楚 int i=1, j=2;,那么表达 式 ++i+j 的值为〔 D 〕。 〔A〕1 〔B〕2 〔C〕3 〔D〕4 22.在以下表达 式选项中,〔 C 〕是精确 。 〔A〕++(a++) 〔B〕a++b 〔C〕a+++b 〔D〕a++++b 23.已经清楚 int i=0, j=1, k=2;,那么逻辑表达 式
8、 ++i||- -j&&++k 的值为〔 B 〕。
〔A〕0 〔B〕1 〔C〕2 〔D〕3
24.实行 以下语句后,x的值是〔 D 〕,y的值是〔 〕。
int x, y;
x=y=1; ++x || ++y;
〔A〕不判定 〔B〕0 〔C〕1 〔D〕2
25.设x为整型变量,不克不迭 精确 表达 数学关系 1<x<5 的C++逻辑表达 式是〔 A 〕。
〔A〕1< x <5 〔B〕x==2||x==3||x==4
〔C〕1
9、清楚 int x=5;,实行 以下语句后,x的值为〔 C 〕。 x+=x-=x*x; 〔A〕25 〔B〕40 〔C〕–40 〔D〕20 27.设 int a=1, b=2, c=3, d=4;,那么以下条件 表达 式的值为〔 A 〕。 a
10、 2.x{x[x(ax+b)+c]+d}+e 3.ln 4. 5.cot 6.lg(a2+ab+b2) 【解答】 1. 1/(1 + 1/(1 + 1/(x + y))) 2. x * ( x * ( x * ( a * x + b ) + c ) + d ) + e 3. log( 1 + pow( fabs( ( a + b )/( a – b ) ),10) 4. sqrt( 1 + 3.14159/2 * cos( 48 * 3.14159/180 ) ) 5. 1/tan( ( 1 -
11、 x*x )/( 1 + x*x)) 或者 cos( ( 1 - x*x )/( 1 + x*x ) )/sin( ( 1 - x*x )/( 1 + x*x ) ) 6. log10( a * a + a * b + b * b ) 1.3 用逻辑表达 式表示 以下条件 1.i 被j整除 2.n是小于正整数k的偶数 3.1≤x<10 4.x、y其中 有一个小于z 5.y[–100,–10],同时 y[10,100] 6.坐标点〔x, y〕落在以〔10, 20〕为圆心,以35为半径的圆内 7.三条边a,b跟 c形成 三角形 8.年份Year能被
12、4整除,但不克不迭 被100整除,或者 能被400整除
【解答】
1. i%j == 0 2.〔n
13、以下次第 ,写出运行 结果
1.
#include
14、amespace std;
int main()
{
int x,y,z,f;
x = y = z = 1;
f = --x || y-- && z++;
cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "z = " << z << endl;
cout << "f = " << f << endl;
}
【解答】
x=0
y=0
z=2
f=1
3.
#include
15、namespace std;
int main()
{
int a=123;
int &ra=a;
int *pa=&a;
cout< 16、储空间,并以该典范 阐明 存放的数据。
2.一般数据典范 变量跟 指针典范 变量的定义 、存储跟 应用 办法 有何区不?请编写一个次第 验证之。
【解答】
变量典范
定义
存储
应用 办法
数据
典范 标识符
数据值
通过名访征询 即开门见山 访征询 对变量内容把持
指针
典范 * 标识符
所在 值
通过指针变量的所在 值间址访征询 东西
验证次第 :
#include 17、
cin>>a>>b>>c; //对一般数据典范 变量赋值
int *pa=&a,*pb=&b,*pc=&c; //用变量所在 值初始化指针变量
cout<<"a,b,c= "< 18、pc< 19、espace std;
int main ()
{ int a;
cout<<"a=";
cin>>a;
int ra=a;
int *pa=&a;
cout<<"a的值:"< 20、办法 ?请编写一个次第 验证之。
【解答】
数据东西 在C++中的访征询 办法 有:名访征询 ,引用〔不名〕访征询 ,间址访征询 。
验证次第 :
#include 21、endl; //间址访征询 ,输出变量值
int &ra=a; //ra是a的引用
cout< 22、 * const 指针; 或者 典范 const * const 指针;
常引用
const 典范 & 引用名 = 东西 名;
6.什么是表达 式?表达 式值的典范 由什么因素 决定 ?应用 差异 运算符连接 以下3个变量,请写出5个以上获得值为true的表达 式。
int a=1, b=2; double x=0.5;
【解答】
表达 式是由数据跟 运算符,按求值规那么,表达 一个值的式子。
表达 式值的典范 的决定 因素 为把持 数的典范 。
〔1〕假设运算符左右 把持 数典范 一样,运算结果也是一样典范 。
〔2〕假设运算符左右 把持 23、 数典范 差异 ,起首 把典范 较低〔存储央求 ,示数才干较低〕的数据转换成典范 较高的数据,然后 运算。
〔3〕赋值表达 式的典范 由被赋值变量的典范 决定 。当把一个表达 式的值赋给一个变量时,系统起首 逼迫 把运算值转换成变量的典范 ,然后 实行 写把持 。
6个值等于 true的表达 式:
〔1〕b>a && a>x 〔2〕(a+b)!=x 〔3〕a||(b+x)
〔4〕a==(b*x) 〔5〕a-b 24、eam>
using namespace std;
int main()
{
int a=10, b=20;
int *p = &a, *q = &b;
*p = *p * *q;
int & ra = a;
ra=a;
int * & rt = q;
*rt = 30;
cout<<"a="< 25、lude 26、〞是间址访征询 符
cout<<"a="<
using namespace std;
int main()
{
int x,i,j,k;
cout << "please 27、input x:";
cin >> x;
i = x/100;
j = x/10 %10;
k = x%10;
cout << k << j << i << endl;
}
2.输出破 体上某点横坐标x跟 纵坐标y,假设 该点位于图1.11所示的方块地域 内,那么输出1;否那么,输出0。
图1.11 方形地域
【解答】
#include 28、> y;
b = ( -2<=x ) && ( x<=2 ) && ( -2<=y ) && ( y<=2 );
cout << b << endl;
}
3.输出3个整数,求出其中 最小数〔央求 应用 条件 表达 式〕。
【解答】
#include 29、 temp 30、 〔B〕 y = -1;
if( x >= 0 ) if( x != 0 )
if( x == 0 ) y = 0; if( x > 0 ) y = 1;
else y = -1; else y = 0
〔C〕 if( x <= 0 ) 〔D〕 y = -1;
if( x < 0 ) y = -1; if( x <= 0 )
els 31、e y = 0; if( x < 0 ) y = -1;
else y = 1; else y = 0;
3.假设 i=2,实行 以下语句后i的值为〔 B 〕。
switch( i )
{
case 1 : i ++;
case 2 : i --;
case 3 : ++ i; break;
case 4 : -- i;
default : i ++;
}
〔A〕1 〔B〕2 〔C〕3 〔D〕4
4.已经清楚 int i=0,x=0; 32、不才 面while语句实行 时循环 次数为〔 D 〕。
while( !x && i< 3 ) { x++; i++; }
〔A〕4 〔B〕3 〔C〕2 〔D〕1
5.已经清楚 int i=3;,不才 面do_while 语句实行 时的循环 次数为〔 B 〕。
do{ i--; cout< 33、 j--; }
〔A〕0 〔B〕5 〔C〕10 〔D〕无限
7.以下次第 段形成 去世 循环 的是〔 B 〕。
〔A〕int x; for( x=0; x<3; ) { x++; };
〔B〕int k = 0; do { ++k; } while( k>=0 );
〔C〕int a=5; while( a ) { a--; };
〔D〕int i=3; for(; i; i -- );
2.2 阅读 以下次第 ,写出运行 结果
1.
#include 34、t a,b,c,d,x;
a = c = 0; b = 1; d = 20;
if( a )
d = d-10;
else
if( !b )
if( !c )
x = 15;
else x = 25;
cout << d << endl;
}
【解答】
20
2.
#include 35、cout<<"a="<>gd;
//直到输出无效等级 ,否那么次第 不接着运 41、行
while(!((gd>='A' && gd<='E')||(gd>='a' && gd<='e')))
{ cout<<"Invalid grade! Please retry:";
cin>>gd;
}
if(gd=='A'||gd=='a') cout<<"\nScored 90-100!\n";
else if(gd=='B'||gd=='b') cout<<"\nScored 80-89!\n";
else if(gd=='C'||gd=='c') cout<<"\nScored 70-79!\n";
else if(gd== 42、'D'||gd=='d') cout<<"\nScored 60-69!\n";
else if(gd=='E'||gd=='e') cout<<"\nScore under 60!\n";
else cout<<"Unexpect error!\n"; //防止意外 差错
}
次第 〔2〕
//此次第 用switch输出等级 对应的分数段
//A->=90,B-(90,80],C-(80,70] ,D-(70,60],,E-<60
#include 43、using namespace std;
int main()
{ char gd;
cout<<"Enter the grade:";
cin>>gd;
//直到输出无效等级 ,否那么次第 不接着运行
while(!((gd>='A' && gd<='E')||(gd>='a' && gd<='e')))
{ cout<<"Invalid grade! Please retry:";
cin>>gd;
}
switch(gd)
{ case 'A':
case 'a': cout<<"\nScored 90-100!\n";break;
44、case 'B':
case 'b': cout<<"\nScored 80-89!\n";break;
case 'C':
case 'c':cout<<"\nScored 70-79!\n";break;
case 'D':
case 'd':cout<<"\nScored 60-69!\n";break;
case 'E':
case 'e':cout<<"\nScore under 60!\n";break;
default:cout<<"Unexpect error!\n";//防止意外 差错
}
}
2.什么叫做循环 把持 ?归纳 比较C++语言 中各种 45、 循环 把持 语句的语法、循环 条件 跟 循环 终了条件 的表示 办法 及实行 流程。
【解答】
循环 把持 是在特定的条件 下,次第 重复实行 一些特定举动 。
语句
语法
实行 流程
应用 途 所
while语句
while(表达 式)
循环 体;
循环 条件 :表达 式值为非0(真)
循环 终了条件 :表达 式值为0(假)
次第 中常用于按照条件 实行 把持 而不需关心 循环 次数的情况。
先揣摸 办法 循环 ,条件 不成破 时不进入循环 体。
do-while语句
do
循环 体
while(表达 式) 46、
循环 条件 :表达 式值为非0(真)
循环 终了条件 :表达 式值为0(假)
次第 中常用于按照条件 实行 把持 而不需关心 循环 次数。
后揣摸 办法 循环 ,至少实行 1次循环 体。
一般情况,while语句跟 do while语句可以 互换 应用 。
for 语句
for([表达 式1];[表达 式2];[表达 式3])
循环 体;
〔1〕表达 式1称为初始化表达 式,不是循环 体实行 局部。
〔2〕表达 式3称为后置表达 式,作为循环 体的最后一个实行 表达 式。
〔3〕循环 条件 :表达 式2值为非0〔真〕
47、循环 终了条件 :表达 式2值为0〔假〕
for语句称为步长循环 语句,素日 用于判定 循环 次数的情况。
由于 语句的3个表达 式均可以 缺省,也可以 用于条件 循环 ,即循环 次数不判定 的情况。
3.按照一个理论征询 题,用差异 的循环 语句编程,分析其优缺点 。
【解答】
略。
4.用if语句跟 goto语句结构 循环 ,改写上面第3题编写的次第 ,并分析在什么情况下可以 适当 应用 goto语句。
【解答】
在不破坏次第 全然 流程把持 的情况下,可以 适当 应用 goto语句完成 从语句结构内部向外的需要 跳转,即按特定条件 终了 48、结构语句块的实行 。
次第 略。
5. 有以下次第 ,希望 揣摸 两个输出的整数能否 相当 。次第 通过编译,但不克不迭 抵达预期结果。请分析次第 可以 通过C++编译而不克不迭 失落 失落 落 期望 结果的缘故。
#include 49、ndl;
}
运行 次第 ,输出a的值为4,b的值为9,表示 结果如下:
a: 4
b: 9
9等于 9
【解答】
在if语句的揣摸 表达 式(a=b)中,赋值号“=〞该当 是逻辑等“==〞。从语法上,C++的if语句把a=b谁人 赋值表达 式视为逻辑表达 式,不 编译差错 。a=b的值决定 于b。假设 b的输出值不等于 0,if语句的揣摸 表达 式作为逻辑真〔true〕,否那么作为逻辑假〔false〕。因此 ,题目 中输出b的值虽然不等于 a,但表达 式a=b为逻辑true,实行 了if语句的第1个分支。
2.4 编程题
1.输出某后生成 果,假设 效果在 50、85分以上,那么输出“very good〞;假设 效果在60~85分之间,那么输出“good〞;假设 效果低于60分,那么输出“no good〞。
【解答】
#include






