- 版權(quán)聲明:本文為博主原創(chuàng)文章康辑,未經(jīng)博主允許不得轉(zhuǎn)載咸灿。
一、流程控制結(jié)構(gòu)
(1)順序結(jié)構(gòu):按書寫順序執(zhí)行每一條語句丛塌。
(2)選擇結(jié)構(gòu):對給定的條件進行判斷,根據(jù)判斷結(jié)果決定執(zhí)行哪一段代碼畜疾。
(3)循環(huán)結(jié)構(gòu):在給定條件成立的情況下赴邻,反復(fù)執(zhí)行某一段代碼。
二庸疾、選擇結(jié)構(gòu)-if
(一)if簡單使用
- (1) 第一種結(jié)構(gòu):
a) 如果條件為真乍楚,就執(zhí)行后面的語句,否則不執(zhí)行届慈。
if(條件)
{
語句1徒溪;
語句2忿偷;
····
}```
- (2) 第二種結(jié)構(gòu):
a) 如果條件成立就執(zhí)行語句1,否則執(zhí)行語句2臊泌。
if(條件)
{
語句1鲤桥;
}
else
{
語句2;
}```
- (3) 第三種結(jié)構(gòu):
a) 先判斷條件1渠概,若成立則執(zhí)行語句1茶凳,其它不執(zhí)行;若條件1不成立播揪,則檢查條件2···贮喧,【注意】如果條件3成立,則說明前面的都不成立猪狈。所有的語句塊只有一個會被執(zhí)行箱沦。
if(條件1)
{
語句1;
}
else if(條件2)
{
語句2雇庙;
}
else (條件3)
{
語句3谓形;
}```
- (4) 第四種結(jié)構(gòu):
a) 在這種情況下,當條件成立疆前,只執(zhí)行語句1寒跳,語句2不屬于次條件結(jié)構(gòu),但不推薦此種寫法竹椒。
If(條件)
語句1童太;
語句2;```
(二)if使用注意
①. 比較大小時胸完,可以把常量值放在左邊康愤,變量值放在右邊以避免錯誤。因為if(a==0)也容易被寫成if(a=0),而這種情況舶吗,編譯器并不會報錯,推薦使用if(0==a)這種寫法择膝。
②. 注意賦值運算符誓琼,不要把=寫成是==。
③. If(條件)后面不要加分號肴捉,這代表是一個空語句腹侣,后面的代碼塊將成為一個獨立的代碼塊。如if(條件)齿穗;{.....}//需要多加注意
④. 注意作用域的問題傲隶,如果要在if后面定義新的變量,則一定要使用大括號窃页。
if(10>6)
{
Int a;//a的作用域在代碼塊結(jié)束后失效
}
Printf(“a=%d”,a);//編譯器報錯跺株,找不到標識符
if(10>6)
Int a; //這種情況下報錯复濒,a的作用域不明確
Printf(“a=%d”,a); //編譯器報錯,找不到標識符
⑤. If(0){...}隨便挑一個數(shù)值也可以做條件```
>(三)if結(jié)構(gòu)練習(xí)
>問題:輸入一個整數(shù)seore代表分數(shù)乒省,根據(jù)分數(shù)輸出等級(A-E)巧颈。
>A 90-100 B80-89 C70-79 D60-69 E0-60
代碼:
include<stdio.h>
int main()
{
//定義變量存儲分數(shù)值
int score;
//提示輸入
printf("請輸入分值:\n");
//接受輸入
scanf("%d",&score);
//判斷等級
if(score>=90&&score<=100)
{
printf("A\n");
}
else if(score>=80)
{
printf("B\n");
}
else if(score>=70)
{
printf("C\n");
}
else if(score>=60)
{
printf("D\n");
}
else
{
printf("E\n");
}
return 0;
}```
三、選擇結(jié)構(gòu)-switch
- (一)switch結(jié)構(gòu)
switch(值) //通常是變量
{
case 數(shù)值1:
語句1袖扛;
break;
case 數(shù)值2:
語句2砸泛;
break;
case 數(shù)值3:
語句3;
break;
default :
語句4蛆封;
break;
}```
>######解說:該結(jié)構(gòu)把數(shù)值與數(shù)值1進行比較唇礁,若相等,則執(zhí)行后面的所有語句惨篱,直到遇見break語句跳出整個循環(huán)盏筐,若前面的條件都不滿足,則最終會執(zhí)行default后面的語句妒蛇。如果不寫break語句机断,則后面的語句會接連執(zhí)行,直到遇到break語句或者是全部語句執(zhí)行完畢绣夺,只要前面的條件成立吏奸,則后面的判斷就直接被忽略。
####(二)Switch使用注意
char c=‘A’;
switch(c)
{
case ‘A’:
語句1陶耍;
break;
case 65://不能這樣寫奋蔚,因為‘A’的ASCII值就是65,會報錯
語句2烈钞;
break;
case 數(shù)值3:
int a=10;
//a的作用域不明確報錯泊碑,c語言檢查變量的作用域根據(jù){}決定,這里可以加{}
break;
default :
語句4毯欣;
break;
}```
注意:如果要在case后面的語句中定義變量馒过,則必須使用大括號包住。
(三)switch結(jié)構(gòu)練習(xí)
問題:輸入一個整數(shù)seore代表分數(shù)酗钞,根據(jù)分數(shù)輸出等級(A-E)腹忽。
A 90-100 B80-89 C70-79 D60-69 E0-60
代碼:
#include<stdio.h>
int main()
{
//定義變量存儲分數(shù)值
int score;
//提示輸入
printf("請輸入分值:\n");
//接受輸入
scanf("%d",&score);
//判斷等級
switch(score/10)
{
case 10:
case 9:
printf("A\n");
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
break;
}
return 0;
}```
######【對比】if與switch:
>1. If語句能夠完成的功能,switch有時并不能夠完成砚作,如判斷if(a>100)
>2. 在有些情況下窘奏,if語句和switch語句可以互換
>3. Switch語句能完成的功能,if語句都可以完成
####四葫录、循環(huán)結(jié)構(gòu)-while
- (一)簡單使用
while(條件)
{
語句着裹;
}```
解說:先判斷條件是否成立,成立則執(zhí)行米同,執(zhí)行完代碼后再次判斷條件是否成立(判斷條件-》執(zhí)行代碼塊-》判斷條件-》執(zhí)行代碼塊···)1.首先確定循環(huán)執(zhí)行的操作骇扇,2.在確定約束條件摔竿,即需要循環(huán)多少次,3.定義一個變量來記錄循環(huán)的次數(shù)匠题。
提示:在while循環(huán)體內(nèi)使用if...break(跳出整個循環(huán))或if...continue語句(跳出本次循環(huán)拯坟,繼續(xù)下一次循環(huán)判斷)。
while結(jié)構(gòu)的運行原理:
①. 如果一開始條件不成立韭山,則永遠不會執(zhí)行循環(huán)體郁季。
②. 如果條件成立,則執(zhí)行一次循環(huán)體钱磅,執(zhí)行完畢后再次判斷條件是否成立梦裂。
③. break:直接退出整個循環(huán)。
④. continue:結(jié)束當前循環(huán)體盖淡,進行下一輪循環(huán)判斷年柠。
- (二)使用注意
- while(1){.....}是一個死循環(huán)
- while(a<10);{...}在條件后面加逗號表示循環(huán)體是一個空語句褪迟,而非{}部分
- while條件語句后推薦使用{}冗恨,否則只有第一條語句時循環(huán)體
- 最簡單的死循環(huán) while(1);//永遠執(zhí)行空語句,讓程序崩潰
- (三)while練習(xí)
問題:編程實現(xiàn)味赃,提示輸入一個正整數(shù)n掀抹,計算1+2+3+...n的值。
代碼:
#include<stdio.h>
int main()
{
//定義變量保存用戶輸入的整數(shù)
int n;
while(n<=0)
{
//提示輸入
printf("請輸入一個正整數(shù):\n");
//接受輸入
scanf("%d",&n);
}
int sum=0;
int number=0;//默認被加的數(shù)值
while(number<n)
{
number++;
sum=sum+number;
}
printf("計算結(jié)果為:%d\n",sum);
return 0;
}```
####五心俗、循環(huán)結(jié)構(gòu)-do while
do
{
語句
}while(條件)```
特點:do while循環(huán)至少會執(zhí)行一次循環(huán)體
六傲武、循環(huán)結(jié)構(gòu)-for
- (一)基本使用
for(語句1,條件城榛,語句2)
{
//循環(huán)體
}```
>語句1:一般為初始化語句
>語句2:一般為增量語句(執(zhí)行完循環(huán)體后再執(zhí)行的語句)
- for循環(huán)原理:
for循環(huán)一開始就會執(zhí)行語句1(整個for循環(huán)只會執(zhí)行一次)
判斷條件是否成立揪利,若成立,則執(zhí)行一次循環(huán)體狠持,然后執(zhí)行語句2疟位,再次判斷條件是否成立,若條件不成立則結(jié)束循環(huán)
順序為:(語句1-》判斷條件-》循環(huán)體—》語句2-》判斷條件-》循環(huán)體···)```
【對比】for和while:
在性能上喘垂,for循環(huán)稍勝一籌献汗,因為while循環(huán)只能使用外部的變量,而for循環(huán)可以對變量進行及時回收王污。
- (二)for使用注意
①. 不要隨便在for語句后面寫上分號,如for()楚午;{....}
②. 定義變量的作用域不明確錯誤
for(int i=0;i<5;i++)
int a=10; //編譯器報錯昭齐,變量作用域不明確
③. For語句中最簡單的死循環(huán)for(;;);
④. 需要注意變量定義的作用域
int a=10;
for(int i=0,int a=9;i<5;i++)
{
int a=10;
printf(“a=%d\n”,a)矾柜;//這里打印的a的值是多少阱驾?
}```
- (三)for循環(huán)嵌套
>用以輸出特定格式的內(nèi)容就谜,如QQ好友列表等,提升可擴展性。
for(in i=0;i<5;i++)
{
//外面的循環(huán)控制行數(shù)
printf(“好友列表%d\n”,i);
//內(nèi)部的循環(huán)控制列數(shù)
for(int j=1;j<=6;j++)
{
printf(“好友%d\n”,j);
}
}```
- (四)for練習(xí)
使用for循環(huán)輸出九九乘法表里覆。//先控制行數(shù)丧荐,在控制列數(shù)
代碼:
#include<stdio.h>
int main()
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
printf("%d*%d=%d\t",i,j,i*j);
}
printf("\n");
}
return 0;
}```