分⽀和循环

C语言是一门结构化的的语言,而生活中的结构归根结底无非就是顺序结构、分支结构、循环结构。
我们才C语言中用if、switch来实现分支,用for、while、do while来实现循环

if语句

if 语句的语法形式如下:

 if(表达式)
 {
     语句
 }
 else if(表达式)
 {
     语句
 }
 .....
 else
 {
     语句
 }

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执。else表示另外,也就执行当if里面表达式和else if 里面的表达式的剩余情况。

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

if语句中包含多条语句的执行顺序是从左到右,要用逻辑操作符连接,如30<age<40的执行是先判断age>30是否为真,为真返回1,然后再判断1<40,这显然不是我们的逻辑,要用age>30 &&age<40来表示。

如:将大写字母改为小写,将小写字母改为大写

else总是与最近的未匹配的if匹配

#include(stdio.h)
int main()
{
    char ch1;
    while (scanf("%c", &ch1) != EOF)
    {
        if (ch1 >95 && ch1 < 123)
        {
            printf("%c\n", ch1 - 32);
        }
        else if (ch1 > 64 && ch1 < 91)
        {
            printf("%c\n", ch1 + 32);
        }
    }
    return 0;
}

这段代码根据ASCII码表里面大小写字母的码值判断输入的字母的大小写,如果是小写码值-32变为大写,反之+32变为小写。

2. 关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator),主要有下⾯6个。
• > ⼤于运算符
< ⼩于运算符
• >= ⼤于等于运算符
• <= ⼩于等于运算符
• == 相等运算符
• != 不相等运算符

注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写
出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果。

多个关系运算符不宜连⽤。

i < j < k

上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进⾏⽐较。如果想要判断变量 j
的值是否在 i 和 k 之间,应该使⽤下⾯的写法
1 i < j && j < k

3. 条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = a>5 ? 3:-3;
printf("%d\n", b);
return 0;
}

a>5成立b=3,反之b=-3

4. 逻辑操作符:&& , || , !

• ! :逻辑取反运算符(改变单个表达式的真假): 非零返回0, 0返回1

• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假):
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达
式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。

• || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假):
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||
两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

短路
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
对于&&从左到右只要遇见0就直接返回0,不再往下执行;
对于 ||有一个为真有返回1,,不再往下执行

#include <stdio.h>
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;

// a++先使用a,a=0表达式直接返回0,后面不执行,所以输出结果为1 2 3 4。

5. switch 语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。

如果case找不到对应的值,就执⾏ default 分⽀。主要用于对一些非法输入的处理

  • switch 后的 expression 必须是整型表达式
  • case 后的值,必须是整形常量表达式
  • case 和后边的数字之间必须有空格
  • 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把 default ⼦句放在最后处理的。

6. while循环

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句⾮常相似。

while语句的执行流程:
在这里插入图片描述
while语句的例题:输⼊⼀个正的整数,逆序打印这个整数的每⼀位

#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d ", n%10);
n /= 10;
}
return 0;
}

7. for循环

for语句语法结构:for(表达式1; 表达式2; 表达式3)

表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

for语句的执行流程:
在这里插入图片描述

for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。

for语句例题:计算1~100之间3的倍数的数字之和

#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=3; i<=100; i+=3)
{
sum += i;
}
printf("%d\n", sum);
return 0;
}

8. do-while 循环

在循环语句中 do while 语句的使⽤最少,它的语法如下:
do
语句;
while(表达式)

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

do while循环的执⾏流程:
在这里插入图片描述

在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

9. break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了 break 和 continue 两个关键字,就是应⽤到循环中的。
• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
• continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有
所差异的。

10. 循环的嵌套

前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决
问题,就是我们所说的:循环嵌套

11. goto 语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。

例如:

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

goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快跳
出,使⽤ goto 就⾮常的⽅便了。

本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值