一、关系运算、逻辑运算
1.关系运算:
①< (小于)②<= (小于或等于)③> (大于)④>= (大于或等于)⑤== (等于)⑥!= (不等于)
例: 0 < a < 5在C语言和数学的含义是不同的在C语言中:0<a<5是将(0<a)比较出的结果(0或1)再与5进行比较,得出最终结果0或1。在数学中:0<a<5表示a的值在0到5之间。
2.逻辑运算:
(1) && 逻辑与 (相当于其他语言中的 AND)(2) || 逻辑或 (相当于其他语 中的 OR)(3) ! 逻辑非 (相当于其他语言中的 NOT)
(1)&&
运算规则:一假则假,全真才真 (双目运算符)
表达式1 && 表达式2
(一般连接两个表达式,反映两个表达式之间的关系)
(2)||
运算规则:一真则真,全假才假 (双目运算符)
表达式1 && 表达式2
(反映的是最终这个表达式的结果)
(3)!
运算规则:真假相对 (单目运算符)
!表达式
(原来表达式为真,!之后这个表达式的结果就为假)
注意: && 和 || 均有短路特性:
&& :如果左边的表达式1的结果为假,右边的表达式2就不会再运算。
|| :如果左边的表达式1的结果为真,右边的表达式2就不会再运算。
3.条件运算:
表达式 1? 表达式 2: 表达式 3
例:用条件表达式找出3个数中的最大值
#include<stdio.h> int main() { int a,b,max; scanf("%d %d",&a,&b); max = a>b ? a:b; printf("max=%d\n",max) return 0; }
易错:a>b ? max=a : max=b;
在 C 语言中,条件运算符
? :
的优先级高于赋值运算符=
,若按照以上错误写法,就会出现error: lvalue required as left operand of assignment,对于‘=b’来说,左边的整体不是一个左值(lvalue)。
改:方法①a>b ? (max=a) : (max=b);
方法②max = a>b ? a : b;
二、流程控制
流程控制包括顺序结构、选择结构、循环结构,任何一个C程序,都是由这三种结构组合而成。
选择结构:
1.if 语句
形式1:处理单个情况-------单分支形式2:处理两种情况-------双分支形式3:处理多种情况-------多分支
(1)形式1:(单分支)
if (表达式){语句} //复合语句
(2)形式2:(双分支)
①语法形式:
if (表达式){语句1}else{语句2}
(3)形式3:(多分支)
①语法形式:
if (表达式1){语句1}else if (表达式2){语句2}···else{语句n}
例1:输入一个年份,判断它是否是闰年#include<stdio.h> int main(void) {int year; printf("Input a year:"); scanf("%d",&year); if(year%4 == 0 && year%100 != 0 || year%400 == 0) printf("is a leap year\n"); else printf("is not a leap year\n"); return 0; }
例2:输入一个月份,输出其对应天数
#include<stdio.h> int main(void) { int year,month,days; printf("Input year and month:"); scanf("%d-%d",&year,&month); if(month<1 || month >12) { printf("Invalid month!\n"); return -1; } if(month==4 || month==6 || month==9 || month==11) { days = 30; } else if(month==2) { if(year%4 == 0 && year%100 != 0 || year%400 == 0) days = 29; else days = 28; } else days = 31; printf("days = %d\n",days); return 0; }
注:return -1;
返回非零值(包括
-1
)通常暗示函数没有正常完成其预期的任务。而返回0
则常常表示函数正常执行完毕且没有出现错误。
2.switch 语句
①语法形式:
注:1.表达式和常量表达式不是判断条件,只是一个值,需匹配这两个值是否一样。 2.default 表示如果不是上面的情况,则默认为这一情况。
例:
例:用switch实现 if 的效果:将分数制转为等级制
#include<stdio.h> int main(void) { int score,level; printf("Input a score:"); scanf("%d",&score); if(score<0 || score>100) { printf("invalid score!\n"); return -1; } switch(score/10) { case 10: case 9: level = 'A'; break; case 8: level = 'B'; break; case 7: level = 'C'; break; case 6: level = 'D'; break; default: level = 'E'; } printf("level = %c\n",level); return 0; }