1.关系运算符:
>
<
>=
<=
==
!=
作用:判断关系运算符左右两边的表达式是否满足条件。
5>6---->否(0)
5>=5--->是(1)
优先级:
1.算术运算符>关系运算符>赋值运算符
2.在关系运算内部:(> < >= <=)>(== !=)
#include<stdio.h>
int main(){
int a=5,b=6,c=2;
printf("%d\n",a+b>b);//11>b 是(1)
printf("%d\n",a+b!=b+'a');//11!=10 是(1)
printf("%d\n",a+b>b>a==b-a);
//11>b>a=1
//1>a==1
//0==1 否(0)
printf("%d\n",b>a+b>a!=b-a>1);
//b>11>a!=1>1
//0>a!=1>1
//0!=0 否(0)
return 0;
}
2.逻辑运算符:&&(与)||(或)!(非)
与运算:
a&&b--->如果a和b同时为真(满足),结果为真(是),如果有一个为假,结果为假。
例:1&&1=1; 1&&0=0; 0&&1=0; 0&&0=0 5&&-2=1
注意:C语言中,非0数表示真,0表示假。
或运算:
a||b--->如果a和b为真(满足),结果为真(是),如果a和b同时为假,结果为假。
例:1||1=1; 1||0=1; 0||1=1; 0||0=0; -9||7=1
非运算:
!a--->如果a为真,!a为假,如果a为假,!a为真。
例:!1=0; !0=1; !-1=0
优先级:
!(非)>算术运算符>关系运算符>&&和||>赋值运算符
赋值运算符:从右向左 算术运算符、关系运算符、逻辑运算符:从左到右
例题:若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是多少?
解题思路:
!(2)+2-1&&4+2/2
0+2-1&&4+1
1&&5=1
逻辑运算特性:
存在a&&b,a如果为0,&&后面的b不执行!
存在a||b,a如果为1,||号后面的b不执行!
if语句:
if(只要能返回1或0){
判断是否满足条件
}
例1:定义两个整数,按照由小到大的顺序输出。
#include<stdio.h>
int main(){
//小 大 按原样输出
//大 小 交换输出
int a,b,t;
scanf("%d%d",&a,&b);
if(a>b){
//a和b交换
t=a;
a=b;
b=t;
}
printf("%d%d",a,b);
return 0;
}
例2:输入一个年付,判断这个年份是否是闰年?
可知:int year 闰年要能被4整除并且不能被100整除或能被400整除
即得:(year%4==0&&year%100!=0)|| year%400==0
#include<stdio.h>
int main(){
int year;
scanf("%d",&year);
if((year%4==0&&year%100!=0)||year%400==0){
printf("是闰年!");
}else{
printf("不是闰年!");
}
return 0;
}
另可写成:
#include<stdio.h>
int main(){
int year;
scanf("%d",&year);
if((year%4==0&&year%100!=0)||year%400==0)
printf("是闰年!");
else
printf("不是闰年!");
return 0;
}
如果if或else后只要一句话或一个不可分割的整体,{}可以省略。
例3.分段函数
#include<stdio.h>
int main(){
double x,y;
scanf("%lf",&x);
if(x<1)
y=x;
else if(x>=1&&x<10)
y=2*x-1;
else if(x>=10)
y=3*x-11;
printf("y=%f",y);
return 0;
}
条件运算符(三目运算符)
如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。
条件运算符:?
和 :
它是一个三目运算符,即有三个参与运算的量。
由条件运算符组成条件表达式的一般形式为:
表达式1 ?
表达式2 :
表达式3
简洁的if...else语句步骤:
如果表达式1为真,执行表达式2;
如果表达式1为假,执行表达式3。
例:给定两个整数,输出最大值。
#include<stdio.h>
int main(){
int a=10;
int b=20;
int max;
/*方法一
if(a>){
max=a;
}
else{
max=b;
}
*/
/*方法二
max=a>b?a:b;
*/
/*方法三
a>b?max=a:max=b;
printf("max=%d",max);
*/
//方法四
a>b?printf("%d",a):printf("%d",b);
return 0;
}
例:输入一个字符,判断它是否为大写字母,如果是大写字母,转换为小写,如果不是大写字母,则不转换。
#include<stdio.h>
int main(){
char ch;
ch=getchar();// scanf("%c",&ch);
/* if(ch>='A'&&ch<='Z'){
ch=ch+32;
}
ch=ch>='A'&&ch<='Z'?ch+32:ch;
putchar(ch);
*/
ch>='A'&&ch<='Z'?putchar(ch+32):putchar(ch);
return 0;
}
switch语句
switch语句是一种多分支选择语句,在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。
switch语句表达式:
switch(表达式){
case 常量表达式1:语句块1;
break;
case 常量表达式2:语句块2;
break;
……
case 常量表达式m:语句块m;
break;
default:语句块n;
break;
}
语句结构中的“表达式”的类型为整型(包括char),default语句可以省略,各case标号出现的次序不影响程序的结果,每个case后的标号应不相同。多个case标号后可以共用一组执行语句。
例题:用户输入成绩的等级,输出相应的成绩范围。如:输入A,输出85-100;输入B输出70-84;输入C输出60-69;输入D输出59-0.
#include<stdio.h>
int main(){
char grade;
grade=getchar();
//如果switch中省略掉break,就会从第一个符合条件的语句开始执行,直到switch语句执行完成。
switch(grade){
case'A':printf("100-85\n");break;//跳出
case'B':printf("84-70\n");break;
case'C':printf("69-60\n");break;
case'D':printf("59*0\n");break;
default:printf("输入成绩错误!");
}
return 0;
}
典型例题:输入一个5位数,求出每一位数的值。
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
int ten_thou,thou,hun,ten,indiv;
ten_thou=a/10000;//万
thou=a%10000/1000;//千
hun=a%10000%1000/100;//百
indiv=a%10000%1000%100%10;//个
printf("ten_thou=%d\n",ten_thou);
printf("thou=%d\n",thou);
printf("hun=%d\n",hun);
printf("ten=%d\n",ten);
printf("indiv=%d\n",indiv);
return 0;
}
练习例题:输入一个三位整数,判断这个三位数是否是水仙花数。如果153=1x1x1+5x5x5+3x3x3,就是水仙花数。