分支语句和循环语句
1.1 分支
1.1.1 语句的概念
分号隔开的是一条语句
int a = 0;//这是一条语句
;//这也是一条语句
1.1.2分支语句
- if语句
if(表达式)
语句;
int age = 10;
if(age<18)
printf("未成年\n");
else
printf("成年\n");
//多分支
int age = 10;
if(age<18)
printf("未成年\n");
else if(age>=18 && age<28)
printf("青年\n");
else if(age>=28 && age<50)
printf("壮年\n");
else
printf("老年\n");
如果需要多条语句,需要用{ }括起来
悬空else:还应注意一点,else与其离得最近的if匹配
int main(){
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
//注意 这里的else跟离得最近的if匹配
printf("haha\n");
return 0;
}
并不输出haha或者hehe,如果想要让else跟最上面的if匹配,可以用大括号
int main(){
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
}
else
//注意 这里的else跟离得最近的if匹配
printf("haha\n");
return 0;
}
输出为haha
int num = 4;
if(num = 5)//这里的 = 是赋值 == 判断相等
{
pirntf("呵呵\n");
}
//最后打印出来呵呵
int num = 4;
if(5 == num)//建议这么写
{
pirntf("呵呵\n");
}
//最后打印出来呵呵
小例子
.输出1-100之间的奇数
#include<stdio.h>
int main(){
int i = 1;
while(i<=100)
{
if(i%2 == 1)
printf("%d ",i);
i++;
}
return 0;
}
- switch语句
常用于多分支语句
switch(整型表达式)//必须是整型
{
语句项:
}
关于入口和出口
case决定入口;break决定出口
其中语句项是什么呢?
//是一些case语句,如下
case 整型常量表达式:
语句;
举个例子
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
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;
//如果不加break,那么比如输入3,那么会打印3之后的 4567
}
//case后面的break不是非得加上
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4;
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
//如果输入非法(输入的不是1-7),可以用default
default:
printf("输入错误\n");
break;
1.2循环
1.2.1while循环
while语法结构
while(表达式)
循环语句;
//while循环
//打印1到10的数字
int i = 1;
while(i<=10){ //当有两条语句的时候,就用大括号
printf("%d",i);
i++;
}
//while循环中的break continue关键字
int i = 1;
while(i<=10){ //当有两条语句的时候,就用大括号
if(i == 5)
break;
printf("%d",i);
i++;
}
//最后打印出来1234
int i = 1;
while(i<=10){ //当有两条语句的时候,就用大括号
if(i == 5)
continue;//i=5的时候重新跳到判断部分了
printf("%d",i);
i++;
}
//也是打印出来1234 但是进入死循环,i=5的时候又跳到上面,i的值一直无法改变
综上,break的作用是停止后期的所有循环,直接终止循环;continue的作用是终止本次循环,直接跳转到while语句的判断部分,进入下一次循环的入口判断
int ch = 0;
//ctrl + z可用于结束
//EOF -end of file -- -1
while((ch = getchar())!=EOF)
{
putchar(ch);
}
以下例子并未得到理想输出原因是因为再输入密码的时候,还敲了一下回车,导致输入缓冲区中有\n,所以getchar读取了这个\n
如何得到理想效果,把输入缓冲区的字符读完就可以,因此可以利用while循环
int ret = 0;
int ch = 0;
char password[20] = 0;
printf("请输入密码:");
scanf("%s",password);//输入密码放到password数组中
//注意此时需要把输入缓冲区中都读空才能进行下步操作
while((ch=getchar()) !='\n')
{
;//因为只需要让他一直读,所以不用写什么语句
}
printf("请确认<Y/N>");
ret = getchar();//Y/N
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
1.2.2 for循环
- for和while循环对比
对于while循环,比如对于i的初始化,对于i的判断,对于i的调整,都有些繁琐,一旦代码量大的时候,会导致一些书写错误,所以for循环是目前大多数程序猿主流的 - for循环语法
for(表达式1;表达式2;表达式3)
循环语句;
其中,表达式1–初始化部分(int i = 0;)
表达式2–条件判断部分(i < 10)
表达式3–调整部分(i ++)
小案例
//用for循环打印1-10的数字
int i = 0;
for(i=1;i<=10;i++)
{
printf("%d",i);
}
for循环的执行流程是什么
初始化–>判断–>循环体—>调整---->判断
- for循环中的break和continue的用法
//用for循环打印1-10的数字
int i = 0;
for(i=1;i<=10;i++)
{
if(i == 5)
break;//跳出循环
printf("%d",i);
}
//与while循环中一致
//用for循环打印1-10的数字
int i = 0;
for(i=1;i<=10;i++)
{
if(i == 5)
continue;//
printf("%d",i);
}
//输出1234678910
把while和for中continue用法进行对比,当i=5时,在for循环中将会跳过printf—>转到调整部分,i = 6;而在whi循环中,直接跳过了printf和i++(也就是while循环没有机会调整)–>转到判断,i = 5,所以产生死循环
-
for循环语法建议
建议for语句的循环控制变量的取值采用“前闭后开区间”写法
也就是比如for(i=0;i<10;i++)这里0为闭区间,10为开区间 -
for循环的变种
for(;;)//for循环的初始化,判断,调整都可以省略,但是判断条件被省略,恒为正,可能会导致死循环
for(x = 0,y = 0;x<2 && y<5; ++x,y++)//两个循环变量
如果随意省略, 就会出现上例,只能打印10个hehe
//请问循环多少次
int i = 0;
int k = 0;
for(i=0,k=0;k=0;i++,k++)
k++;
//注意这里的判断是k=0,这个表达式结果为0,0为假,不进入循环,所以循环了0次
1.2.3 do…while循环
int i = 1;
do
{
printf("%d",i);
i++;
}
while(i<=10);