C语言分支结构
关系运算符
在学习分支结构前,先来了解一下C语言的关系运算符。在C语言中,关系运算符就是比较运算符,对两个操作数进行比较,结果为“真”或“假”。C语言共提供了6中关系运算符,如下:
运算符 < <= > >= == !=
名称 小于 小于或等于 大于 大于或等于 等于 不等于
if-else语句
if-else语句的一般形式为:
if(表达式)
语句1;
else
语句2;
该语句用于实现分支结构,根据表达式的值选择语句1或语句2中的一条执行。if-else语句的执行流程如下:
首先需要求解表达式,如果表达式的值为“真”,则执行语句1;如果表达式的值为“假”,则执行语句2。
例:判断一个数字是奇数还是偶数。
#include<stdio.h>
int main(){
int x;
printf("请输入一个数字:");
scanf("%d", &x);
if(x % 2 == 0){
printf("%d是偶数!\n", x);
}else{
printf("%d是奇数!\n", x);
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
scanf()函数:
上述代码中的scanf()函数是系统提供的用于输入的库函数,也在系统文件stdio.h中声明。该函数用于从键盘输入数据,其调用格式与函数printf()类似:
scanf(格式控制字符串,输入参数1,…,输入参数n);
格式控制字符串表示输入的格式,输入参数是变量地址(变量名前加&)。
格式控制字符串中包含两种信息:格式控制说明和普通字符。
① 格式控制说明:按指定的格式读入数据,它包含以%开头的格式控制字符,不同类型的数据采用不同的格式控制字符(和printf()函数一样)。
scanf()函数的输入参数必须和格式控制字符串中的格式控制说明相对应,并且它们的类型,个数和位置要一一对应。
② 普通字符:在输入数据时,需要原样输入的字符。
例:scanf(“x=%d”, &x);
程序输入:
x = 13
上述代码运行效果:
多分支结构和else-if语句
else-if语句是最常用的实现多分支(多路选择)的方法,一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
…
else if(表达式n-1)
语句n-1;
else
语句n;
执行的流程图如下:
首先会求解表达式1,如果表达式1的值为“真”,则执行语句1,并结束整个if语句的执行,否则,求解表达式2…最后的else处理给出条件都不满足的情况,即表达式1、表达式2…表达式n-1的值都为“假”时,执行语句n。
下面来看一个简单的例子:
输入一个形式如 “操作数 运算符 操作数” 的四则运算表达式,输出运算结果。
#include<stdio.h>
int main(){
double value1, value2;
char op;
printf("请输入一个表达式: ");
scanf("%lf%c%lf", &value1, &op, &value2);
if(op == '+')
printf("%.2f + %.2f = %.2f\n", value1, value2, value1+value2);
else if(op == '-')
printf("%.2f - %.2f = %.2f\n", value1, value2, value1-value2);
else if(op == '*')
printf("%.2f * %.2f = %.2f\n", value1, value2, value1*value2);
else if(op == '/')
printf("%.2f / %.2f = %.2f\n", value1, value2, value1/value2);
else
printf("请输入正确格式数据!\n");
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char字符内息的数据,包含一个字符型常量,字符写在单引号中。
输出%.2f为输出字符型变量,并保留2位小数。
上述案例中输出结果为:
字符型数据的输入和输出
字符型数据的输入输出可以用scanf()、printf(),也可以用getchar()、putchar()。
scanf()和printf()这里就不多说了,这里说一下getchar()和putchar()。
字符输入函数getchar()
调用字符输入函数getchar()可以从键盘输入一个字符。
设ch是字符型变量,函数getchar()的一般使用格式为:
ch = getchar();
其功能是从键盘输入一个字符,并赋值给变量ch。
由于函数getchar()只能读入一个字符,如果输入多个字符,则需要多次调用该函数。
字符输出函数putchar()
调用字符输出函数putchar()可以输出一个字符
函数putchar()的一般调用格式为:
putchar(输出参数);
其功能是输出参数是字符型变量或字符型常量。
【注】函数getchar()和putchar()只能处理单个字符的输入和输出,即调用一次函数,只能输入或输出一个字符。
逻辑运算符
上面的例子关系表达式都是只给定了一个条件,如果需要同时满足两个条件时,就需要用到逻辑运算符了。C语言提供了三种逻辑运算符,如下:
运算符 ! && ||
名称 逻辑非 逻辑与 逻辑或
设a和b表示逻辑运算对象,逻辑运算符的功能描述如下:
!a:如果a为“真”,结果是“假”;如果a为“假”,结果是“真”。
a && b:当a和b都为“真”时,结果是“真”;否则结果为“假”。
a || b:但a和b都为“假”时,结果是“假”;否则结果是“真”。
同样来通过一个例子来了解一下其用法
判断键盘输入的字符是否为英文字母
#include<stdio.h>
int main(){
char ch;
printf("请输入一个字符:");
ch = getchar(); /* 输入一个字符赋值给ch变量 */
printf("输入的字符为:");
putchar(ch);
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
printf("\n%c是字母!", ch);
}else{
printf("\n%c不是字母!", ch);
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
测试运行结果如下:
输入一个年份,判断是否是闰年
#include<stdio.h>
int main(){
int year;
printf("请输入一个年份:");
scanf("%d", &year);
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("%d是闰年", year);
else
printf("%d不是闰年", year);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
测试结果如下:
嵌套if语句
在if-else语句的内嵌语句是另一条基本的if语句,就形成了嵌套的if-else语句。形式如下。
if(表达式1)
if(表达式2) 语句1;
else 语句2;
else
if(表达式3) 语句3;
else 语句4;
流程图如下:
具体用法如下:
#include<stdio.h>
int main(){
int x;
printf("请输入一个整数:");
scanf("%d", &x);
if(x > 50){
if(x % 2 == 0){
printf("%d是一个大于50的偶数!", x);
}else{
printf("%d是一个大于50的奇数!", x);
}
}else{
printf("%d小于50", x);
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
测试效果如下:
switch语句
switch语句可以处理多分支选择问题,根据其中break语句的使用方法(break语句为强制结束循环),一般分两种情况。
1、在switch语句的每个语句段中都使用break语句,也是switch语句的主要使用方法,一般形式为:
switch(表达式){
case 常量表达式1:语句段1; break;
case 常量表达式2:语句段2: break;
…
case 常量表达式n:语句段n; break;
default: 语句段n+1; break;
}
该switch语句的执行流程如下:
首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句段,最后执行break语句,跳出switch语句。
在switch语句中,表达式和常量表达式的值一般是整形或字符型。每个语句段可以包括一条或多条语句,也可以为空语句。
switch语句中default可以省略,如果省略了default,当表达式的值与任何一个常量表达式的值都不相等时,就什么都不执行。
还是上面的那个小例子:输入一个形式如 “操作数 运算符 操作数” 的四则运算表达式,输出运算结果。用switch语句编写。代码如下:
#include<stdio.h>
int main(){
double value1, value2;
char op;
printf("请输入一个表达式:");
scanf("%lf%c%lf", &value1, &op, &value2);
switch(op){
case '+':
printf("%.2f + %.2f = %.2f\n", value1, value2, value1+value2);
break;
case '-':
printf("%.2f - %.2f = %.2f\n", value1, value2, value1-value2);
break;
case '*':
printf("%.2f * %.2f = %.2f\n", value1, value2, value1*value2);
break;
case '/':
printf("%.2f / %.2f = %.2f\n", value1, value2, value1/value2);
break;
default:
printf("请输入正确格式数据!\n");
break;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
运行效果如下:
2、在switch语句中不使用break语句
break语句在switch语句中是可选的,不使用break的switch语句如下:
switch(表达式){
case 常量表达式1:语句段1;
case 常量表达式2:语句段2:
…
case 常量表达式n:语句段n;
default: 语句段n+1;
}
该switch语句的执行流程如下:
求解表达式后,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的所有语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的所有语句段。
不使用break时,如果表达式的值与常量表达式2的值相等,不但执行语句段2,还执行其后的所有语句段,即执行语句段2 ~ 语句段n+1。
比较这两种switch语句的形式和用法,如果执行相应的语句段后,要终止switch语句的继续执行,可以使用break语句,它一般放在语句段的最后,用于跳出正在执行的switch语句;否则,就继续执行其后的所有语句段。
由此可见,在switch语句所有语句段的末尾使用break,可以降低,清晰的实现多分支选择,这也是switch语句的主要使用方法。
————————————————
版权声明:本文为CSDN博主「小马 同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40205116/article/details/105514390
默认分类 2022-04-13 01:46:01 通过 网页 浏览(2092)
共有0条评论!