目錄
if陳述句
switch陳述句
while回圈
for回圈
do while回圈
選擇結構(分支陳述句)
if switch
回圈結構(回圈陳述句)
for while do....while
那什么是陳述句呢?
c語言規定:C語言中由一個分號 ; 隔開的就是一條陳述句,
if陳述句
語法結構:
//第一種型別
if(運算式)
陳述句;
//第二種型別
if(運算式)
陳述句1;
else
陳述句2;
//第三種型別
if(運算式1)
陳述句1;
else if(運算式2)
陳述句2;
else
陳述句3;
有兩點要特別注意,第一點,if陳述句后面默認只能寫一條陳述句,若想要多個陳述句需加一個大括號
第二點,第三種型別中else if 可以有多個,但if和else只能有一個!
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
這段代碼你認為列印結果是什么?haha?如果你認為是haha的話恭喜你,接下來你會有所獲的,實際上C語言規定else總是與最近的可以匹配的if匹配,所以else是跟if(b==2)匹配的,所以if(a==1)不成立,后面不執行,所以這段代碼不輸出任何結果,
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
}
else
printf("haha\n");
return 0;
}
在這種情況下else才是與第一個if匹配,這也提醒我們平時在寫代碼的時候記得打大括號,
//代碼1
if (condition)
{
return x;
}
return y;
//代碼2
if(condition)
{
return x;
}
else
{
return y;
}
這兩段代碼的結果是一樣的嗎?實際上是一樣的,但第一個代碼容易造成歧義,實際上如果回傳了x,就不會再回傳y了,因為一個函式只能有一個回傳值,return后的陳述句也不再執行, 所以我們在平時寫代碼中要避免寫出這種有歧義的代碼,
switch陳述句
switch(整型運算式)
{
陳述句項;
}
陳述句項是什么呢?舉個栗子
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");//輸入1時的列印結果
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
switch()里必須是整型運算式,這里特別說明char是屬于整型的,因為字符的ASCII碼是整型,
default
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");//輸入1時的列印結果
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
printf("輸入錯誤\n");
break;
}
return 0;
}
default可以放在任意位置,并不是只能放在最后,還有,switch陳述句在使用中是允許嵌套使用的,
while回圈
while(運算式)
回圈陳述句;
舉個栗子
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);//列印1 2 3 4 5 6 7 8 9 10
i++;
}
return 0;
}
while陳述句中的break和continue
break
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(5 == i)
break;
printf("%d ", i);
i++;
}//最終輸出結果為1 2 3 4
return 0;
}
continue
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(5 == i)
continue;
printf("%d ", i);
i++;
}//列印結果為1 2 3 4
return 0;
}
所以continue是跳過本次回圈continue后的代碼,
for回圈
for(運算式1;運算式2;運算式3)
回圈陳述句;
舉個栗子
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}//輸出結果為1 2 3 4 5 6 7 8 9 10
return 0;
}
for回圈中的break和continue
break
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(5 == i)
break;
printf("%d ",i);
}//輸出結果為1 2 3 4
return 0;
}
continue
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}//輸出結果為 1 2 3 4 6 7 8 9 10
return 0;
}
這邊很多人會有疑惑為什么不是1 2 3 4,這就是for回圈區別于while回圈,在上面while回圈中continue跳過的是本次回圈中continue之后的全部代碼,所以i的值沒有變還是5,所以下次再進入回圈時i還是5,這就造成了死回圈,而for回圈中盡管continue跳過了此次回圈,但i++的操作是在進入回圈之前進行的,不在回圈體內,所以在下一次進入回圈前i的值就加1了,最終只有5沒有列印,其它值照常列印,
for回圈中需要注意的細節
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for(; i<10; i++)
{
for(;j<10;j++)
{
printf("haha");
}
}
return 0;
}
這段代碼列印結果是什么?100次haha?我相信很多人肯定會認為是100次haha,那接下了你會有所識訓了,實際上這段代碼的結果是輸出10次haha,問題出在哪呢?首先,i=0我們進入外層回圈,然后再進入內層回圈,j從0加到10,回圈結束,第二次i=1時再次進入外層回圈,此次j沒有初始化,所以j還是10,不滿足進入回圈條件,所以本次回圈結束,最終只列印10次,這段代碼提醒我們在寫for回圈時不要輕易省略任何一個運算式,這樣容易造成程式出現bug,
再舉個栗子
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
}
這段代碼回圈進行了幾次?死回圈?實際上這段代碼考察你有沒有真正理解三個運算式的含義,運算式2的內容是判斷條件,這邊特別容易錯的,運算式2是給k賦值0,而不是判斷k是否與0相等,0為假,所以這個回圈不會進去,回圈0次,
do while回圈
do
回圈陳述句;
while(運算式);
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);//結果為輸出10
return 0;
}
這段代碼的結果是10說明了do...while陳述句的特點是先執行代碼,后判斷條件,
因do...while使用的場景比較有限,do...while中的continue和break就不再詳細介紹了,可以參考前面for回圈和while回圈,
本人水平有限,請大家批評指正!喜歡我就點個關注吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291534.html
標籤:其他
上一篇:三.Netty入門到超神系列-Java NIO 三大核心(selector,channel,buffer)
下一篇:??「 計數排序 」??
