if语句
if语句·其一
其实每天我们都通过自己的判断来决定自己的行动。例如:今天要下雨了,所以我带了伞。下面我们就通过程序来判断,如果输入的整数不能被5整除,就显示出相应的信息。
代码如下:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n%5==0) { puts("输入的整数可以被5整除。"); } return 0; }
if(表达式)语句
这样的语句称为if语句。
if语句会让程序执行如下处理
判断表达式的值,如果结果不为0,则执行相应的语句。
括号内对条件进行判断的表达式称为控制表达式。
而当输入的整数不能被5整除的时候,后续语句不会被执行,屏幕上不会显示任何的内容。
奇数的判定
通过判断输入的数能否被2整除,就可以确定输入的数是否是奇数。代码如下:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n%2!=0) { printf("%d是一个奇数", n); } return 0; }
如果输入的是一个偶数那么程序不会显示任何的内容。
if语句·其2
在判断输入的数能否被5整除的时候,当输入的值不能被5整除的时候,不显示任何的内容。这样会让使用者不放心,所以代码可以改为下面的形式。
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n % 5 == 0) { puts("输入的整数可以被5整除。"); } else { puts("输入的整数不能被5整除。"); } return 0; }
本程序中使用的是下列的形式:
if(表达式) 语句;else 语句;
else是”否则“的意思。
奇数·偶数判断
那么如何对一个输入的数是奇数还是偶数进行判断并输出呢,看下面的代码:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n % 2 != 0) { printf("%d是一个奇数", n); } else { printf("%d是一个偶数", n); } return 0; }
总结:
如果只有当某条件成立的时候才进行处理,则使用不用加else的if语句;如果是根据某条件的成立与否进行不同的处理,则使用带有else的if语句。
非0判断
判断输入的值是否为0;
代码如下:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n) { puts("该整数不是0。"); } else { puts("该整数是0。"); } return 0; }
if语句根据控制表达式的值是否为0来控制程序的流程。
相等运算符
输入两个数判断是否相等。
代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; printf("请输入两个整数:"); scanf("%d %d", &n,&m); if (n == m) { puts("它们相等。"); } else { puts("它们不相等。"); } return 0; }
==运算符,会对左右两侧的操作数进行比较,如果相等着为1,不相等则为0。
余数的判断
判断输入的整数的个位数是否为5,并显示相应信息的程序。
代码如下:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if ((n % 10) == 5) { puts("该整数的个位数是5。"); } else { puts("该整数的个位数不是5。"); } return 0; }
关系运算符
上面我们说到了两分支的程序流程,现在我们看以下三分支的情况。输入一个整数,判断该整数的符号。
代码如下:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n==0) { puts("该整数为0"); } else if (n > 0) { puts("该整数为整数"); } else { puts("该整数为负数"); } return 0; }
比较两个数大小的运算符称为关系运算符。如下所示:
大家需要注意的是,将<=运算符和>=运算符中的等号放在左侧(=<和=>),或者在<与=之间有空格都是不对的。
嵌套的if语句
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n>0) { if (n % 2 == 0) { puts("该数为偶数。"); } else { puts("该数为奇数。"); } } else { puts("该数不是正数。"); } return 0; }
判断
表达式(极少部分情况除外)都有值,程序执行的时会对表达式的值进行检测,这就是判断。
计算较大值
输入两个整数,显示出其中较大的值。代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; puts("请输入两个整数:"); scanf("%d %d", &n, &m); if (n>m) { printf("%d是较大的数。",n); } else { printf("%d是较大的数。", m); } return 0; }
程序中的printf函数被调用了两次。
下面是我改造的程序,把较大的值存入变量中,然后进行输出。
代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; int max = 0; puts("请输入两个整数:"); scanf("%d %d", &n, &m); if (n>m) { max = n; } else { max = m; } printf("较大的数是%d", max); return 0; }
计算三个数的最大值
这次我们输入三个整数,并显示其中的最大值。
代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; int k = 0; int max = 0; printf("请输入三个整数:"); scanf("%d %d %d", &n, &m, &k); max = n; if (m > max) { max = m; } if(k>m) { max = k; } printf("较大的数是%d", max); return 0; }
条件运算符
计算两个整数中的较大值。
代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; int max = 0; puts("请输入两个整数:"); scanf("%d %d", &n, &m); max = (n > m) ? n : m; printf("较大的数是%d", max); return 0; }
上述程序中使用了条件运算符,该运算符是需要三个操作数的三目操作符。
只有条件运算符属于三目运算符,其他的运算符都是单目或者双目运算符。
差值计算
使用条件运算符计算输入的两个整数差值,代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; puts("请输入两个整数。"); scanf("%d %d", &n, &m); printf("较大的数是%d", (n > m) ? n - m : m - n); return 0; }
- 如果n>m,则判断表达式n-m所得到的值;
- 否则为判断表达式m-n所得到的值。
也就是说最终的结果为大值减去小值。
复合语句
计算输入的两个整数中的较大值和较小值的程序代码如下:
#include<stdio.h> int main() { int n = 0; int m = 0; int max = 0; int min = 0; printf("请输入两个整数:\n"); scanf("%d %d", &n, &m); if (n > m) { max = n; min = m; } else { max = m; min = n; } printf("较大的数是%d", max); printf("较小的数是%d", min); return 0; }
本程序中的if语句,当n大于m的时候,执行if里面的语句
{max=n; min=m;}
否则执行else里面的语句
{max=m; min=n;}
像上面的语句称为复合语句,也叫程序块。
逻辑运算符
显示输入的月份所处的季节,代码如下:
#include<stdio.h> int main() { int month = 0; 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 == 12 || month == 1||month==2) { printf("%d是冬季。\n", month); } else { printf("%d月不存在!!!\a\n", month); } return 0; }
这里使用了&&运算符称为逻辑与运算符(就是两个条件都成立的情况下返回的值才不等于0)。
使用例||运算符称为逻辑或(就是只要有一个条件成立就返回的值不等于0)
switch语句
switch语句与break语句
显示输入的整数除以3所得到的余数。代码如下:
#include<stdio.h> int main() { int n = 0; printf("请输入一个整数:"); scanf("%d", &n); if (n % 3 == 0) { puts("该整数能被3整除。"); } else if (n % 3 == 1) { puts("该整数除以3的余数是1"); } else { puts("该整数除以3的余数是2"); } return 0; }
本程序中使用了两次计算n除以3的余数的表达式n%3,多次输入同一个表达式,容易造成输入错误。
下面是使用switch语句处理后的代码:
#include<stdio.h> int main() { int n = 0; 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:“这样用来表示程序跳转的标识称为标签。
标签的值必须为常量,不可以为变量。不允许多个标签出现同为一个值。
复杂的switch语句
#include<stdio.h> int main() { int s = 0; printf("整数:"); scanf("%d", &s); switch (s) { case 1: puts("A"); puts("B"); break; case 2: puts("C"); case 5: puts("D"); break; case 6: case 7: puts("E"); break; default: puts("F"); break; } return 0; }
当控制表达式的判断结果与任何一个case都不一致的时候,程序就会跳转到"default:"继续执行。
本程序的流程图;
如图所示,在没有break语句的时候,程序会落到下一条语句上。
switch语句和if语句
注意:
通过单一表达式来控制程序流程分支的时候,使用switch语句的效果通常要比使用if语句更好。
总结