前言
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构。
分支结构
- if
- switch
一、if语句
语法
if ( 表达式 ) 语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏;
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。
执行流程
练习
1.输入一个整数判断奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
else 语句
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这⾥就需要 if...else... 语句了
if ( 表达式 )
语句 1;
else
语句 2;
练习
1.输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
return 0;
}
2.输⼊⼀个年龄,>=18岁就输出:成年,否则就输出:未成年嵌套if
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age>=18)
printf("成年\n");
else
return 0;
}
嵌套if
在if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断
练习
1. 要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0)
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
2.输⼊⼀个⼈的年龄
如果年龄 <18 岁,打印 " 少年 "
如果年龄在 18 岁⾄ 44 岁打印 " ⻘年 "
如果年龄在 45 岁⾄ 59 岁打印 " 中⽼年 "
如果年龄在 60 岁⾄ 89 岁打印 " ⽼年 "
如果 90 岁以上打印 " ⽼寿星 "
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else
{
if(age<=44)
{
printf("⻘年\n");
}
else
{
if(age<=59)
{
printf("中⽼年\n");
}
else
{
if(age<=90)
printf("⽼年\n");
else
printf("⽼寿星\n");
}
}
}
return 0;
}
二、switch语句
switch 语句是⼀种特殊形式的 的 el if...else 结构,⽤于判断条件有多个结果的情况。它把多重 se if 改成更易⽤、可读性更好的形式
语法
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
上⾯代码中,根据表达式expression不同的值,执⾏相应的case分支。 如果找不到对应的值就执⾏ default 分⽀。
注: switch expression 不同的值,执⾏相应的 itch 后的 expression 必须是整型表达式;
case 后的值,必须是整形常量表达式;
练习
输⼊任意⼀个整数值,计算除3之后的余数
#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;
}
上述的代码中,我们要注意的点有:
1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加break ,才能跳出这个switch语句。
循环结构
- while
- for
- do while
一、while
执行流程
首先上来就是执行判断表达式,表达式值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
语法
while()
语句;
练习
1.在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
while(i < 10){
i++;
printf("%d\n",i);
}
return 0;
}
2.输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如: 输⼊:1234,输出:4321 输⼊:521,输出:125
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
while(a)
{
printf("%d",a % 10);
a = a / 10;
}
return 0;
}
二、for循环
执行流程
语法
for(表达式1;表达式2;表达式3)
语句;
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
for 循环是三种循环中使用最多的
练习
1.在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <=10; i++)
{
printf("%d ",i);
}
return 0;
}
2.计算1~100之间的3倍数字之和
#include <stdio.h>
int main(){
int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++)
{
sum += i;
}
printf("1~100数字之和=%d",sum);
return 0;
}
三、do-while循环
执行流程
语法
do
语句;
while(表达式);
while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;
而do while循环则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
在循环语句中do while语句的使用最少
练习
1.在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
do{
printf("%d",i);
i += 1;
}while(i <= 10);
return 0;
}
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 就⾮常的⽅便了。 1 2 3 4 5 6 7 8 9 10 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出
关系操作符:
C语言用于比较的表达式,称为“关系表达式”,里面使用的运算符就称为“关系运算符”,主要有下面6个
- > 大于运算符
- < 小于运算符
- >= 大于等于运算符
- <= 小于等于运算符
- == 相等运算符
- != 不相等运算符
条件操作符:
条件操作符也叫三目操作符,需要接受三个操作数的
语法
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果exp1为假,exp3计算,计算的结果是整个表达式的结果。
逻辑操作符:&&,||,!
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有三个运算符
- !: 逻辑取反运算符(改变单个表达式的真假)
- &&: 与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
- ||: 或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)
注:C语言中,非0表示真,0表示假
逻辑取反运算符
a | !a |
非0 | 0 |
0 | 1 |
练习
有一个变量叫flag,如果flag为假,要做一个什么事情
与运算符:
a | b | a&&b |
非0 | 非0 | 1 |
非0 | 0 | 0 |
0 | 非0 | 0 |
0 | 0 | 0 |
&&就是与运算符,也是并且的意思,&&是一个双目操作符,使用的方式是a&&b,&&两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假
练习
1.3月到5月,是春天,如何使用代码
或运算符:
a | b | a||b |
非0 | 非0 | 1 |
非0 | 0 | 1 |
0 | 非0 | 1 |
0 | 0 | 0 |
||就是或运算符,也就是或者的意思,||也是一个双目操作符,使用的方式是a||b,||两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假
练习
1.一年中12月份或者1月或者2月是冬天,怎么代码体现
短路:
C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”
如果mounth==12,则不用再判断mounth是否等于1或者2,整个表达式的结果也是1
所以,||操作符的左操作数的结果不为0时,就无需执行右操作数
表达式中&&的左操作数是mounth >= 3,右操作数是mounth <=5,当左操作数mounth>=3的结果是0的时候,即使不判断mounth <=5,整个表达式的结果也是0
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行
想这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值
练习
1.a=1,b=3,c=3d=5
b=2
2.a=1,b=2,c=3,d=4
b=3
break和continue语句:
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供break和continue两个关键字,就是应该到循环中的
- break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。
- continue的作用是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的