c語言-程序設計_c語句+循環結構


一、c語句概述

1、c語句

用來對數據進行加工(完成操作任務)。是構成程序的基本單位,通常一個c程序由若干個函數(系統、用戶)組成,每一函數由若干條語句組成。每條語句總是以‘;’結束。

2、c語句的分類

(1)簡單語句

【1】表達式語句:由一個表達式后跟“;”組成

1—>賦值語句:賦值表達式加一個“;”,如 s = 3.14.59*r*r ;   i ++;(與 i++不同)

2—>函數調用語句:函數調用表達式加一個“;”,如 printf("Hello,world \n") ;

【2】結構控制語句(9種):控制程序流程

1—>選擇語句:if ... else  switch

2—>循環語句:for  while  do ... while

3—>轉向語句:continue  break  return  goto

(2)復合語句:將一組語句包括在一對 { } 中

int i=0,sum=0;
while(i<=100)
{ 
    sum=sum+i;
    i=i+1;     
}

說明:<1>復合語句的 { } 之后不加分號

   <2>復合語句中可以是簡單語句、復合語句和空語句

(3)空語句:只有一個“ ; ”,什么也不做

for(i=0;i<100;i++)
{ 
       ; 
}

(4)賦值語句:賦值表達式后加一個分號

if ((a=b)>0)     //賦值表達式
t=a;             //賦值語句            

注意:<1>賦值表達式可以包含在其它表達式中,而賦值語句不可以

    <2>賦值語句只能作為一條單獨的語句,或放在復合語句中

    <3>賦值語句用途很廣

【1】另一種形式的賦值語句 <變量><運算符> = <表達式>;即<變量>=<變量><運算符><表達式>;

【2】連續賦值語句

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

步驟:連續賦值語句應“從右向左”計算 a=b=c=1 ;等價於: a=(b=(c=1) );

1.把常數 1 賦給變量c,表達式(c=1) 的值為1;

2.把表達式(c=1)賦給變量b,表達式(b=(c=1) )的值為1;

3.將右側表達式的值1賦給a , a =1 。

二、結構控制語句(9種)

1、if 語句

(1)if 語句的三種形式

【1】條件執行  if (e)  A

main()
{
   int x , y ;
   x=20 ; 
   y=10 ;
   if (x>y)
   printf(“%d”,x);
}

【2】分支選擇       if (e)  A else B

當e為真值(非0)時執行A,否則執行B或后續語句

main()
{
   int x , y ;
   x=20 ; 
   y=10 ;
   if (x>y)
       printf(“%d”,x);  //A或B都可以是單一語句,也可以是復合語句
   else           //else部分不能獨立存在,即else前一定有一個“;”,它必定是if語句的一部分
       printf(“%d”,y);
}

注:在C語言中,表達式e的值為非0 時,系統均按“真值”處理。

【3】else if 語句(階梯式的 if - else 語句)

if (number>500)           cost=0.15 ; 
else if (number>300)      cost=0.1 ;
else if (number>100)      cost=0.075 ;
else if (number>50)       cost=0.05 ;
else                      cost=0 ; 

注:一般else與最近的 if 匹配

(2)if 語句的嵌套

If 語句中又包含一個或多個 if 語句稱為 if 語句的嵌套。 實際上只要將前述 if 語句的形式1和2中的內嵌語句用一個 if 語句代替,即成為 if 語句的嵌套。 嵌套的 if 語句還可以嵌套另一個 if 語句,形成多重嵌套

if 嵌套的幾種變形

if ~ else 配對原則:缺少{ }時,else總是和它上面離它最近的未配對的if 配對。

2、switch語句(多分支選擇語句)

(1)格式

其中:表達式e可以是整型,字符型,枚舉型;常量表達式Ci必須與表達式類型一致(整型與字符型通用)

注意:<1>常量表達式Ci僅起語句標號作用,不作求值判斷

         <2>常量表達式的值必須是唯一的,沒有先后次序

         <3>多個case語句可共用一組執行語句

(2)執行過程

【1】計算表達式e的值;

【2】若與常量表達式Ci值一致,則從語句i,開始執行;直到遇到break語句或switch語句的“ } ”;

【3】若與任何常量表達式值均不一致時,則執行default語句,或執行后續語句。

#include <stdio.h>
 void main( )
      {   int x=1,y=0,a=0,b=0;
          switch(x)
          {    case  1:
                           switch(y)
                            {     case 0:   a++;  break;
                                   case 1:   b++;  break;
                            }
                case  2:  a++;b++; break;
                case  3:  a++;b++;
           }
           printf(“\na=%d,b=%d”,a,b);
       }
// a=2 ,  b=1  
switch嵌套

3、循環語句

(1)用 goto 語句和if語句構成循環(不提倡)

【1】goto 語句

goto 語句的一般形式:goto 語句標號

語句標號:用於定義程序中的某個位置,用標識符表示,不能只用數字

例:goto start  4(正確)

  goto 20     6(錯誤)

goto 語句的功能是無條件地轉到標號所指的語句

注:濫用 goto 語句會破壞結構化,所以應限制使用 goto

【2】用 goto 語句和if語句構成循環

#include "stdio.h"
void main()
{
     int k = 1, s = 0;
loop:  if (k <= 3)
         {
                s = s + k;
                k++;
                goto loop;
         }          
         printf(" s = %d ",s);
}    

(2)用 while 語句(當型循環——先判斷后執行)

【1】一般形式:while(表達式) 循環體語句;

while循環先判斷表達式,若為真則執行循環體,再判斷表達式,重復上述過程,直到表達式為假時退出循環,循環體有可能一次也不執行。

【2】注意事項

1.若循環體包含一條以上的語句,應以復合語句形式出現,用 { } 括起來

2.循環前,必須給循環控制變量賦初值

3.循環體中,必須有改變循環變量值的語句(使循環趨向結束的語句)

4.循環體可以為空,如:

while( ( c=getchar() ) != 'a');
//等價
c=getchar();
while( c != 'a')
c=getchar();

5.下列情況,退出while循環:條件表達式不成立(為零),循環體內遇 break 、goto

6.無限循環 while(1) 循環體 ;

(3)用 do-while 語句(直到型循環——先執行后判斷)

一般形式: do       

     循環體語句;

     while(表達式) ;    <—(分號不可省略!!!)

先執行循環體,然后判斷表達式。若為真,則再次執行循環體,否則退出循環。

1. do-while 循環,循環體至少執行一次;

2. while和do-while可以解決同一問題,兩者可以互換。

3. while后的表達式一開始就為假時,兩種循環結果不同。

(4)用 for 語句(多功能)

for 語句是 C 語言中最為靈活,使用最廣泛的循環語句,可完全替代while,do-while語句。

【1】一般形式:

常用形式:for(循環變量賦初值;循環條件;循環變量增值) 循環體語句;

For語句可以轉換成while結構:

表達式1;
while(表達式2)
{
    循環體語句;
    表達式3;
}

【2】其他形式:

1.省略表達式1:應在for之前為變量賦初值。

k = 1;
for ( ;k<=3 ;k++)
    s = s+k;

2.省略表達式2:循環條件始終為“真”,循環不終止,將成為“死循環”,需要在循環體中引入break語句以退出循環。

3.省略表達式3:應另外設法使程序能夠結束,即循環體內應有使循環條件改變的語句。

for( k = 1; k <= 3;)
{
     s = s+k;
     k++;    
}

4.省略表達式1、3:完全等同於while語句。

k=1;
for(; k<=3; )
{
     s = s+k;
     k++;
}
//等同於
k=1;
while( k<=3)
{
      s = s+k;
      k++;  
}

5.三個表達式都省略:無初值,不判斷條件,循環變量 不增值,死循環。

6.表達式1、3可以是與循環無關的表達式,也可以是逗號表達式。 for ( s=0 , i=1 ; i<=100 ; i++ ) s=s+i;

7.表達式2可以是關系、邏輯、算術、字符表達式,非0時,執行循環體,為0時退出循環。

#include <stdio.h>
main()
{  int  i,c;
   for(i=0;(c=getchar())!='\n';i+=c)
   printf("%d ",i+c);
}
for ( k=1; k-4; k++) //僅當k的值等於4時終止循環。k-4是數值表達式。
s=s+k;

4、break 語句和 continue 語句

(1)break 語句

【1】用 break 語句可以結束 switch 結構和三種循環。

【2】break只能終止並跳出最近一層的結構。

【3】break不能用於循環語句和switch語句之外的任何其它語句之中。

     

(2)continue 語句

用 continue 語句可以結束本次循環,即跳過循環體中尚未執行的語句,進行下一次是否執行循環體的判斷。

(3)break 和 continue 語句的區別

【1】continue 語句只結束本次循環,break語句則是結束整個循環。

【2】continue 語句只用於while,do-while,for循環語句中,break語句還可以用於switch語句中。

三、循環的嵌套

定義:一個循環體內又包含了另一個完整的循環結構,稱為循環的嵌套。 三種循環可以互相嵌套,層數不限。 嵌套循環的執行流程。

1、幾種合法的嵌套形式

while()
{
      ......
      while()
      {
           ......
      }
      ......
}
while 嵌套 while
do
{
      ......
      do
      {
           ......
      }while();
      ......
}while();
do-while 嵌套 do-while
for( ; ; )
{
      ......
      for( ; ; )
      {
           ......
      }
      ......
}
for 嵌套 for
for( ; ; )
{
      ......
     while( )
      {
           ......
      }
      ......
}
for 嵌套 while
while()
{
      ......
      do
      {
           ......
      }while();
      ......
}
while 嵌套 do-while

2、循環嵌套的說明

【1】嵌套的循環控制變量不能相同

【2】內循環變化快,外循環變化慢

void main()
{   int i,j;
    for(i=1;i<10;i++)
       printf("%4d",i);
    printf("\n------------------------------------\n");
    for(i=1;i<10;i++)
       for(j=1;j<10;j++)
       printf((j==9)?"%4d\n":"%4d",i*j);    
}

//條件運算符:
j=9,輸出i*j,再回車換行。
j≠9,只輸出i*j。
循環嵌套,輸出九九乘法表

【3】正確確定循環體

【4】循環控制變量常用求解的問題掛鈎

注意:循環可以互相嵌套,但不能相互交叉

四、幾種循環的比較

1、不提倡用 goto 構成循環

2、關於循環的控制

3、循環體的執行

【1】先判斷條件,循環體可能一次也不執行——while語句

【2】后判斷條件,循環體至少執行一次——do-while語句

4、for循環功能強,兩個界限不清,使程序設計較隨意

5、都可以用 break 語句終止循環和 用 continue 語句結束本次循環

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM