4.1 概述
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
顺序结构:程序按顺序执行,不发生跳转
选择结构:依据是否满足条件,有选择的执行相应功能
循环结构:依据条件是否满足,循环多次执行某段代码
4.2 选择结构
4.2.1if 语句
输入:
//1、if是一个关键字,:if后面有(),if()后面是没有分号
//2、()里写的是条件,条件为真,执行if语句,为假不执行
//if(1) //条件为真
//if(-1) //条件为真
//if(0)条件为假
if(4>3) //条件为真
{
printf("满足条件\n");
}
输出:满足条件
//3、if()后面最好加{},{}代表if语句
//4、如果不加{},只有第一个语句属于if
输入:if(0)
printf("测试11111111111\n");
printf("测试22222222222\n"); //此语句不属于if
输出:不满足条件
测试22222222222 //此处的测试22~并不是由于if输出的
//5、if()后面是没有分号,切记
输入:if(0); //若此时if()有分号
{
printf("aaaaaaaaaaaaan\n");
}
输出:aaa~
//等价于下面
if(0) //if()下面是一个空语句
;
{
printf("aaaaaaaaaaaaa"); //此语句和if没有关系,无条件顺序执行
}
输入:int a=3;
//1、把4赋值给a,á的值变为4
if(a = 4)
{
printf("a等于4\n");
}
输出:a等于4 //此处a的值已经被改为4,所以此语句为真,故可以执行
//2、判断a的值是不是真,如果为真,执行语句,不为真,不执行
if(4 == a) //判断a是否是等于4
{
priitf("a等于4\n");
}
输出:(没内容) //说明a 确实不等于4,所以没有执行
//if(a == 4) //err
//if(4 == a)建议写这种,常量放在左边
4.2.2if..else语句
输入:
int a=4;
if(3 == a) //如果a和3相等,执行语句
{
printf("a和3相等\n");
}
//1、if else结构,这个else可以不写,else不是必须的
//2、else后面不要接条件
else
{
printf("a和3不相等\n");
}
输出:a和3不相等
4.2.3 if...elseif...else语句
输入:int a == 2;
if(3 == a)
{
printf("a == 3\n");
}
else if(a > 3)
{
printff("a > 3\n");
}
else if (a < 3)
{
printf("a < 3\n");
}
else //else也不是必须
{
printf("这是不可能\n");
}
注释:else if比if好 ,因为else if 只要有一个可以执行,其他都不执行,但是if必须每个都执行
4.2.4 三目运算符
输入:
int a = 10;
int b =20;
int c;
{
c = a;
}
else
{
c = b;
}
printf(“最大值为:%d\n", c);
输出:最大值为20
输入:a =10;
b= 20;
//1、?:(三目运算符)优先级比=高
//2、判断a>b条件,如果为真,执行? :之间的语句
// 如果为假,执行: ;之间的语句
c = a > b ? a : b;
printf("最大值为: %d\n", c);
输出:最大值为20
4.2.5 switch 语句
输入:Int num;
printf("请输入num:");
scanf("%d", &num);
//1、switch是关键字,switch()后面没有分号
//2、switch()中()里只能放整型变量或字符型变量
//3、switch用法类似于电梯模型
switch(num)
{
case 1:
printf(我按下的是1楼\n");
break; //必须,跳出switch语句,相当于停止
case 2:
printf("我按下的是2楼\n");
break;
case 3:
printf("我按下的是3楼\n");
break;
default: //相当于其他
printf("其它楼层\n");
break;
}
输出:请输入num: x
4.3 循环结构
4.3.1 while 语句
输入:int num=1;
//1、判断num>0的条件,如果为真,执行{}语句
// 如果为假,跳出while()循环
//2、执行完(}语句,重复1步骤
while(num>0) //这里没有分号
{
printf("请输入一个数(负数退出循环):");
scanf("%d", &num);
} //这里也没有分号
输出:
请输入一个数(负数退出循环):10
请输入一个数(负数退出循环):20
请输入一个数(负数退出循环):30
请输入一个数(负 数退出循环):-1
结束
用while实现累加
输入:int i = 1;
int sum = 0;
while(i <= 100)
{
sum=sum +i;
i++;
}
// i=1,满足i <= 100,执行{}语句
sum=0+1
i=2
2、i=2,满足 i<= 100,执行{}语句
sum=0+1+2
i=3
3、i=3,满足 i<= 100,执行{}语句
sum=0+1+2+3
i = 4
输出:5050
补充
4.3.2 do..while 语句
输入;int i =1
int sum=0;
//1、do while第一次无条件执行
//2、第二次开始,和while一样
do
{
sum += i;
i++; //此处为第一次运行
}while(i<=100); //注意,这里有分号,这是语法
printf("sum = %d\n", sum);
输出:5050
4.3.3 for 语句
输入: int i =1;
int sum = 0;
//for()内部有2个分号,这是语法
1、i = 1
2、判断 i<= 100 条件,如果条件为真,执行{}语句,如果条件为假,跳出for()
3、执行{}语句,sum += i;
4、执行完{}语句后,执行++i
5、重复 2、3、4步骤
for(i =1; i <= 100; ++i) //由于前面i已经赋 值为了1,所以第一个分号前可以不加东西
{
printf("sum = %d\n", sum);
}
输出:5050
4.3.4死循环
//{}可以不写,不写只有第一个语句属于循环,建议写
while(1)
{
}
//{}必须写
do
{
}while(1);
//{}可以不写,不写只有第一个语句属于循环,建议写
for(;;)
{
}
4.3.5 嵌套循环
int i = 0;
int j = 0;
int num = 0;
for(i =0;i< 10;i++)
{
for(j=0;j< 10;j++)
{
num++;
}
}
printf("num = %d\n", num);
4.4跳转语句 break、continue、goto
4.4.1 break 语句
输入:int i=0;
int j=0;
for(i =0; i<10; i++)
{
for(j=0; j< 10; j++)
{
if(0 == j)
{
break; //跳出最近的内循环for(j=0; j<10; j++)
}
printf("j =%d\n",j);
}
if(5 == i)
{
break; //跳出的是for(i = 0;10;i++)循环
}
printf("i = %d\n", i);
}
输出:i =0 i =1 i = 2 i =3 i =4
break的作用
1.跳出switch语句
2.跳出循环
3.如果有多个循环,跳出最近的内循环
4.4.2 continue 语句
continue属于循环
输入:int i=0;
for(i=0; i< 10; i++)
{
if(5 == i)
{
//brdak //跳出整个循环,不再执行循环;
continue; //跳出本次循环,下次继续
}
printf("i = %d\n", i);
}
输出:1.如是break,则会到4就停止退出循环
2.是continue,则会跳出5,继续6的循环,直到9
4.4.3 goto 语句(无条件跳转,尽量少用)
1.goto任意地方都能使用,无条件跳转,不要滥用
2.只能跳转到同一个作用域
输入:goto, Mike ;
printf("11111111111\n");
printf("22222222222\n");
Mike :
printf("3333333333\n");
输出:3333333333 //gotu直接跳转到后面接的内容