接上一篇 自学C语言——数据类型和变量(二)
分支和循环(上)
C语言支持的三种结构:顺序,选择,循环
1.if语句
if
if (表达式)
语句
表达式成立(为真),则语句执行,反之不执行
0为假,非0为真
//输入一个整数判断是否为奇数
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("奇数\n");//C语言中一个=为赋值,两个==为相等
return 0;
}
输出:
3
奇数
else
if……else……
//输入一个整数判断是否为奇数,是奇数输出奇数,否则输出偶数
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("奇数\n");//C语言中一个=为赋值,两个==为相等
else
printf("偶数\n");
return 0;
}
输出:
2
偶数
//输入一个年龄,>=18岁就输出:成年,否则就输出未成年
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
分支中包含多条语句
要用{ }括起来
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//输入一个年龄,>=18岁就输出:成年,否则就输出未成年
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年\n");
printf("可以恋爱了\n");
}
else
{
printf("未成年\n");
printf("不能沉迷游戏\n");
}
return 0;
}
嵌套if
在if else语句中,else可以与另一个if语句连用,构成多重判断
//要求输入一个整数,判断输入的整数是0,还是正数或负数
int main()
{
int n = 0;
scanf("%d", &n);
if (n == 0)
printf("输入的值是0\n");
else
{
if(n>0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
}//一条语句{}可以省略
return 0;
}
省略{}写法
int main()
{
int n = 0;
scanf("%d", &n);
if (n == 0)
printf("输入的值是0\n");
else if(n>0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
return 0;
}
输入一个整数,如果是正数,判断是奇数还是偶数,并输出。如果不是正数则输出非正数。
int main()
{
int n = 0;
scanf("%d", &n);
if (n > 0)
{
if (n % 2 == 1)
printf("奇数\n");
else
printf("偶数\n");
}
else
{
printf("非正数\n");
}
return 0;
}
输入一个人的年龄
如果年龄 < 18岁,打印"少年"
如果年龄在18岁至44岁打印"青年"
如果年龄在45岁至59岁打印"中老年"
如果年龄在60岁至89岁打印"老年"
如果90岁及以上打印"老寿星"
//输入一个人的年龄
//如果年龄 < 18岁,打印"少年"
// 如果年龄在18岁至44岁打印"青年"
// 如果年龄在45岁至59岁打印"中老年"
// 如果年龄在60岁至89岁打印"老年"
// 如果90岁及以上打印"老寿星"
int main()
{
int age = 0;
scanf("%d", &age);
//判断
if (age < 18)
printf("少年\n");
else if (age <= 44)//18-44
printf("青年\n");
else if (age <= 59)
printf("中老年\n");
else if (age <= 89)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
悬空else问题
如果有多个 if 和 else ,else总是和最近的if匹配。
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
//运行无结果
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
printf("haha\n");
return 0;
}
//运行结果为haha
2.关系操作符
常见的关系操作符
C语言用于比较的表达式,称为“关系表达式”,里面使用的运算符称为“关系运算符”,主要有六个
- > 大于运算符
- < 小于运算符
- >= 大于等于运算符
- <= 小于等于运算符
- == 相等运算符
- != 不相等运算符
a > b
a < b
a >= b
a <= b
a == b
a != b
关系表达式通常返回0或1表示真假。
C语言中,0表示假,所有非零值表示真。比如:20>12返回1,12>20返回0。
int main()
{
int x = 0;
scanf("%d", &x);
if (3 == x)
printf("hehe\n");
return 0;
}
//输入3,输出hehe
//输入4,无输出
关系操作符连用
错误写法
int main()
{
int a = 3;
int b = 5;
int c = 2;
if (a < b < c)//先计算a<b,再计算1<c
printf("hehe\n");
return 0;
}
应该改为
int main()
{
int a = 3;
int b = 5;
int c = 2;
if (a < b && b < c)//&并且
printf("hehe\n");
return 0;
}
//不会打印
关系表达式常用于 if 或 while 结构。
3.条件操作符
条件操作符也叫三目操作符,需要接受三个操作数
exp1 ? exp2 : exp3
计算逻辑:如果exp1为真,exp2计算;如果exp1为假,exp3计算。计算的结果是整个表达式的结果。
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = (a > 5 ? 3 : -3);//三目操作符,也叫条件操作符
printf("%d\n", b);
return 0;
}
使用条件表达式实现找两个数中的较大值。
int main()
{
int a = 0;
int b = 0;
/*int m = 0;*/
scanf("%d %d", &a, &b);
int m = a > b ? a : b;
printf("%d\n", m);
return 0;
}
4.逻辑操作符:&&、||、!
!:逻辑取反运算符(改变单个表达式的真假)。
&&:逻辑与运算符,并且(两侧表达式都为真,则为真,否则为假)
||:逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)
逻辑取反运算符!
a !a
非零 0
0 1
int main()
{
int flog = 0;
scanf("%d", &flog);
if (!flog)
{
printf("hehe\n");
}
return 0;
}
flag为真,!flag就是假,反之......
逻辑与运算符
a b a&&b
非0 非0 1
非0 0 0
0 非0 0
0 0 0
有0就是0,两边都是真才是真
int main()
{
int month = 0;
scanf("%d",& month);
if (month >= 3 && month <= 5)
printf("春季\n");
return 0;
}
逻辑或运算符
a b a||b
非0 非0 1
非0 0 1
0 非0 1
0 0 0
有真为真,两个同时假才为假。
int main()
{
int month = 0;
scanf("%d", &month);
if(month == 12||month == 1||month == 2)
printf("冬天\n");
return 0;
}
判断year是否为闰年
1)能被4整除而不能被 100整除。
2)能被400整除。
#include <stdio.h>
int main()
{
int year;
printf("请输入具体年份:");
scanf("%d", &year);
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
printf("%d是闰年\n", year);
else
printf("%d不是闰年\n", year);
return 0;
}
短路
C语言逻辑运算符,总是先对左侧的表达式求值,再对右边的表达式求值,如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
//i = a++ && ++b && d++;
i = a++||++b||d++;
printf("a=%d\nb =%d\nc =%d\nd = %d\n", a, b, c, d);
return 0;
}
输出:
a=1
b =3
c =3
d = 4
——————————End——————————