选择控制结构

一、关系运算符和关系表达式

C语言中的关系运算符和优先级
运算符对应的数学运算符含义优先级

<

>

<=

>=

<

>

小于

大于

小于等于

大于等于

==

!=

=

等于

不等于

注意:

1.在书写关系运算符时,既不能在<=、>=、==、!=的符号之间插入空格,也不能将!=、<=、>=的符号写反,更不能与相应的数学运算符弄混。

2.不要将==误写为=。前者是相等关系运算符,后者赋值运算符。

关系运算符将两个操作数连接起来组成的表达式,称为关系表达式 

关系表达式通常用于表达一个判断条件,而一个条件判断的结果只能有两种可能:真“非零”,假“0”

只要表达式的值为0,就表示表达式的值为假,即判断的条件不成立;而如果表达式的值为非零(也包括负数),则表示表达式的值为真,即判断条件成立。   

例如:

“n不是偶数”可表示为下面的关系表达式:n%2!=0(它表示如果n被2求余结果不为0,即不能被2整除,则该关系表达式的值为真。换句话说就是,如果这个关系表达式的值为真,则表示n不是偶数,反之n不是偶数。)C语言中逻辑值表示形式的这种特殊性,使得C表达式书写形式得以简化。例如:将n%2!=0简化为n%2。

二、用于单分支控制的条件语句

结构:if(表达式P)语句A;

例题:使用单分支条件语句编程,计算并输出两个整数的最大值。

#include<stdio.h>
int main()
{
	int a,b,max;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	if(a>=b)max=a;
	if(a<b)max=b;
	printf("%d\n",max);
	return 0; 
 } 

三、用于双分支控制的条件语句

一般形式:

                if(表达式P)语句1

                else                  语句2

#include<stdio.h>
int main()
{
	int a,b,max;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	if(a>=b)max=a;
	else max=b;
	printf("%d",max);
	return 0; 
 } 

四、条件运算符和条件表达式

条件运算符是C语言中唯一一个三元运算符,运算时需要三个操作数。

一般形式:表达式1?表达式2:表达式3

其含义是:若表达式1的值非0,则该表达式的值是表达式2的值,否则是表达式3的值。

#include<stdio.h>
int main()
{
	int a,b,max;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
    max=a>b?a:b;//用条件表达式计算两整数的最大值
	printf("%d",max);
	return 0; 
 } 

五、用于多分支控制的条件语句

条件语句的第三种形式是else-if形式的条件语句,即:

if(表达式1)语句1
else if(表达式2) 语句2
...
else if(表达式m) 语句m
else语句 m+1 

每条选择语句后面跟的语句如果是多条的话,就需要用花括号将语句括起来,才能保证程序逻辑上的正确性。

例题:从键盘任意输入a,b,c的值,编程计算并输出一元二次方程ax²+bx+c=0的根,当a=0时,输出“该方程不是一元二次方程”,当a≠0时,分b²-4ac与0的关系分三种情况,并输出方程的根。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define EPS 1e-6
int main()
{
	float a,b,c,disc,p,q;
	printf("Please input a,b,c:");
	scanf("%lf%lf%lf",&a,&b,&c);
	if(fabs(a)<=EPS)
	{
		printf("这不是一元二次方程\n"); 
		exit(0);
		 
	}
	disc=b*b-4*a*c;
	p=-b/(2*a);
	q=sqrt(fabs(disc))/(2*a);
	if(fabs(disc)<=EPS)
	{
		printf("x1=x2=%.2f\n",p);
		
	}
	else
	{
		if(disc>EPS)
		{
			printf("x1=%.2f,x2=%.2f\n",p,q);
		}
		else
		{
			printf("x1=%.2f+%.2fi",p,q);
			printf("x2=%.2f-%.2fi",p,q);
			
		}
	}
	return 0;
}

exit()是C语言提供的标准库函数。exit()调用的一般形式为:

                exit(code)

作用:终止整个程序的执行,强制返回操作系统,并将int型参数code的值传给调用进程(一般为操作系统)。

当code值为0或宏常量EXIT_SUCCESS时,表示程序正常退出;

当code值为非0或为宏常量EXIT_FAILURE时,表示程序出现某种错误后退出。

调用函数exit()还需要头文件<stdlib.h>。

六、用于多路选择的switch语句 

当问题需要讨论的情况较多(一般大于三种)时,通常使用开关语句(也称为switch语句)代替条件语句来简化程序。

 

switch(表达式)
{
    case 常量1:
        可执行语句1
    case 常量2:
        可执行语句2
    .
    .
    .
    case 常量n:
        可执行语句n
    default:
        可执行语句n+1
}

switch语句相当于一系列的if-else语句,被测试的表达式写在关键字switch后面的圆括号中,表达式只能是char类型或者int类型,这在一定程度上限制了switch语句的使用。

switch花括号中的关键字case后面接着的是常量,常量与case中间至少隔一个空格,常量后面是冒号,常量的类型应与switch后括号内表达式的类型一致。

运行过程:

        首先计算switch后表达式的值,然后将该值依次与case后的常量值进行比较,当他们相等时,执行相应的case后面的代码段,代码执行完毕后,可使用break语句跳出switch语句。如果没有break语句,程序依次执行后面的语句,直到switch的右边花括号“}”为止。如果case语句后面的语句省略不写,则表示它与后续的case执行相同的语句。

例题:编程实现简单的计算器功能,要求用户按如下格式从键盘输入算式:

                        操作数1   运算符op   操作数2

计算并输出表达式的值,其中算术运算符包括:加'+' '-' '*' '/'。

#include<stdio.h>
int main(void)
{
	int n1,n2;
	char op;
	float d; 
	printf("Please input number1 and number2:\n");
	scanf("%d%c%d",&n1,&op,&n2);
	switch (op)
	{
		case '+':
			printf("%d+%d=%d\n",n1,n2,n1+n2);
			break;
		case '-':
			printf("%d-%d=%d\n",n1,n2,n1-n2);
			break;
		case '*':
			printf("%d*%d=%d\n",n1,n2,n1*n2);
			break;
		case '/':
			if(n2==0)printf("error\n");
			else
			{
				d=n1*1.0/n2;
				printf("%d/%d=%f\n",n1,n2,d);
				break;
			}
		default:
			printf("Invalid operator!\n");
	}
} 

七、逻辑运算符和逻辑表达式

逻辑运算也称为布尔运算。逻辑运算的结果值同样只有真和假两个值,C语言规定1为真,0为假。但是在需要判断一个数值表达式(不一定是逻辑表达式)真假的时候,由于任意一个数值表达式的值不只局限于0和1,因此根据逻辑表达式的值为非0或0来判断其真假。

逻辑运算符
逻辑运算符类型含义优先级结合性

&&

||

单目

双目

双目

逻辑非

逻辑与

逻辑或

最高

较高

较低

从右向左

从左向右

从左向右

逻辑运算符的特点;

①逻辑与:仅当两个操作数都为真时,运算结果才为真;若有一个数为假,运算结果就为假。

②逻辑或:操作数只要有一个为真,运算结果才为真;仅当两个操作数都为假,运算结果才为假。

③逻辑非:若操作数的值为真,则其逻辑非运算的结果就为假。

常用运算符的优先级和结合性
优先级顺序运算符种类附加说明结合方向
1一元运算符逻辑非! 相反数- ++ -- sizeof 类型强制转换等右到左
2算术运算符* / % 高于 +-左到右
3关系运算符< <= > >= 高于 ==   !=左到右
4逻辑运算符除逻辑非外,&&高于||

左到右

5赋值运算符= +=  -=  *=  /=  %=

右到左

 例题:编程输入三角形的三条边a,b,c,判断它们能否构成三角形,指出是何种三角形:

等腰、直角、等腰直角、一般三角形。

#include<stdio.h>
#include<math.h>
#define EPS 1e-1
int main()
{
	float a,b,c;
	printf("请输入三条边的长度:\n");
	scanf("%f%f%f",&a,&b,&c);
	int flag=1;//置标志变量flag为非0值 
	if(a+b>c&&b+c>a&&a+c>b)
	{
		if(fabs(a-b)==EPS||fabs(a-c)==EPS||fabs(c-b)==EPS){
			printf("等腰");
			flag=0;//置标志变量flag为0 
		}
		if(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b){
			printf("直角");
			flag=0;
		}
		if(flag)//若标志变量flag非0,则是一般三角形 
		{
			printf("一般");
		}
		
		printf("三角形\n");
	}else{
		printf("不是三角形\n");
	}
	return 0; 
 } 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值