分支语句与循环语句
==注意:break与contiune的区别==
共同点:break和contiune都用来控制循环结构,停止循环
区别:break ==会跳出一个循环或者完全结束一个循环== ==不仅可以结束其所在循环还可以结束其外侧循环==
!!!:只能在循环体或switch语句中使用 在switch语句中使用时,==只能跳出switch语句的执行,不能终止循环==
continue:只能用再循环语句中,跳过本次循环中剩下为执行的语句,==进行下一次循环的开始==
分支语句
if-else判断
单分支
#include<stdio.h>
int main()
{
int age=17;
if(age<18)
printf("未成年");
else
printf("成年");
return 0;
}
多分支
#include<stdio.h>
int main()
{
int age = 65;
if (age<18)
printf("未成年");
else if (age >= 18 && age < 28)
printf("青年");
else if (age >= 28 && age < 50)
printf("壮年");
else
printf("老年");
return 0;
}
==if或else语句若有多条语句须用大括号括起来==
#include<stdio.h>
int main()
{
int age = 65;
if (a<18)
{ printf("未成年");
printf("不能早恋");
}
else
{if (age >= 18 && age < 28)
printf("青年");
else if (age >= 28 && age < 50)
printf("壮年");
else
printf("老年");x
}
return 0;
}
悬空if
==else与离得最近的一个if匹配==
#include<stdio.h>
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("haha");
else
printf("hehe");
}
也可以使用大括号括起来,如下:
#include<stdio.h>
int main()
{
int a=0;
int b=2;
if(a==1)
{ if(b==2)
printf("haha");
else
printf("hehe");
}
return 0;
}
==注意:====为判断相等,=为赋值。若误写,会产生bug==
switch语句
在switch语句中,无法直接实行分支,需要搭配break才能实现真正的分支。
#include<stdio.h>
int main()
{
int day = 0;
scanf_s("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
根据特定的情况,来省略case后的break
#include<stdio.h>
int main()
{
int day = 0;
scanf_s("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
default可有可无。一般将default附在最后一个case标签后。
它的作用主要是当switch表达式的值并不匹配所有的case标签时,这个default后面的语句就会执行,所以每个switch语句中只能出现一个default。例如:
#include<stdio.h>
int main()
{
int day = 0;
scanf_s("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default("输入错误\n");
break;
}
return 0;
}
==注意:switch语句中可以出现if语句,但不能出现continue== 如下:
#include<stdio.h>
int main()
{
int day = 0;
int n = 1;
scanf_s("%d", &day);
switch (day)
{
case 1:
if (n == 1)
printf("hehe");
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
switch语句的嵌套
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:switch (n)
{
case 1:n++;
case 2:n++; m++;
break;
}
case 4:m++;
break;
default:
break;
}
printf("n=%d m=%d\n", n, m);
return 0;
}
循环语句
while语句
例:打印1-10。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d\n", i);
i++;
}
return 0;
}
==循环语句==中==可以出现break和if语句==,如下:且以下代码打印结果为1,2,3,4
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d\n", i);
i++;
}
return 0;
}
==continue的出现会使程序直接跳过continue之后的代码直接回到while循环入口重新执行==
continue出现再循环语句中,如下:且代码打印结果为1,2,3,4
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;//当i==5时,直接跳过continue以后的部分重新进入循环后
printf("%d\n", i);//i仍然等于5,所以程序进入死循环
i++;
}
return 0;
}
代码示例
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF);
{
putchar(ch);
}
return 0;
}
==EOF作用的实例:==
!!:以下代码不能运行!
int main()
{
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf_s("%s", password);//输入缓冲区password,敲下回车键,password将字符读取走,缓冲区中剩余'\n',以后的getchar会将其读取走并完成以下的程序
printf("请确认(Y\N):>");
ret=getchar();
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
所以,改正以后的代码为:
int main()
{
int ret = 0;
char password[20] = { 0 };
printf("请输入密码:>");
scanf_s("%s", password);//输入缓冲区password,敲下回车键,password将字符读取走,缓冲区中剩余'\n',以后的getchar会将其读取走并完成以下的程序
getchar();
printf("请确认(Y\N):>");
ret=getchar();
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
return 0;
}
for语句
==for语句与while语句的不同点是语句执行的顺序不同==
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d", i);//跳回到i++的步骤中
}
return 0;
}
此代码打印结果是1,2,3,4,6,7,8,9,10 而于此代码同类型的whlie语句打印结果为1,2,3,4
==for循环在书写使得一些建议== 1.不可再for循环中修改变量,防止for循环失去控制; 2.建议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++)
printf("%d ", arr[i]);
return 0;
}
for语句的变种
(;;)
for语句的判断,调整,初始化都可以被省略。 ==但判断被省略的话就是恒为真。==
#include<stdio.h>
int main()
{
int i = 0;
for (;;)
{
printf("hehe\n");
}
return 0;
}
==for语句中条件的随便省略会造成一些后果==
#include<stdio.h>
int main()
{
for(int i=0;i<10;i++)
{
for (int j = 0; j < 10; j++)
{
printf("hehe ");
}
}
return 0;
}
上述代码的打印结果是100个hehe
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for(;i<10;i++)
{
for (; j < 10; j++)
{
printf("hehe ");//j的值为10,无法再次进入
}
}
return 0;
}
若省略,则打印结果为10个hehe 如上:
变种2
#include<stdio.h>
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
上述代码结果为2个hehe
#include<stdio.h>
int main()
{
int i, k;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
return 0;
}
==上述代码循环0次,因为在判断语句中并不是用的判断符号,而使用的是赋值符号==。k=0为假,从此不进入以后循环。