顺序结构选择结构和循环结构的程序设计典型例题分析与解答

发布时间:2019-11-13 09:10:02

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答

1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构

【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。

答案】多分支

2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。

【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。

【答案】直到型

3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。

【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。

【答案】#include"stdio.h"或#include<stdio.h>

4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( )

   ①'A'/             ②A/          ③x=A/            ④x=A,y=12/

        12/             12/             y=12/            说明:备选答案中的"/"表示回车换行键

【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符,

在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。【答案】④

5 设有下列程序段,则执行该程序段后的输出是( )

       int i=012;

       float f=1.234E-2;

       printf("i=%-5df=%5.3f",i,f);

                              ...

                   ①i=__012f=1.234                  ②i=10___f=0.012

                   ③10___O.012                          ④___100.012

     注:答案中的_代表一个空格。

【分析】输出语句的格式控制符串中的“i=”、“f=”都是非格式控制符,在输出时必须原样,原位置输出,所以只有备选答案①和②才符合这个要求;格式控制符“%-5d”的格式控制是数据左对齐、宽度为5的整型数据,备选答案①中的数据是右对齐的;此外,该答案中的实数“1.234E-2”应该代表“0.01234”,而不是“1.234”。只有备选答案②符合题意。【答案】②

6 在Turbo C的主屏幕中,将当前编辑的源程序以原名存盘,可以选用___________菜单项,也可以直热键________。

【分析】如果选用“File/Save”菜单项,或者使用热键(f12),当前编辑的源程序将以原来的文件名存盘;如果选用“File/Write to”,当前编辑的源程序将以新的文件名存盘。

【答案】File/Save

            F2

7 下列各种选择结构的问题中,最适合用if-else语句来解决的是( )

①控制单个操作做或不做的问题

②控制两个操作中选取一个操作执行的问题

③控制三个操作中选取一个操作执行的问题

④控制10个操作中选取一个操作执行的问题

【分析】if-else语句是专门解决“双分支结构”的,而“双分支结构”的问题就是用单个条件控制从两个操作中选取一个操作来执行的问题。

【答案】②

8 下列程序是输入一个小写字母,转换成对应大写字母的后一个字母输出。例如:'a'将转换成’B’、…、‘y’将转换成’Z’,其中的’Z’将转换成’A’。请填写程序中所缺少的语句。

         main()

         {char ch ;

           scanf(”%c”,&ch〕;

     ch=ch- 32+1;

         ___________________;

   printf("%c\n",ch);

         }

【分析】分析程序库中的“ch=ch- 32+ 1;”语句,可知是将字符型变量 ch中的小写字母转换成对应的大写字母(- 32)的后一个字母(+ l)。如果ch中的字母是' a'、' b'、··,'y',转换结果都不会出错,但是,如果 ch中的字母是'Z',则-32后是大写字母'Z',再+l后将不是大写字母了。为了使其转换成'A',需要用一个单分支结构来实现:如果ch的值等于'Z'+ l,则硬性将 ch的值改成'A'。完成这个任务的语句是一条单分支语句,正是所缺少的语句。

【答案】 if (ch=='Z'+l) h='A';

9不能正确计算下列分段函数的程序段是_________

   |-1  x<0

      y=|0    x=0

    x>0

    ① switch(x< 0)   ② if(x> 0)

        {case1:y=-1;break;    y=1;

   case 0:switch(x==0)           else

                {casel:y=0;break;               if(x==0)

                  case 0: y= l;   y=0

                 }                                                              else

         } &ny=-l

    ③ y= l;                                 ④ y= l;

          if(x==0)                             if(x<0)

                 y=0;                                           y=-l;

          else                                              else

            y=- l;                                     if(x== 0)

                                                                  y=0;

【分析】先来分析备选答案①:表达式“x<0”的值只有两种可能性,成立值为1、不成立值为on如果“x< 0”的值为 1(即 x< 0),则执行“easel:”后的语句“y=- l”后,退出 switch语句,符合分段函数要求。如果“x<0”的值为0(即x>=0),则执行“case 0:”后的switch语句。该switch语句的表达式是“x==0”,结果也有两种:成立为1、不成立为0.如果“x== 0”的值为1(即x=0),则执行“case l:”后的语句“y=0”后, 退出 switch语句,符合分段函数要求。如果“x==0”的值为0(即x>0),则执行“case 0:”后的语句“y=1”,也符合分段函数要求。再分析备选答案②:这是标准的用嵌套双分支结构来实现三分支的分段函数,结果显然是能求解分段函数的。分析备选答案③:双分支语句的条件是“x==0”,条件成立时,y值为0,符合分段函数的要求,条件不成立时(包含x>0和x<0两种情况),结果y值为-l,显然不符合分段函数的要求,所以本题要选该答案。至于备选答案④,是能正确计算分段函数的,首先置y为1;接着用双分支结构处理“x<0”和“x>=0”的两种情况:前者使得y值为一l;后者再执行一个单分支结构,如果“x==0”则使y值为0,否则不改变y值,保持y的原值1,符合分段函数的要求。

【答案】  ③

10 三种循环语句都能解决循环次数已经确定的次数型循环,其中__________循环语句最适合。

【分析】当“for(表达式 1;表达式 2;表达式 3)语句;”中的表达式1为:整型变量 k=l;表达式

2为:整型变量 k<= n;表达式 3为:整型变量 k++;则这个 for循环就是次数为n次的标准次数型循环结构。

【答案】  for

11执行下列程序段后的输出是()

     x=l;

     while(x<=3) x++,y=x+++x;

     printf("%d,%d",x,y);

     ① 6,10              ②5,8            ③4,6         ④3,4

【分析】我们可以使用逐步记录运行结果的方法来获得输出结果,记录如下:

        x=1;

        进入循环,条件满足执行循环体:计算x+十得x为2,计算y=x+++x,得y为4、x为3;

        继续循环,条件满足执行循环体:计算x+十得x为4,计算y=x+++x,得y为8、x为5;

        继续循环,条件不满足退出循环;

        输出x和y的值为5,8。

【答案】 ②

12 执行下列程序段,其中的do-while循环一共执行_次。

       static int x;

       do x+=x*x;

       while (x);

【分析】对静态型变量,不赋初值也有值,对整型变量,其值为 0。执行循环语句 do-while 的循环体,x+=x* x是x=x+(x* x)=0+(0* 0)=0;再判断控制循环的条件“x”,结果为0,条件不成立,退出循环。所以循环仅执行1次。

【答案】 1

13 下列程序段的输出结果是()

      for( i=0; i<1;i+=l)

              for( j= 2;j> 0;j--)

              printf("*");

      ① **            ②***           ③****           ④******

【分析】注意每次内层循环仅输出1个“*”,所以只要分析出二重循环的总次数即可。首先分析外层循环的次数:控制变量i的初值为0;终值为0(i<1相当于i<=0);步长为1(i+=l相当于 i= i+ l),所以外层循环次数为1。再分析内层循环次数:控制变量 j的初值为2;终值为1(j>0相当于j>=1);步长为-1(j--),所以内层循环次数为人内层循环体一共执行的次数等于外层循环次数乘以内层循环次数,共计为l*2=2。

【答案】   ①

14 执行下列程序段后的输出是________________。

     x=0;

     while(x<3)

              for(;x< 4;x++)

      {printf(”%1d”,x++);

       if( x< 3) continue;

       else    break;

       printf(”%1d”,x);

      }

【分析】我们用执行程序并记录各变量值的方法来获得程序的输出结果,记录如下:

        x=0;

        第一次执while循环,条件x<3成立,执行while的循环体(即for循环);

         第一次执行for循环,条件x<4成立,执行for的循环体;

           输出x的值问位整数,其值为0),然后x++,x值为1;

           if-else的条件 x< 3成立,执订 continue,继续 for循环,执行 x++, x为 2;

         第二次执行拉循环,条件x<4成立,执行比r的循环体;

           输出x的值(1位整数,其值为对,然后x++,x值为3;

           if-else的条件x<3不成立,执行break,退出for循环,返回while循环;

        第二次执行while循环,条件x<3不成立,退出while循环,结束程序运行。

        所以,最终输出结果是两个一位整数0和2。

【答案】    02

15 与下列程序段的基本功能不相同的是_____________

                     x=0;

       LOOP:x++;

                    if(x< 10) gotO LOOP;

       ①for(x=0;x<10;x++);          ②x=10;

       ③do x=0;                                          ④x=0;

         while (x++<10);                              while(x++<9);

【分析】先分析给出的程序段,很明显这段程序是用 goto语句构成的循环,控制循环的条件是“x<1O”,循环要做的工作是“x++”;当 x值为 9时,进行循环,通过“x++”,使 x值为 10后,条件“x<10”将木再成立,退出循环,则此时 x的值为 10。可以这样说,该段程序的功能是使变量x的值为10。以下来分析每个备选答案。分析备选答案①:这是一个次数型、无循环体(循环体是空语句)的循环,控制变量x的初值为0,终值为9,一共循环 10次,每次对变量x加 1,结果变量x的值为 10。分析备选答案②:很明显,直接给变量x赋值为10。分析备选答案③:这是一个当型循环语句,循环体是给变量x赋值为0,控制循环的条件是“x++<10”,第1次执行循环体,变量x值为0,控制循环的条“x++<10”成立,此时变量x值为1,继续循环,在循环体中又将变量x的值改为0,显然,控制循环的条件仍然成立,继续循环,由此看出,这个循环是一个无限次的循环(死循环),木能完成使变量x值为10的功能,该答案符合题意。至于备选答案④:进入while循环前的x值为0,控制while循环的条件实际上是x<9“x< 1O”,环要做的工作是“x++”;当 x值为 9时,进行循环,通过“x++”,使 x值为 10后,条件“x<10”将木再成立,退出循环,则此时 x的值为 10。可以这样说,该段程序的功能是使变量x的值为10。以下来分析每个备选答案。分析备选答案①:这是一个次数型、无循环体(循环体是空语句)的循环,控制变量x的初值为0,终值为9,一共循环 10次,每次对变量x加 1,结果变量x的值为 10。分析备选答案②:很明显,直接给变量x赋值为10。分析备选答案③:这是一个当型循环语句,循环体是给变量x赋值为0,控制循环的条件是“x++<10”,第1次执行循环体,变量x值为0,控制循环的条件“x++<10”成立,此时变量x值为1,继续循环,在循环体中又将变量x的值改为0,显然,控制循环的条件仍然成立,继续循环,由此看出,这个循环是一个无限次的循环(死循环),木能完成使变量x值为10的功能,该答案符合题意。“x<10”,循环要做的工作是“x++”;当 x值为 9时,进行循环,通过“x++”,使 x值为 10后,条件“x<10”将木再成立,退出循环,则此时 x的值为 10。可以这样说,该段程序的功能是使变量x的值为10。以下来分析每个备选答案。分析备选答案①:这是一个次数型、无循环体(循环体是空语句)的循环,控制变量x的初值为0,终值为9,一共循环 10次,每次对变量x加 1,结果变量x的值为 10。分析备选答案②:很明显,直接给变量x赋值为10。分析备选答案③:这是一个当型循环语句,循环体是给变量x赋值为0,控制循环的条件是“x++<10”,第1次执行循环体,变量x值为0,控制循环的条件“x++<10”成立,此时变量x值为1,继续循环,在循环体中又将变量x的值改为0,显然,控制循环的条件仍然成立,继续循环,由此看出,这个循环是一个无限次的循环(死循环),木能完成使变量x值为10的功能,该答案符合题意。至于备选答案④:进入while循环前的x值为0,控制while循环的条件实际上是x<9(因为x+十是后缀),注意每次循环后都会使得x加1,当x为8时,由于条件“8<9”,条件成立,继续循环的同时x变为9,再次循环后,条件“9<9”不成立,退出循环时,x要再加1,此时x值为10。

【答案】③

16 阅读下列程序,写出程序运行后的输出结果。

        main( )

        {int x=18,i;

          for(i=2;i<9;i十十)

                 if(x%i==0)

                       { prinif(”%1d”,i);

                           x=x/i--;

                     if(x==0)break;

                         }

        }

【分析】本程序的关键显然是 for循环。控制变量 i初值为 2,循环体中只有一条单分支语句。控制分支的条件为“x% i== 0”,这个条件就是判断“x能否整除 i”,或者说是“i是否x的因子’。如果条件木成立(i不是x的因子),修改控制变量i的值(加1后)继续循环;如果i是x的因子,则输出这个因子i,再执行“x=x/i--;”语句,从x中除去这个因子,并使得i减1(以便下次循环时仍然可以判断x中是否还含有这个因子入下面的单分支语句是判断x是否为0,如果为0则退出循环,结束程序的运行,否则控制变量i加1后,继续循环。综合上述分析,可以看出该程序的功能是求出变量x中的所有因子,包括重复因子。

【答案】 233

17下列程序的主要功能是求出所有3位整数中能被8整除余7,或者被7整除余8的所

有整数。请填写程序中缺少的语句成份。

main()

{ int k= 100;

     do if(__________________)

                 prinif("%d\n",k);

      while(k++<999);

}

【分析】本程序的关键是do-while循环。控制循环的条件是x当前值小于999。从k所赋予的初值看, k是从 100开始的,直到”so由于控制循环的条件中 k有一个后缀的++运算,所以,最后一次循环执行时,k值是999。这个循环恰好是处理了所有的3位整数。

循环体中是单分支语句,条件成立时则输出此时的变量k值,显然这个条件就是“k能被8整除余7,或者被7整除余算,因此可以写出所缺少的条件(参看答案)。

【答案】(k%8==7)¦¦(k%7==8)

18 阅读下面列序,写出程序的主要功能。

     main()

     {int y;

       float x;

       scanf("%f", &x);

      if(x<-10) y=l;

      else if(x>10) y=3;

           else y=2;

     printf("%d\n",y);

     }

【分析】这是标准的三分支结构,用嵌套的双分支语句实现1,    x< - 10,

【答案】输入实数x,按照下列公式计算并输出y值: y=| 2,   -10<=x<=10,

                                                                          | 3.   10<x。

19 编写一个程序,统计并输出能被3整除或能被5整除或能被7整数的所有3位整数。

【分析】这是标准的次数型循环结构,控制变量n取值依次为100、101、…、999。循环体中判断 n是否满足条件(((n%3== 0)¦¦(n%5== 0)¦¦(n%7== 0))),满足则输出n,这是一个单分支结构。

【答案】main()

        { int n;

          for(n=100;n<1000;n++ )

              if((n%3==0)¦¦(n%5==0)¦¦(n%7==0))

                          printf(”%d”,n);

        }

20编写一个程序,依次输入5个学生的7门课程的成绩,每输入一个学生的7门课程成绩后,立即统计并输出该学生的总分和平均分。

【分析】这是一个二重次数型循环结构。外层循环5次,依次处理5名学生;内层循环7次,依次处理7门课程的成绩。外层循环体的任务包括三项:一是求和变量清02二是利用内层循环输入7门课程成绩并累加求和(总分);三是输出该学生的总分和平均分。内层循环体的任务比较简单,包括两项工作:一是输入一门课程的成绩,二是将该成绩加到存放总分的变量中。

【答案】main()

            { int i,j;

                      float sum,x;

                      for(i=l;i<6;i++)

                             { sum= 0.0;

                                  for (j=l;j<8;j++)

                             {scanf”%f”,&x);

                                              sum+=x;

                                             }

                                   printf("NO%d--sum=%f ave=%f\n",i,sum,sum/7);

                               }

        }

顺序结构选择结构和循环结构的程序设计典型例题分析与解答

相关推荐