分支语句可以在程序执行的时候从几组语句中选择一组执行
在编写程序的时候如果遇到多种可能性,而且任何时候只能选择一种可能性,这种情况下就可以采用分支解决
/*
if分支演示
*/
#include <stdio.h>
int main() {
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num >= 0) {
printf("非负数\n");
}
else {
printf("负数\n");
}
return 0;
}
if关键字可以用来编写分支
if分支里需要为每种可能性编写专门的处理语句
/*
if分支练习
*/
#include <stdio.h>
int main() {
int gender = 0, height = 0, weight = 0;
printf("请输入性别,身高和体重:");
scanf("%d%d%d", &gender, &height, &weight);
if (!gender && height - weight < 110) {
printf("超重的女人\n");
}
else if (gender && height - weight < 105) {
printf("超重的男人\n");
}
else {
printf("不超重\n");
}
return 0;
}
每组语句需要一个配对的逻辑表达式。
如果某个逻辑表达式结果为真就执行它对应的语句,其他语句就被忽略
只有不可能同时出现的多种可能性才可以用一个分支解决
如果多种可能性中必然有一种可能性会出现就可以省略最后一组语句的逻辑表达式和if关键字
/*
if演示
*/
#include <stdio.h>
int main() {
int num = 0;
printf("请输入一个数字:");
scanf("%d", &num);
if (num < 0) {
printf("负数\n");
}
else if (num & 1) {
printf("奇数\n");
}
else if (!(num & 1)) {
printf("偶数\n");
}
return 0;
}
编写if分支的时候应该把简单逻辑表达式写在前面,复杂逻辑表达式写在后面
if分支里的多个逻辑表达式之间有前后顺序,如果前面的逻辑表达式结果为真就忽略后面的逻辑表达式
可以利用这一点简化后面的逻辑表达式
不可以把if分支当作多组无关语句看待
/*
if分支练习
*/
#include <stdio.h>
int main() {
int num = 0, num1 = 0, num2 = 0;
printf("请输入三个数字:");
scanf("%d%d%d", &num, &num1, &num2);
/*if (num > num1 && num > num2) {
printf("最大数字是%d\n", num);
}
else if (num1 > num && num1 > num2) {
printf("最大数字是%d\n", num1);
}
else {
printf("最大数字是%d\n", num2);
}*/
if (num < num1) {
if (num1 < num2) {
printf("最大数字是%d\n", num2);
}
else {
printf("最大数字是%d\n", num1);
}
}
else {
if (num < num2) {
printf("最大数字是%d\n", num2);
}
else {
printf("最大数字是%d\n", num);
}
}
return 0;
}
使用switch…case语句也可以编写分支
如果一个分支里包含有限个整数,每个整数需要使用专门的语句处理。这种分支可以采用switch…case格式编写。
/*
switch...case格式演示
*/
#include <stdio.h>
int main() {
int season = 0;
printf("请输入一个整数:");
scanf("%d", &season);
switch (season) {
case 0:
printf("春天\n");
break;
case 1:
printf("夏天\n");
break;
case 2:
printf("秋天\n");
break;
case 3:
printf("冬天\n");
break;
default:
printf("不认识的数字\n");
break;
}
return 0;
}
循环语句可以让程序反复多次执行同一组语句
for关键字可以用来编写循环
for循环里可以让一个变量依次代表一组数字,用一组语句分别处理它所代表的每个数字
这个变量叫做循环变量
采用如下格式描述循环变量的变化过程
(把开始数字赋值给循环变量;
用逻辑表达式描述循环变量和结束数字之间的关系;
每次循环变量的变化规律)
/*
闰年练习
*/
#include <stdio.h>
int main() {
int year = 0;
printf("请输入年份:");
scanf("%d", &year);
if ((!(year & 3) && (year % 100)) || !(year % 400)) {
printf("闰年\n");
}
else {
printf("不是闰年\n");
}
return 0;
}
假设有如下for循环
for (1;2;3) {
4
}
它按照以下方式分组执行
[1,2][4,3,2][4,3,2]…[4,3,2]
第一组和其他组都不一样
正常情况下for循环一定在两组之间结束
如果某一组最后编号为2的逻辑表达式结果为真就启动下一组,否则结束循环
如果for循环正常结束则循环变量落在数字范围之外
for循环有可能不执行大括号里面的语句
/*
for循环练习
*/
#include <stdio.h>
int main() {
int num = 0;
for (num = 54321;num >= 5;num /= 10) {
printf("%d\n", num);
}
return 0;
}
for循环小括号里每部分内容都可以省略
如果小括号中间的逻辑表达式没有写表示逻辑表达式的结果永远为真。这种循环不能正常结束,所以叫做死循环。
/*
for循环练习
*/
#include <stdio.h>
int main() {
int qty = 0, num = 0, grade = 0, max = -1, min = 101, sum = 0;
printf("请输入考试成绩个数:");
scanf("%d", &qty);
for (num = 1;num <= qty;num++) {
printf("请输入一个考试成绩:");
scanf("%d", &grade);
if (max < grade) {
max = grade;
}
if (min > grade) {
min = grade;
}
sum += grade;
}
printf("最大成绩是%d,最小成绩是%d,总成绩是%d\n", max, min, sum);
return 0;
}
for循环小括号里最前和最后的部分可以是用逗号连接的多条语句
C99规范里允许在小括号中临时声明循环变量
这种循环变量只能在循环里使用
/*
break;和continue;演示
*/
#include <stdio.h>
int main() {
int num = 0;
for (num = 1;num <= 5;num++) {
printf("%d\n", num);
if (num == 3) {
//break;
continue;
}
printf("%d\n", num + 10);
}
printf("num是%d\n", num);
return 0;
}
可以在循环里使用break;语句终止循环的执行
当执行完break;语句后循环里的所有语句都不再执行,循环变量也不会再改变
如果循环是采用break;语句结束的,循环结束后循环变量应该落在数字范围内
如果编写循环时不知道循环要重复的次数就可以编写死循环,在循环里合适的时候用break;语句结束循环
/*
for循环练习
*/
#include <stdio.h>
int main() {
int num = 0;
for (num = 0;num <= 40;num++) {
if (4 * num + 2 * (40 - num) == 100) {
break;
}
}
printf("兔子一共有%d只,鸡一共有%d只\n", num, 40 - num);
return 0;
}
循环里可以使用continue;语句直接跳到循环大括号的末尾,中间的语句这次循环都不执行