C语言——分支与循环

if语句

if

在C语⾔中,0为假,⾮0表⽰真

//判断一个数是否为奇数
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 return 0;
}

else

#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age>=18)
 printf("成年\n");
 else
 printf("未成年\n");
 return 0;
}

默认在 if 和 else 语句中默认都只控制⼀条语句,如果要if语句同时控制2条语句,要使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。

#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age >= 18) //if 后使⽤{} 控制多条语句-这个块叫:程序块,或者复合语句
 {
 printf("成年了\n");
 printf("可以谈恋爱了\n");
 }
 else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
 {
 printf("未成年\n");
 printf("不可以早恋哦\n");
 }
 return 0;
}

嵌套if/else

#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num == 0)
 printf("输⼊的数字是0\n");
 else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
 printf("输⼊的数字是正数\n");
 else
 printf("输⼊的数字是负数\n");
 
 return 0;
}

悬空else

else 总是跟最接近的 if 匹配。

#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;
}
//什么也不输出

关系操作符

 ==   !=    <    >    =  

多个关系运算符不宜连⽤

比如 i < j < k ,因为关系运算符是从左到右计算, 所以变成了(i < j) < k , i < j 返回 0 或 1 ,最终是 0 或 1 与变量 k 进⾏⽐较。应改为  i < j && j < k。

条件操作符(三目操作符)

形式如下:

exp1 ? exp2 : exp3 

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

逻辑操作符

逻辑取反运算符 !

#include <stdio.h>
int main()
{
 int flag = 0;
 if(!flag)
 {
 printf("do something\n");
 }
 return 0;
}

上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码

逻辑与运算符&&

两侧的表达式都为真,则为真,否则为假

int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
 printf("春季\n");
}

逻辑或运算符||

两侧⾄少有⼀个表达式为真,则为真,否则为假

int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
 printf("冬季\n");
}

短路

C语⾔逻辑运算符总是先对左侧的表达式求值,再对右边的表达式求值。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为“短路”。 

&&操作符的左操作数的结果为0时,右边操作数就不执⾏。

|| 操作符的左操作数的结果不为0时,右边操作数就不执⾏。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值

switch语句

 switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
 }

根据表达式expression 不同的值,执⾏相应的case分支,如果找不到相应的case分支,就执行default分支。

  • switch后的expression 必须是整型表达式
  • case 后的值,必须是整形常量表达式
 #include <stdio.h>
 int main()
 {
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n");  
break;
 case 1:
 printf("余数是1\n");       
break;
 case 2:
 printf("余数是2\n");       
break;
 }
 return 0;
 }

break

在 switch 语句中使⽤ break 才能跳出 ,如果一个case语句后面没有break语句,代码会继续往下执⾏,有可能执⾏其他  break语句中的代码,直到遇到break 语句,或者 switch 语句结束。

比如执行以下代码:

 #include <stdio.h>
 int main()
 {
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n");  
 case 1:
 printf("余数是1\n");       
 case 2:
 printf("余数是2\n");       
 }
 return 0;
 }

while循环

语法结构和if类似

while(表达式)
语句;

for循环

 for( 表达式 1; 表达式 2; 表达式 3) 
    语句;
  • 表达式1⽤于循环变量的初始化
  • 表达式2⽤于循环结束条件的判断
  • 表达式3⽤于循环变量的调整

⾸先执⾏表达式 1 初始化循环变量, 接下来执行表达式 2 的判断部分, 表达式 2 的结果如果==0则循环结束,表达式 2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式3。(表达式 2 的结果是否为0,决定循环是否继 续) 

整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

//在屏幕上打印1~10的值
#include <stdio.h>
 int main()
 {
 int i = 0;
 for(i=1; i<=10; i++)
 {
 printf("%d ", i);
 }
 return 0;
 }

while和for的对比

do-while循环

do while 循环先进⼊循环体,执⾏循环语句,然后再执⾏while后面的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。(而while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环 )

//在屏幕上打印1~10的值
 #include <stdio.h>
 int main()
 {
 int i = 1;
 do
 {
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 }
 return 0

break和continue语句

break是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。

continue是跳过本次循环中continue 后边的代码,在 for 循环和 while 循环中有差异的。

while循环

 #include <stdio.h>
 int main()
 {
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;//当i等于5后,就执⾏break,循环就终⽌了
 printf("%d ", i);
 i = i+1;
 }
 return 0;
 }

//输出1 2 3 4
 #include <stdio.h>
 int main()
 {
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 printf("%d ", i);
 i = i+1;
 }
 return 0;
 }
//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅ 
//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
 

for循环

#include <stdio.h>
 int main()
 {
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ", i);
 }
 return 0;
 }
输出1 2 3 4 
#include <stdio.h>
 int main()
 {
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分 
 printf("%d ", i);
 }
 return 0;
 }

do while循环

#include <stdio.h>
 int main()
 {
 int i = 1;
 do
 {
 if(i == 5)
 break;
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 return 0;
 }
#include <stdio.h>
 int main()
 {
 int i = 1;
 do
 {
 if(i == 5)
 continue;
 printf(
 "%d "
 , i);
 i = i + 1;
 }while(i<=10);
 return 0;
 }

goto语句

 #include <stdio.h>
 int main()
 {
 printf("hehe\n");
 goto next;
 printf("haha\n");
 next:
 printf("跳过了haha的打印\n");
 return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值