if语句
if语句程序结构
-
if (表达式)
- 语句 else if (表达式)
- 语句 else
- 语句
整除的判断
#include <stdio.h>
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n % 5)
puts("该整数不能被5整除。"); /*n不能被5整除时执行。*/
else
puts("该整数能被5整除。"); /*n能被5整除时执行。*/
return 0;
}
奇数·偶数的判断
#include <stdio.h>
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n % 2)
puts("该整数是奇数。"); /*n不能被2整除时执行。*/
else
puts("该整数是偶数。"); /*n能被2整除时执行。*/
return 0;
}
非0的判断
#include <stdio.h>
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n)
puts("该整数不是0。"); /*n不为0时执行。*/
else
puts("该整数是0。"); /*n为0时执行。*/
return 0;
}
相等运算符
== 运算符 | a == b | 如果a和b的值相等则为1,不等则为0(结果的类型是int) |
---|---|---|
!= 运算符 | a != b | 如果a和b的值不相等则为1,相等则为0(结果的类型是int) |
if (n1 == n2)
puts("它们相等。"); /*n1与n2相等时执行。*/
else
puts("它们不相等。"); /*n1与n2不相等时执行。*/
if (n1 != n2)
puts("它们不相等。"); /*n1与n2不相等时执行。*/
else
puts("它们相等。"); /*n1与n2相等时执行。*/
余数的判断
#include <stdio.h>
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if ((n % 10) == 5) /*由于%的优先级比运算符==高,因此n % 10两边的()可以省略*/
puts("该整数的个位数是5。"); /*n的个位数是5时执行。*/
else
puts("该整数的个位数不是5。"); /*n的个位数不是5时执行。*/
return 0;
}
关系运算符
< 运算符 | a < b | a小于b时结果为1,反之为0(结果的类型是int) |
---|---|---|
> 运算符 | a > b | a大于b时结果为1,反之为0(结果的类型是int) |
<= 运算符 | a <= b | a小于等于b时结果为1,反之为0(结果的类型是int) |
>= 运算符 | a >= b | a大于等于b时结果为1,反之为0(结果的类型是int) |
注意:将<=运算符和>=运算符中的等号放在左侧(=< 和 =>),或者在<与=之间有空格都是不对的。
if (n == 0)
puts("该整数为0。"); /*n等于0时执行。*/
else if(n > 0)
puts("该整数为正数。"); /*n大于0时执行。*/
else
puts("该整数为负数。"); /*n小于0时执行。*/
嵌套的if语句
if (n > 0) /*n大于0时执行。*/
{
if (n % 2 == 0) /*由于%的优先级比运算符==高,因此n % 10两边的()可以省略*/
puts("该整数为偶数。"); /*n能被2整除时执行。*/
else
puts("该整数为奇数。"); /*n不能被2整除时执行。*/
}
else
{
puts("您输入的不是正数。"); /*n小于等于0时执行。*/
}
判断
表达式(极少部分特殊情况除外)都有值。程序执行时会对表达式的值进行检测,这就称为判断。
计算较大值
#include <stdio.h>
int main(void)
{
int n1, n2;
puts("请输入两个个整数。");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
if (n1 > n2)
printf("较大的数是%d。\n",n1);
else
printf("较大的数是%d。\n",n2);
return 0;
}
程序中printf函数被调用了两次,所以我们进行代码优化。
#include <stdio.h>
int main(void)
{
int n1, n2, max; /*声明一个保存最大值的整形变量max*/
puts("请输入两个个整数。");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
if (n1 > n2)
max = n1; /*若n1为最大值,则把n1的值赋值给max*/
else
max = n2; /*若n2为最大值,则把n2的值赋值给max*/
printf("较大的数是%d。\n",max); /*输出max的值*/
return 0;
}
计算三个数的最大值
#include <stdio.h>
int main(void)
{
int n1, n2, n3, max; /*声明一个保存最大值的整形变量max*/
puts("请输入三个个整数。");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
printf("整数3:");
scanf("%d", &n3);
max = n1; /*把n1的值赋值给max*/
if (n2 > max)
max = n2; /*若n2大于max,则把n2的值赋值给max*/
if (n3 > max)
max = n3; /*若n3大于max,则把n2的值赋值给max*/
printf("较大的数是%d。\n",max); /*输出max的值*/
return 0;
}
条件运算符
条件运算符 | a ? b : c | 如果a不为0,则结果是b的值,否则结果为c的值 |
---|
#include <stdio.h>
int main(void)
{
int n1, n2, max; /*声明一个保存最大值的整形变量*/
puts("请输入两个个整数。");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
max = (n1 > n2) ? n1 : n2; /*将较大的值赋给max*/
printf("较大的数是%d。\n",max); /*输出max的值*/
return 0;
}
差值计算
#include <stdio.h>
int main(void)
{
int n1, n2;
puts("请输入两个个整数。");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
printf("它们的差是%d。\n",(n1 > n2) ? n1 - n2 : n2 - n1);
/*如果n1 > n2,则判断表达式n1 - n2所得的值。*/
/*否则为判断表达式n2 - n1所得的值。*/
/*也就是说,最终结果为大值减去小值所得的结果。*/
return 0;
}
复合语句(程序块)
#include <stdio.h>
int main(void)
{
int n1, n2, max, min;
puts("请输入两个个整数。");
printf("整数1:");
scanf("%d", &n1);
printf("整数2:");
scanf("%d", &n2);
if (n1 > n2)
{
max = n1; /*复合语句:在结构上被看作是单一的语句。*/
min = n2;
}
else
{
max = n2;
min = n1;
}
printf("较大的数是%d。\n", max);
printf("较小的数是%d。\n", min);
return 0;
}
{
max = n1;
min = n2;
}
像这样的在大括号内并排书写的语句称为复合语句或者程序块。其中不仅可以包含语句,也可以包含声明(但是一定要把声明放在最开始的位置)。
{} {}
{printf("你好!\n");} {语句}
{int x; x = 5;} {声明 语句}
复合语句在结构上会被看作是单一的语句。
在需要单一语句的位置,如果一定要使用多个语句,可以把它们组合成复合语句(程序块)来实现。
逻辑运算符
逻辑与运算符 | a && b | 如果a和b都不为0,则表达式的结果为1,否则结果为0(结果的类型为int) |
---|---|---|
逻辑或运算符 | a ll b | 如果a和b有一个不为0,则表达式的结果为1,否则结果为0(结果的类型为int) |
#include <stdio.h>
int main(void)
{
int month;
printf("请输入月份:");
scanf("%d", &month);
if (month >= 3 && month <= 5) /*逻辑运算符:与的判断*/
printf("%d月是春季。\n", month);
else if (month >= 6 && month <= 8)
printf("%d月是夏季。\n", month);
else if (month >= 9 && month <= 11)
printf("%d月是秋季。\n", month);
else if (month == 1 || month == 2 || month == 12) /*逻辑运算符:或的判断*/
printf("%d月是冬季。\n", month);
else
printf("%d月份不存在!!!\n", month);
return 0;
}
短路求值
&&运算符在左操作数的判断结果为0时不对右操作数进行判断。
||运算符在左操作数的判断结果为0时不对右操作数进行判断。
像这样,在仅根据左操作数的判断结果就可知逻辑表达式的判断结果的情况下,不会对右操作数进行判断,这就称为短路求值。
switch语句
switch语句的基本程序结构
-
switch(条件)
-
-
case 0 :
- 语句
- break;
-
-
case 1 :
- 语句
- break;
-
-
case 2 :
- 语句
- break;
-
-
default :
- 语句
- break;
switch语句的语法结构如上所示,括号内的控制表达式必须是整数类型。
#include <stdio.h>
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
switch (n % 3)
{
case 0 :
puts("该数能被3整除。");
break;
case 1 :
puts("该数除以3的余数是1。");
break;
case 2 :
puts("该数除以3的余数是2。");
break;
}
return 0;
}
如果n%3的值为1,则程序会转向case 1 :
像case 1:这样用来表示程序跳转的标识称为标签。
标签的值必须为常量,不可以为变量。另外,不允许多个标签同为一个值。
break有"打破"、"脱离"之意。执行break语句之后,程序就会跳出将它围起来的switch语句。
复杂的switch语句
#include <stdio.h>
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
switch (n)
{
case 1 :
puts("A");
puts("B");
break;
case 2 :
puts("C"); /*没有break语句*/
case 3 :
puts("D");
break;
case 4:
/*没有语句*/
case 5:
puts("E");
break;
default :
puts("F");
break;
}
return 0;
}
当控制表达式的判断结果与任何一个case都不一致的时候,程序就会跳转到default继续执行。
在没有break语句的时候,程序会落到下一条语句上。