「C 语言」2 循环和分支语句
循环与分支语句
以;
结尾 - 一个语句
分支语句(选择结构)
if - else语句
语法形式
语法结构
if (表达式)
语句;
if (表达式1)
语句1;
else
语句2;
if (表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;
#include<stdio.h>
int main()
{
int age = 10;
if (age<18)
printf("未成年\n");
else if (age>=18 && age<23)//不能写18<=age<23
//18<=10 - 假 = 0 <23 - 真 = 1
printf("青年\n");
return 0;
}
悬空else(if else 匹配)
else
和离它最近的在同一个代码块中的未匹配的if
匹配
#include<stdio.h>
int main()
{
int a = 0,b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else //这个else语句是与上一个if匹配的,不要被缩进迷惑
printf("haha\n");
return 0;
}
if书写形式的对比
//代码1
if (condition){
return x;
}
return y;
//代码2
if (condition)
{
return x;
}
else
{
return y;
}
//代码3
int num = 4;
if (num = 5)//= - 赋值
printf("hehe\n");//可以打印
if (5 = num)//先把值写在前面 可以知道错误
printf("hehe\n");//error
switch语句
语法形式
实现多分支结构
case
进入
break
退出
switch(整型表达式)
{
语句项;
}
//语句项
case 整型常量表达式:
语句;
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期日");
break;
}
return 0;
}
量的选择 - 整型
switch
后的量必须是整型变量
case
后的量必须是整型常量
break的使用
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
}
return 0;
}
break
的实际效果就是将代码块分割成几块
default子句(默认选项)
不满足case
的情况
建议放在case
的后面
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
}
default:
printf("输入错误!");
break;
return 0;
}
最好加上break
循环语句
- while
- for
- do while
while语句
语法结构
while(表达式)
循环结构;
一个执行很多次的if
语句
break
:跳出总循环(终止循环)
continue
:跳出当前循环(直接下一次判断)
一些应用
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
putchar(ch);
return 0;
}
getchar
:接收输入字符
putchar
:输出字符
EOF - end of file 文件结束标志
这个只有按Ctrl+Z 结束
for循环语句
语法结构
for (表达式1;表达式2;表达式3)
循环语句;
表达式1:初始化部分
表达式2:条件判断
表达式3:调整部分
for 与 while中的continue
while语句可能陷入「死循环」
int i=1;
while (i<=10)
{
if (i==5)
continue;
printf("%d ",i);
i++;
}
for则可以避免
for (int i=1;i<=10;i++)
{
if (i==5)
continue;
printf("%d ",i);
}
一些建议
- 不可在for循环体内改变循环变量,防止for循环失去控制。
#include<stdio.h>
int main()
{
int i=0;
for (i=0;i<10;i++)
{
if (i==5)//容易写错,,别改变
printf("haha\n");
printf("hehe\n");
}
return 0;
}
- 建议for语句的循环控制变量的取值采用「前闭后开区间」写法。
#include<stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i=0;
for (i=0;i<10;i++)//前闭后开区间
//for (i=0;i<=9;i++)//前后闭区间
{
printf("%d ",arr[i]);
}
return 0;
}
一些for循环的变种
for (;;) { //死循环 }
for循环的三个部分都可以省略
判断部分省略时,恒为真
不要乱省略
#include<stdio.h>
int main()
{
int i=0;
int j=0;//与下面重复
for (i=0;i<10;i++)
{
for (j=0;j<10;j++)
{
printf("hehe\n");//输出100个hehe
}
}
return 0;
}
#include<stdio.h>
int main()
{
int i=0;
int j=0;
for (;i<10;i++)
{
for (;j<10;j++)//j不会销毁重置
{
printf("hehe\n");//输出10个hehe
}
}
return 0;
}
int x, y; for (x=0, y=0;x<2 && y<5;++x, y++) { //循环2次 }
例题
//请问循环多少次
#include<stdio.h>
int main()
{
int i=0;
int k=0;
for (i=0.k=0;k=0;i++,k++)
k++;
return 0;
}
for的判断中,k=0
,它的 值为0,是false,于是循环不进去。
do…while()循环
语法结构
do
循环语句;
while (表达式);
比如打印1~10
#include<stdio.h>
int main()
{
int i=1;
do
{
printf("%d ",i);
i++;
}
while (i<=10);
return 0;
}