C语言是结构化的程序设计语言,结构指的是顺序结构、循环结构、选择结构。
首先了解通过 if switch 实现分支结构,for while do while 实现循环结构。
1、if 语句
1.1 if
语法格式:
1. if (表达式)
2. 语句
表达式成立(真),语句执行;表达式不成立(假),语句不执行。
1.2 else
语法格式:
1. if (表达式)
2. 语句1
3. else
4. 语句2
练习:输入一个年龄,>=18岁就输出:成年;否则就输出:未成年。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age >= 18)
printf("成年\n");
else
printf("未成年");
return 0;
}
1.3分支中包含多条语句
如果需要 if 语句同时控制看多条语句,则需要使用 {} 将代码括起来,else 后也可以使用 {} 。
1.4嵌套if
在 if else 语句中,else 可以与另一个 if 语句使用,构成多重判断。
练习:输入一个人的年龄
年龄<18,打印“少年”
年龄在18~44,打印“青年”
年龄在45~59,打印“中老年”
年龄在60~89,打印“老年”
如果90以上,打印“老寿星”
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age < 18)
{
printf("少年\n");
}
else
{
if(age <= 44 )
{
printf("青年\n");
}
else
{
if(age <= 59)
{
printf("中老年\n");
}
else
{
if(age <= 99)
printf("老年\n");
else
printf("老寿星\n");
}
}
}
return 0;
}
1.5 悬空else问题
如果有可多个 if 和 else ,else 总是跟最接近的 if 匹配。
2、switch语句
用于判断条件有多个结果的情况。
语法格式:
1. switch (expression)
2. {
3. case value1: statement
4. case value1: statement
5. default: statement
6. }
上述代码中,根据表达式expression不同的值,执行相应是 case 分支,如果找不到对应的值,就执行 default 分支。
注:
-
switch(expression)语句中的 expression 必须是一个整型表达式,即switch判断的数据必须是整型或者字符
-
case语句只能带整型常量,包括普通整型或字符,不包括const型数据
-
break语句的作用是跳出整一个switch结构,没有break程序会略过case往下执行
-
default语句不是必须的,一般放在最后面(因此不需要break)
2.1 switch 语句中的break
在 switch 语句中使用 break 才能跳出 switch 语句,如果某一个 case 语句的后边没有 break 语句,代码会继续往下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。
因此,switch 语句中 break 语句非常重要,能真正实现分支效果,同时,break 也不是每个 case 语句都得有,具体需要看实际情况。
练习:输入一个1~7的数字,打印对应的星期几
#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;
}
return 0;
}
练习:输入1~5,输出的是“工作日”;输入6~7,输入“休息日”。
#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;
}
return 0;
}
2.2 switch语句中的default
语法格式:
1. switch (expression)
2. {
3. case value1: statement
4. case value2: statement
5. default: statement
6. }
当 switch 之后的表达式中的值无法匹配代码中的 case 语句时,这个时候需要在 switch 语句中加入 default 子句。
switch 后边的 expression 不是 value1 ,也不是 value2 时,就会执行 default 子句。
2.3 switch 语句中的 case 和 default 的顺序问题
在 switch 语句中 case 子句和 default 子句没有顺序要求,满足实际需求就可以。通常把 default 子句放在最后处理。
3、while 语句
3.1 while 循环
语法格式:
1. while (表达式)
2. 语句;
3.2 while 循环的实践
练习:在屏幕上循环打印 1~10 的值
#include <stdio.h>
int main()
{
int i = 0;
while(i <=10)
{
printf("%d",i);
i += 1;
}
return 0;
}
练习:输入一个正的整数,逆序打印这个整数每一位
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d", n%10);
n /= 10;
}
return 0;
}
4、for 语句
4.1 for 循环
语法格式:
1. for (表达式1;表达式2;表达式3)
2. 语句;
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
4.2 for 循环的实践
练习:在屏幕上打印 1~10 的值
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ",i);
}
return 0;
}
练习:计算 1~100 之间3的倍数的数字之和
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++)
{
if(i % 3 == 0)
{
sun += i;
}
}
printf("%d\n", sum);
return 0;
}
5、do-while 语句
5.1 do-while 循环
语法格式:
1. do
2. 语句;
3. while (表达式);
do-while 循环是先进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
-
do-while 循环中的 while 语句后面有分号 ;
5.2 do-while 循环的实践
练习:在屏幕上打印 1~10 的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i += 1;
}while(i <= 10);
return 0;
}
练习:输入一个正整数,计算这个正整数是几位数。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n /= 10;
}while(n);
printf("%d\n",cnt);
return 0;
}
6、break(退出)与continue(继续)
6.1 运用场景与特点
-
break 关键字只能用于循环(while for do...while)和 switch 语句中,表示结束循环或者跳出switch 语句
-
break 关键字只能跳出最近一层的循环,也就是说,如果有多重循环,只能跳出最靠近 break语句那层循环
-
break 关键字不能单独用于 if 语句中,除非 if 语句外面包含了循环
6.2 逻辑
-
continue 关键字只能用于循环体中(while do...while for),用于提前结束当前循环体后,又从最近一层循环体开始执行
-
continue 关键字不能单独用于 if 语句或者 switch 语句中,除非外面包含了循环
-
break:① 跳出 switch 语句; ② 跳出当层循环体
-
continue:结束当次循环,进入下次循环