目录
1. 分支语句
1.1 if语句
1.1.1 语法结构
if (表达式)
语句;
if (表达式)
语句1;else
语句2;
if (表达式1)
语句1;else if (表达式2)
语句2;...
else if (表达式n)
语句n;
else
语句n+1;
1.1.2 演示代码
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年\n");
printf("不能饮酒\n");
}//if控制多条语句要用{}括起来
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年\n");
printf("不能饮酒\n");
}
else
printf("成年\n");
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age <= 6)
printf("童年\n");
else if(age>=7 && age<=17)
printf("少年\n");
else if (age >= 18 && age <= 40)
printf("青年\n");
else if (age >= 41 && age <= 65)
printf("中年\n");
else
printf("老年\n");
return 0;
}
1.1.3 else悬空的问题
没有{}的约束下else和离它最近的if匹配。
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
//什么都不输出
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
printf("haha\n");
return 0;
}
//输出haha
1.1.4 判断一个数是奇数还是偶数
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("奇数\n");
else
printf("偶数\n");
return 0;
}
1.1.5 输出1~100之间的奇数
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 100)
{
if (i % 2 == 1)
printf("%d ", i);
i++;
}
return 0;
}
1.2 switch语句
1.2.1 语法结构
switch(整型表达式)
{case 整形常量表达式1:
语句1;
break;
case 整形常量表达式2:
语句2;
break;
...
case 整形常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
switch(整型表达式)
{case 整形常量表达式1:
....
case 整形常量表达式a:
语句1;
break;
case 整形常量表达式a+1:
....
case 整形常量表达式b:
语句2;
break;
....
case 整形常量表达式c:
....
case 整形常量表达式d:
语句n;
break;
default:
语句n+1;
break;
}
1.2.2 演示代码
#include<stdio.h>
int main()
{
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;
}
#include<stdio.h>
int main()
{
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;
default:
printf("输入有误,请重新输入\n");
break;
}
return 0;
}
1.2.3 case穿透的问题
在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象。在不判断下一个case值的情况下,向下运行,直到遇到break,或者整体switch语句结束。
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期日\n");
default:
printf("输入有误,请重新输入\n");
break;
}
return 0;
}
//如果输入5,输出结果为:
//星期五
//星期六
//星期日
//输入有误,请重新输入
//
1.2.4 default子句
当switch表达式的值与所有case标签的值都不匹配时,如果没有default子句,那么所有的语句都被跳过,程序不会终止,也不会报错;如果有default子句,那么这个default子句后面的语句就会执行。
尽量在每个switch语句中都放一条default子句。default子句可以放在任意位置。
2. 循环语句
2.1 while循环
2.1.1 语法结构
while(表达式)
循环语句;
2.1.2 演示代码
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
//结果为1 2 3 4 5 6 7 8 9 10
2.2 for循环
2.2.1 语法结构
for(初始化表达式; 条件判断表达式; 调整表达式)
循环语句;
2.2.2 演示代码
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
//结果为1 2 3 4 5 6 7 8 9 10
2.2.3 表达式的省略
三个表达式都是可以省略的,如for(;;)。for(;;)表示无限循环,相当于while(1)。
- 省略初始化表达式表示不对循环控制变量赋初值。
- 省略条件判断表达式表示判断恒成立。
- 省略调整表达式表示不对循环控制变量做调整。
2.2.4 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("a ");
}
}
return 0;
}
//结果为100个a
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("a ");
}
}
return 0;
}
//结果为10个a
2.2.5 多变量的for循环
#include <stdio.h>
int main()
{
int i, j;
for (i = 0, j = 0; i < 2 && j < 5; i++, j++)
{
printf("a ");
}
return 0;
}
//结果为2个a
2.2.6 注意=和==
//循环了多少次?
#include<stdio.h>
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
printf("a");
return 0;
}
//0次,k=0表示给k赋值为0,条件判断表达式为0(0为假),不执行循环
//如果为for (i = 0, k = 0; k == 0; i++, k++),则循环一次
2.3 do while循环
2.3.1 语法结构
do
循环语句;
while(表达式);
2.3.2 演示代码
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d ", i);
}
while (i < 10);
return 0;
}
//结果为10,do while循环至少执行一次
2.4 break和continue
2.4.1 break
break是用于永久终止循环的,只要遇到break就停止后面所有的循环,直接终止循环。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
break;
printf("%d ", i);
i++;
}
return 0;
}
//结果为1 2 3 4
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
break;
printf("%d ", i);
}
return 0;
}
//结果为1 2 3 4
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
break;
printf("%d ", i);
i++;
}
while (i < 10);
return 0;
}
//结果为1 2 3 4
2.4.2 continue
continue是用于终止本次循环的,只要遇到continue,后面的代码就不会执行,直接进入下一次循环的入口。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
continue;
printf("%d ", i);
i++;
}
return 0;
}
//结果为1 2 3 4 死循环
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
continue;
printf("%d ", i);
}
return 0;
}
//结果为1 2 3 4 6 7 8 9 10
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
continue;
printf("%d ", i);
i++;
}
while (i < 10);
return 0;
}
//结果为1 2 3 4 死循环
3. 无条件转移语句
goto语句,即无条件转移语句,不建议使用,以免造成程序流程的混乱。
做一个关机程序:60s后关机,如果输入:我是猪,则取消关机。
使用goto语句:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");//执行系统命令:60s后关机
again:
printf("请注意,你的电脑将在60秒后关机,如果输入:我是猪,则取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");//执行系统命令:取消关机
}
else
{
goto again;
}
return 0;
}
使用while循环:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("请注意,你的电脑将在60秒后关机,如果输入:我是猪,则取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
break;
}
}
return 0;
}