四.进一步的判断与循环

4.1逻辑类型和运算

bool
#include<stdbool.h>
之后就可以使用bool和true、false

逻辑运算
逻辑运算是对逻辑量进行的运算,结果只有0或1
逻辑量是关系运算或逻辑运算的结果
在这里插入图片描述
! 非 取反运算
&& 并且
|| 或者

如何判断一个字符c是否是大写字母?
c>=‘A’&&c<=‘Z’

!age<20
永远成立

优先级
!>&&>||
!done&&(count>MAX)
在这里插入图片描述
短路
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算
a==6&&b+=1
对于&&,左边是false是就不做右边了
对于||,左边是true时就不做右边了
不要不赋值,包括符合赋值组合进表达式!

条件运算符
count=(count>20)?count-10:count+10;
条件?条件满足时的值:条件不满足时的值
if(count>20)
count=count-10;
else
count=count+10;
表面看起来简单了很多,实际可能带来很多麻烦

优先级
条件运算符的优先级高于赋值运算符,但是低于其他运算符
m>n?x:a+5
条件运算符是自右向左结合的
使用嵌套的条件表达式不好

逗号运算
逗号用来连接两个表达式,并且以右边的表达式作为它的结果。逗号的优先级是所有运算符中最低的,所以它两边的表达式会先计算;逗号的组合关系是自左向右,所以左边的表达式会先计算,而右边的表达式的值就留下来作为逗号运算的结果。
在for中使用
for(i=0,j=10;i<j;i++,j–)

比较三个数大小

int a,b,c;
scanf("%d %d",&a,&b,&c);
int max=0;
if(a>b){
	if(a>c){
		max=a;
	}else{
		max=c;
	}
}else{
	if(b>c){
		max=b;
	}else{
		max=c;
	}
}
printf("The max is %d\n",max);

嵌套的判断
当if的条件满足的时候或者不满足的时候要执行的语句也可以是一条fi或if-else语句,这就是嵌套的if语句

else的匹配
没被{}隔开时,else总是和最近的那个if匹配

tips
在if或else后面总是yong{}
即使只有一条语句的时候

分段函数

if (x<0){
	f=-1;
}else if(x==0){
	f=0;
}else{
	f=2*x;
}
printf("%d",f)
//单一出口,相比每一个判断都输出printf,更灵活

级联的if-else if
去掉{} 使else对齐

switch-case

switch(type){
case 1:
	printf("你好");
	break;
case 2:
	printf("早上好");
	break;
case 3:
	printf("晚上好");
	break;
case 4:
	printf("再见");	
	break;
default:
	printf("啊,什么啊?");
	break;
}

switch(控制表达式){
case 1:
语句
——
default:
语句
——
}
控制表达式只能是整数型的结果
常量可以是常数,也可以是常数计算的表达式

break
switch语句可以看做是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch结束为止。
case入口路牌 break才能出去

log2小套路

int x;
int ret=0;
scanf("%d",&x);
int t=x;
while(x>1){
	x/=2;
	ret++;
}
printf("log2 of %d is %d.",t,ret);

计算之前保存原始值,后面可能用到

计数循环小套路
如果要模拟运行一个很大次数的循环,可以模拟较少的循环次数,然后做出推断。

算平均数

int number;
int sum=0;
int count=0;
scanf("%d",&number);
while(number!=-1){
	sum+=number;
	count++;
	scanf("%d",&number);
}
printf("%f\n",1.0*sum/count);

猜数游戏

#include<stdlib.h>
#include<time.h>

srand(time(0));
int number=rand()%100+1;
int count=0;
int a=0;
printf("我已经想好了一个1到100之间的数。");
do{
	printf("请猜这个1到100之间的数。:");
	scanf("%d",&a);
	count++;
	if(a>number){
		printf("你猜的岁数大了。");
	}else if(a<number){
		printf("你猜的数小了。");
		}
	}while(a!=number);
	printf("太好了,你用了%d次就猜到了答案\n",count);

随机数
每次召唤rand()就得到一个随机的整数

整数的分解

int x;
scanf("%d",&x);
int digit;
int ret=0;
while(x>0){
	digit=x%10;
	printf("%d,",digit);
	ret=ret*10+degit;
	printf("x=%d,digit=%d,ret=%D\n",x,digit,ret);
	x/=10;
	}
	printf("%d",ret);

if语句常见的错误
忘了大括号
if后面的分号
错误使用==和=
使人困惑的else

代码风格
在if和else之后必须加上大括号形成语句块;
大括号内的语句缩进一个tab的位置;
风格是三观

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值