习题2
2.1 选择题
1.已知 int i=0, x=1, y=0;,在下列选项中,使i的值变成1的语句是( )。
(A)if(x&&y) i++;
(B)if(x==y) i++;
(C)if(x||y) i++;
(D)if(!x) i++;
2.设有函数关系为,下列选项中,能正确表示上述关系的是( )。
(A)
y = 1; if(x >= 0) if(x == 0) y = 0; else y=-1;
(B)
y = -1; if(x != 0) if(x > 0) y = 1; else y = 0
(C)
if(x <= 0) if(x < 0) y = -1; else y=0; else y=1;
(D)
y = -1; if(x <= 0) if(x < 0) y = -1; else y = 0;
3.假设i=2,执行下列语句后i的值为( )。
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;,在下面while语句执行时循环次数为( )。
while(!x && i< 3) { x++; i++; }
(A)4
(B)3
(C)2
(D)1
5.已知int i=3;,在下面do_while 语句执行时的循环次数为( )。
do{ i--; cout<<i<<endl;}while(i!= 1);
(A)1
(B)2
(C)3
(D)无限
6.下面for语句执行时的循环次数为( )。
int i, j; for (i=0, j=5;i=j;) { cout<<i<<j<< ndl; i++; j--; }
(A)0
(B)5
(C)10
(D)无限
7.以下程序段形成死循环的是( )。
(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<iostream> using namespace std; int main() { int 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; }
2.
#include<iostream> using namespace std; int main() { int a = 0, b = 1; switch(a) { case 0: switch(b) { case 0 : cout<<"a="<<a<<" b="<<b<<endl; break; case 1 : cout<<"a="<<a<<" b="<<b<<endl; break; } case 1: a++; b++; cout<<"a="<<a<<" b="<<b<<endl; } }
3.
#include<iostream> using namespace std; int main() { int i=1; while(i<=10) { if(++i % 3!=1)continue; else cout<<i<<endl; } }
4.
#include<iostream> using namespace std; int main() { int i=0,j=5; do { i++;j--; if (i>3) break; } while (j>0); cout << "i=" << i << endl << "j=" << j << endl; }
5.
#include<iostream> using namespace std; int main() { int i,j; for(i=1, j=5; i<j; i++) { j--; } cout<<i<<'\t'<<j<<endl; }
6.
#include<iostream> using namespace std; int main() { int i,s=0; for(i=0; i<5; i++) switch(i) { case 0: s+=i; break; case 1: s+=i; break; case 2: s+=i; break; default: s+=2; } cout<<"s="<<s<<endl; }
7.
#include<iostream> using namespace std; int main() { int i,j,x=0; for(i=0; i<=3; i++) { x++; for(j=0; j<=3; j++) { if(j % 2) continue; x++; } x++; } cout << "x=" << x << endl; }
2.3 思考题
1.C++语言中有什么形式的选择控制语句?归纳它们的语法形式、应用场合。根据一个实际问题使用不同的条件语句编程。
2.什么叫做循环控制?归纳比较C++语言中各种循环控制语句的语法、循环条件和循环结束条件的表示形式及执行流程。
3.根据一个实际问题,用不同的循环语句编程,分析其优缺点。
4.用if语句和goto语句组织循环,改写上面第3题编写的程序,并分析在什么情况下可以适当使用goto语句。
5. 有以下程序,希望判断两个输入的整数是否相等。程序通过编译,但不能达到预期结果。请分析程序能够通过C++编译而不能得到期望结果的原因。
#include<iostream> using namespace std; int main() { int a,b; cout<<"a:"; cin>>a; cout<<"b:"; cin>>b; if(a=b) cout<<a<<"等于"<<b<<endl;
else cout<<a<<"不等于"<<b<<endl; }
运行程序,输入a的值为4,b的值为9,显示结果如下:
a: 4 b: 9 9等于9
2.4 编程题
1.输入某学生成绩,若成绩在85分以上,则输出“very good”;若成绩在60~85分之间,则输出“good”;若成绩低于60分,则输出“no good”。
2.输入3个整数,按从小到大的顺序输出它们的值。
3.输入三角形的3条边,判别它们能否形成三角形,若能,则判断是等边、等腰三角形,还是一般三角形。
4.输入百分制成绩,并把它转换成五级分制,转换公式为:
5.编程模拟剪刀、石头和布游戏。游戏规则为:剪刀剪布,石头砸剪刀,布包石头。玩游戏者从键盘输入s(表示剪刀)或r(表示石头)或p(表示布),要求两个游戏者交替输入,计算机给出输赢的信息。
6.输入一个整数,输出该整数的所有素数因子。例如,输入120,输出为2、2、2、3和5。
7.使用迭代公式xn+1=(xn+a/xn)/2 (n=0,1,2…;x0 =a/2)编程求某一正整数a的平方根。
8.已知x=0 °, 10 °, 20 °, …, 180 °,求sinx,cosx和tanx的值。
9.在100~200之间找出满足用3除余2,用5除余3和用7除余2的所有整数。
10.求100~999之间的水仙花数。所谓水仙花数,是指一个3位数,它的每位数字的立方之和等于该数。例如,因为153=1 3+5 3+3 3,所以153为水仙花数。
11.求1000以内的所有完数。所谓完数,是指一个数恰好等于它的所有因子之和。例如,因为6=1+2+3,所以6为完数。
12.编写程序显示由符号组成的三角形图案。例如,程序运行后,
屏幕显示: How many lines? 用户输入: 5 屏幕显示: What character? 用户输入: *
则输出如下图案:
13.已知XYZ+YZZ=532,其中X,Y和Z为数字,编写程序求出X,Y和Z的值。