day05 控制语句
顺序结构
选择结构
循环结构
跳转结构
-----------------------------------------
1、顺序结构
没有语句
main函数的第一句开始,最后一句结束
上一句执行完之后,下一句才能执行。
#include<stdio.h>
int main()
{
printf("1111111111\n");
while(1);
printf("2222222222\n");
return 0;
}
------------------------------------------
2、选择结构
if-else switch-case
学控制语句的格式 应用
2.1、if-else 组合
①、单个if
格式:
if(条件表达式)
{
// 语句块;
}
执行流程:
如果 条件表达式 为真
执行{} 语句块
练习:
// 输入一个数据,如果这个数据是100,则输出 合格,其他的话什么都不做
②、if-else
二选一
格式:
if(条件表达式)
{
// 语句块1
}
else
{
// 语句块2
}
执行流程:
如果 条件表达式 为真
执行语句块1
否则
执行语句块2
练习:
付款
偶数和奇数
需求:输入一个数据,如果这个数据是三位数,输出 YES,否则输出 NO.
思路:
定义一个变量
输入数据
如果 变量 是三位数
输出 yes
否则
输出 NO
③、if-else if - else组合
多选一
格式:
if(条件表达式1)
{
// 语句块1
}
else if(条件表达式2)
{
// 语句块2
}
else if(条件表达式3)
{
// 语句块3
}
.....
else if(条件表达式n)
{
// 语句块n
}
else
{
// 语句块m;
}
执行流程:
如果 表达式1 成立 执行 语句块1
表达式1 不成立 ,表达式2成立 执行语句块2
表达式1 不成立 ,表达式2不成立 表达式3成立 执行语句块3
表达式1 不成立 ,表达式2不成立 表达式3不成立 。。。。。。。。
所有条件表达式都不成立 执行else里面的语句。
练习:
int x = 5;
int y;
//输入y的值,如果y>0 , x = x + 5;,
// 如果y==0, x = x + 1;
// 如果y<0,x = x - 5;
int x = 5;
int y;
printf("请输入一个数值:");
scanf("%d",&y);
if(y > 0)
{
x = x + 5;
}
else if(y == 0)
{
x = x + 1;
}
else if(y < 0)
{
x = x - 5;
}
printf("%d",x);
------------------------------------------------------------------
int x = 5;
int y;
printf("请输入一个数值:");
scanf("%d",&y);
if(y > 0)
{
x = x + 5;
}
else if(y == 0)
{
x = x + 1;
}
else
{
x = x - 5;
}
printf("%d",x);
练习题:
蛇头初始位置是 x=10,y=5,贪吃蛇蛇头控制,'a' 'w' 's' 'd'控制左 上 下 右,
按照用户输入的方向按键,输出蛇头下一个位置坐标。
2.2、switch-case
格式:
switch(表达式)
{
case 常量1:语句块1;break;
case 常量2:语句块2;break;
case 常量3:语句块3;break;
case 常量4:语句块4;break;
// .....
default:语句块n;break;
}
执行流程:
计算表达式的结果,如果结果 == 常量1 , 执行语句块1,break结束匹配
如果结果 != 常量1 如果结果 == 常量2 , 执行语句块2,break结束匹配
如果结果 != 常量1 如果结果 != 常量2 如果 结果 == 常量3 ,执行语句块3,break结束匹配
如果结果 != 常量1 如果结果 != 常量2 如果 结果 != 常量3 ,如果结果 == 常量4 ,执行语句块4 ,break结束匹配
对比所有常量都不匹配,执行default后面的语句。
需求:
蛇头初始位置是 x=10,y=5,贪吃蛇蛇头控制,'a' 'w' 's' 'd'控制左 上 下 右,
按照用户输入的方向按键,输出蛇头下一个位置坐标。
int x = 10,y = 5;
char key;
scanf("%c",&key);
switch(key)
{
case 'a':x = x - 1;break;
case 'w':y = y - 1;break;
case 's':y = y + 1;break;
case 'd':x = x + 1;break;
default:printf("\a");break;
}
printf("x:%d,y:%d\n",x,y);
*****注意:case后面是常量,不能放变量也不能放操作数和运算符的组合。*****
------------------------------------------
3、循环结构
重复执行一段代码
for循环 while循环 do-while循环
3.1、for循环
有限循环 循环次数有限
int i;
i = 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i = i + 1; printf("hello world\n");
i初始值是1, i <= 10 执行 printf("hello world\n"); 执行完 i = i + 1;
for格式:
for(循环变量赋初值;循环条件;循环变量改变)
{
// 循环体
}
执行流程:
循环变量赋初值 循环条件成立 执行循环体 循环变量改变
循环条件成立 执行循环体 循环变量改变
......
循环条件不成立,结束循环
代码:
int i;
for(i=1;i<=10;i=i+1)
{
printf("hello world\n");
}
// 需求:100 ~ 999 内所有的水仙花数
int k;
int ge,shi,bai;
for(k=100;k<=999;k=k+1)
{
//k是水仙花数的判断思路如下:
// 1、分离k 个位 十位 百位
// 2、如果 k 是水仙花数
// 输出 k
}
// 一般让你在某一个范围内查找某一些特殊数据的时候, --- 分解思想
// 1、先确保拿到这个范围内的每一个数
// 2、使用条件结构筛选符合条件的数据。
------------------------------------------------------------------------------------
3.2 while循环
格式:
while(循环条件)
{
// 循环体
}
执行流程:
循环条件成立 执行循环体
循环条件成立 执行循环体
循环条件不成立 结束循环
需求:
输出10次 hello world\n
初始次数是1 次数 <=10 输出 hello world\n 次数 = 次数 + 1;
int i;
i = 1;
while(i <= 10)
{
printf("hello world\n");
i = i + 1;
}
需求:1+ 2+ 3+ 4 +5 +....+ 100的和
// 获取1~100每一个数
// 遇到一个数和和数据进行相加,
// 加完所有的数据之后就可以输出 这个和。
int i = 1;
int sum = 0;
while(i<=100)
{
sum = sum + i;
i = i + 1;
}
printf("%d",sum);
------------------------------------------------------------------------------------
3.3 do-while循环 --- ?????
---------------------------------------------------------------------
4、跳转语句
break
continue
goto
return
4.1 break
结束离它最近的那一层循环
int i;
for(i=0;i<10;i++)
{
// 如果 i == 2
// 结束循环
if(i == 2)
{
break;
}
printf("%d ",i);
}
4.2 continue
结束本次循环,循环还在继续
int i;
for(i=0;i<10;i++)
{
// 如果 i == 2
// 结束本次循环
if(i == 2)
{
continue;
}
printf("%d ",i);
}
练习:
猜数字
预设一个数据 int n = 56;
让用户猜测数据是多少,如果比n大,输出大了,如果比n小输出小了,如果相等 ,结束猜数,输出"猜对了"
允许用户才多次。
int n = 56;
int m;
while(1)
{
// 输入数据
// 如果 数据 > n
// 输出 大了
// 如果 数据 < n
// 输出 小了
// 如果 数据 == n
// 输出 猜对了
// break;
}