分支之if
分支结构:分支结构就相当于岔路口,程序可以根据不同的情况,执行不同的代码路径
if(条件表达式){
语句;
...
}
1、if语句一定是以if开头的
2、if语句最多只有一个else
3、if语句可以有任意个else if
#include <stdio.h>
格式if(条件表达式){
语句;
。。。
}else{
语句;
。。。
}
先上个例子看看
// 1、定义一个变量接收用户猜数字
int guess;
// 2、提示用户猜数
printf("请猜一个数字\n");
// 3、接收用户猜的数字
scanf("%d",&guess);
// 4、判断,输出结果
if (guess == 5) {
printf("猜对了!\n");
}else{
if (guess > 5) {
printf("猜大了\n");
}else{
printf("猜小了");
}
}
return 0;
}
if的多种变体
#include <stdio.h>第一种格式:
if(条件表达式){
语句1;
语句2;
}
第二种格式:
if(条件表达式){
语句1;
语句2;
...
}else{
语句1;
语句2;
...
}
第三种格式:
if(条件表达式){
语句1;
语句2;
...
}else if(条件表达式2){
语句1;
语句2;
...
}else if(条件表达式3){
语句1;
语句2;
...
}
...
else{
语句1;
语句2;
...
}
第四种格式:如果if只有一条语句可以省略大括号(开发中不要这么用)
if(条件表达)
语句1;
注意点:只有语句1与if语句是一体的
第五种格式:if嵌套
if(条件表达式){
语句1;(可选)
if(条件表达式){
语句1;
语句2;
...
}
}
if语句本身就是一条语句;
int main(int argc, const char * argv[]){
int guess = 5;
if (guess == 5)
printf("你猜对了!\n");
else if(guess > 5)
printf("你猜大了!\n");
else
printf("你猜小了\n");
printf("你好菜哦!\n");
return 0;
}
int test2(){
int guess = 5;
if (guess == 5) {
printf("你猜对了!\n");
}else if(guess > 5){
printf("你猜大了!\n");
}else{
printf("你猜小了\n");
}
return 0;
}
int test(){
int age = 5;
if (age >= 18) {
printf("给上网卡\n");
}else{
printf("叫上爸妈一起来\n");
}
return 0;
}
if注意点
#include <stdio.h>
int main(int argc, const char * argv[]){
1、C语言中所有数值都有真假性,只有0为假,以外的值都为真
if (3) {
//printf("进来了!\n");
}
2、当我们使用变量与常量之间进行== !=的时候将常量写前面,避免不小心错误
int a = 1;
// if (2 == a) {
// printf("a = 2\n");
// }
// if (a == 2)
// printf("a = 2");
3、空语句也是语句,不要在if后面加;
if (a==2);
{
printf("a = 2\n");
}
4、if的作用域,if内部定义的变量,不可以在外部访问它
if(a==2){
int b = 5;
}
//printf("b = %d",b);
5、作用域混乱
// if (a == 2)
// int b = 10;
return 0;
}
总结:
1、程序运行到某个表达式那么说明这个表达式前面的所有条件表达式都不成立
2、如果if中有else 那么if语句中必有一个分支会被执行3、if语句中这么多代码段只有一个代码段会被执行
02-选择结构switch
switch(整形变量\返回整形数的表达式){
case 整形常量:
语句;
...
break;
....
default:
语句;
...
break;
}
使用场景:
当变量有几个固定的取值的时候使用switch就更加清晰,可读性会更好
如果表达式的值与case后面某个常量相等,那么就执行这个case后面的语句,如果所有的都没有匹配上,那么执行default中语句
switch (表达式) {
case 常量:
语句;
...
break;
case 常量1:
语句;
...
break;
case 常量2:
语句;
...
break;
....
default:
语句;
...
break;
}
int main(){
//用户从输入1~7的数字,然后输出对应的星期几
// 1、定义一个变量,接收用的输入
int week;
// 2、提示用户输入1~7的整数
printf("请输入1~7的数字,表示星期几\n");
// 3、接收用户输入
scanf("%d",&week);
// 4、检查输入合法性
1、switch语句中的case后面的常量不可以重复
2、switch语句只有遇到break或者switch语句的 },它才会结束
3、switch只要匹配上一个case那么后面的case都失效了
4、case 后面只可以放常量不可以放变量
5、默认情况下defalut情况下default后面的break是可以省略的
6、case 后面可以是常量或者是常量的表达式
7、switch语句只能处理整形
8、字符的本质就是一个整形数,所以swich可以使用字符
9、default可以放到在任意位置,如果放到其他位置那么break不可以省略
10、switch语句,case后面不可以直接定义变量,如果在case语句后面定义变量,必须把case后面的语句使用大括号,来明确作用域
int day = 4;
switch (week) {
case 'A':
printf("星期一\n");
//break;
case 1 + 1:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("你的输入有误\n");
//break;
}
5、输出对应的星期
return 0;
}
break
1、用在switch中,用结束switch语句
2、循环结构中,结束当前的循环语句
3、break只对离它最近switch或者循环结构有效
4、break不可以单独使用
continue:
1、只能用在循环结构中,跳过本次循环体中continue后面的语句,进入下一次条件判断
2、continue只对它所在的循环有效
break,continue的共同特点:break与continue他们后面的语句都不会执行;
注意点:break与continue不可以直接用在循环结构中,需要与分支结构搭配使用
03循环结构while
循环结构:重复执行相同操作;当满足循环条件,就一直执行循环体,直到条件不再满足。
while ( 条件 ){ 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容)。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环 while循环的特点:如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行
可以省略大括号{},但是只会影响到while后面的第一条语句。不建议省略大括号。
int main(int argc, const char * argv[]){
int counter = 0;
while (counter < 3) {
counter++;
if (counter == 1) {
continue;
}
printf("转圈\n");
// counter++;
}
printf("==========================\n");
// 1 2 5 4 7
for (int counter = 0; counter < 3; counter++) {
//3 6
if (counter == 1) {
continue;
}
printf("转圈\n");
//counter++;
}
return 0;
}
04循环结构do-while
#include <stdio.h>
格式:
do{
语句;
...
}while(条件表达式);//此处一定要加一个分号
循环体的代码至少会执行一次
int main(int argc, const char * argv[]){
int win = 0;
do{
printf("买彩票!\n");
printf("你中了吗?\n");
scanf("%d",&win);
}while (!win);
return 0;
}
05循环结构for
格式:
for(初始化表达式;条件表达式;循环后操作表达式){
语句;
...
}
初始化条件表达式:在整个循环中只执行一次
条件表达式:在每一次循环开始都会执行,如果条件表达式满足就执行循环体,如果条件表达式不满足就是结束循环
循环后操作表达式:在每一次循环体执行完毕都会执行操作后表达式
1、循环开始前做点事:比如初始化循环控制变量
2、确定循环条件表达式
3、循环后做点事,比如改变循环控制变量的值
for循环的注意点
#include <stdio.h>
int main(int argc, const char * argv[]){
1、for循环中所有表达式都可以是空语句,那么for默认条件为真,全部省略就是一个死循环
// for (;;) {
// printf("转圈\n");
// }
2、for后面的小括号中的语句是可以根据需要定制的,一般情况我都是写全它
// int counter = 0;
// for (; counter < 2;) {
// printf("转圈\n");
// counter++;
// }
3、for语句也可以省略大括号,省略大括号只有与for紧挨的第一条语句与for是一体的
// for (int counter = 0; counter < 2; counter++)
// printf("转圈\n");
// printf("转完了!\n");
4、for作用域
int j = 0;
for (int counter = 0; counter < 2; counter++,j++) {
int i = 0;
printf("转圈!\n");
}
//printf("counter = %d",counter);
//printf("%d",i);
//for后面小括号中语句的作用域:小于for外边的作用域,大于循环体的作用域
// {
// int counter = 0;
// counter < 2;
// {
// int i = 0;
// printf("转圈!\n");
// }
// counter++,j++;
// }
for循环嵌套
总执行次数 = 外层循环的执行次数 * 内层循环执行的次数,外层循环循环控制行,内层循环控制列;
for (int i = 0; i < 2; i++) {
// printf("转圈\n");
for (int j = 0; j < 3; j++) {
printf("jackson\n");
}
}
流程控制总结:
1、顺顺序结构:按照从上到下的顺序执行
2、分支结构:相当于岔路口,当条满足的时候执行代码段1,否则执行代码段2
if:如果if后面的条件表达式满足,就执行if后面的代码块
1、if语句必须以if开头
2、if语句最多有一个else
3、if语句可以有任意多个else if
3、switch语句
switch(表达式){
case 常量1:
语句;
...
break;
case 常量1:
语句;
...
break;
....
defalut:
语句;
...
break;
}
1、表达式是整形的变量或者返回整形表达式
2、case 后面必须是整形常量,整形常量的表达式
3、如果表达式中的值与某个case中的常量相等就执行这个case中的语句
4、switch语句只有遇到break 或者 }的时候才会结束
5、只要是表达式与一个常量匹配上了,那么其他case将失效
6、默认情况下,default后面的break是可以省略的
7、default