1. 程式人生 > >順序結構、選擇結構和迴圈結構的程式設計例題

順序結構、選擇結構和迴圈結構的程式設計例題

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);
                               }
        }