23.控制語句題目


    

    第三章 控制語句

    

    一、選擇題

    1. 以下語句中無限循環語句是   B  

    Afor(;2&5;);      10

                     101    //不是無限循環

Bwhile(1,2,3);   1,2,3   3

Cwhile(\0);        

 Dfor(;\0;);

    '0'  '\0'  0  // %d 48   0  0   //0,為空

 

 

 

    2. 若有程序段如下:

    a=b=c=0;x=35;

    if(!a)x--; //a=0 !a=1  x=34

    else if(b);  

    if(c)x=3;

    else x=4;

    執行后,變量x的值是( B

    A34    B4    C35    D3

 

 

 

 

    

    3. 下列if語句中,不正確的是( A

       Aif (x<y)scanf (%d,x)  else scanf (%d, y);;//少一個分號

       Bif (x<y);

       Cif (x==y) x+=y;

       Dif (x<y)x++;y++;

 

 

 

 

    

    4. 若有int x,y;,執行程序段:

    for(x=1,y=1;y<50;y++)

    {

     if (x>=10)       

     break;

     if(x%2==1)

     {

     x+=5;      

     continue;

     }

     x-=3;

    }

   1X=6, 2 X=3  3,X=8  4 X=5  5 X=10

    變量x的值最終為( D

      A11    B12    C13    D10

 

 

 

 

    

    5. 若有int x=3;,執行程序段:

    do

    {

     printf("%3d",x-=2);//x=x-2

 

    }while(!(--x));  

    輸出的結果是(  X=1,  --X=0    1,-1

    A1  3    B1  -1    C1  -2    D1  -3

 

 

 

 

    

    6. 有程序段:

    int a;

    for (scanf (%d”,&a);!a;)    a=1 不循環  0循環

        printf (continue);

    for語句中的!a等價於( B )。

    Aa!=0  Ba == 0  Ca>0 Da>=0

 

 

 

 

    

    7. 有如下程序段:

    int x=1,y=1;

    int m,n;

    m=n=1;

    switch (m)

    {

     case 0:x=x*2

     case 1:

     {

     switch (n)

     {

     case 1:x=x*2;

     case 2:y=y*2;break;

     case 3:x++;

     }

//X=3 Y=3   

        }

     case 2:x++;y++;

     case 3:x*=2;y*=2;break;

     default:x++;y++;

    }

    執行完成后,xy的值分別是(  A)。

    Ax=6  y=6    Bx=2  y=1  Cx=2  y=2   Dx=7  y=7

 

 

 

 

    

    8. 以下描述不正確的是 C      

    A.使用whiledo-while循環時,循環變量初始化的操作應在循環體語句之前完成

    Bwhile循環是先判斷表達式,后執行循環語句

    Cdo-while for循環均是先執行循環語句,后判斷表達式

    Dforwhile do-while循環中的循環體均可以由空語句構成

 

int i =0;

do

{

}

while();

 

 

    

    9. xint型變量,以下程序的輸出結果是   D   

    for (x=3;x<6;x++)

      printf ((x%2)?(**%d)( ##%d\n),x);

 

    printf (\n);

    A* * 3        B# # 3      C# # 3       D* * 3 # # 4

       # # 4           * * 4          * * 4# # 5       * * 5

       * * 5           # # 5

 

 

 

 

    

    10.與“for (i=0;i<10;i++)putchar (a+i);”功能不同的語句是      。

 

    Afor (i=0;i<10;)putchar (a+(++i));//先自增再引用

 

    Bfor (i=0;i<10;) putchar (a+(i++));//先引用再自增

    Cfor (i=0;i<10;putchar (a+i),i++);//i++循環一次以后

 

    Dfor (i=0;i<=9;i++)putchar (a+i); i<=9  i<10

 

 

 

 

    

    11.循環控制語句“while (!scanf (%d,&i)getchar ( );”執行的情況是 D    

    A)循環輸入字符,遇文件結束符EOF退出     

    B)循環條件有錯,不能執行     

    C)若輸入數據i有錯,暫停等待處理     

    D)鍵入i值后,回車退出循環

 

 

 

 

    

    12. 已知x=3y=2,則表達式 x*=y+8的值為  C      

    A3    B2     C30    D10

 

 

 

 

    

    13. xint型變量,則執行以下語句后,x的值為   20     

    x=10;x+=x- =x-x; //賦值運算符,從右向左

    A10    B20     C40    D30

 

 

 

 

    

    14. 在下列描述中,正確的一條是     C

    Aif (表達式)語句中,表達式的類型只限於邏輯表達式 。> <

    B)語句“goto 12;”是合法的 //字母開頭

    Cfor(;;)語句相當於while1)語句

    Dbreak語句可用於程序的任何地方,以終止程序的執行

if(1)

{

break;

}

 

 

 

    

    15. 下面程序的輸出結果是   C   

    #include <stdio.h>

    void main( )

    {

     int i,j,m=0,n=0;

 

     for (i=0;i<2;i++)

     for (j=0;j<2;j++)

     if (j>=i)m=1;

 

                    n++;

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

    }

    A4    B2     C1    D0

 

for (i=0;i<2;i++)

     for (j=0;j<2;j++)

     if (j>=i)

                      {

                         m=1;

                       }

                                 n++;

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

 

 

    

    16. 若輸入字符串:abcde<回車>,則以下while循環體將執行  C  次。

    While ((ch=getchar ( ))== ' e ')printf(" * ");

    A4    B5     C0    D)任意

 

 

 

 

    

    17. jint型變量,則下面for 循環語句的執行結果是   B   

    for (j=10;j>3;j--)   10   7   // 6   

    {

     if (j%3)1

           j--;

 

     --j;--j;4

 

     printf ("%d",j);

    }

     A6 3    B7 4     C6 2    D7 3

 

 

 

 

    

    18. 以下循環體的執行次數是 C     

    #include <stdio.h>

    void main()

    {

     int i,j;

     for (i=0,j=1;i<=j+1;i+=2,j--) i=2  j=0

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

    }

     A3    B2     C1    D0

 

 

 

 

    

    19. 以下程序的輸出結果是         。

    #include <stdio.h>

    void main( )

    {  

     int a=-1,b=1,k;

     if((++a<0)&&!(b--<=0))   (0<0)短路

              printf("%d %d\n",a,b);

     else

               printf("%d %d\n", b, a);// b=1 a=0

    }

    A-1 1       B0 1     C1 0        D0 0

 

 

 

 

    

    20. 下面程序的功能是輸出以下形式的金字塔圖案:

    

   X     3   1

  XXX    2   3

 XXXXX   1   5

XXXXXXX  0   7

    #include <stdio.h>

    void main( )

    {

    int i,j;

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

    {

    for(j=1;j<=4-i;j++)printf(" ");

    for(j=1;j<=      ;j++)printf("*");

    printf("\n ");

    }

    }

    在下划線處應填入的是  B       

    Ai       B2*i-1     C2*i+1        Di+2

 

 

 

 

    

    21. 以下程序的輸出結果是         。

    #include <stdio.h>

    void main( A)

    {  

     int i;

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

     {  

     if(i%2)

              {

              printf("#");

              continue;

               }

 

     printf("*");

     }

     printf("\n");

    }

    A#*#*#       B#####     C*****        D*#*#*

 

 

 

 

    22. 在下列選項中,沒有構成死循環的程序段是    C     

    Aint i=100       Bfor(;;);     Cint k=1000;       Dint s=36;

       while(1)                         do                  while(s);空語句死循環

       {

        i=i%100+1;                     {++k;}               --s;

        if(i>100)break;                  while(k>=10000);

       }

 

 

 

 

    

    23. 運行下面的程序:

    #include <stdio.h>

    void main( )

    {  

     char c[6]; c[0]=a  c[1]=b c[2]='\n' c[3]='c'  c[4]='\n' c[5]='d'

     int i=0;

     for(;i<6;c[i]=getchar( ),i++)

        ;

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

putchar(c[i]);

 

     printf("\n");

    }

    如果從鍵盤上輸入:

        ab<回車>

        c<回車>?        def<回車>

    則輸出結果為    C     

    Aa       Ba     Cab       Davcdef

       b          b         c                 

       c          c         d                    

       d         d                              

       e

       f

 

 

 

 

    

    24. 下面程序的輸出結果是( C  )。

    #include <stdio.h>

    void main( )

    {  

     int x=5,a=0,b=0;

     if(x!=(a+b)) printf("x=5\n");

     else printf("a=b=0\n");

    }

    A)有語法錯,不能通過編譯       B)通過編譯,但不能連接

    Cx=5                          Da=b=0

 

 

 

 

    

    25. 當輸入為”right?”時,下面程序的執行結果是(  B )。

    #include <stdio.h>

    void main( )

    {    

     char c;

     c=getchar( );

 

     while((c=getchar())!='?')

     putchar(++c);

    }

    ARight                 Bjhiu

    Cright                          Dsjhiu?

 

 

 

 

    

    26. 下面程序的輸出結果是( D  )。

    #include <stdio.h>

    void main( )

    {

     int x=3;

     do{

    

          printf("%3d",x+=1);

 

     }while(--x);

    }

    A4                 B4 4

    C4 4 4                  D)死循環

 

 

 

 

    1*2*3*4*5

    27. 若變量已正確定義,要求程序段寫成5!的計算,不能完成此操作的程序段是(B   )。

    Afor(i=1,p=1;i<=5;i++) p*=i;                

    Bfor(i=1;i<=5;i++){p=1;p*=i;}            

    Ci=1;p=1;while(i<=5){p*=i;i++;}                    

    Di=1;p=1;do{p*=i;i++;}while(i<=5);

 

 

 

 

    

    28. 有以下程序

    #include <stdio.h>

    void main( )

    {  

     int i=1,j=2,k=3;

     if(i++==1&&(++j==3||k++==3))     1=1  3=3  短路

     printf("%d %d %d\n",i,j,k);

    }

    程序運行后的輸出結果是  2 3 3 D     20054月)

    A1 2 3      B2 3 4      C2 2 3      D2 3 3

 

 

 

 

    

    29. 有如下程序

    #include <stdio.h>

    void main( )

    {  

     int i,sum;

     for(i=1;i<=3;sum++)  

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

    }

    該程序的執行結果是  C     

    A6       B3       C)死循環     (D0

 

 

 

 

    

    30. 運行以下程序后,如果從鍵盤上輸入china#<回車>,則輸出結果為  C     

    A20   B50  C55  D25

    #include <stdio.h>

    void main( )

    {  

     int v1=0,v2=0;

     char ch;

     while ((ch=getchar( ))!= '#')

     switch (ch)

     {  

     case 'a':

     case 'h':

     default:v1++;  v1  5  v2 5

     case '0':v2++;

     }

while作用范圍;  {}

     printf("%d,%d\n",v1,v2);

    }

 

 

 

 

    

    31. 下面程序運行結果是        。

    #include <stdio.h>

    void 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;

        }

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

    }

    A20   B25    C15     D10

 

 

 

 

    

    32. 寫出下列程序的運行結果        。

    #include <stdio.h>

    void main()

    {  

     int k=0;char c='A'; 'A' K=2  'B' 5   'C '9   'D '  1' E' 7  'F'

''     do

     {

     switch(c++)

     {

     case 'A':k++;break;

     case 'B':k--;

     case 'C':k+=3;break;

     case 'D':k=k%2;continue;//結束本次循環

     case 'E':k=k*6;break;

     default:k=k/4;

     }

     k++;

     }while (c<'G'); B=2

     printf("k=%d\n",k);

    }

    A2   Bk=2   Ck=3     Dk=6

 

 

 

 

    

    33. 定義:int x=7,y=8,z=9;后,則下面表達式為0的是   D   

    A' x ' && ' y '   1          Bx<=y 1

    Cx|| y+z&&y-z)     1           D!((x<y) &&!z||1)

!((x<y) &&!z||1)

!(1 &&0||1)

!(1)

 

 

 

    

    34. w=1,x=2,y=3,z=4,則條件表達式w<x?w:3   )的值是 D     

    A4           B3           C2          D1

 

 

 

 

    

    35. 以下程序:

    #include <stdio.h>

    void main()

    {  

     int w=4,x=3,y=2,z=1;

     printf("%d\n",(w<x?w:  1));

    }

    

    其輸出結果是A

    A1      B2      C3      D4

 

 

 

 

    

    36. ab均是正整數變量,正確的switch語句是 D

//switch表達式必須整數。1+a ,

    A switch(pow(a,2)+pow(b,2)  實數)   (注:調用求冪的數學函數)

    {

    case 1case 3y=a+bbreak;

    case 0case 5y=a-b

    }

    B switch(a*a+b*b)  

    {

    case 3

    case 1y=a+bbreak;

    case 0y= b - abreak;正整數

    }

    C switch  a

    {

    defaultx=a+b;

    case 10y=a-bbreak;

    case 11x=a*dbreak;

    }

    D switch (a+b)

    {

    case 10x=a+bbreak;

    case 11y=a-bbreak;

    }

 

 

 

 

    

    37. 對以下程序:

    #include <stdio.h>

    void main()

    {

     int c;

     while((c=getchar())!='\n')

     {

     switch(c-'2') //20 42 75 31

     {

     case 0:

     case 1:putchar(c+4);

     case 2:putchar(c+4);break;

              case 3:putchar(c+3);

     default:putchar(c+2);break;

     }

668977

     }

    printf("\n");

    }

    從第一列開始輸入數據:2473<CR>(<CR>代表回車符),程序的輸出結果是A

    A668977      B668966      C66778777      D6688766

 

 

 

 

    

    38. 以下程序:

    #include <stdio.h>

    void main()

    {  

//n[0]=0,n[1]=0

     int n[2]={0}, i,j,k=2;

     for(i=0;i<k;i++)

     for(j=0;j<k;j++) n[j]=n[i]+1;

     printf("%d\n",n[k]);

    }

    其輸出結果是A

    A)不確定的值      B3      C2      D1

 

 

 

 

    

    39. 有以下程序

    #include <stdio.h>

    void main()

    {  

     int i=1,j=1,k=2;

j++||(k++ &&i++)

 

 

     if((j++||k++) 1&&i++)    j=2,k=2 ,i=2

{

 printf("%d,%d,%d\n",i,j,k);

}

    }

    執行后輸出結果是     222

    A112      B221      C222      D223

 

 

 

 

    

    40. 以下程序的輸出結果是      。

    #include <stdio.h>

    void main()

    {  

     int a= -1,b=1,k;

     if((++a<0)&&!(b--<=0))  

     printf("%d %d\n",a, b);

     else

     printf("%d %d\n",b, a);

    }  C

    A-1 1      B0 1      C1 0      D0 0

//(++a<0)&&(!(b--<=0))

//(0<0) &&

 

 

 

    

    41. 閱讀以下程序:

    #include <stdio.h>

    void main()

    {  

     int x;

     scanf ("%d",&x);

     if (x--<5) printf("%d",x);

     else printf("%d",x++);4

 

    }

    程序執行后,如果從鍵盤上輸入5,則輸出結果是 B     。(20019月)

    A3      B4      C5      D6

 

 

 

 

    

    42. 以下程序的輸出結果是 A      

    #include <stdio.h>

    void main()

    {  

     int n=4;   4

     while(n--)

            printf("%d",--n); //2 0

    }

    A2 0      B31      C321      D210

 

 

 

 

    

    43. 設有以下定義

    int a=0;double b=1.25;char c= 'A'

    #define d 2

    則下面語句中錯誤的是   D       

    Aa++;      Bb++;      Cc++;      Dd++;

 

 

 

 

    

    44. 有以下程序

    #include <stdio.h>

    void main()

    {  

     int a=3,b=4,c=5,d=2;

     if(a>b)

     { if(b>c)

     printf("%d",d+++1);

     else

     printf("%d",++d+1);

}

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

    }

    程序運行后的輸出結果是   A   。(20049月)

    A2      B3      C43      D44

 

 

 

 

    

    45. 下列條件語句中,功能與其他語句不同的是 D     

    Aif(a) printf("%d\n",x);else printf("%d\n",y);  

    Bif(a==0) printf("%d\n",y);else printf("%d\n",x);

    Cif(a!=0) printf("%d\n",x);else printf("%d\n",y);

    Dif(a==0) printf("%d\n",x);else printf("%d\n",y);

// !a    a=1   0     a=0  1

//a      a=1   1     a=0  0

//a==0   a=1   0     a=0  1

//a !=0  a=1   1     a=0  0

//a==0   a=1   0     a=0  1

 

 

    

    46. 有以下程序

    #include <stdio.h>

    void main()

    {  

     int i;

     for(i=0;i<3;i++)//01,2

     switch(i)

     {

     case 1:printf("%d",i);

     case 2:printf("%d",i);

     default:printf("%d",i);

     }

    }

    執行后輸出結果是   011122A   

    A011122     B012      C012020      D120

 

 

 

 

    

    47. 有以下主程序

    #include <stdio.h>

    void main()

    {  

     int a=15,b=21,m=0;

     switch(a%3)

     {

     case 0:m++;break;

     case 1:m++;

        switch(b%2)

        {

     default:m++;

     case 0:m++;break;

         }

     }

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

    }

    程序運行后的輸出結果是  A         

    A1     B2      C3     D4

 

 

 

 

    

    48. 以下程序的功能是:按順序讀入10名學生4門功課的成績,計算出每位學生的平均分並輸出。程序如下:

    #include <stdio.h>

    void main()

    {

     int n,k;

     float score,sum,ave;

     sum=0.0;

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

     {

     for(k=1;k<=4;k++)

     {

     scanf("%f",&score);sum+=score;

     }

     ave=sum/4.0;

     printf("No%d%f\n",n,ave);

     }

    }

    上述程序運行后結果不正確,調試中發現有一條語句出現在程序中的位置不正確。這條語句是 A         

    Asum=0.0;   Bsum+=score;    Cave=sum/4.0;   Dprintf(NO%d:%f\n,n,ave);

 

 

 

 

    

    49. 有以下程序

    #include <stdio.h>

    void main()

    {

     int i,n=0;

     for(i=2;i<5;i++)//2  n=1,3 n=3, 4 4

     {

     do

     {

     if(i%3) continue;  

     n++;

     }while(!i);!2 !3 !4

     n++;

     }

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

    }

    程序執行后輸出結果是  D    

    An=5      Bn=2       Cn=3      Dn=4

 

 

 

 

    

    50. 執行下面的程序后,b值為        。

    #include <stdio.h>

    void main( )

    {  

     int a,b;

     for(a=1,b=1;a<=10;a++)  //b=4   7

     {  

     if(b>=5) break;

     if(b%3==1)

     {

     b+=3;continue;

     }

     b-=5;

     }

     printf("%d",b);

    } A

    A7      B8      C9      D10

 

 

 

 

    

    51. 若有以下定義:

    float x;int a,b;

    則正確的switch語句是        。

    Aswitch(x)                       Bswitch(x)    //1,2   

       { case 1.0printf(*\n);     {       case 1,2printf(*\n);

         case 2.0printf(**\n);            case 3printf(**\n);

       }                                 }

    Cswitch(a+b)   // 1+2常量,只能是常量                  Dswitch(a+b)不可以編譯

    { case 1printf(\n);         {      case 1.printf(*\n);

          case 1+2printf(**\n);            case 2printf(**\n);

        }                                 }

 

 

 

 

    

    52. 執行下面程序段的結果是  B      

    #include <stdio.h>

    void main( )

    {  

     int x=23;

     do

     {

     printf("%2d",x--);

     }while(!x); 23

    }

    A)打印出321      B)打印出23      C)不打印任何內容       D)陷入死循環

23

 

 

 

    

    53. 下面程序的輸出是       。

    #include <stdio.h>

    void main( )

    {   

     int x=3,y=6,a=0;   //x=5y=4,a=1

     while( x++! = (y-=1))  3=5  4!=4

     {

     a+=1;  

     if(y<x)

     break;

     }

     printf("x=%d,y=%d,a=%d\n",x,y,a);

    }D

    Ax=4,y=4,a=1    Bx=5,y=5,a=1    Cx=5,y=4,a=3    Dx=5,y=4,a=1

 

 

 

 

    

    54. 下面程序段的運行結果是   C   

     int n=0;

     while (n++<=2)  

           ; n++2m,n=3 3++

 

     printf ("%d",n);  

    A2           B3           C4          D)有語法錯誤

 

 

 

 

    

    55. 已知xabcd均為int型變量,則執行如下程序段后, x的值是__D_____

    a = 1; b = 2; c= 3; d = 4;

 

    x = (a<b) ? a : b; X=1

    x = (a<c) ? a : c; X=1

    x = (a<d) ? a : d;

    A4             B3           C2              D1

 

 

 

 

    

    56. 若有以下定義語句float x; int a,b;則以下正確是_C______

    Aswitch(x)                      Bswitch(x)

    {                                {

    case 1.0: printf(*);                case 1,2: printf(*);

    case 2.0: printf(* *) ;              case 2: printf(**) ;

    }                                }  

    Cswitch(a+b)                      Dswitch(a)

    {                                {

    case 1: printf(*);                case 1,2: printf(*);

    case 2: printf(* *) ;              case 2: printf(**) ;

    }                                }  

 

 

 

 

    

    57. 運行下列程序段后x的值是__A_____

    int a,b,c,x;

    a = 0; b = 0; c= 0; x = 7;

    if (!a) x--;

 else if (b);

 

    if(c) x=3;

 else x=4;

 

    A4             B6           C7              D3

 

 

 

 

    

    58. 運行下列程序段后x的值是___B____

    int a,b,c,d;  X=5;

    a = 1; b = 7; c= 15; d = 10;

    if (a<b)

      x--;

      if(c<d) x=1;

      else if (a<c)

          if(b<d) x=2

           else x=3;

        else x=6;

    else x=7;

    A1             B2           C6              D7

 

 

 

 

    

    59. 如下程序的輸出結果是___c____

    #include <stdio.h>

    void main()

    {

     int a,b,c,d;

     a = 2; b = -6; c= 5;

     if (a<b)  

          if(b<0)

            c=0;

       else

            c++;

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

    }

    A0             B1           C5              D6

 

 

 

 

    

    60. 以下五條語句中有____D___是合法的。

    if (a=b) x++;   //3=1   if(a==3)   if(3==a)

 if (a=  <b//錯誤) x++;  

 if (a-b) x++;  

 if (a<=b<=c) x++;   //3>2>1  //1>1 出錯

 if(1) x++;

    A1             B2           C3              D4

 

 

 

 

    

    61. 以下結論中正確的是______B_

    Abreak語句是switch語句中的一部分

    Bswitch語句中可以根據需要使用或不使用break語句

    Cbreak語句只能用於循環結構中

    D)以上三個結論中沒有一個正確

 

 

 

 

    

    62. 運行下列程序段后a的值是__C_____

    int a=10;

    switch (a)

    {

    case 9: a++;

    case 10: a++;

    case 11: a++;

    default: a++;

    }

    A11             B12           C13              D10

 

 

 

 

    

    63. 關於以下三條語句的描述中,正確的是__A_____

    ① if(a) a=1;else a=2;  

if(a==0) a=2;else a=1;

 ③ if(a!=0) a=1;else a=2;

    A)三條語句相互等效               B)三條語句中②與③等效

    C)三條語句中①②與②等效          D)三條語句各不等效

 

 

 

 

    

    64. 如下程序的輸出結果是____a___

    #include <stdio.h>

    void main()

    {

     int x=1,a=0,b=0;

     switch (x)

     {

     case 0: b++;

     case 1: a++;

     case 2: a++; b++;

     }

     printf ("a=%d , b=%d \n", a,b);

    }

    Aa=2 , b=1       Ba=1 , b=1       Ca=1 , b=0       Da=1 , b=2

 

 

 

 

    

    65. 下面的4段程序都試圖求解整數1l0的和,不能滿足要求的是__C_____

    A #include <stdio.h> B #include <stdio.h>

    void main() void main()

    { {

    int i,sum; int i,sum

    for(i =1,sum=0;i<=10;++ i) i =1,sum=0;

    sum+= i; for( ; i<=10;)

    printf(" i=%d sum=%d\n ",i,sum); sum+=i++;        

    }     printf("i=%d sum=%d\n ",i,sum);

    }

    C #include <stdio.h>                   B#include <stdio.h>

    void main() void main()

    { {

    int i,sum; int i,sum

    i =1,sum=0;   i =1,sum=0;

    for(;i<=10;++i,sum=sum+i); for( ; i<=10; sum=sum+i;++i)

    printf("i=%d sum=%d\n",i,sum);                            printf("i=%d sum=%d\n",i,sum);

    } }

 

 

 

 

    

    66. 下面程序的運行結果為C_______

    #include <stdio.h>

    void main()

    {

     int i,sum;

     i=1,sum=0;

     for (;i<=10;)

     ++i;

 

 

     sum=sum+i;

     printf("i=%d sum=%d\n",i,sum);

    }

    A) i=11,sum=55 B) i=10,sum=55

    C) i=11,sum=11 D) 形成死循環

 

 

 

 

    

    67. 下面程序的運行結果為__== !=   >  <_____

    #include <stdio.h>

    void main()

    {

     double sum=0.0,x;

     for(x=0.0;x!=3.0;x+=0.1)

     sum+=x;

     printf("\n x=%f", x);

    }

    A) x=3.0 B) x=2.0

    C) 會提示出錯 D)形成死循環

 

 

 

 

    

    68. 下面程序的運行結果為___A____

    #include <stdio.h>

    void main()

    {

     int sum=0,x;

     for(x=0;x!=3;x+=1)

     sum+=x;

 

 

 

     printf("\n x=%d, x=%d ",x,sum);

    }

    A) x=3, sum=3 B) x=2, sum=3

    C) 會提示出錯 D)形成死循環

 

 

 

 

    

    69. 定義如下變量int n=10;則下列循環的輸出結果是__B_____

    while(n>=7)   //10

    {

    n--;   

    printf(%d\n,n);

    }

            A10             B9           C10              D9      //9  n=7

               9                  8              9                   8

               8                  7              8                   7

               7                  6   

 

 

 

 

    

    70. 有以下程序段,wk都是整型變量,則不能與它等價的循環語句是__C_____

     w=k;

    A:

     if(w==0)

           goto B;

     w--;

     printf("*");

     goto A;

    B:

     printf("f");   *****f

 

    Afor(w=k;w!=0;w--)  printf(*);

 

    Bw=k;  while(w--!=0) printf(*);  w++

 

    Cw=k;  do{w--;printf(*);}while(w!=0);

 

    Dfor(w=k;w;--w) printf(*);

 

 

 

 

    

    71. ij已定義為int型,則以下程序段中內循環體的總的執行次數是_B______

    for(i=6;i;i--) 0

    for(j=0;j<5;j++) 5

    {……}

    A25             B30           C36              D)死循環

 

 

 

 

    

    72. xyint型變量,則執行下面的循環后,y的值為___C____

     for(y=1,x=1;y<=50;y++)

     {

     if (x>=10) break;  

     if (x%2==1)

     {

     x+=5;          X=6  X=3  X=8   X=5   X=10 X->

     continue;

     }

     x-=3;

     }

    A2              B4            C6               D8

 

 

 

 

    

    73. abint型變量,則執行下而的循環后,b的值為__垃圾數值_____

    a=1; b=10;    

    do

    {

    b-=a;    //b=9,a=2   //b=6,a=3  //b=2,a=4  // b=-3  a=5

    a++;

 

    }while(b--<10  )

 

    A-1              B-2            C8               D9

 

 

 

 

    

    74. 當執行以下程序段時_____A__

    x=-1;

    do

    {

    x=x*x;

    }while(!x) 0

 

    A)循環體將執行一次 B)循環體將執行兩次

    C)循環體將執行無限次 D)會提示有語法錯誤

 

 

 

 

    

    75. 以下敘述正確的是____D___

    Ado-while語句構成的循環不能用其它語句構成的循環代替

    Bdo-while語句構成的循環只能用break語句退出  return  goto

    C)用do-while語句構成的循環,在while后的表達式為非0時結束循環

    D)用do-while語句構成的循環,在while后的表達式為0時結束循環

 

 

 

 

    

    76. 在以下程序段中,while循環招待的次數是____C___

    int k=0;

    while(k=1)  k++;

    A)循環體將執行一次                 B)循環體將一次也不執行

    C)循環體將執行無限次               D)會提示有語法錯誤

 

 

 

 

    77. 以下程序執行后,sum的值是____D___

    #include <stdio.h>

    void main()

    {

     int n,sum;//沒有初始化

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

     sum+=n;

 

 

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

    }

    A15            B14              C0          D)不確定

 

 

 

 

    

    78. 以下程序執行后,輸出結果是___A____

    #include <stdio.h>

    void main()

    {

     int n=0;

     while(n<=2)

     {

     n++;

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

     }

    }

            A1            B1              C2          D2

               2               2                  3

               3

 

 

 

 

    

    79.當把以下四個表達式用作if語句的控制表達式時,有一個選項與其它三個選項含義不同,這個選項是__D____

    Ak%2  Bk%2==1  C(k%2)!=0  D)(!k%2==1

     2   0          2   0              2  0          

     1   1          1    1             1  1

 

 

    

    80.有以下程序

    #include <stdio.h>

    void main()

    {

     int k=5,n=0;

     while(k>0)

     {

     switch(k)

     {

     default : break;

     case 1 : n+=k;

     case 2 :

     case 3 : n+=k;

     }

     k--;

     }

     printf("%d\n",n);  n=3+2+1+1

    }

    程序運行后的輸出結果是_____D_

    A0  B4  C6  D7

 

 

 

 

    

    81.有以下程序

    #include <stdio.h>

    void main()

    {

     int i=1,j=2,k=3;

     if(i++==1 &&(++j==3||k++==3))

 

     printf("%d %d %d\n",i,j,k); i=2 3  3

    }

    程序運行后的輸出結果是____D__

    A1 2 3  B2 3 4  C2 2 3  D2 3 3

 

 

 

 

    

    82.若整型變量abcd中的值依次為:1432。則條件表達式a<b?a:2的值是_A_____

    A1  B2  C3  D4

 

 

 

 

    

    83.有以下程序

    #include<stdio.h>

    void main()

    {

     int i, s=0;

     for(i=1; i<10; i+=2)  

     s+=i+1;

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

    }

    

    程序執行后的輸出結果是____D__

    A)自然數19的累加和  B)自然數110的累加和

    C)自然數19中奇數之和  D)自然數110中偶數之和

 

 

 

 

    

    

    

    86.有如下程序:

    #include<stdio.h>

    void main()

    {

     int s=0,a=1,n;

     scanf("%d",&n);

     do

     {

     s+=1;   2

     a=a-2;

     }while(a!=-3);

 

 

     printf("%d\n",s=2);

    }

    若要使程序輸出值為2,則應該從鍵盤輸入的值是B_____

    A-1  B-3  C-5  D0

 

 

 

 

    

    87.有以下程序段

    int n,t=1,s=0;

    scanf("%d",&n);

 

    do{

     s=s+t; t=t-2; //-1

}while (t!=n);

    為使此程序段不陷入死循環,從鍵盤輸入的數據應該是__D____

    A)任意正奇數 B)任意負偶數

    C)任意正偶數 D)任意負奇數

 

 

 

 

    

    88.有以下程序

    #include<stdio.h>

    void main()

    {

     int a=1,b;

 

     for(b=1;b<=10;b++)

     {

     if(a>=8) break;         

     if(a%2==1) {a+=5;continue;}  a=6  a=3   a=8  

     a-=3;

     }

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

    }

    程序運行后的輸出結果是___A___

    A3  B4  C5  D6

 

 

 

 

    

    7

    

    

    

    

    

    

    

    

    
二、填空題

    1. 下面程序的功能是在屏幕上顯示圖形:

    1  

    2 1

    3 2 1

    4 3 2 1

    5 4 3 2 1

    填空:

    #include <stdio.h>

    void main( )

    {

     int i,j;

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

        {  

     printf("\n");

     for(j=i;        ;j--)

               

     }

    }解:

    #include <stdio.h>

    void main( )

    {

     int i,j;

        for(i=1;i<=5;i++)   //i   5-i

        {  

     printf("\n");

     for(j=i ;j>=1;j--)

     printf("%2d",j);

     }

    }

    

    2. 執行下面程序

    #include<stdio.h>

    void main( )

    {

     int x;

     scanf("%d",&x);

     if(x++>5)

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

     else

     printf("%d\n", x--);

    }

    若輸入5,其輸出結果是  6  

 

 

 

 

    

    3. switch語句中的表達式允許是 任何 表達式,其值必須是 整數,或  字符  ,或  枚舉  。switch語句中的常量表達式,其限制是:  (5)  

 

 

 

 

    5)常量表達式中的操作數必須是常量,禁止變量出現;

它的值類型必須是整型、或字符型、或枚舉型,且要與switch后的表達式類型匹配;各常量表達式值不能相同

    

    4. whiledo whilefor語句正常退出循環的條件是  (1)  ,否則會造成  (2)  。

 

 

 

 

    1)在循環體內必須有修改控制循環結束的表達式值語句,使其值從非0變為0

    2)死循環

    5.三種重復結構相互嵌套  (1)  。使用循環嵌套結構的要點是:  (2)  。

 

 

 

 

         2)內層和外層的循環控制變量不能相同;嵌套循環的執行,總是從內循環到外循環

,即內循環完整地執行一趟,外循環只執行一次

    

    6. 程序填空

 

 

 

 

    # include <stdio.h>

          (1)      

    # define EPS le-8

    void main ( )

    {

      double e=     (2)     , fact=1;  long n=0;

      do

      {

         n++;

              (3)     ;

          e=e+1/fact;

      }while (      (4)      );

      printf (“計算e值:%0.8f\n,e);

      printf (“調庫函數:%0.8f\n,exp (1,0));

    }

 

1+1/2+1/3

 

 

    3fact=fact*n            4fabs(1/fact)>=EPS

    

    7. break語句只能用於  循環  語句和 switch  語句。

 

 

 

 

    

    8. 在循環控制中,break語句用於結束 整個循環 ,continue語句用於結束 本次循環  。

 

 

 

 

    

    9. 有如下程序段

    int n=0;

    int sum=0;

    while (n++,n<50)    //1

    {

        if (n==(n/2)*2)  //2=2

        continue;

        sum+=n;

    }

    printf (%d\n,sum); +1

 

    此段程序執行的輸出結果為  1+3+ 。。。。。49     while循環共執行了    49   次。

//1+49 3+47    12*50   25

 

 

 

 

    

    10. 下列程序運行后的輸出結果是      。

    # include <stdio.h>

    void main ( )

    {

     int i,j,k;

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

     {

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

     printf (" ");

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

     printf ("%4d",i);

     printf ("\n");

     }

    }

    程序外循環執行6次,打印6行。對於第i次外循環:內循環輸出數字ii個。程序執行結果如下:

    

    

    

    

    

    

    

    

    11. 有以下程序:

    #include <stdio.h>

    void main ( )

    {

     int i=1,j=1,k=2;

     if ((j++||k++)&&i++) printf ("%d,%d,%d\n",i,j,k);

    }

    

    執行后輸出的結果是      

    A112      B221      C222      D223

 

 

 

 

    

    12. 以下程序運行后的輸出結果是      。

    #include <stdio.h>

    void main ( )

    {

     int a=1,b=3,c=5;

     if (c=a+b) printf ("yes\n");

     else printf ("no\n");

    }

    

 

 

 

 

    

    13. 以下程序的功能是:從鍵盤上輸入若干個學生的成績,統計計算出平均成績,並輸出低於平均分的學生成績,用輸入負數結束輸入。

    #include <stdio.h>

    void main ( )

    {

    float x[1000],sum=0.0,ave,a;

    int n=0,i;

    printf ("Enter mark\n ");scanf ("%f ",&a);

    while (a>=0.0&& n<1000)

    {

    sum+   1】   ;x[n]=    2】   ;

    n++;scanf ("%f ",&a);

    }

    ave=   3】   ;

    printf ("Output\n ");

    printf ("ave=%f\n ",ave);

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

    if (   4】  ) printf ("%f\n ",x[i]);

    }

 

 

 

 

    

    14. 以下程序將兩個數從小到大輸出。

    #include <stdio.h>

    void main ( )

    {

    float a,b,   1】   ;

    scanf (   2】   ,&a,&b);

      if (a>b)

    {

    t=a;

       3】   ;

    b=t;

    }

    printf ("%5.2f,%5.2f\n",a,b);

    }

 

 

 

 

    

    15. 若有以下程序:

    #include <stdio.h>

    void main( )

    {

     int a=4,b=3,c=5,t=0;

     if(a<b)t=a;a=b;b=t;

     if(a<c)t=a;a=c;c=t;

     printf("%d%d%d\n",a,b,c);

    }

    執行后輸出結果是         

 

 

 

 

    

    16.下面的if語句與y=(x>=10)?3*x-11:(x<1)?x:2*x-1;的功能相同,請補充完整。

    if (   1】   )

    if (   2】   )y=2*x-1;

    else y=x;

    else y=3*x-11;

 

 

 

 

    

    17. 有以下程序:

    #include <stdio.h>

    void main( )

    {  

    int i=0,s=0;

    do

    {  

    if(i%2){i++;continue;}

    i++;

    s+=i;

    }while(i<7);

    printf(" %d\n ",s)

    }

    執行后的輸出結果是         

    A16       B12     C28        D21

 

 

 

 

    

    18. 以下主程序運行后的輸出結果是       (20039月)

    #include <stdio.h>

    void main( )

    {  

     int i,m=0,n=0,k=0;

     for(i=9;i<=11;i++)

     switch(i%10)

     {

     case 0:m++;n++;break;

     case 10: n++;break;

     default:k++;n++;

     }

        printf("%d  %d  %d \n",m,n,k);

    }

 

 

 

 

    

    19. 以下程序是利用公式π=4*(1/1-1/3+1/5-1/7+)來計算π的值。其中,變量k表示當前符號項,t表示當前項,n表示當前項的序號,要求精度控制在0.00001內。試分析程序,完成空標號處應填的內容。

    # include <math.h>

    # include <stdio.h>

    void main( )

    {  

    float pi,t,n,k;

    pi=0.0;n=k=t=1.0;

    while(     (1)      )

    {  

    pi+=t;k=-k;t=      (2)      ;n++;

    }

    pi=      (3)      

    printf("pi=%f\n",pi);

    }

 

 

 

 

    

    20. 寫出程序段的輸出結果      。

    int a=100;

    if (a>100) printf ("%d\n ",a>100);

    else printf ("%d\n ",a<=100);

    答:1a>100不成立,輸出表達式a<=100的邏輯值真。

    

    21. 若變量已正確定義,以下語句段的輸出結果是       。

    x=0; y=2; z=3;

    switch(x)

    {

     case 0:

     switch(y==2)

     {

     case 1: printf("*");break;

     case 2: printf("%");break;

     }

     case 1:

     switch(z)

     {

     case 1: printf("$");

     case 2: printf("*");break;

     default: printf("#");

     }

    }

 

 

 

 

    

    22. 以下程序運行后的輸出結果是      。

    #include <stdio.h>

    void main()

    {  

     int p=30;

     printf("%d\n",(p/3>0?p/10:p%3));

    }

 

 

 

 

    

    23. 有以下程序

    #include <stdio.h>

    void main()

    {  

     int a=5,b=4,c=3,d=2;

     if(a>b>c)

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

     else if ((c-1>=d)==1)

     printf("%d\n",d+1);

     else

     printf("%d\n",d+2);

    }

    執行后輸出結果是      。(20034月)

    A2      B3      C4      D)編譯時有錯,無結果

 

 

 

 

    

    24. 下面程序段是找出整數的所有因子,請填空。

//18=2*3*3

//2 3 4

     scanf ("%d",&x);

     i=1;

     for (;        ;)

     {

     if (x%i==0)

     printf ("%3d",i);

     i++;

     }

    答:i<=x。所有因子包括1和整數本身。

    

    25. 執行了以下程序片斷后,若原來x = 9,則輸出結果為__1__;若原來x = 6,則輸出結果為__2__

     if(x++>8) printf("%d",x);  

     else printf("%d",x--);

    答:【110; 【27

    

    26. C語言提供了6種關系運算符__1_____2_____3_____4_____5_____6___

    答:【1>;【2<;【3>=;【4<=;【5= =;【6!=

    

    27. C語言中,關系表達式的值是一個__1___即真或假,一般以__2___代表真,以__3___代表假。

    答:【1】邏輯值;【2】非0;【30

    

    28. C語言提供三種邏輯運算符,包括__1_____2_____3___,這三種邏輯運算符中__4___的優先級最高。

    答:【1&& 2|| 3! 4!

    

    29. if-else結構中,else子句不能作為語句單獨使用,必須與__1___配對使用,且若ifelse后面有多條語句,則需用__2___將其成為一個復合語句。

    答:【1if  2】大括號

    

    30. C語言中唯一的一個三目運算符是__1___,其一般形式為__2___

    答:【1】條件運算符;【2】表達式1?表達式2:表達式3

    

    31. 以下兩條if語句可以合並成一條if語句是__1___

    答:if(a<b)  

    {

     x=5;

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

    }

    else  

    {

     x=7;

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

    }

    

    32. 執行程序片斷,當輸入n1時,flag的值為__1___,當輸入n7時,flag的值為__2___

    switch(n)

    {

     case 1:

     case 2:

     case 3: flag=1; break;

     case 4: flag=2; break;

     default: flag=3;

    }

    答:【11 23

    

    33. while循環結構中,當表達式為__1___時執行其中的內嵌語句;循環體如果包含一個以上的語句,應該用__2___括起來。

    答:【1】非0;【2】花括弧

    

    34. for循環語句的一般表達形式為“for(表達式1;表達式2;表達式3) {語句;}”若要省略表達式1,則必須__1___;若省略表達式2則認為表達式2始終為__2___;若省略表達式3則循環不能__3___

    答:【1】在for語句之間給循環變量賦初值;【2】真;【3】正常結束

    

    35. for( ; ; )語句的等價while語句是__1___

    答:【1while (1)

    

    36. while循環結構中,可以用__1___退出循環;用__2___退出本次循環。

    答:【1break;【2continue

    

    37. break語句,只能用於__1_____2___語句中。

    答:【1】循環語句;【2switch

    

    38. 程序功能:下面程序求數組a[3][3]主對角線上的元素之和,並按矩陣的形式輸出數組及求得的結果。請填空,將程序補充完整。

    #include <stdio.h>

    void main()

    {

     int a[3][3],i,j,s=0;

     printf("輸入矩陣元素:\n");

     for (i=0;i<3;i++)

     for (j=0;j<3;j++)

     scanf("%d,",    1】    );

     printf("\n");

     for (i=0;i<3;i++)

         2】    ;

     for (i=0;i<=2;i++)

     {

     for (j=0;j<=2;j++)

     printf("%5d",a[i][j]);

         3】    

     }

     printf("主對角線和為:%d.\n",s);

    }

 

 

 

 

    1&a[i][j] 2s+=a[i][i] 3printf("\n");

    

    39. 程序功能:以下程序是求如下所示分數序列的前20項之和。請填空,將程序補充完整。

    2/13/25/38/513/8 ……

    #include <stdio.h>

    void main()

    {

     int n,t;

     float x=2,y=1,s=0;

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

     {

         1】    

         2】    

         3】    

         4】    

     }

     printf("the sum is:%f\n",s);

    }

 

 

 

 

    1s+=x/y; 2t=x; 3x=x+y; 4y=t;

    

    40. 程序功能:從鍵盤上輸入若干個學生的成績,統計並輸出最高成績和最低成績,當輸入負數時結束輸入。請填空,將程序補充完整。

    #include <stdio.h>

    void main()

    {

     float x,xmax,xmin;

     printf("輸入成績:\n");

     scanf("%f",&x);

     xmax=x;

         1】    

     while(    2】    )

     {

     if(x>xmax)  xmax=x;

     if(    3】    )  xmin=x;

     scanf(    4】    );

     }

     printf("max=%f,min=%f",xmax,xmin);

    }

 

 

 

 

    

    41. 程序功能:輸出100以內能被3整除且個位數為6的所有正整數。請填空,將程序補充完整。

    #include <stdio.h>

    void main()

    {

     int i,j;

     for(i=0;    1】    ;i++)

     {

     j=    2】    ;

     if(    3】    )  continue;

     printf("%d",j);

     }

    }

 

 

 

 

    

    42. C語言編譯系統在給出邏輯運算結果時,以數值__1__代表“真”,以__2__代表“假”。

 

 

 

 

    

    43. C語言編譯系統在判斷一個量是否為“真”時,以__1__代表“真”,以__2__代表“假”。

 

 

 

 

    

    44. 邏輯運算副兩側的運算對象可以是任何類型的數據,系統最終以0和非0來判斷它們屬於“真”或“假”。此說法正確嗎?__1__

 

 

 

 

    

    45. 如果表達式x>y為真或a<b為真,則表達式(x>y&&a<b)為真。對嗎?__1__

 

 

 

 

    

    46. 如果至少有一個操作數為真,則包含||運算符的表達式為真。對嗎?__1__

 

 

 

 

    

    47. _1__語句用於進行判斷。

 

 

 

 

    

    48. __1__選擇結構用於在條件為真時執行一個操作,條件為假時執行另一個操作。

 

 

 

 

    

    49. else總是與__1__配對,必要時,可以通過加花括號來確定配對關系。

 

 

 

 

    

    50. switch后面括號內的表達式可以是整型表達式、__1____2__

 

 

 

 

    

    51. switch選擇結構中必須有default語句。此說法正確嗎?__1__

 

 

 

 

    

    52. switch選擇結構的default中必須有break語句才能正確退出這個結構。此說法正確嗎?__1__

 

 

 

 

    

    53. case后面只能是__1__常量表達式。

 

 

 

 

    

    54. 多個case可以共用一組執行語句。此說法正確嗎?__1__

 

 

 

 

    

    55.while語句的特點是__1__

 

 

 

 

    

    56.dowhile語句的特點是__1__

 

 

 

 

    

    57.dowhile循環是當表達式為_  _1_】  _時反復執行循環體,表達式為_  _2_】  _時結束循環。

 

 

 

 

    

    58.whiledowhile循環時,循環變量初始化的操作應在_  _1_】  _完成。

 

 

 

 

    

    59.C中,凡用while循環能完成的,用_  _1_】  _循環都能實現。

 

 

 

 

    

    60.for語句中的表達式1可以省略,此時應在_  _1_】  _給循環變量賦初值。

 

 

 

 

    

    61.如果省略for語句中的表達式1,則其后的分號_  _1_】  _省略。

 

 

 

 

    

    62.for語句中的三個表達式都可以省略,相當於_  _1_】  _語句。

 

 

 

 

    

    63.for語句中的表達式1和表達式3可以是一個簡單的表達式,也可以是_   _1_】   _表達式。

 

 

 

 

    

    64.如果for語句后面直接是_   _1_】   _,其循環體為空語句。

 

 

 

 

    

    65.whiledowhilefor循環,可以用_  _1_】  _語句跳出循環,用_  _2_】  _語句結束本次循環。

 

 

 

 

    

    66.break語句只能用於_  _1_】  _語句和_  _2_】  _語句。

 

 

 

 

    

    67.continue語句和break語句的區別是:contine語句結束_  _1_】  _,而break語句結束  __2_】  _

 

 

 

 

    

    68.濫用_  _1_】  _語句將使程序流程無規律、可讀性差。

 

 

 

 

    

 

 

 

 

    #include<stdio.h>

         1】     

    #define EPS 1e-8

    void main( )

    {

     double e=    2】    , fact=1; long n=0;

     do

     {

     n++;

         3】    ;

     e=e+1/fact;

     }while (    4】    );

     printf("計算e值:%0.8f\n", e);

     printf("調庫函數:%0.8f\n", exp(1.0));

    }

 

 

 

 

    1#include<math.h>

    21

    3fact*=n;

    41/fact>EPS

    70. 以下程序的功能是計算:s=1+12+123+1234+12345。請填空。

    #include <stdio.h>

    void main()

    {

     int t=0,s=0,i;

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

     {

     t=i+    1】    ;

     s=s+t;

     }

     printf("s=%d\n",s);

    }

    1t*10

    

    71. 以下程序的功能是輸出如下形式的方陣:

     13 14 15 16

     9 10 11 12

     5  6   7  8

     1  2  3   4

    請填空。

    

    #include <stdio.h>

    void main()

    {

    int i,j,x;

    for(j=4; j    1】    ; j--)

    {

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

    {

    x=(j-1)*4 +    2】    ;

    printf("%4d",x);

    }

    printf("\n");

    }

    }

    1>0

    2i

    

    72.xy均為int型變量, 則執行下面的循環后, xy的值分別為       ,        。

    for(y=1, x=1; y<=50; y++)

    {

     if(x>=10)  break;

     if(x%2 == 1)

     {

     x+=5; continue;

     }

     x-=3;

    }

 

 

 

 

    

    73.運行下面的程序,如果從鍵盤上輸入5,則輸出結果是            。

    #include <stdio.h>

    void main()

    {

     int x;

     scanf("%d",&x);

     if(x -- <5) printf("%d", x);

     else  printf("%d\n", x ++);     

    }

 

 

 

 

    

    74. 以下程序運行后的輸出結果是______________

    #include <stdio.h>

    void main()

    {  

     int x;

     for(x=0;x<3;x++)

     switch (x)

     {

     case 0:printf("%d", x);

     case 2:printf("%d", x);

     default:printf("%d", x);

     }

    }

 

 

 

 

    

    75

    

    

    

    

    

    

    

    

    

    

    
三、問答題

    1. 程序改錯

    # includestdio.h

    void main( )

    {  char c;

       c=getchar( )

       switch c

         case 0,1,2,3,4,5,6,7,8,9printf(%d,c-0);break;

           defaultputchar(c);

    }

    解:

    # includestdio.h

    void main( )

    {  char c;

       c=getchar( );     /*修改*/

       switch(c)        /*修改*/

       {  case 0’:case1’:case2’:case3’:case4’:

            case 5’:case6’:case7’:case8’:case9’:printf(%d,c-0)break; /*修改*/

            default:putchar(c);

    }

        }

    2. 寫出以下程序的運行結果

    #include <stdio.h>

    void main( )

    {

     int i,j;

     for(i=j=1;j<=50;j++)

     {  

     if(i>=10)break;

     if(i%2)

     {

     i+=5;

     continue;

     }

     i-=3;

     }

     printf("j=%d\n",j);

    }

    解:程序運行結果如下

    j=6

    

    3. 有程序如下:

    #include <stdio.h>

    void main( )

    {

     char ch;

     ch=getchar( );

     if(ch>='a'&&ch<='m'||ch>='A'&&ch<='M')

     ch=ch+3;

     else

     {

 

if(ch>= 'n'&&ch<='z'||ch>='N'&&ch<='Z')

     ch=ch-3;

        }

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

    }

    假設從鍵盤上輸入Exit或輸入next后回車。試問printf語句打印出什么信息?

 

 

 

    答:如果是輸入Exit后回車,則打印出大寫字母‘H’;如果是輸入next后回車,則打印出小寫字母‘k’。這是因為函數getchar( )在遇到回車符后,總是只接收輸入字符串的第1個字符。因此,如果輸入的是Exit后回車,那么它接收的是大寫字母‘E’。這樣ch就落在ch>=A’ &&ch<    =M’區間里,使條件ch>=a’ &&ch<=m’‖ch>=A’ &&ch<=M’取真值,故對chch=ch+3的操作,所以printf語句打印出大寫字母‘H’。如果是輸入next后回車,那么getchar( )函數接收的小寫字母‘n’。這樣,ch就落在ch>=n’ &&ch<=z’區間里,使條件ch>=n’    &&ch<=z’‖ch>=N’&&ch<=Z’取真值,故對chch=ch-3的操作,所以printf語句打印出小寫字母‘k’。

    

    4. 閱讀下面的程序,它輸出什么結果?

    #include <stdio.h>

    void main( )

    {

     int x,y;

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

     {

     if(x==5)

     {

     y=x;

     continue;

     }

     printf("%d\t",x);

     }

     printf("\nUsed continue to skip printing the valueo%d\n",y);

    }

    【解】這是一個在for循環結構中使用continue語句的例子。題目的中心意思是由x1~10控制printf的執行,把當時x的取值打印出來。但如果x等於5,那么就強行結束這一次循環,即不去執行printf,而進入下一次循環。所以程序的執行結果是打印出如下結果:

    1  2  3  4  5  6  7  8  9  10

    Used continue to skip printing the value:5

    

    5. 閱讀下面的程序:

    #include<stdio.h>

    main( )

    

    int j,k,x,y;

    printf(Enter integers in the range 1~20\n);

    scanf(%d%d,x,y);

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

    

    for(k=1;j<=x;k++)

      printf(@);

 

 

      printf(\n);

    

    

    

    運行后,最終輸出什么?

    答:輸出結果如下圖所示。

    可以看出,輸入的第1個數(x)決定了輸出時每行打印的字符個數,輸入的第2個數(y)決定了打印的行數。上圖是打印8行,每行打印20個字符‘@’。

    

    

    6. 閱讀下面的程序:

    #include<stdio.h>

    void main( )

    {

     int x;

     scanf("%d",&x);

     if(x>=4)

     while(x--);

 

     printf("%d\n", ++x);//-1  0

    }

    如果輸入為5,則其輸出為什么?

 

 

 

 

 

    答:最后輸出為0。這是因為在while循環里,最后判別到x0時,循環停止。但在x上還要做“--”操作,從而退出循環后x的真正取值是-1。然而在打印時,又先對x進行“++”操作。所以最后輸出為0

    

    7. 程序改錯

    程序功能:模擬加法和減法運算程序。請修改程序中的錯誤並調試。

    # include<stdio.h>

    # include<stdilb.h>

    void main( )

    {

      int a,b;char op;

      printf (“輸入兩個整數:”)

      scanf (%d %d,&a,&b);

      printf (“輸入運算符(+ -):”)

      scanf (%c,&op);

      switch (op)

      {

        case +:printf (%d+%d=%d\n,a,b,a+b);break;

        case-; printf (%d- %d=%d\n,a,b,a-b); break;

        default:printf (“輸入運算符錯!\n);exit(1);

      }

    }

    【提示】第一次編譯有錯誤,光標停在case +printf (%d+%d=%d\n,a,b,a+b);break;行的“p”處,出現第一個錯誤信息:Expression syntax in function main

    【解析】case+-應改為字符常量’+’和’-’。

    排除錯誤,再編譯無錯誤。

    輸入兩個整數:10 20<回車>

    輸入運算符(+ -):輸入運算符錯!

    運行錯誤。

    【解析】因scanf (%c,&op)語句讀入了一個換行符,不是讀入操作符’+’或’-’,所以產生運行錯誤。在語句scanf (%d %d,&a,&b)后加語句scanf (% * c),跳過換行符不讀,就可保護正常讀入操作符’+’或’-’。

    程序運行示例:

    輸入兩個整數:10 20

    輸入運算符(+ -):+

    10+20=30

    

    8. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后。

    #include <stdio.h>

    void main ( )

    {

     int sum=0,n=0;

     while (1)

     {

     n=n+1;

     if (n>5)break;

     if (n%2)continue;

     sum+=n;

     }

     printf ("sum=%d  n=%d\n",sum,n);

    }

    運行結果:

    sum=6  n=6

    

    9. 程序改錯

    程序功能:求正整數n以內的奇數。請修改程序中的錯誤,並調試。

    # include <stdio.h>

    void main ( )

    {

     int n,i=1;  long sum=0;

     printf ("輸入一個正整數:");

     scanf ("%d",&n);

     while (i<n)

     i+=2;

     sum+=i;

     if (n%2==0)   n--;

     printf ("輸出1+3+5++%d=%1d\n",n,sum);

    }

 

 

 

    【提示】編譯無錯誤,運行有錯誤。

    程序運行示例:

    輸入一個正整數:10<回車>

    輸出1+3+5+9=11

    程序運行結果錯誤。

    【解析】由於多個語句含義寫錯,造成邏輯錯誤:

    long sum=0;  應改為 long sum=1;

    while 循環語句,應改為:

      while (i<n)

      {

        i+=2;

        sum+=i;

      }

    n--; 應改為n++;

    程序運行示例:

    輸入一個正整數:10<回車>

    輸出1+3+5++11=36

 

 

 

 

    10. 以下程序在輸入52之后的輸出是      。

    #include <stdio.h>

    void main( )

    {

     int s,t,a,b;

     scanf ("%d,%d",&a,&b);//a=5//b=2

     s=1;

     t=1;

     if (a>0)

          s=s+1;         /* */

       if (a>b) t=s+t;          /* */

       else if (a==b) t=5;

     else t=2*s;

     printf ("s=%d,t=%d\n",s,t);

    }

 

 

 

 

    解:在輸入52后,a=5,b=2

執行語句①,s=2,執行語句②,a>b為真,t=s+t=2+1=3。所以程序輸出為:s=2,t=3

    

    11. 閱讀下面程序,回答指定的問題。

    #include <stdio.h>

    void main ( )

    {

     int a,b,m,n;

     scanf ("%d%d,\n",&a,&b);//a=1,b=0

     m=1;n=1;

     if (a>0)

            m=m+n; //1>0  m=2,n=1

        if (a<b)

                   n=2*m;

        else if (a==b)

                    n=5;

        else

              n=m+1;

     printf ("m=%d n=%d\n",m,n); //1,2

    }問:

    1)當輸入為:-1 2<回車>時,程序的運行結果是什么?

    2)當輸入為:1 0<回車>時,程序的運行結果是什么?

    3)為了輸出n=4,變量ab應具備什么條件?

 

 

 

    解:(1m=1,n=1,輸入后,a=-1,b=-2,a>0為假,a<ba= =b 都為假,執行語句n=m+1=2; 所以輸出為:m=1  n=2

       2m=1n=1,輸入后,a=1,b=0,a>0為真,執行語句m=m+n=2;a<ba= =b都為假,

//執行語句n=m+1=3;所以輸出為:m=2 n=3

       3)要使n=4,就應執行語句m=m+nn=2*m,為此要求滿足條件a>0a<b,即0<a<b

    

    12. 說明以下兩個程序段的不同點。

    程序段1

    int i,n=0;

    for (i=0;i<10;i++)

    {

     n++;

     if (i>5)continue;

 

    }

    printf ("i=%d,n=%d\n",i,n);

    程序段2

    int i,n=0;

    while (i<10)

    {

     n++;

     if (i>5)

           continue;

     i++;

    }

    printf ("i=%d,n=%d\n",i,n);

 

 

    解:表面上看這兩個程序段的功能是相同的,程序段2只是將程序段1中的for語句用相應的while語句替換。實際上,如果其中沒有continue語句或將continue改為break語句,這兩段程序的功能是相同的。但continue語句的功能是退出本次執行的循環體,重新開始下一次循環,對於for循環?   ?表達式3>不包含在循環體中,所以在下次循環之前執行<表達式3>,而while循環不包含<表達式3>

    對於程序段1,執行for語句,當i=6時,滿足if條件,執行continue語句,執行i++,i值為7,執行下一次循環,如此直到<表達式2>i<10不再滿足,此時i=10,n=10。對於程序段2,執行while語句,當i=6時,滿足if條件,執行continue語句,i值仍為6,執行下一次循環,滿足if 條件,執行    continue語句,i值仍為6,執行下一次循環……如此形成了死循環。

    為了使程序段2與程序段1的功能等價,只需將與for語句<表達式3>對應的語句放在continue語句之前執行。即改為:

    int n=0,i=0;

    while (i<10)

    {

     n++;

     i++;

     if (i>5) continue;

    }

    printf ("i=%d,n=%d\n",i,n);

    

    13. 試說明以下兩個if語句的區別:

    1if (x>0)          2if (x>0)

           if (y>0)

              n=1;               {

                                   if (y>0)n=1;}

           else

              n=2;              else n=2;

 

 

 

 

 

 

 

    答:前者屬於第一種if單分支嵌套,如果x>0才執行內嵌的if語句,n賦值非12,如果x0,n不被賦值。后者屬於第二種if-else雙分支,如果x>0又執行一個嵌套的if單分支語句,y>0n被賦值1,否則n不被賦值;如果x0,n被賦值2

    

    14. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main ( )

    {

     int a=2,b=2,x,y;

     x=a++;

     y=++b;

     printf("%d,%d\n ",x,y); //2,3

     printf("%d,%d\n",a++,++b); //3,4

    }

    運行結果是:

 

 

 

 

    3, 4

    

    15. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main ( )

    {

     int a=3,b=7;

     printf("%d, ",(a++)+(++b));//11  a=4,b=8

     printf("%d, ",b%a); // 0

     printf("%d, ",!(a>b));//1

     printf("%d ",a+b);//14

    }

    運行結果是:

 

 

 

 

 

 

 

 

    

    16.閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main ( )

    {

     short n=65535;

     n++;

     printf("n=%d\n",n);   1111 1111 1111  1111

    }                        10000 0000 0000  0000

    

    運行結果是:0

 

 

 

 

    簡析:65535的內存形式為11111111 11111111,其加1后就變為00000000 00000000,即是0

    

    17. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int n;

     printf ("輸入序號");

     scanf("%d", &n);

     switch(n)

     {

     case 0: printf ("SUN\n");

     case 1: printf ("MON\n");

     case 2: printf ("TUE\n");

     case 3: printf ("WED\n");

 

     case 4: printf ("THU\n");

     case 5: printf ("FRI\n");

     case 6: printf ("SAT\n");

     }

    }

    當輸入4時,程序的運行結果是:

 

 

 

 

 

    FRI

    SAT

    

    18. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int n;

     printf ("輸入成績");

     scanf("%d", &n);

     n/=10;

     switch(n)

     {

     case 9: printf ("\n");

     case 8: printf ("\n");

     case 7: printf ("\n");

     case 6: printf ("合格\n");

     default: printf ("\n");

     }

    }

    當輸入53時,程序的運行結果是:

    當輸入79時,程序的運行結果是:

    答:當輸入53時,程序的運行結果是:

    

    當輸入79時,程序的運行結果是:

    

    合格

    

    

    19. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int a,b,c;

     a=2; b=3; c=1;

     if(a>b)

     if(a>c)

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

     else

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

     printf("end");

    }

    運行結果是:

    答: end

    

    20. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int i,j;

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

     {

     for (j=28-i*2;j>=1;j--)

     printf(" ");

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

     printf("* ");

     printf("\n");

     }

     for (i=3;i>=1;i--)

     {

     for (j=28-i*2;j>=1;j--)

     printf(" ");

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

     printf("* ");

     printf("\n");

     }

    }

    運行結果是:

 

 

 

 

    *

    * * *

    * * * * *

    * * * * * * *

    * * * * *

    * * *

    *

    

    21. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int m,n,t,a,b;

     printf("請輸入2個數:");

     scanf("%d,%d",&m,&n);

     if(m<n)

     {

     t=m;m=n;n=t;

     }

     a=m;b=n;

     while(n!=0)    32  6  2

     {

     t=m%n;    2  6

                m=n;

                n=t;

     }

     printf("%d\n%d\n",m,a*b/m);

    }

    該程序完成的功能是:

    若輸入632則運行結果是:

 

 

 

 

    運行結果是:     

    2

    96

    

    22. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     char c;

     int l,s,n,o;

     l=0;s=0;n=0;o=0;

     printf("請輸入一行字符:");

     while((c=getchar())!='\n')

     {

     if(c<='Z' && c>='A' || c<='z' && c>='a')

                          l++;

     else if(c<='9' && c>='0')

                           n++;

     else if(c==' ')

                        s++;

     else o++;

     }

     printf("\n%d,%d,%d,%d\n",l,s,n,o);

    }

    該程序完成的功能是:

 

    若輸入ab2. 3c7 **則運行結果是:

 

 

 

 

    功能是:統計一行字符中字母、空格、數字、其它字符的個數。

    運行結果是:

    3,2,3,3

    

    23. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int n;

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

     {

     if(n%2)

     {

     printf("#");

     continue;

     }

     printf("*");

     }

     printf("\n");

    }

    運行結果是:

 

 

 

 

    運行結果是:     

    # * # * #

    

    24. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     char i,j;

 

      i                       j

      a  b                y   z

     for(i='a',j='z';i<j;i++,j--)

     printf("%c %c ",i,j);

     printf("\n ");

    }

    運行結果是:

    a z b y c x d w e v f u g t h s i r j q k p l o m n

    

    25. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main( )

    {

     char c[7];  AB /n CD /n    E

     int i=0;

     for (;i<7;c[i]=getchar(),i++);

     for (i=0;i<7;i++) putchar(c[i]);

    }

 

    若輸入    AB <回車>

    CD<回車>

    EFG<回車>   

    則運行結果是:

 

 

 

 

    AB

    CD

    E

    

    26. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main( )

    {

     char c1,c2,c3,c4;

     c1='A';  c2='b';

     c3=c1+('a'-'A');//32

     c4=c2-('a'-'A');//

     printf("%c->%c\n",c1,c3);

     printf("%c->%c\n",c2,c4);

    }

 

 

 

 

    A->a

    b->B

    

    27. 閱讀程序,並按給定的輸出格式將程序運行結果寫在“運行結果:”之后

    #include <stdio.h>

    void main()

    {

     int a=1,b=2,c=3;

     if(c=a) //a=c=1

           printf("%d\n",c); //1

     else

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

    }

 

 

    運行結果:

    

 

 

 

 

    

    28.判斷並糾正下列程序中的錯誤。

    #include <stdio.h>

    void main()

    {

     int n;

     printf("n=");

     scanf("%d",n);

     if(n<7)

               ;

     printf("n is less than 7\n");

     if(n>=7)

     printf("n is equal to or greater than 7\n");

    }

 

 

 

 

 

 

 

    原語句2if(n<7); 應改為:if(n<7)

    原語句3if(n=>7) 應改為:if(n>=7)

    

    29.尋找下列程序代碼中的錯誤並說明如何糾正。

    #include<stdio.h>

    void main()

    {

    int gender;

    printf("gender=");

    scanf("%d",&gender);

    if(gender=1)

     printf("Woman\n");

    else

 

     printf("Man\n");

    }

 

 

 

 

 

 

 

    原語句2else; 應改為:else

    

    30. 尋找下列程序代碼中的錯誤並說明如何糾正。

    #include<stdio.h>

    void main()

    {

    int n;

    printf("n=");

    scanf("%d",&n);

    switch(n){

    case 1: printf("The number is 1\n");

    case 2: printf("The number is 2\n");

     break;

    default:

     printf("The number is not 1 or 2\n");

    }

    }

 

 

 

 

    應改為: case 1:  printf("The number is 1\n");  break;

    

    31. 程序功能:求正整數n以內的奇數。請修改程序中的錯誤,並調試。

    #include<stdio.h>

    void main()

    {

     int n, i=1;

     double sum=0;

     printf("輸入一個正整數:");

     scanf("%d", &n);

     while(i<n)

     {

         i+=2;

     sum+=i;

        

     if(n%2==0)  n--;

        }

     printf("輸出1+3+5++%d=%f\n", n, sum);

    }

 

 

    【提示】編譯無錯誤,運行有錯誤。

     程序運行示例:

     輸入一個正整數:10<回車>

     輸出1+3+5++9=11

     程序運行結果錯誤。

 

 

 

 

    原語句1double sum=0; 應改為:double sum=1;

    原語句2i+=2; 應改為:{ i+=2;

    原語句3if(n%2==0)  n - -; 應改為:if(n%2==0)  n - -; }

    

    32. 下列程序代碼打印110的值,判斷並糾正其中的錯誤。

    #include<stdio.h>

    void main()

    {

     int n=1;

     while(n<=10);

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

    }

 

 

 

 

    原語句1while(n<10); 應改為:while(n<=10) while(n<11)

    原語句2printf("%d\n",n); 應改為:printf("%d\n",n++);

    

 

 

 

    33. 尋找下列程序代碼中的錯誤並說明如何糾正。

    #include<stdio.h>

    void main()

    {

     for( y=.1;y!=1.0;y+=.1)//整數可以== ,!=小數存在誤差

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

    }

 

 

 

 

    原語句1for( y=.1;y!=1.0;y+=.1) 應改為:for( int y=1;y!=10;y++)

    原語句2printf("%f\n",y); 應改為:printf("%f\n",(float)y/10);

    

    
四、編程題

    1. 從鍵盤輸入一個字符,輸出該字符的按字典排列順序的下一個字符,例如,輸入a,則輸出b。如果輸入的字符不在26個英語字母中,則顯示輸入數據有誤,如果輸入的字符是zZ,則輸出aA

    解:

    #include <stdio.h>

    void main( )

    {

     char c;

     printf("Please enter a char");

     c=getchar( );   /*輸入一個字符*/

     if (c>='a'&&c<='y'||c>='A'&&c<='Y')//字符判斷

        /*字符是除了z以外的是26個字母中的一個*/

     putchar(c+1);

     else if(c=='z'||c=='Z')    /*字符是小寫或大寫的z*/

     putchar(c-25);

     else

     printf("Data error!");

    }

 

 

    2. 編寫程序,求a+aa+aaa++aaa,其中a是一個數字。例如:3+33+333+3333+33333(此時n5)。要求an從鍵盤輸入,輸出格式為3+33+333+3333+33333=37035

    解:方法一:

    # include <stdio.h>

    void main( )

    {

     int sum,s,j;

     int i,a,n;

     printf("\nEnter a and n");

     scanf("%d%d",&a,&n);

     sum=0;

     j=1;

     for(i=n;i>0;i--)

     {  

     s=i*j*a;

     sum=sum+s;

     j=j*10;

     }

     for(i=1;i<=n;i++)/*開始輸出*/

     {  

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

     printf("%d",a);

     if(i==n)

     printf("=%1d\n",sum);

     else

     printf("+");

     }

    }

    方法二:

    #include <stdio.h>

    void main( )

    {

     long sum,s,a;

     int i,n,j,b;

     printf("\nEnter a and n");

     scanf("%1d%d",&a,&n);

     sum=0;

     s=0;

     b=a; /* 暫存a */

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

     {  

     s=s+a;

     sum=sum+s;

     a=a*10;

     }

     for(i=1;i<=n;i++)/*開始輸出*/

     {

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

     printf("%d",b);

     if(i==n)

     printf("=%1d\n",sum);

     else

     printf("+");

     }

    }

    程序運行時,首先顯示Enter a and n?

    如果用戶輸入:2 5

    則運行結果為:

    2+22+222+2222+22222=24690

    

    3. 編寫程序,輸入一個正整數,計算並顯示該整數的各位數字之和,例如,整型數1987的各位數字之和是1+9+8+7,等於25

    解:1987  198  19   1

         %10  7   %10  8

    #include <stdio.h>

    void main( )

    {  

     int i,sum;

     int k;

     printf("\nEnter a integer");

     scanf("%d",&i);

     sum=0;

     while(i!=0)

     {  

     k=i%10;          /*取數字的最后一位*/

     sum=sum+k;       /*累加到計數器中*/

     i=i/10;          /*去掉數字的最后一位*/

     }

     printf("sum is %d\n",sum);

    }

    

    4. 在歌手大獎賽中有若干裁判為歌手打分,計算歌手最后得分的方法是:去掉一個最高分,去掉一個最低分,取剩余成績的平均分。編寫程序,輸入一個歌手的若干成績,以-1作為輸入結束標記,計算歌手的最后得分。

    解:

    #include <stdio.h>

    void main( )

    {  

     float score,min,max,sum=0;

     int i=0;

     printf("\nEnter some score end with -1");

     scanf("%f",&score); /*輸入第一個分數*/

     min=max=score; /*設讀入第一個分數為最高分和最低分*/

     while(score!=-1)

     {  

     i++; /*計數器增1*/

     sum=sum+score; /*分數累加*/

     scanf("%f",&score); /*輸入下一個分數*/

     if(score>max) /*剛輸入的分數大於最高分*/

     max=score;

     if(score<min&&score!=-1) /*剛輸入的分數小於最低分*/

     min=score;

     }

     sum=sum-max-min; /*去掉一個最高分和一個最低分*/

     printf("Final score is %6.2f\n",sum/(i-2));  /*輸出最后的分數*/

    }

    運行情況:

    Enter some score end with-19.8 9.75 9.65 9.88 9.76 1

    Final score is 9.77

    

    5. 編寫程序計算:    

    

    

    

    答:

    程序如下:

    #include <stdio.h>

    void main ( )

    {

     int i, j, result=0;

     printf ("Please input a integer");

     scanf("%d",&i);

     if (i<=5)

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

     result=result+j;

     else if (i>10)

     result=i*i;

     else

     {

     result=100;

     for (j=i;j>=1;j--)

     result=result-j;

     }

     printf ( "result=%d\n",result );

    }

    

    6. 編寫一個程序能讀入並計算一個只包含加減運算的表達式,每個輸入的數據都是浮點數,

除第一個數以外,其余每個數前面都有一個運算符,如23+43-233+234;”表達式以分號“;”結束。

 

//1+2*3/4

    答:

    程序如下:

    #include<stdio.h>

    void main ( )

    {

     float temp,sum;

     char ch,operat;

     printf ("\nplease input a digital expression:");

     scanf ("%f",&sum);

     ch=getchar( );

     while(ch!=';')

     {

     scanf ("%f",&temp);

     switch (ch)

     {

     case '+':

     sum=sum+temp;

    break;

     case '-':

     sum=sum-temp;

     break;

     default:

     printf ("Error input\n");

     return;

     }

     ch=getchar( );

     }

    printf ("%f\n",sum);

    }

    

    7. 編寫一個程序求滿足以下公式的變量k的最大值。

               2km

    其中,m是程序輸入的一個正整數。

    答:

    程序如下:

    #include <stdio.h>

    void main ( )

    {

     int i,k=0,m,temp=1;

     printf ("Please input a integer(m)");

     scanf ("%d",&m);

     do

     {

     k++;

     temp=temp*2;

     }while(!(temp>=m));

     printf ("m=%d\tk=%d\t2%d>=%d\n",m,k,k,m);

    }

    

    8. 編寫一個程序,找出被235整除時余數均為1的最小的10個自然數。

    答:    

    程序如下:

    #include <stdio.h>

    void main ( )

    {

     int i=1;

     int count=0;

     printf ("\n能被235整除時余數為1的最小10個自然數是:\n");

     while (count<=10)

     {

     if ((i%2==1)&&(i%3==1)&&(i%5==1))

     {

     count++;

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

     }

     i++;

        }

    }

    

    9. 編寫一個程序,用以記錄在鍵盤上輸入的字符個數,直到輸入回車換行符時止。

    【解】程序編寫如下:

    #include<stdio.h>

    void main( )

    {

     int n= -1;

     char ch;

     do

     {

     n++;

     }while((ch=getchar( ))!='\n');  

     printf("The character's number of input is %d.\n",n);

    }

    假如在鍵盤上輸入abcdefg后回車,那么會顯示信息:

    The characters number of input is 7.

    程序里,之所以把變量n的初始值設置為-1,是為了確保計數的准確性。如果一開始就按回車鍵,那么n就應該是0。在程序設計中,這些細微之處是必須考慮到的。

    

    10. 編寫一個程序,它打印出個位數是6、且能被3整除的所有三位正整數及其個數。要求一行打印8個數據。

    【解】題目中要求打印的是三位數,且個位數必須是6。因此可以for循環,它的循環控制變量從106開始,直到996為止,增量為10(因此要保證個位數是6)。由於還要打印這種數據的總個數,因此需要設置一個用於計數的變量,比如是count。發現一個這樣的數,它就加1。為了滿足一行打    印8個數據要求,可以利用計數器count,讓這樣的數一個個地打印下去。如果count %8= =0,就打印一個回車換行。具體程序如下:

    #include <stdio.h>

    void main( )

    {

     int count=0,j;

     for(j=106;j<=996;j+=10)

     {

     if(j%3!=0)

     continue;

     else

     {

     count++;

     printf("%d\t",j);

     if(count%8==0)  

     printf("\n");

     }

     }

     printf("\nThe count is %d\n",count);

    }

    運行此程序,輸出結果如下圖所示。

    

    11. 編寫一個C語言程序,打印出如下的圖形(a(b)(c)

    

    答:(a)的程序如下:

    #include <stdio.h>

    void main()

    {

     int x,y;

     for(x=10;x>=1;x--)

     {

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

     printf("* "); //打印一個*號和一個空格

     printf("\n");

     }

    }

    (b)的程序如下:

    #include<stdio.h>

    void main( )

    {

     int x,y;

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

     {

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

     if(y<=10-x)

     printf("  "); //打印兩個空格

     else

     printf("* "); //打印一個*號和一個空格

     printf("\n");

     }

    }

    (c)的程序如下:

    #include <stdio.h>

    void main( )

    {

     int x, y;

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

     {

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

     if(y<=x-1)

     printf("  ");   //打印兩個空格

     else

     printf("* ");   //打印一個*號和一個空格

     printf("\n");

     }

    }

    

    12. 利用下面的公式,求π的近似值:

    π/4=1-1/3+1/5-1/7+…±1/n

    循環直到1/n的絕對值小於0.0001時止。

    答:程序編寫如下:

    #include<stdio.h>

    void main( )

    {

     double pi=0.0,n=1.0,y=1.0,x,z;

     do

     {

     x=y/n;

     pi+=x;

     y*=-1.0;

     n+=2;

     z=x<0?-x:x;

     }while(z>1e-7);

     printf("|D=%lf\n",4*pi);

    }

    程序中,不斷在x里形成1/1-1/31/5-1/7等,並將其累加到pi上去。由y*=-1.0;構成每項的正負號。用變量z來控制循環的次數(不能直接用x來控制,因為它可能是負的。z里實際上是x的絕對值)。運行結束,輸出結果:π=3.141598

    

    13. 應用switch語句,判斷兩個整數ab的大小,或相等。例如,輸入a=10,b=5,輸出10>5;輸入a=5,b=15,輸出5<15;輸入a=25,b=25,輸出25=25

    【解析】

    1)分析題意,建立數據模型,設計算法。

    switch語句的常量表達式不能用關系表達式。將關系表達式轉換為序號:

    pvalue=1 *(a>b)+2* (a= =b)+3*(a<b)

    pvalue的值只能為1,或2,或3pvalue作為switch語句的表達式,其常量表達式為123

    需要定義三個變量:

    輸入量  int a,b;

    中間量  pvalue;

    再確定執行步驟。用自然語言描述算法:

    第一步  讀入a,b

    第二步  應用switch多選一判定,並輸出相應信息。

    2)編程。

    #include <stdio.h>

    void main ( )

    {

     int a,b,pvalue;

     printf ("輸入兩個整數:");

     scanf ("%d %d",&a,&b);

     pvalue=1 * (a>b)+2*(a==b)+3*(a<b);

     switch (pvalue)

     {

     case 1:printf ("輸出:%d>%d\n",a,b);break;

     case 2:printf ("輸出:%d==%d\n",a,b);break;

     case 3:printf ("輸出:%d<%d\n",a,b);break;

     }

    }

    3)程序運行示例

    輸入兩個整數:10 5

    輸出:10>5

    輸入兩個整數:10 10

    輸出:10= =10

    輸入兩個整數:5 10

    輸出:5<10

    

    14. 輸入起始年號,輸出50年內的閏年。

    【解析】

    1)分析題意,建立數據模型,設計算法。

    這個問題比較簡單,其算法描述如下:

    輸入起始年號year    scanf (%d,&year);

    生成50年年號,可用for循環實現:

    for (y=year;y<year+50;y++)

      if (y%4= =0&&y%100!=0y%400= =0)    /* 判閏年*/

      {

         printf (%5d,y);                    /*輸出閏年*/

         count+ +;                            /*控制換行*/

         if (count%10= =0)printf (\n)

       }

    2)編程。

    #include <stdio.h>

    void main( )

    {

     int year ,count=0,y;

     printf ("輸入起始年號:");

     scanf ("%d",&year);

     for (y=year;y<year+50;y++)

     if (y%4==0&&y%100!=0||y%400==0) /* 判閏年 */

     {

     printf("%5d",y);count++;

     if(count%10==0) printf ("\n");   /* 控制換行*/

     }

     printf ("\n");

    }

    (3)程序運行示例:

    輸入起始年號:2000

    2000 2004 2008 2012 2016 2020 2024 2028 2032 2036

    2040 2044 2048

    

    15. N內的勾股數(A2+B2=C2ABC

    【解析】

    1)分析題意,建立數據模型,設計算法。

    該問題可用枚舉法實現,直接用C語言描述:

    scanf (%d,&n);             /* 輸入n */

    for (A=1;A<n-1;A++)          /* 生成A*/

      for (B=A+1;B<n;B++)         /*生成C*/

      {

        C=(int)sqrt (A*A+B*B);       /*計算C*/

        if (C<=n&&A*A+B*B==C*C)  /* 輸出勾股數*/

        {

          printf ([%5d”“%5d%5d]  ,A,B,C);

          count + +;

          if (count%3= =0) printf (\n);

        }

      }

    (2) 編程。

    #include <stdio.h>

    #include <math.h>

    void main( )

    {

//3X+2Y+5Z=100'

 

     int n,A,B,C,count=0;

     printf("輸入一個正整數:");

     scanf ("%d",&n);

     for (A=1;A<n-1;A++)

     for (B=A+1;B<n;B++)

     {

     C=(int)sqrt(A*A+B*B);

     if (C<=n&&A*A+B*B==C*C)

     {

     printf ("[%5d %5d %5d]",A,B,C);count++;

     if (count%3==0)printf ("\n");

     }

     }

     printf ("\n");

    }

    3)程序運行示例

    輸入一個正整數:40

    [    3    4    5 ]    [     5     12     13 ]     [     6     8     10 ]

    [    7   24   25 ]    [     8     15     17 ]     [     9     12    15 ]

    [    10  24   26 ]    [    12     16     20 ]     [    12     35    37 ]

    [    15  20   25 ]    [    15     36     39 ]     [    16     30    34 ]

    [    18  24   30 ]    [    20     21     29 ]     [    21     28    35 ]

    [    24  32   40 ]   

    

    16. 找出1~999之內的能被3整除、且至少有一位數字為5的整數,以每行15個整數形式輸出。

    【解析】

    1)分析題意,建立數據模型,設計算法。

    2)編程。

    #include <stdio.h>

    void main ( )

    {

     int n,found1,found2,count=0,t;

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

     {

     found1=0;found2=0;

     if (n%3==0)found1=1;       /*判別n能否被3整除*/

     t=n;                       /*判別n是否含有數字5*/

     while (found1 && t!=0 && !found2)

     {

     if (t%10==5)found2=1;    

     t/=10;

     }

     if (found1 &&found2)        /* 輸出滿足條件的n和計數*/

     {

     printf ("%4d",n);  

     count++;

     if(count%15==0) printf ("\n");  /*控制換行*/

     }

     }

     printf ("\n");

    }

    3)程序運行示例:

    15  45  51  54  57  75  105  135  150  153  156  159  165  195  225

    252 255 258  285 315 345  351  354  357  375  405  435  450  453  456

    459 465 495  501 504 507  510  513  516  519  522  525  528  531  534

    537 540 543  546 549 552  555  558  561  564  567  570  573  576  579

    582 585 588  591 594 597  615  645  651  654  657  675  705  735  750

    753 756 759  765 795 825  852  855  858  885  915  945  951  954  957

    975

    

    17. 100g的葯品,用天平稱量,砝碼只有1g2g5g3種,問:若要求加的砝碼總數為50個,有幾種不同的加法?若要求總數為30個呢?請編程求解上述問題。

 

x+y+z=50

1*x+2*y+5*z=100

 

 

    #include <stdio.h>

    void main ( )

    {

     int i,j,k,sum=0;

     for (i=0;i<50;i++)

     {

     for (j=0;j<=50-i;j++)

     {

     k=50-i-j;

     if (i+j*2+k*5==100)

     {

     ++sum;

     printf ("one result%2d,%2d,%2d\n",i,j,k);

     }

     }

     }

     printf ("sum=%d",sum);

    }

    

    18. 編寫一個程序,求滿足以下條件的最大的n

    12+22+32+n21000

    解:n1開始,然后遞增,並且每次計算累加平方和s,當s剛大於1000時,這時的n-1便是滿足該條件的最大的值。程序如下:

    #include <stdio.h>

    void main ( )

    {

     int n,s;

     s=n=0;

     while (s<=1000)

     {

     ++n;

     s+=n*n;

     }

     printf ("n=%d\n",n-1);

    }

    本程序的執行結果為:

    n=13

    

    

    19. 編寫一個程序,對於用戶輸入的正偶數n,將其分解成兩個素數之和。

    解:設用戶輸入的正偶數為a,a=b+d,bd是兩個素數。假定b是較小的素數,則b<=a/2,且至少是奇數。判定b是素數的方法是其不能被2sqrt (b)之間的任何數除盡。程序如下:

    #include <stdio.h>

    #include <math.h>

    void main( )

    {

     int a,b,c,d;

     scanf ("%d",&a);

     for (b=3;b<=a/2;b+=2)

     {

     for (c=2;c<=sqrt(b);c++) /*找素數b*/

     if (b%c==0) break;

     if (c>sqrt(b)) /*找到了素數b,求出d*/

     {

     d=a-b;

     for (c=2;c<=sqrt (d);c++)/*判定d是否是素數*/

     if (d%c==0)break;

     if (c>sqrt(d)) /*d是素數,則找到了一個解,退出*/

     {

     printf ("%d=%d+%d\n",a,b,d);

     break;

     }

     }

     }

    }

    

    20. 兩個乒乓球隊進行比賽,各隊出3人。甲隊為ABC3人,乙隊為XYZ 3人。

以抽簽決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和XZ比。請編寫程序找出3對賽手的名單。

    解:設XYZ三位隊員的編號分別為123。設abc分別表示ABC三位隊員的對手編號。顯然有abc互不相同(因為每人都有不同的對手),即a!=b &&b!=c && c!=a成立,另外依題意有a!=1 && c!=1 && c!=3成立。所以應滿足條件:

    a!=b && b!=c && c!=a && a!=1 && c!=1 && c!=3

 

 

    采用三重for循環求解的程序如下:

    #include <stdio.h>

    void main( )

    {

     int a,b,c;

     for (a=1;a<=3;a++)

     for (b=1;b<=3;b++)

     for (c=1;c<=3;c++)

     if (a!=b && b!=c &&c!=a && a!=1  && c!=1 && c!=3)

    // 已經找到各自的對手,則輸出結果

     {

     printf ("A<-> %c\n",char(a+'W'));

     printf ("B<-> %c\n",char(b+'W'));

     printf ("C<-> %c\n",char(c+'W'));

     }

    }

    本題求解結果如下:

    

    A <-> Z

    B <->X

    C <->Y

    

    

    

    

    21. 驗證:任何四個相鄰的自然數(0除外)的乘積不是完全平方數,但乘積加1后則是完全平方數,如:15 * 16 * 17 * 18=73440不是,但73441=271*271是。用指針實現。

    答:驗證一個自然數是否完全平方數,可將這個數先開方再平方,看能否得到原數。

    #include <stdio.h>

    # include <math.h>

    void main()

    {

     int n,s;

     double r;

     printf ("input n");

     scanf ("%1d",&n);

     s=n*(n+1)*(n+2)*(n+3);

     r=sqrt(s);

     if (s!=r*r)

     printf ("n=%d\ts=%d\tsqrt(%d)=%f\n",n,s,s,r);

     else

     {

     printf ("結論錯誤!\n");

     return;

     }

     s++;

     r=sqrt(s);

     if(s==r*r)

     {

     printf ("%d+1=%d=%d*%d\n",s-1,s,(int)r,(int)r);

     printf ("結論正確\n");

     }

     else printf ("結論錯誤!\n\n");

    }

    運行示例:input n

              n=5    s=1680     sqrt (1680)=40.987803

              1680+1=1681=41*41

              結論正確

    

    22. 編寫程序,求e的值。e1+1/1!+1/2!+1/3!+1/4!++1/n!  int

    1)用for循環,計算前50項。

    2)用while循環,要求直至最后一項的值小於10-4

    【分析與解答】

    1)本題的基本算法是求累加值。累加項的分子部分都是1;分母的值有規律的遞增,依次為1!、2!、…、n!,即,若第i-1項的累加項為t i-1,則第i項的累加項是t i-1/i,在程序中可用表達式:t=t/i(i1變化到n)來表示。

    2)根據以上分析,若用變量t來存放累加項,當i的值從1變化到n時,可用以下語句來實現累加:

            t=t/i;   e+=t;

    3)為了實現累加過程,以上語句應當放在循環內,循環控制變量從1變化到n

    4)若用for循環,按題目要求已指定n的值是50。若用while循環,並沒有指定n的值,但已指定了循環結束的條件,當t的值小於10-4結束循環。

    5)現例示用while循環來求e值的部分程序:

    i=1;e=1.0;t=1.0;

    while(t>=le-4)

    {

     t=t/i;

     e+=t;

     i++;

    }

    6)請讀者自己對變量做出正確的定義,設計輸出語句,完善程序;也可以參考此程序段,按照自己的思路獨立地完成程序。

    7e的值應當是:2.71828

    8)根據以上分析,讀者已不難用for循環來實現求e值的計算。

    9)注意:在完成此程序時,不要對分母中的階乘值進行單獨計算,因為17!的值已超過int類型的最大值,更無法求到50!。

    

    23. 編寫程序,對輸入的一行數字字符(用回車結束,每個數字字符的前后都有空格),把這一行中的所有數字轉換成一個整數。例如,若輸入(<CR>代表Enter鍵):

           2      4     8     3      <CR>  

    則輸出整數:2483

    【分析與解答】

    1)一行字符的讀入,程序段如下。循環體內的“……”符號表示需要在循環體內完成的其他操作。

         ch=getchar( );

         while(ch!=\n)

         {  ……

           ch=getchar( );

           }

    2)在本題中循環體內需要把讀入的所有數字字符轉換成一個整數。若用變量n來存放這個整數,為了保證有效的存放,應當把它定義成long類型。

    3)要把輸入的一串數字字符轉換成一個整數,首先需要判斷當前讀入的字符是否是數字字符,若不是則什么也不做;若是,則進行以下操作:

    ①把當前讀入的一個字符轉換成一個一位整數,這可由語句“d=ch-0';”來實現,在這里d是一個整型變量;

    ②把d中的一位數歸並到n的低位中,這可用語句“n=n *10+d;”來實現。這里所述的操作可由以下語句來完成:

        if(ch>=0'&&ch<=9){d=ch-0';n=n * 10+d}

    if語句后一對括號中的判斷表達式可以調用字符函數isdigit來實現:

        if(isdigit(ch)){d=ch-0; n=n * 10+d}

    if子句的兩個語句可以合並成:n=n * 10+ch-0;

    4)把(3)中的語句放入循環中:

    ch=getchar( );

    while(ch!='\n')

     if(ch>='0'&&ch<='9')  n=n*10+ch-'0';     

     ch=getchar( );

    5)請自己寫出定義語句並賦初值。注意,最后輸出n時,應當使用格式說明%1d,而不能使用%d

    

    24. 編寫輸出以下圖案的程序,圖案的行數由輸入的值確定。

    

    

    

    

    【分析與解答】

    1)若圖案的行數輸入到變量L中。

    2)按要求L決定了圖形的行數,因此可通過循環來實現L行的輸出;

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

              {  ……  }

    循環體中的“……”號,代表輸出L行的操作。

    3)假定ch中存放了一個字符,我們知道,通過以下循環可以在一行上輸出n個字符:

               for(j=1;j<=n;j++)putchar(ch);

               putchar(\n);

    注意,在循環后putchar(\n);語句不可少,它用以換行。

    4)現在應當解決如何按要求給出每行輸出的字符。由圖分析,行數(或行號)為1時輸出字符A,行數為2時輸出字母B……若輸出的字母放在變量ch中,行號取決於外循環的控制變量i,則輸出的字母和行號的關系可用表達式:ch=A+i-1來表示。當i1ch中被賦予字母A,當i2ch    中被賦予了字母B,其他依次類推。因此,在此表達式后,利用(3)中的循環就解決了各行上輸出的字母。

    5)按要求每行輸出的字母的個數不同,第二行輸出3個字母,第三行輸出5個字母,第四行輸出7個字母……(3)中for循環體的執行次數取決於n的值,也就是說n的值決定了每行輸出字母的個數。其實,n的值與行號有着密切的關系:n=2*i-1, i1n的值是1、當i2n的值是3、當i    3n的值是5、當i4n的值是7。因此在(3)中for循環之前可用此表達式求出n的值。

    6)總結以上分析,我們可得到以下的程序段:

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

    {  

     ch='A'+i-1;

     n=2*i-1;

     for(j=1;j<=n;j++)putchar(ch);

     putchar('\n');

    }

    若所用的變量都已正確定義,通過輸入L的值為5,則程序段在第一列起有以下的輸出結果:

    

    

    

    

    

    和題目的要求比較已趨接近,不同的是在每行沒有適當的縮進。

    7)現在來解決每行的縮進問題。由題中給出的圖形可知,若指定輸出5行,第一行縮進5個空格,第二行則縮進4個空格,第三行則縮進3個空格,第四行則縮進2個空格,第五行則縮進1個空格。這同樣可以由以下的for循環來實現:

    for(k=Lk>=i;k--)putchar('')

    把此循環放在i控制的循環體內、輸出每行字符的循環之前即可。

    8)請讀者自己補充有關的include行、語句和變量的定義,以完成整個程序。注意,如果有能力可在某些地方作些簡化。

    

    25. for循環分別編程計算下式,變量用float類型,試分析結果不同的原因。

                       S=1-1/2+1/3-1/4++1/9999-1/100000

    1)從左到右計算。

    2)從右到左計算

    答:只寫出程序的主要語句:

    1float i,s=0,t= -1;

         for (i=1;i<=10000;i++){t=-t;s+=t/i;}

         printf (s=%f\n,s);

    2float i,s=0,t=1;

         for (i=10000;i>=1;i--){t=-t;s+=t/i;}

         printf (s=%f\n,s);

    運算結果對比:(10.693091  20.693097

    運算按從左到右,結果精度較低。因為當s達到一定值時,后面的1.0/i的值相對s來說太小,一些小數位將不能加到s上而丟失,即俗稱“丟失零頭”。如取相反順序,從右向左計算,可使較多的低位有效數字參加運算,實現“聚零為整”,結果精度較高。如果改用double類型計算,便可發?   ?.693097是比較准確的。

    

    26. ex=1+x+x2/2!+x3/3!+x4/4!++xn/n!+…,計算ex的近似值,並與標准函數exp(x)結果相比較,NX的值由鍵盤輸入,NX的值宜小不宜大,如N=10X=0.1

    答:除n以外,變量類型皆定義為double,使計算精度高一些。

    #include <stdio.h>

    #include <math.h>

    void main( )

    {

     int n;

     double e=1,x,i,j=1,m=1;

     printf ("n,x=");scanf ("%d %lf",&n,&x);

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

     {

     j*=i;m*=x;e+=m/j;

     }

     printf ("e=%12.9f exp(x)=%12.9f\n",e,exp(x));

    }

    運行結果:n,x=5 0.1

              e=1.105170917   exp(x)=1.105170918

    

    27. 求無符號整型數范圍內最大的一個素數。

     要點:從最大長整型數向遞減方向查找,找到的第一個素數則是最大的素數。

    #include <stdio.h>

    #include <math.h>

    void main( )

    {

     unsigned int n=-1,i,k; /* 賦值用n=-1,n即為最大無符號整型數*/

     while (n-=2) /*從大向小查找*/

     {

     k=sqrt (n);//10 5+5  100 =10*10

     for (i=2;i<=k;i++)

     if (n%i==0)break; /* 已判斷n不是素數,結束for循環*/

     if (i>=k+1)

     {

     printf ("max=%lu\n",n);

     break;

     } /*找到了結束while循環*/

     }

    }

    運行結果:max=4294967291

    

    28. 甲乙丙三個步槍射手,命中率分別為0.70.60.5

“甲→乙→丙→甲→乙→丙→…”的順序,相繼射擊同一目標,

直至有人命中為止。試模擬擊中100個目標,所需要的子彈數。

      要點:循環100次,模擬擊中100個目標。設子彈數s,開始為0。執行一次s++,產生一個0~1之間的隨機數,相當於一次射擊。每輪第1個隨機數如小於等於0.7,則認為甲命中,開始下一目標的射擊;否則,產生第2個隨機數,如小於等於0.6,則認為乙命中,開始下一目標的射擊;否則?   ?個隨機數,如小於等於0.5,則認為丙命中,開始下一目標的射擊;否則按上述規則,從甲開始再射擊這一目標,直到有人命中。

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    void main( )

    {

     int i,s=0;

     srand(time(NULL)); //初始化隨機數種子

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

     {

     while(1)

     {

     s++;

     if ((rand()%100/100.0)<=0.7) break;

     s++;

     if ((rand()%100/100.0)<=0.6) break;

     s++;

     if ((rand()%100/100.0)<=0.5) break;

     }

     }

     printf ("s=%d\n",s);

    }

    

    29.編寫一個程序,輸入三條線段的長度,判斷這三條線段能否構成一個直角三角形。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     float a,b,c;

     printf("請輸入三條線段的長度:");

     scanf("%f,%f,%f",&a,&b,&c);

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

     printf("這三條線段能構成直角三角形。\n");

     else

     printf("這三條線段不能構成直角三角形。\n");

    }

    30. 編寫一個程序,求輸入實數的絕對值。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     float x,y;

     printf("請輸入一個實數:");

     scanf("%f",&x);

     if(x>0) y=x;

     else y=-x;

     printf("%f的絕對值是%f\n",x,y);

    }

    

    31. 編寫一個程序,輸出給定月份的天數。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int year,mon,days,leap;

     printf ("請輸入年份月份");

     scanf("%d.%d", &year,&mon);

     switch(mon)

     {

     case 1:

     case 3:

     case 5:

     case 7:

     case 8:

     case 10:

     case 12: days=31;break;

     case 4:

     case 6:

     case 9:

     case 11: days=30;break;

     case 2:

     if(year % 400 == 0 || (year%4 == 0 && year%100 != 0)) days=29;

     else days=28;

     }

     printf ("%d%d月的天數為%d\n",year,mon,days);

    }

    

    32. 編寫一個程序,輸入一個不多於5位的正整數,求出它是幾位數。

    提示:注意整型變量的范圍。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int len,t=0;

     int n;

     printf("請輸入一個整數:");

     scanf("%ld",&n);

     if(n<0||n>=100000) t=1;

     else if(n<10) len=1;

     else if(n<100) len=2;

     else if(n<1000) len=3;

     else if(n<10000) len=4;

     else len=5;

     if(t==0) printf("該整數是個%d位數。\n", len);

     else printf("輸入負數或大於5位,無法求解。\n");

    }

    

    33. 編寫一個程序,根據輸入的a,b,c的值,求出x的值。

    c/b     a=0

    x =   a*c     a=0b=0

    a+b+c   其它情況

 

 

 

 

    #include <stdio.h>

    void main()

    {

     float a,b,c,x;

     printf("請輸入a,b,c的值:");

     scanf("%f,%f,%f",&a,&b,&c);

     if(a==0) x=c/b;

     else if(b==0) x=a*c;

     else x=a+b+c;

     printf("x=%f\n", x);

    }

    

    34. 某市企業管理測評中,若企業得分低於70的為較差企業,以“#”表示,若得分在7080之間的為中等企業,以“*”表示,若得分在8090之間的為良好企業,以“**”表示,若得分在90以上的為優秀企業,以“***”表示,利用if-else結構編寫一個程序,對於輸入的企業成績,輸出?   嚶Φ募侗鴇曛盡?

    如:輸入89,輸出   **

 

 

 

 

    #include <stdio.h>

    void main()

    {

     float x;

     printf("請輸入企業的得分情況");

     scanf("%f",&x);

     if (x<0||x>100)

     printf("輸入錯誤,請校對后重新輸入。\n");

     else if (x<70)

     printf("#\n");

     else if (x<80)

     printf("*\n");

     else if(x<90)

     printf("**\n");

     else

     printf("***\n");

    }

    

    35. 編寫一個程序,輸入某年某月某日,判斷該日是這一年的第幾天。

    提示:以35日為例,先把前兩個月的天數加起來,然后再加上5天即本年的第幾天;特殊情況,閏年且輸入月份大於3時需考慮多加一天。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int day,month,year,sum,leap;

     printf("\n請輸入年..:\n");

     scanf("%d,%d,%d",&year,&month,&day);

     switch(month)            /*先計算某月以前月份的總天數*/

     {

     case 1:sum=0;break;

     case 2:sum=31;break;

     case 3:sum=59;break;

     case 4:sum=90;break;

     case 5:sum=120;break;

     case 6:sum=151;break;

     case 7:sum=181;break;

     case 8:sum=212;break;

     case 9:sum=243;break;

     case 10:sum=273;break;

     case 11:sum=304;break;

     case 12:sum=334;break;

     default:printf("data error");break;

     }

     sum=sum+day;        /*再加上某天的天數*/

     if(year%400==0||(year%4==0&&year%100!=0))  /*判斷是不是閏年*/

     leap=1;

     else

     leap=0;

     if(leap==1&&month>2)     /*若是閏年且月份大於2,總天數加一*/

     sum++;

     printf("這是%d的第%d天。\n",year,sum);

    }

    

    36. 編寫一個程序,求一個四位數,它的十位上的數字是1,個位上的數字為2,且這個數能被789整除。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int n,a,b;

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

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

     {

     n=1000*a+100*b+10+2;

     if(n%7==0&&n%8==0&&n%9==0)

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

     }

    }

    

    37. 某些三位數,各位數字立方和等於該數本身,被稱為水仙花數,編寫程序輸出這些數。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int n,a,b,c;

     printf("the numbers are:");

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

     {

     a=n/100;

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

     c=n%10;

     if(n==a*a*a+b*b*b+c*c*c) printf("%d   ",n);

     }

     printf("\n");

    }

    

    38. 編寫程序求出1+2+3+……+20!。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     float s=0,t;

     int n,i;

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

     {

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

     t=t*i;

     s=s+t;

     }

     printf("the sum is:%e.\n",s);

    }

    

    39. 1234這四個數字,能組成多少個互不相同且無重復數字的三位數?編寫程序輸出這些數。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int i,j,k;

     printf("\n");

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

     for(j=1;j<5;j++)

     for (k=1;k<5;k++)

 

     if (i!=k&&i!=j&&j!=k)

     printf("%d,%d,%d\n",i,j,k);

    }

    

    40. 編寫程序輸出九九乘法口訣表。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int i,j,result;

     printf("\n");

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

     {

     for(j=1;j<10;j++)

     {

     result=i*j;

     printf("%d*%d=%-3d",i,j,result);

     }

     printf("\n");

     }

    }

    

    41. 編寫程序將輸入的十進制正整數轉換成十六進制整數后輸出。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int n,b[20],i=0,j;

     printf("\n請輸入一個正整數:");

     scanf("%d",&n);

     while (n>0)

     {

     b[i++]=n%16; n=n/16;

     }

     printf("對應的十六進制整數:");

     for(j=i-1;j>=0;j--)

     {

     if(b[j]<=9)   

     printf("%d",b[j]);

     else

     {

     switch(b[j])

     {

     case 10: printf("A");break;

     case 11: printf("B");break;

     case 12: printf("C");break;

     case 13: printf("D");break;

     case 14: printf("E");break;

     case 15: printf("F");break;

     }

     }

     }

     printf("\n");

    }

    

    42.編寫程序,由輸入的第一個字母來判斷是星期幾,若第一個字母一樣,則繼續判斷第二個字母。直到輸入*0,就不再判斷了。

    如:輸入s,輸出error

    輸入S,則要求再輸入第二個字符,若再輸入u,則判斷為周日,輸出為Sunday,並可繼續判斷,若輸入*,則退出判斷,結束結束執行。

 

 

 

 

    #include <stdio.h>

    void main( )

    {

     char c;

     printf("請輸入第一個字符:\n");

     while ((c=getchar())!='*')

     {

     switch (c)

     {

     case 'S':

     printf("請輸入第二個字符\n");

     c=getchar();

     if(c=='a')    

     printf("%c->Saturday\n",c);

     else if (c=='u')    

     printf("%c->Sunday\n",c);

     else

     printf("error\n");

     break;

     case 'F':

     printf("%c->Friday\n",c); break;

     case 'M':

     printf("%c->Monday\n",c); break;

     case 'T':

     printf("請輸入第二個字符\n");

     c=getchar();

     if(c=='u')    

     printf("%c->Tuesday\n",c);

     else if (c=='h')    

     printf("%c->Thursday\n",c);

     else

     printf("error\n");

     break;

     case 'W':

     printf("%c->Wednesday\n",c); break;

     default: printf("error\n");

     }

     }

    }

    

    43. 編寫程序,使輸入的字符按字母表后移一位。

    如:輸入s,輸出t

    輸入S,輸出為T

 

 

 

 

    #include <stdio.h>

    void main( )

    {

     char c;

     printf("請輸入字符:\n");

     while ((c=getchar())!='\n')

     {

     if((c>='a'&&c<='y')||( c>='A'&&c<='Y'))

     c++;

     else if(c=='z'||c=='Z')

     c-=25;

     printf("%c",c);

     }

    }

    

    44. 判斷用戶輸入的字符是數字字符、字母字符還是其它字符。

    【解】數字字符是'0'~'9',字母字符是'a'~'z''A'~'Z',其余為其它字符。程序如下:

    #include<stdio.h>

    void main()

    {

     char c;

     printf("輸入一個字符:"); scanf("%c",&c);

     if(c>='0'&&c<='9')

     printf("\n%c是數字字符\n\n",c);

     else if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

     printf("\n%c是字母字符\n\n",c);

     else

     printf("\n%c是其它字符\n\n",c);

    }

    

    45.s=1+ 2+ + n!的值。

    【解】當前階乘值由前一個階乘值乘以循環變量值來求得。程序如下:

    #include <stdio.h>

    void main()

    {

     int i,s=0,t=1,n;

     printf("輸入n:");

     scanf("%d",&n);

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

     {

     t=t*i; s=s+t;

     }

     printf("s=%d\n",s);

    }

    

    46. 將用戶輸入的一個正整數顛倒輸出。

    【解】對於正整數n,從個位起,依次取出並輸出。程序如下:

    #include <stdio.h>

    void main()

    {

     int n,d;

     printf("輸入一個正整數:");

     scanf("%d",&n);

     printf("顛倒結果:");

     do

     {

     d=n%10;

     printf("%d",d);

     n=n/10;

     }while(n!=0);

     printf("\n\n");

    }

    

    47.求滿足如下條件的最大的n12 + 22 + 32 + + n2 1000

    【解】采用窮舉法求解,n1開始,然后依次遞增,對每個n值計算累加平方和s,當s大於1000時,此時的n-1即為所求。程序如下:

    #include<stdio.h>

    void main()

    {

     int n=0,s=0;

     while(s<=1000)

     {

     ++n;  

     s=s+n*n;

     }

     printf("n=%d\n\n",n-1);

    }

    

    48.某人買了一堆糖,每天吃掉一半后,再多吃一顆,天天如此,過了三天就只剩下一顆,問該人共買了多少顆糖。

    【解】采用迭代法,設迭代變量為n,其初值為1,迭代表達式為n=(n+1)*2,迭代條件為1 i 3。程序如下:

    #include<stdio.h>

    void main()

    {

     int i,n=1;

     for(i=3;i>=1;i--)

     n=(n+1)*2;

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

    }

    

    49.編寫程序。功能是找出1000之內的所有完數。一個數如果恰好等於它的因子之和,這個數就稱為“完數”。( 例如,6的因子為123,而6123,因此6是完數。)

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int m,sum,i;

     for(m=2;m<1000;m++)

     {  

     sum = 0 ;

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

     if(m % i == 0 ) sum=sum+i;

     if( sum == m )    printf("%d 是一個完數\n",m);

    }

    }

    

    50. 編寫程序。功能是找出199之間的全部同構數。所謂同構數是這樣的一組數:它出現在平方數的右邊。(例如:525右邊的數,25625右邊的數,525都是同構數。)

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int i;

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

     if(i * i % 10 == i)   printf("%3d是同構數\n", i );

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

     if( i * i % 100 == i)   printf("%3d是同構數\n", i );

    }

    

    51.程序的功能是打印100以內個位數為6且能被3整除的所有數。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int  i,j;

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

     {  

     j=i * 10 +6;

     if (j %3 != 0)  continue;

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

     }

    }

    

    52.編寫程序。計算100——1000數值范圍內各位數字之和為5的數,並輸出該數,每行輸出五個數。

 

 

 

 

    #include <stdio.h>

    void main()

    {  

     int i,sum,n,count=0;

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

     {

     sum=0;

     n=i;

     while(n!=0)

     {

     sum=sum+n%10;

     n=n/10;

     }

     if (sum!=5) continue;

     else

     {

     count++;

     printf("%5d",i);

     if(count%5==0) printf("\n");

     }

     }

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

    }

    

    53.編寫程序。打印出100以內個位數為6,並且能被3整除的所有數。

 

 

 

 

    #include <stdio.h>

    void main()

    {

     int m,n;

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

     {

     n=m*10+6;

     if(n%3!=0) continue;

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

     }  

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM