您的位置:  首页 > 鸿蒙 > 正文

高级语言程序设计C++ 第二章 程序控制结构

2021-07-17 15:54 管理员 次阅读 条评论
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++; 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:C
问题解析:
2.  假设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 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
3.  已知int i=0,x=0; ,在下面while语句执行时循环次数为(  )。 
  while( !x && i< 3 ) { x++; i++; } 
  A.1  B.2  C.3  D.4 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:
4.  已知int i=3; ,在下面do_while  语句执行时的循环次数为(  )。 
  do{ i--; cout<<i<<endl;}while (i!= 1); 
  A.1  B.2  C.3  D.4 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
5. 

 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
6.  以下程序段形成死循环的是(  )。
  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 ); 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
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 -- ); 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
8.  已知int x=3; ,则下面这段程序的执行结果是(  )。 
  do
  cout<<(x-=2);
  while(!(-x));
  A.0  B.1  C.30  D.无限循环 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
9.  在while(!a)中,!a与(  )等价。
  A.a==0  B.a==1  C.a!=1  D.a!=0 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:
10.  下面这段程序的执行后,变量i的值为(  )。
  int i = 10;
  switch(i)
  {
  case 9: i+=1;
  case 10: i+=1;
  case 11: i+=1;
  default: i+=1;
  }
  A.10  B.11  C.12  D.13 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:D
问题解析:
11.  对下面这三条语句,正确的说法是(  )。
  (1)if(a)s1;else s2;
  (2)if(a==0)s2;else s1;
  (3)if(a!=0)s1;else s2;
  A.三者互相等价  B.三者互不不等价
  C.只有(2)和(3)等价  D.以上说法均不对 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:
12.  对if语句中的表达式类型,下面正确的说法是(  )。
  A.必须是关系表达式
  B.必须是关系表达式或逻辑表达式
  C.必须是关系表达式或算数表达式
  D.以上说法均不对 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:D
问题解析:
13.  while和do-while循环的主要区别是(  )。
  A.do-while的循环体至少执行一次。
  B.while的循环控制条件比do-while严格。
  C.do-while允许从外部转入循环体内。
  D.do-while的循环体不能是复合语句。 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:
14.  下面哪个不是C++的循环语句(  )。
  A.switch  B.while  C.do-while  D.for 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:
15.  下面代码中循环体的执行次数为(  )。
  int a=5, b=1;
  while(a-b) {a--;b++;}
  A.1  B.2  C.3  D.4 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
16.  下面代码执行之后,变量sum的值为(  )。
  int i=5, sum=0;
  while(i--) {sum+=i%2;}
  A.1  B.2  C.3  D.4 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:B
问题解析:
17.  下面代码的输出结果为(  )。
  for(int i=1;i<=10;i++)
  if(!(i%3)) cout<<i<<” ”;
  A.1 2 3  B.1 2 4 5  C.3 6 9  D. 4 5 6 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:C
问题解析:
18.  下面代码的输出结果为(  )。
  char ch= ‘A’;
  switch(ch)
  {
  case ‘A’: ch++;
  case ‘B’: ch++;
  case ‘C’: ch++;
  }
  cout<<ch<<endl;
  A.A  B.B  C.C  D. D 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:D
问题解析:
19.  与 for(表达式1; 表达式2; 表达式3){循环体} 功能相同的语句为(  )。
  A.表达式1; while(表达式2){循环体; 表达式3;}
  B.表达式1; while(表达式2){表达式3; 循环体;} 
  C.表达式1; do{循环体; 表达式3;} while(表达式2);
  D.表达式1; do{表达式3; 循环体;} while(表达式2); 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:
20.  下列语句中(  )是死循环。
  A.int k=10; while(k=3) k=k-1;
  B.int k=10; while(k!=3) k=k-1;
  C.int k=10; while(k>3) k=k-1;
  D.int k=10; while(k<3) k=k-1; 
答题:  A.  B.  C.  D. (已提交)
-->
参考答案:A
问题解析:

思考题

1. C++中有什么形式的选择控制语句?归纳它们语法形式、应用场合。根据一个实际问题使用不同的条件语句编程。

【解答】

语句使用方式使用场合
if语句if(表达式)语句1;
else 语句2;
需要对给定的条件进行判断,并根据判断的结果选择不同的操作。
适用于复杂的条件表达式判断。
switch 语句switch(表达式)
{ case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
……
case 常量表达式n; 语句n;
[default :  语句n+1;]
}
根据整型表达式的不同值决定程序分支的情况。
适用于判断表达式简单,需要多个分支处理的情况。

演示程序:

程序(1)

//此程序用if输出等级对应的分数段

//A->=90,B-(90,80],C-(80,70] ,D-(70,60],,E-<60

#include<iostream>

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;

 }

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=='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<iostream>

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;

 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++中各种循环控制语句的语法、循环条件和循环结束条件的表示形式及执行流程。

【解答】

循环控制是在特定的条件下,程序重复执行一些特定动作。

语句语法执行流程使用场合
while语句while(表达式)
循环体; 循环条件:表达式值为非0(真)
循环结束条件:表达式值为0(假)
程序中常用于根据条件执行操作而不需关心循环次数的情况。
先判断形式循环,条件不成立时不进入循环体。
do-while语句do
循环体
while(表达式); 循环条件:表达式值为非0(真)
循环结束条件:表达式值为0(假)
程序中常用于根据条件执行操作而不需关心循环次数。
后判断形式循环,至少执行1次循环体。
一般情况,while语句和do while语句可以互换使用。
for 语句for([表达式1];[表达式2];[表达式3])
循环体; (1)表达式1称为初始化表达式,不是循环体执行部分。
(2)表达式3称为后置表达式,作为循环体的最后一个执行表达式。(3)循环条件:表达式2值为非0(真)
循环结束条件:表达式2值为0(假)
for语句称为步长循环语句,通常用于确定循环次数的情况。
由于语句的3个表达式均可以缺省,也可以用于条件循环,即循环次数不确定的情况。

3. 根据一个实际问题,用不同的循环语句编程,分析其优缺点。

【解答】

略。

4. 用if语句和goto语句组织循环,改写思考题的第3小题编写的程序。分析在什么情况下可以适当使用goto语句。

【解答】

在不破坏程序基本流程控制的情况下,可以适当使用goto语句实现从语句结构内部向外的必要跳转,即按特定条件结束结构语句块的执行。

程序略。

5.有以下程序

#include<iostream>

using namespace std;

int main()

{ char c;

 cin>>c;

 if(c=='y'||c=='Y')

  int a=1;

 else

  int a=0;

 cout<<"a="<<a<<endl;

}

编译错误为:error C2065: 'a' : undeclared identifier,指示语句行

cout<<"a="<<a<<endl;

变量a没有定义。请分析原因,并做出修改。

【解答】

程序在if和else分支中分别声明了各自的局部变量a,而执行输出语句时,声明的变量a作用域已经结束,所以编译器认为输出语句的a没有定义。正确的程序是:

#include<iostream>

using namespace std;

int main()

{ char c;

 int a;

 cin>>c;

 if(c=='y'||c=='Y')

  a=1;

else

  a=0;

cout<<"a="<<a<<endl;

}

6. 有以下程序,希望判断两个输入的整数是否相等。程序通过编译,但不能达到预期结果。请分析程序能够通过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

【解答】

在if语句的判断表达式(a=b)中,赋值号“=”应该是逻辑等“==”。从语法上,C++的if语句把a=b这个赋值表达式视为逻辑表达式,没有编译错误。a=b的值决定于b。若b的输入值不等于0,if作为逻辑真(true),否则作为逻辑假(false)。所以,题目中输入b的值虽然不等于a,但表达式a=b为逻辑true,执行了if语句的第1个分支。

程序设计

1.输入某学生成绩,若成绩在85分以上输出“very good”,若成绩在60分到85分之间输出“good”,若成绩低于60分输出“no good”。

【解答】

#include<iostream>

using namespace std;

int main()

{

 double score;

 cout << "please input score:";

 cin >> score

 if ( score>=85 ) cout << "Very good!" ;

 else  if ( score>=60 ) cout << "Good!";

   else cout << "No good!";

}

2.输入三个整数,按从小到大的顺序输出它们的值。

【解答】

#include<iostream>

using namespace std;

int main()

{

 int a, b, c, t;

 cout << "a, b, c=";

 cin >> a >> b >> c;

 if(a>b) { t=a; a=b; b=t; }

 if(a>c) { t=a; a=c; c=t; }

 if(b>c) { t=b; b=c; c=t; }

 cout<< a << '\t'<< b << '\t' << c << endl;

}

3.编程序模拟剪刀、石头和纸游戏。游戏规则为:剪刀剪纸,石头砸剪刀,纸包石头。玩游戏者从键盘上输入s(表示剪刀)或r(表示石头)或p(表示纸),要求两个游戏者交替输入,计算机给出输赢的信息。

【解答】

#include<iostream>

using namespace std;

int main()

{

 char first,second;

 cout << "First input( s,r or p ):";

 cin >> first;

 cout << "Second input( s,r or p ):";

 cin >> second;

 switch  ( first )

 {

  case  's':

   switch  ( second )

   {

    case  's': cout << "Scissor ties scissor." << endl; goto end;  

    case  'r': cout << "Scissor is crushed by rock." << endl; goto end;

    case  'p': cout << "Scissor cuts paper." << endl; goto end;                  

    default :  cout << "second input error!" << endl ; goto end;

   }

  case  'r':

   switch  ( second )

   {

    case  's': cout << "Rock crushes scissor." << endl; goto end;  

    case  'r': cout << "Rock ties rock." << endl; goto end;

    case  'p': cout << "Rock is wrapped by paper." << endl; goto end; 

    default :  cout << "second input error!" << endl; goto end;

   }

   case  'p':

    switch  ( second )

    {

    case  's': cout << "Paper is cut by scissor." << endl; goto end;  

    case  'r': cout << "Paper wraps the rock." << endl; goto end;

    case  'p': cout << "Paper ties paper." << endl; goto end; 

    default :  cout << "second input error!" << endl; goto end;

    }

  default : cout << "First input error!" << endl; goto end;

  }

 end: ;

}

4. 输入一个整数,输出该整数的所有素数因子。例如,输入120,输出为2、2、2、3和5。

【解答】

#include<iostream>

using namespace std;

int main()

{

 int m,i = 2;

 cout << "please input m:";

 cin >> m;

 while( i<=m )

  if( m % i == 0 )

   {  cout << i << ",";

    m = m / i;

   }

  else i++;

}

5. 使用迭代公式xn+1=(xn+a/xn)/2(n=0,1,2,……,x0=a/2)编程序求某一正整数a的平方根。

【解答】

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

 const double eps = 1e-8;

 double a,x0,x;

 cout << "please input a:";

 cin >> a;

 x0 = a / 2;

 x = ( x0 + a/x0 )/2;

 while( fabs( x-x0 )>eps )

 { 

  x0 = x; 

  x =( x0 + a/x0 )/2;

 }

 cout << x << endl;

}

6. 求100到999中的水仙花数。所谓水仙花数是指一个三位数,它的每位数字的立方之和等于该数。例如,因为153=13+53+33,所以153为水仙花数。

【解答】

#include<iostream>

using namespace std;

int main()

{

 int i,a,b,c;

 for( i=100; i<=999; i++ )

  { 

   a = i/100;

   b = ( i-a*100 ) / 10;

   c = i - a*100 - b*10;

   if ( i == a*a*a + b*b*b + c*c*c )

     cout << i <<endl;

   }

}

7. 编一程序显示由符号组成的三角形图案。例如,程序运行后,

屏幕显示:    How many lines ?

用户输入:    5

屏幕显示:    What character ?

用户输入:    *

则输出如下图案。

*

* * *

* * * * *

* * * * * * *

* * * * * * * * *

【解答】

#include<iostream>

using namespace std;

int main()

{

 int i,j,k,n;

 char ch;

 cout<<"How many lines ?\n";

 cin>>n;

 cout<<"What character ?\n";

 cin>>ch;

 for( i=1; i<=n; i++ )

  { 

   for( k=1; k<=n-i; k++ ) cout << " ";

   for( j=1; j<=2*i-1; j++ ) cout << ch ;

   cout << endl;   }

}

8. 已知XYZ+YZZ=532,其中X,Y和Z为数字,编一程序求出X,Y和Z的值。

【解答】

#include<iostream>

using namespace std;

int main()

{

 int x,y,z,i;

  for( x=1; x<=9; x++ )

   for( y=1; y<=9; y++ )

    for( z=0; z<=9; z++ )

     {  i = 100*x + 10*y + z + 100*y + 10*z + z;

      if ( i == 532 )

       cout<<"x="<<x<<'\t'<<"y="<<y<<'\t'<<"z="<<z<<endl;

     }

}

 

  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接