循環(huán)結(jié)構(gòu)的種類
- 順序結(jié)構(gòu)
- 選擇結(jié)構(gòu)
- 循環(huán)結(jié)構(gòu)
順序結(jié)構(gòu)
-
從上到下依次執(zhí)行
選擇結(jié)構(gòu)
if條件循環(huán)
- 三種格式
- 第一種格式 if(條件表達(dá)式){語句}
- 第二種格式 if(條件表達(dá)式){語句}else{語句}
- 第三種格式 if(條件表達(dá)式){語句}else if(條件表達(dá)式){語句}else{語句}
- 注意事項(xiàng)
- if不用寫分號(hào),分號(hào)也是一條語句,是一條空語句
int num = -1;
if(-2 == num);
{
printf("num = %d",num);
}//此時(shí)無論條件是否成立,都會(huì)打印num = -1;
if可以省略大括號(hào),省略大括號(hào)后受到控制的是緊隨其后的一條語句
{}可以單獨(dú)出現(xiàn),單獨(dú)出現(xiàn)的意義在與封閉括號(hào)內(nèi)變量的作用域(作用域是指變量開始定義的那一行到遇到對(duì)應(yīng)區(qū)間的}或者return為止)
if不寫大括號(hào)后,后面不能定義變量,這樣會(huì)導(dǎo)致作用域混亂而報(bào)錯(cuò)
int num = -1;
if(num)
int res = num;//報(bào)錯(cuò)
除了if以外,else if 和 else也可以省略大括號(hào),省略大括號(hào)后的特點(diǎn)和if一樣,只控制緊隨其后的一條語句,后面不可以定義變量,另外特別注意不要在if和else if后面寫兩條語句,會(huì)切斷if和else的聯(lián)系
if(1)括號(hào)里的條件表達(dá)式都有真假性,因此需要特別注意千萬別在括號(hào)內(nèi)寫賦值操作(例如:age = 18) 這樣會(huì)導(dǎo)致括號(hào)內(nèi)容永真,避免這樣的情況的方法是將常量寫在前面,這樣==寫成=時(shí)會(huì)報(bào)錯(cuò)
在企業(yè)開發(fā)中一定不要用 == 來判斷兩個(gè)小數(shù)是否相等,這樣會(huì)產(chǎn)生精度問題,一般企業(yè)開發(fā)中判斷小數(shù)是否相等用>= <=或者其他方法
if else綜合案例
-
if else的冒泡排序
- 接收用戶輸入的三個(gè)整數(shù),排序后輸出
#include <stdio.h>
int main()
{
//接收用戶輸入的三個(gè)整數(shù),排序后輸出
//1.定義三個(gè)變量,用于接收用戶輸入的整數(shù)
int a,b,c;
a = -1,b = -1,c = -1;
//2.提示用戶輸入三個(gè)整數(shù),用逗號(hào)隔開
printf("請(qǐng)輸入三個(gè)整數(shù),用逗號(hào)隔開:\n");
//3.輸入三個(gè)整數(shù)
scanf("%d,%d,%d",&a,&b,&c);
//4.排序(相鄰的兩個(gè)數(shù)比較,交換位置即可)
//特點(diǎn):經(jīng)過一輪比較最大的數(shù)會(huì)出現(xiàn)在最后
//三個(gè)數(shù)比大小只需要進(jìn)行兩輪比較即可
//定義一個(gè)變量作為容器,作為兩兩交換的中間件
int temp = -1;
if(a>b){
temp = a;
a = b;
b = temp;
}
if(b>c){
temp = b;
b = c;
c = temp;
}
//第二輪比較
if(a>b){
temp = a;
a = b;
b = temp;
}
//輸出(從小到大)
printf("三個(gè)整數(shù)由小到大為:%d,%d,%d",a,b,c);
return 0;
}
- 接收用戶輸入的四個(gè)整數(shù),排序后輸出
#include <stdio.h>
int main()
{
//接收用戶輸入的四個(gè)整數(shù)备燃,排序后輸出
//1.定義四個(gè)變量,用于接收用戶輸入的整數(shù)
int a,b,c,d;
a = -1,b = -1,c = -1,d = -1;
//2.提示用戶輸入三個(gè)整數(shù),用逗號(hào)隔開
printf("請(qǐng)輸入四個(gè)整數(shù),用逗號(hào)隔開:\n");
//3.輸入三個(gè)整數(shù)
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
//4.排序(相鄰的兩個(gè)數(shù)比較,交換位置即可)
//特點(diǎn):經(jīng)過一輪比較最大的數(shù)會(huì)出現(xiàn)在最后
//四個(gè)數(shù)比大小只需要進(jìn)行三輪比較即可
//定義一個(gè)變量作為容器,作為兩兩交換的中間件
int temp = -1;
if(a>b)
{
temp = a;
a = b;
b = temp;
}
if(b>c)
{
temp = b;
b = c;
c = temp;
}
if(c>d)
{
temp = c;
c = d;
d = temp;
}
//第二輪比較
if(a>b)
{
temp = a;
a = b;
b = temp;
}
if(b>c)
{
temp = b;
b = c;
c = temp;
}
//第三輪比較
if(a>b)
{
temp = a;
a = b;
b = temp;
}
//輸出(從小到大)
printf("四個(gè)整數(shù)由小到大為:%d,%d,%d,%d",a,b,c,d);
return 0;
}
-
冒泡排序的邏輯
- if else石頭剪刀布游戲
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
//實(shí)現(xiàn)石頭剪刀布
/*
剪刀石頭布游戲:
1)定義游戲規(guī)則
剪刀 干掉 布
石頭 干掉 剪刀
布 干掉 石頭
2)顯示玩家開始猜拳
3)接收玩家輸入的內(nèi)容
4)讓電腦隨機(jī)產(chǎn)生一種拳
5)判斷比較
(1)玩家贏的情況(顯示玩家贏了)
(2)電腦贏的情況(顯示電腦贏了)
(3)平局(顯示平局)
*/
setbuf(stdin,NULL);
//保存用戶輸入的值和電腦的值
int user,computer = -1;
printf("請(qǐng)出拳:0.剪刀 1.石頭 2.布\n");
//玩家輸入
scanf("%i",&user);
//電腦產(chǎn)生一個(gè)0~2的隨機(jī)數(shù)
srand((unsigned int)time(NULL));
computer = (rand()%3);
//判斷輸入數(shù)據(jù)的合法性
if(user>=0 && user <= 2){
//如果合法,比較誰勝誰負(fù)
//做差比較,如果差值為1或-2,減數(shù)勝,差值為-1或2,被減數(shù)勝,0為平局
//保存差值
int res = user - computer;
if(res == 1 || res == -2){
//如果贏了,輸出
printf("computer = %d\n",computer);
printf("我靠,你贏了");
}else if(res == -1 && res == 2){
printf("computer = %d\n",computer);
printf("很遺憾,你輸了");
}else{
printf("computer = %d\n",computer);
printf("平局");
}
}else{
printf("輸入有誤");
}
return 0;
}