选择结构的程序设计
if语句的选择结构
-
二次函数求根的if语句
#include<stdio.h>
#include<stdio.h>
int main()
{
double a,b,c,x1,x2,p,q,disc;
scanf("%lf%lf%lf",a,b,c);
disc=b*b-4*a*c;
if(disc<0)
printf("This equation hasn't real roots");
else
{
p=-b/z*a;
q=sqrt(disc)/z*a;
x1=P+q;
x2=p-q;
printf("real roots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2);
}
return 0;
}
-
涉及比较数的大小并排序时,也可以用if语句,然后用一个中间变量暂存
if(a>b)
{
t=a;
a=b;
b=t;
}
if 语句的一般形式
-
if(表达式)
语句
-
if(表达式)
语句
else
语句
-
if(表达式)
语句;
else if(表达式)
语句;
else if(表达式)
语句;
......
else if (表达式)
语句;
else
语句;
//这是if语句的嵌套使用
//注意:表达式后面不用分号,而语句后面要分号
//语句如果是复合语句的要用花括号括起来
关系运算符
-
优先次序
算术运算符>关系运算符>赋值运算符
-
六种关系运算符
-
< >
-
<=(小于或等于) >=(大于或等于)
-
==(等于)*一个等于号的是赋值
-
!=(不等于) remember!!!!
-
-
d=a>b(若a>b,则d的值为1;else d=0)
逻辑运算符和逻辑表达式
-
逻辑运算符和优先次序
-
有三种逻辑运算符:and(&&)、or(||)、Not(!)
-
a&&b : 如果a和b都为真,则结果为真,否则为假
-
a||b :如果a和b有一个以上为真,则结果为真;二者都为假时,结果为假
-
如果a为假,则!a为真;如果a为真,则!a为假
-
-
优先次序:!>算术运算符>关系运算符>(&&和||)>赋值运算符
-
逻辑表达式
-
若a=4,则!a的值为0
-
若a=4,b=5,则a&&b的值为1,a||b的值为1,!a||b的值为1
-
若a=4,b=0,则a&&b的值为0,a||b的值为1
通过上面几个例子可发现,由系统给出的逻辑运算结果不是0就是1
-
逻辑运算符两侧的运算对象还可以是字符型、浮点型、枚举型或指针型纯量型数据
-
条件运算符和条件表达式
-
c语言唯一一个三目运算符
表达式1?表达式2:表达式3(条件运算符有两个符号组成:? 和:)
-
max=(a>b)?a:b 若a>b则max=a;若a!>b则max=b
#include<stdio.h> int main() { char ch; scanf_s("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%c\n",ch); return 0; //输入一个字符,大写转小写,小写正常输出 }
-
选择结构的嵌套
if()
if() 语句1//内嵌if
else 语句2
else
if() 语句3//内嵌if
else 语句4
-
应当注意if与else的配对关系,else总是与它上面离它最近的未配对的if配对
用switch语句实现多分支选择结构
-
switch语句都可以用嵌套if语句来处理,但如果分支较多,则嵌套的if语句层数较多,程序冗长而且可读性降低,而switch可以直接处理多分支选择
-
eg:
#include<stdio.h> int main() { char grade; scanf_s("%c",&grade); printf("You score:"); switch(grade) { case'A':printf("85~100\n");break; case'B':printf("70~84\n");break; case'C':printf("60~69\n");break; case'D':printf("0~60\n");break; default:printf("enter date error!\n"); } return 0;
//等级grade定义为字符变量,从键盘输入一个大写字母,赋给变量grade,switch得到grade的值并把它和各case中给定的值('A','B','C','D'之一)相比较,如果和其中之一相同,则执行该case后面的语句,输出相应的信息 }
-
在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行
-
多个case标号可以共用一组执行语句
-
case 'A': case 'B': case 'C':printf(">60\n");break;
-