关于C语言中的分支与循环,要分为以下几个板块来详细学习
C语言是一门程序化的结构设计语言,所以在学习过程中应该注重它的结构化,以整体的角度去理解分支和循环在程序中存在的意义,C语言支持三种结构:
1.顺序结构(一行一行执行
2.选择结构(if,switch语句
3.循环结构(for,while,do while语句
1. if 语句
·语法形式
if(表达式){ 表达式为真(非0) → 执行
语句 表达式为假(0) → 不执行
}
判断奇偶数
#include <stdio.h>
int main()
{
int a = 0;//变量初始化
scanf("%d",&a);
if(a %2 ==0){
printf("a为偶数");
else{
printf("a为奇数");
}
return 0;
}
2.else 语句
·语法形式
if(表达式){
语句
}
else{ if条件为真(非0)→不执行else
语句 if条件为假(0) → 执行else
}
注:else通常与if一起使用,作为if条件不满足时执行的特定代码块.
温馨提示:如果在vs上执行代码,可能会出现scanf()返回值被忽略的报错问题,可以通过修改项目---属性--C/C++的常规---SDL检查(双击改为”否“)并保存即可;或者把代码中的scanf改为scanf_s即可
3.嵌套if
在if-else语句中,可能出现两种以上的可能,此时可以将else与另一个if语句连用,形成多重判断
eg:输入a并判断a是0或者负数或者正数
#include <stdio.h>
int main()
{
int a = 0;//变量初始化
scanf("%d", &a);
if (a == 0) {
printf("a为0");
}
else {
if (a > 0)
printf("a为正数");
else
printf("a为负数");
}
return 0;
}
下面的是另一种表达方式更为简洁
#include <stdio.h>
int main()
{
int a = 0;//变量初始化
scanf("%d", &a);
if (a == 0) {
printf("a为0");
}
else if (a > 0)
printf("a为正数");
else
printf("a为负数");
return 0;
}
注:if和else后面的语句默认只跟随一条,如果有多个语句一定要打{} !
4.else悬空
else只和他最近的if匹配!记得在多个if、else的代码中,习惯增加大括号!
5.逻辑运算符
1)或运算符
a | b | a||b |
0 | 0 | 0 |
非0 | 0 | 1 |
0 | 非0 | 1 |
非0 | 非0 | 1 |
2)与运算符
a | b | a&&b |
0 | 0 | 0 |
非0 | 0 | 0 |
0 | 非0 | 0 |
非0 | 非0 | 1 |
3)短路求值
针对逻辑运算符,当左边表达式满足逻辑运算符的条件时,不再计算右边;(与和或不一样)
eg:判断工作日和周末
if(day >= 1 && day <= 5)
当day >= 1的结果为0(不成立)时,不可能为工作日,右式不必计算,直接跳过;
if(day == 6 || day == 7)
当day == 6成立时,绝对为周末,右式不必计算,直接跳过。
经典题目:判断闰年
思路:怎么判断闰年(step1.能被4整除且能不被100整除 step2.能被400整除)→需要用到if、else语句来限制条件;
#include <stdio.h>
int main()
{
int year = 0;//变量初始化
scanf("%d", &year);//从标准输入流中输入年份
if (year % 4 == 0 && year % 100 != 0)//step1
printf("是闰年");
else
{
if (year % 400 == 0)//step2
printf("是闰年");
else
printf("不是闰年");
}//else嵌套
return 0;
}
6.switch语句
·语法形式
switch(表达式){ switch后面的表达式必须为整形表达式
case value1:语句1 value1和value2是表达式的值,且必为整形常量
case value2:语句2
default:语句3 default是表达式的值与所有case的value都不同时要执行的
}
每一个case后都要加break,才能跳出switch语句!
eg:输入1~12的数字,打印出对应月份的英文
#include <stdio.h>
int main()
{
int month = 0;
scanf("%d", &month);
switch (month) {
case 1:
printf("January\n");
break;
case 2:
printf("February\n");
break;
case 3:
printf("March\n");
break;
case 4:
printf("April\n");
break;
case 5:
printf("May\n");
break;
case 6:
printf("June\n");
break;
case 7:
printf("July\n");
break;
case 8:
printf("August\n");
break;
case 9:
printf("September\n");
break;
case 10:
printf("October\n");
break;
case 11:
printf("November\n");
break;
case 12:
printf("December\n");
break;
default:
printf("输入有误\n");
}
return 0;
}