簡介:流程控制語句
1.分支語句(條件語句)
if/else(重點)
switch/case
2.循環語句
for(重點)
while
do while
分支語句
1> if/else
按照一定的條件執行不同的代碼,可以使用分支語句。
if(邏輯表達式條件1){ //如果 必須出現1次
滿足條件1時執行的語句;
}
else if(邏輯表達式條件2){ //或者 出現0-n次
滿足條件2時執行的語句;
}
else{ //否則 出現0-1次
以上條件都不滿足時執行的語句
}
練習:輸入一個整數,判斷 是正數、負數、零。
int a; if(a>0){ printf("%d是正數\n",a); }else if(a==0){ printf("%d是零\n",a); }else{ printf("%d是負數\n",a); }
注:
a> if/else 只會執行一個分支,因此,如果第一個分支滿足條件了,不再執行後面的分支。-> 如果執行到了第n個分支,前面n-1個分支一定不成立。
b> 有else的分支語句必選其一執行,沒有else的分支語句可選其一執行。
c> 如果分支內部只有一條語句,{}可以省略。一般執行:break/continue/return 語句時,{}通常省略。
d> 流程控制語句 需要 注意臨界點的處理。
e> 經常 用於 處理 業務的需求。
#include <stdio.h> /* 使用if語句來判斷輸入輸入 某年某月 有幾天 */ int main() { printf("請輸入年月\n"); int y,m,maxDay=31; scanf("%d%d",&y,&m); if(m<1 || m>12){ printf("輸入非法\n"); return -1; } if(m==4||m==6||m==9||m==11){ maxDay = 30; } else if(m==2){ maxDay=28+ (y%4==0 && y%100!=0 || y%400==0); /*if((y%4==0 && y%100!=0)||y%400==0) maxDay = 29; else maxDay = 28;*/ } printf("%d\n",maxDay); return 0; }
注:
a> if/else 只會執行一個分支,因此,如果第一個分支滿足條件了,不再執行後面的分支。-> 如果執行到了第n個分支,前面n-1個分支一定不成立。
b> 有else的分支語句必選其一執行,沒有else的分支語句可選其一執行。
c> 如果分支內部只有一條語句,{}可以省略。一般執行:break/continue/return 語句時,{}通常省略。
d> 流程控制語句 需要 注意臨界點的處理。
e> 經常 用於 處理 業務的需求。
#include <stdio.h> /* 使用if語句來判斷輸入輸入 某年某月 有幾天 */ int main() { printf("請輸入年月\n"); int y,m,maxDay=31; scanf("%d%d",&y,&m); if(m<1 || m>12){ printf("輸入非法\n"); return -1; } if(m==4||m==6||m==9||m==11){ maxDay = 30; } else if(m==2){ maxDay=28+ (y%4==0 && y%100!=0 || y%400==0); /*if((y%4==0 && y%100!=0)||y%400==0) maxDay = 29; else maxDay = 28;*/ } printf("%d\n",maxDay); return 0; }
2> switch/case
格式:
switch(控制表達式){
case 常量表達式 :語句; break;
…
default: 語句;
}
控制表達式被當做整數處理,可以是字符,不能是浮點數或字符串
常量表達式必須是常量,如: 3 ‘A’ 2+5
語句 可以是 零到多條
不允許重復分支(值不能相同)
default不一定在最後但一般都在最後)
switch的執行機制,語句只有遇到break或者結束才能退出,否則會一直向下執行下去。
switch(a){ case 1: printf("1\n"); break; case 2: printf("2\n"); break; case 3: printf("3\n"); break; default: printf("d\n"); }
2. 循環語句
1> for循環
循環語句 用於 反復執行某段代碼,直到滿足某些條件(退出條件而非循環條件)後退出。
for 循環的語法結構:
for(循環變量的初始化1;循環條件2;步進語句3){
需要反復執行的代碼段 //循環體4
}
int i; for(i=0;i<10;i++){ printf("%d\n",i); }
如果退出條件永遠不能滿足,叫 死循環(無限循環),ctrl+c可以退出死循環。
無限循環最簡單寫法: for(;;){ }
在C99中,支持:for(int i=0;i<10;i++){ },但是編譯時要使用std=c99
#include <stdio.h> /* 練習:計算某班學生的總分、平均分和最高分。 分數需要輸入,無需保存分數。 人數的問題: 1 先輸入人數,在輸入分數。(用這個) 2 可以用 -1 做退出的條件。 */ int main() { int sum=0,max=0x80000000;//表示最小的int型整數1000...0000 double avg; int i,num=0; /*printf("請輸入人數\n"); scanf("%d",&num); if(num<1){ printf("非法人數\n"); return -1; } for(i=0;i<num;i++){ int temp; scanf("%d",&temp); sum = sum+temp; if(max<temp) max = temp; }*///次數在循環前確定 for(;;){//循環次數不能確定,輸入-1表示輸入結束 int temp; scanf("%d",&temp); if(temp == -1) break;//退出循環 sum = sum+temp; if(max<temp) max = temp; num++; } printf("sum=%d,avg=%lf,max=%d\n", sum,1.0*sum/num,max); return 0; }
break 可以退出 循環/switch,退出函數用return。
循環可以分為:次數確定、次數不確定、無限循環。
次數確定的: int i; for(i=0;i<num;i++){...}
次數不確定: for(;;){...if(條件) break; ...}
無限循環: for(;;){...}
循環中經常嵌套另外的循環,叫多重循環,最常用的是二重循環
二重循環的難點在於內層循環次數的控制,具體公式如下:
i如果遞增1,那麼
j< m*i + n ;j++
m 是 內層循環遞增的次數,如果遞減取負數
n 是 內層循環第一次循環的次數
前提:i和j的初始值保持一致,最好都為0。
#include <stdio.h> /* 使用雙重for循環打印 * *** ***** ******* ********* */ int main() { int i,j;//i控制行,j控制列 for(i=0;i<5;i++){ for(j=0;j<2*i+1;j++){ printf("*"); } printf("\n"); } return 0; }
#include <stdio.h> /* 使用雙重for循環 打印9*9乘法表 j*i 1*1=1 1*2=2 2*2=4 ...... */ int main() { int i,j; for(i=1;i<10;i++){ for(j=1;j<i+1;j++){ printf("%d*%d=%d ",j,i,j*i); } printf("\n"); } return 0; }
2> while循環
while循環和for循環 除了語法不同,其他都可以互通。
語法:
循環變量的聲明和初始化;
while(條件){
循環體;
步進語句;
}
#include <stdio.h> int main() { int sum=0; while(1){ int temp; printf("請輸入數字(0退出)\n"); scanf("%d",&temp); if(temp == 0) break; sum += temp; } printf("sum = %d\n",sum); return 0; }
int i=0; while(i<10){ printf("%d\n",i); i++; }
while(1){} // 死循環
3> do-while循環
do while循環
語法:
循環變量的聲明和初始化;
do{
循環體;
步進語句;
}while(條件);
do-while 循環 先do 後判斷條件,所以 至少執行一次。
int i=10,j=10; do{ printf("%d\n",i); i++; }while(i<10); while(j<10){ printf("%d\n",j); j++; } // 當i,j 初始 不滿足條件時,do循環打印i,while不打印j。 // 當i,j 初始 滿足條件時,無區別。 // 很多情況下,do循環和while(1){ ...if() break; }可以互通。
#include <stdio.h> /* 使用do-while來計算輸入數字的位數 注意:do-while();分號結束 */ int main() { int num,count=0; printf("請輸入一個整數\n"); scanf("%d",&num); do{ num = num/10; count++; if(num==0) break; }while(1/*num!=0*/); printf("%d\n",count); return 0; }
注:
break和continue
continue用於循環內部,結束本次循環,繼續下一次循環,如果下一次循環條件不成立,也會退出。
break 用於循環內部,中斷所有循環,結束整個循環如果是嵌套循環,break只是退出本層循環)。
本文出自 “雪狼” 博客,請務必保留此出處http://wolfzhxp.blog.51cto.com/2409990/1285967