逻辑表达式
※C语言中没有其它语言的“真”和“假”值,英文叫TRUE和FALSE值,也叫逻辑型变量。所有的表达式,只要非0(包括负数)即为真,0即为假。真和假就是我们平时所说的“条件成立”与“不成立”。
※关系和逻辑运算符也可以和算术运算符一起参加混合运算,与算术运算不同的是,关系和逻辑运算的结果只有0和1。
假如int a=3,b=4,c=0;
a&&b的结果为1,b||c的结果为1,a&&c的结果为0。!a+c>b||a-b的结果是 TRUE
※ a && b && c中,如果a为假,就不必再判断b和c,对于(i=0) && (j=20)这样的式子,j=20这条赋值语句永远也不会执行。
※同理,a || b || c,如果a为真,就不必再判断b和c,对于 (i=5) || (j=20)这样的式子,后面的j=20也不会执行。
条件运算符
格式:
条件表达式1 ? 表达式2 : 表达式3
它相当于普通的if分支语句,条件表达式1成立(非0值),执行表达式2,不成立(0值),执行表达式3。如果将它作为表达式,将执行过的值作为整个表达式的最终值。
条件表达式应用的一个典型例子就是取两数中的最大值:
int max,a=3,b=5;
max=a>b?a:b;
它相当于
if(a>b)max=a;
else max=b;
设int a=5,b=6,表达式(++a= =b- -)?++a:- -b的值是 7
嵌套的if
定义:if中还有一层if,或者else中还有if
程序1
// 18-1账号检查.c #include <stdio.h> #pragma warning(disable:4996); main() { int account = 1314555, password = 123456; //保存的账号和密码 int user_name, user_password; //用户输入的账号密码 printf("请输账号:"); scanf("%d",&user_name); //输入账号 if (account == user_name) //输入的和保存的作比较 { printf("账号正确,请输入密码:"); scanf("%d", &user_password); //输入的密码 if (user_password == password) //输入的密码作比较 { printf("登录中..."); } else { printf("密码错误!\n"); } } else { printf("账号错误!\n"); } }
※嵌套的层数过多,if语句的配对容易出问题,这种问题主要出现在if和else数目不一样的情况下,如:
if (a<5)
if (b<5) printf (“b\n”);
else
if (c<5) printf (“c\n”);
else printf (“d\n”);
程序作者想通过格式的改变将第一个else和第一个if语句配对,实际上编译器有自己的配对方式:它会将else与离自己最近的if语句配对,上面的语句实际上被编译器配对成:
if (a<5)
if (b<5) printf (“b\n”);
else
if (c<5) printf (“c\n”);
else printf (“d\n”);
如果想强制配对,请多使用花括号:
if (a<5)
{
if (b<5) printf (“b\n”);
}
else
{
if (c<5) printf (“c\n”);
else printf (“d\n”);
}
编写程序:输入a、b、c三个数,打印出最大者。
// 18-2输出最大值.c #include <stdio.h> main() { int a, b, c; //定义三个变量 int max; //最大值 printf("请输入三个用逗号隔开的数:"); scanf_s("%d,%d,%d", &a, &b, &c); //用户输出的三个数 max = a; if (max<b) max = b; if (max<c) max = c; printf("%d\n", max); }