主页 > 创业  > 

Linux基础25-C语言之分支结构Ⅱ【入门级】

Linux基础25-C语言之分支结构Ⅱ【入门级】
用if语句实现分支结构 单分支:if…

语法:

//语法1:舍弃{} if(条件表达式); 单语句; //语法2:必须保留{} if(条件表达式) { 单语句或者复合语句; }

流程图

功能

若表达式值为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后的代码。若表达式值为假(0)则不执行表达式后面的语句而直接执行if后面的语句。

说明:

如果表达式后面的是复合语句,则要用一对花括号{}括起来,单语句可有可无。

案例:

要求:计算并输出下列分段函数的值:

流程图:

代码:

#include <stdio.h> int main(int argc,char *argv[]) { // 创建两个变量,用来存储两个操作数 double x,y = -2; // 从控制台输入x printf("请输入一个数,作为x的值:\n"); scanf("%lf",&x); // 校验 if (x >= 0) y = 2; printf("x=%lf,y=%lf\n",x,y); return 0; }

运行结果:

案例:

需求:有a,b,c三个数,要求从控制台输入,并求出最大值

分析:

1.通过控制台输入a,b,c的值

2.创建一个变量max,用来存放a,b,c中得最大值,默认a是最大值(这样可以减少一次判断)

3.让b,c和max进行比较,将最大值存入max

代码:

#include <stdio.h> int main(int argc,char *argv[]) { // 创建四个变量a,b,c,max int a,b,c,max; // 通过键盘录入数据给a,b,c printf("请输入三个整数:\n"); scanf("%d%d%d",&a,&b,&c); // 默认a是最大值 max = a; // 让最大值分别和b和c比较 if (max < b) max = b; // b是a,b中的最大值 if (max < c) max = c; // 其实就是a,b中的最大值和c比较,得到三者中的最大值 printf("%d,%d,%d中的最大值是%d\n",a,b,c,max); return 0; }

运行结果:

​ 有可能产生的问题:

​ ①scanf()同时输入多个变量时,默认使用空格、tab、回车键进行区分。

​ ②在变量赋值前使用变量,导致运算结果错误(变量为赋值,系统会给变量分配随机数)

双分支if…else…

语法:

//语法1:舍弃{} if(表达式) 单语句1; else 单语句2; //语法2:保留{} if(条件表达式) { 单语句1或者复合语句1; } else { 单语句2或者复合语句2; }

注意:else语句本身不能单独使用,必须和if配合使用

流程图:

功能:

​ 若表达式的值为1,则执行语句1;否则执行语句2。不管条件表达式成不成立都需要执行一个语句,其次需要注意的是,语句1和语句2都可以是单语句或者复合语句。

说明:

​ if…else…结构可以实现双分支选择结构。C语言允许if…else…结构嵌套。即在语句1与语句2中有可以包含完整的if语句或者if…else…结构,并且这种嵌套可以多层(为了保证程序的执行效率,建议不超过4层)。利用if…else…结构的嵌套,可以实现多分支选择结构

案例:

需求:计算并输出下列分段函数的值:

流程图

代码:

#include <stdio.h> int main(int argc,char *argv[]) { // 创建两个变量存储x,y int x,y; // 通过键盘录入x printf("请输入一个整数:\n"); scanf("%d",&x); // 校验 if (x < 0) y = -2; else y = 2; // 打印输出测试结果 printf("x=%d,y=%d\n",x,y); return 0; }

运行结果:

注意:对于单语句的双分支,我们可以使用三目(三元)运算符的写法简化

三目运算符

语法:

表达式1?表达式2:表达式3;

说明:

​ ①如果表达式1的结果为真,就执行表达式2,否则就执行表达式3

​ ②三目运算符的写法实际上就是单语句的双分支语句的缩略写法

案例:

需求:将上面双分支的案例改造为三目运算符得写法

代码:

#include <stdio.h> int main(int argc,char *argv[]) { // 创建两个变量存储x,y int x,y; // 通过键盘录入x printf("请输入一个整数:\n"); scanf("%d",&x); // 校验 y = x < 0 ? -2 : 2; // 打印输出测试结果 printf("x=%d,y=%d\n",x,y); return 0; }

运行结果:

多分支:if…else if…else

语法:

//写法1:嵌套if...else(不推荐) if(表达式)语句1; else if(表达式2)语句2; else ... else if(表达式n)语句n; else 语句; //写法2:并列if...else if...else...(推荐) if(表达式1)语句1; else if(表达式2)语句2; ... [else if(表达式n)语句n;] [else 语句n+1;]//else是可选的,写不写由我们的最终需求决定

流程图:

注意:多分支中,同一时刻只能满足一个分支。

案例:

需求:根据学生得成绩,对学生进行分级:

成绩>=90 A成绩>=80 B成绩>=60 C成绩<60 D

代码:

#include <stdio.h> // 方式1:借助于执行顺序,减少判断条件 int if_test1() { // 创建一个变量,用来存储输入的成绩 int score; // 通过键盘录入成绩 printf("请输入一个整数:\n"); scanf("%d",&score); // 校验 if (score >= 90) printf("A\n"); else if (score >= 80) printf("B\n"); else if (score >= 60) printf("C\n"); else printf("D\n"); } // 方式2:不借助执行顺序,做更精确的判断 int if_test2() { // 创建一个变量,用来存储输入的成绩 int score; // 通过键盘录入成绩 printf("请输入一个整数:\n"); scanf("%d",&score); // 校验 if (score >= 60 && score < 80) printf("C\n"); else if (score >= 80 && score < 90) printf("B\n"); else if (score >= 90) printf("A\n"); else printf("D\n"); } int main(int argc,char *argv[]) { if_test1(); if_test2(); return 0; } if…else结构注意点

if…else结构中的语句1和语句2都可以是复合语句。

在if…else结构中,语句1和语句2都可以是空语句。

if语句的嵌套

语法:

if (..) if (..) 语句1; else 语句2; else if (..) 语句3; else 语句4;

流程图:

注意:

①else总是与前面最近的未配对的if配对使用

②可通过增加{}来确定配对关系

③只要if中包含if,都属于是if语句的嵌套

案例:

#include <stdio.h> // 方式1:借助于执行顺序,减少判断的条件 int if_test1() { // 创建一个变量,用来存放输入的成绩 int score; // 通过控制台输入一个成绩 printf("请输入一个整数:\n"); scanf("%d",&score); // 校验,分级 95 if(score < 0 || score > 100) { printf("您的输入不合法!\n"); } else { if(score >= 90) { printf("A\n"); } else if(score >= 80) { printf("B\n"); } else if(score >= 60) { printf("C\n"); } else { printf("D\n"); } } } // 方式2:不借助于执行顺序,做更精准的判断 int if_test2() { // 创建一个变量,用来存放输入的成绩 int score; // 通过控制台输入一个成绩 printf("请输入一个整数:\n"); scanf("%d",&score); // 校验,分级 if(score < 0 || score > 100) { printf("您的输入不合法!\n"); } else if(score >= 60 && score < 80) { printf("C\n"); } else if(score >= 80 && score < 90) { printf("B\n"); } else if(score >= 90) { printf("A\n"); } else { printf("D\n"); } } int if_test3() { // 需求:判断一个数是奇数还是偶数 int num; printf("请输入一个整数:\n"); scanf("%d",&num); // 校验 if(num == 0) { printf("0既不是偶数也不是奇数!"); } else { if(num % 2 == 0) { printf("%d是偶数!\n",num); } else { printf("%d是奇数!\n",num); } } } int main(int argc,char *argv[]) { if_test1(); if_test2(); if_test3(); return 0; }

小贴士:

如何拆出一个三位数中的每一位:

实现:123,

个位:123%10=3

十位:123%100/10=2

百位:123/100=1

经典面试题:求水仙花数

解释:一个n位数的各个数字的n次方等于这个数本身,符合这种规则的数叫做水仙花数

标签:

Linux基础25-C语言之分支结构Ⅱ【入门级】由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Linux基础25-C语言之分支结构Ⅱ【入门级】