分支与循环语句
文章目录
1.分支语句
分支语句分为两类:if语句、switch语句
if语句:
switch语句:
1.1 if语句
if的常见格式:if、if…else、if…else if…else
1.在if语句中,条件成立为真(非0,一般写为1),条件不成立为假(0)
2.if的匹配:if可以不与else匹配,也可以与其最近的else匹配
3.else的匹配:else是跟它离得最近得if匹配
在if条件判断相等时,把常量放在左边,变量放在右边,可以避免==写成=而不报错的问题
举例代码:
#define _CRT_SECURE_NO_WARNINGS //vs studio没有c后缀,需要加宏定义来让其判定为c后缀 #include<stdio.h> int main() { //形式一:if int age = 0; scanf("%d", &age); if (age < 18) { printf("未成年!\n"); } //形式二:if..else int age2 = 0; scanf("%d", &age2); //if不使用{},只执行if下第一条语句,叫做悬空if、else if (age2 < 18) printf("未成年!\n"); else printf("成年!\n"); //形式三:if..else if...else int age3 = 0; scanf("%d", &age3); if (age3 < 18) printf("未成年!\n"); else if (age3 > 18 && age3 < 30) printf("青年!\n"); else printf("中老年!\n"); return 0; }
效果展示:
1.2 switch语句
switch语句格式:switch…case…default…
switch对于里面放入的值进行case匹配,从而执行下面的代码
case语句必须跟break来结束此次case,否则继续执行下面的case直到遇到break
default是当值与case没有匹配结果的时候,使用的默认匹配,可以没有
举例代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { printf("请输入星期几:(0-7)\n"); 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; default:printf("输入错误!\n"); break; } return 0; }
效果展示:
2.循环语句
2.1 while、for、do…while语句
循环语句分为三类:while、for、do…while
for循环里,第一个参数是初始化部分,第二个参数是条件判断部分,第三个参数是调整部分
—判断条件不给,就不会终止for循环,除非给终止语句
do...while();意思是无论是否满足,先执行一次代码,在判断while里条件,结尾要用;
举例代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { //while循环打印0-10 int i = 0; while (i <= 10) { printf("%d ", i); i = i + 1; } printf("\n"); //for循环打印0-10 int n = 0; for (n = 0; n <= 10; ++n) printf("%d ", n); printf("\n"); //do...while int a = 0; do { printf("%d ", a); a = a + 1; } while (a <= 10); }
效果展示:
2.2 while语句中的continue、break语句
continue终止本次循环,后边的代码不会再执行,直接跳转到while语句的判断部分
break用于跳出所有循环,直接终止跳出while循环
举例:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { //continue终止本次循环 int i = 1; while (i <= 10) { if (5 == i) continue; printf("%d ", i); i = i + 1; } } /* 解释:当i=5的时候,满足if条件,执行continue终止了本次循环,后面的代码就不执行了, 此时i又为5,反复执行if语句的continue从而出现下图中的一个光标不停闪烁,没有停止运行 */
while的特殊输出:以下代码用来输出0-9数字,跳过其他字符
#include <stdio.h> int main() { char ch = '\0'; while ((ch = getchar()) != EOF) { if (ch < ‘0’ || ch > ‘9’) continue; putchar(ch); } return 0; }
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { //break跳出本次循环 int a = 1; while (a <= 10) { if (5 == a) break; printf("%d ", a); a = a + 1; } return 0; } /* 解释:当a一直加到5的时候,满足if条件,break出了while循环, 直接跳到了return语句,虽然a=5,但是没有printf不打印5 */
扩展:goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号—goto语句的存在没有什么必要,没啥用
goto就是你设定一个goto变量名,然后直接跳转到变量名哪里执行:比如下面的代码,执行到goto again时候,就跳转到again:位置又执行下面的代码
//goto的关机进程
#include <stdio.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}