30天学会C语言: Day 5-来比大小啊!

比较/关系 运算

用来比较两个数值大小关系的运算,运算的结果是一个布林值,当两者的大小关系成立时结果为 true,不成立则为 false

比较/关系 运算子

  • ==: 比较两者是否相等
  • !=: 比较两者是否相等
  • >: 左边是否大於右边
  • <: 左边是否小於右边
  • >=: 左边是否大於等於右边
  • <=: 左边是否小於等於右边

因为 true 实际上是 1, false 是 0,所以可以用以下方法在C语言中确认比较运算的结果

#include<stdio.h>
#include<stdlib.h>

int main(){
	int a=10, b=1;
	printf("%d\n", a==b);
	printf("%d\n", a!=b);
	printf("%d\n", a>b);
	printf("%d\n", a>=b);
	printf("%d\n", a<=b);
	printf("%d\n", a<b);
	
	return 0;
}

若显示 0 则代表两者关系不成立,1 就是关系成立

逻辑运算

运算元和运算结果都是布林值的运算,可以用来表示复杂的条件
C语言中的逻辑运算子有:

  • !: 否定(NOT),会将 true 变成 false,false 变成 true
    所以: !true 等於 false, !false 等於 true
  • &&: 而且(AND),只左右两边都是 true 时为 true,其他情况都是 false
  • ||: 或者(OR),当左右的其中一个是 true 时为 true,只有两边都是 false 时是 false
a b a||b a&&b
true true true true
true false true false
false true true false
false false false false

if()

表示 如果...,就执行...

语法如下

if(<条件>){
	<条件成立时执行的内容>
             ⋮
	<条件成立时执行的内容>
}

这里的<条件>是通常是一个布林值,所以常常会和前面的比较运算一起使用
<条件>成立(值为 true)时,会执行区块(大括号)中的程序码,若<条件>不成立则会跳过这个区块,继续执行大括号後的程序码

下面的范例中的第9、10行只有在输入的数大於100时才会被执行,如果 x 小於等於 100 的话会被跳过
所以无论如何,大括号外的程序码(第12行开始)一定会被执行到

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x>100){
		x=x*2;
		printf("%d\n", x);
	}
	printf("End\n");
	
	return 0;
}

可以用多个 if() 判断多个不同的条件

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x>100){
		printf("x is greater than 100!\n");
	}
	if(x<1000){
		printf("x is less than 1000!\n");
	}
	if(x==0){
		printf("x is equal to 0!\n");
	}
	
	return 0;
}

if() 只能控制条件成立时执行的程序码,如果要在条件不成立时执行另一段程序码,可以用另一个 if(),搭配相反的条件

下面的范例,如果 x 大於 100 就显示 x is greater than 100!否则会显示 x isn't greater than 100!

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	if(x>100){
		printf("x is greater than 100!\n");
	}
	if(x<=100){
		printf("x isn't greater than 100!\n");
	}
	
	return 0;
}

用逻辑运算子!可以达到一样的效果

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	if(x>100){
		printf("x is greater than 100!\n");
	}
	if(!(x>100)){
		printf("x isn't greater than 100!\n");
	}
	
	return 0;
}

if-else

除了用另一个 if() 和相反的条件,可以用 else 设定条件不成立时执行的程序码,语法是

else{
	<条件不成立时执行的内容>
             ⋮
	<条件不成立时执行的内容>
}

else 必须写在 if() 的後面,所以 if-else 代表 如果怎样,就做...,否则做... 的概念

因为一个数不是偶数就是奇数,所以可以用 if-else 做判断
第8行 x%2 的结果可以用来判断一个数是奇数或偶数,因为 x%2 为0时代表 x 除以2余0(可以整除,是2的倍数),所以 x 是偶数

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x%2==0){
		printf("%d is a even number.", x);
	}
	else{
		printf("%d is a odd number.", x);
	}
	
	return 0;
}

if-else if

if-else,只能产生两种结果,也就是条件成立不成立这两种
如果要判断更多条件可以在 if()else 间加入 else if(),变成 if-else if-else 的结构,代表 如果...就...,否则如果...就...,以上皆不成立则...

如果要判断数字在哪个区间,就可以用 if-else if-else

#include<stdio.h>
#include<stdlib.h>

int main(){
	int score;
	scanf("%d", &score);
	if(score>=60)
		printf("PASS!!\n");
	else if (score>=40)
		printf("RETAKE!!\n");
	else
		printf("FAIL!!\n");
	
	return 0;
}

一个 if 後面可以有多个 else if()

#include<stdio.h>
#include<stdlib.h>

int main(){
	int score;
	scanf("%d", &score);
	if(score==100)
		printf("EXCELLENT!!\n");
	else if(score>=80)
		printf("GREAT!!\n");
	else if(score>=60)
		printf("PASS!!\n");
	else if (score>=40)
		printf("RETAKE!!\n");
	else
		printf("FAIL!!\n");
	
	return 0;
}

else if() 不一定要和 else 一起使用

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x>=1000)
		x=x-1000;
	else if(x>=100)
		x=x-100;
	printf("%d\n", x);
	
	return 0;
}

不管是 if-else 还是 if-else if,只要有一个区块被执行了(有一个条件成立了),後面的条件判断都会被跳过
所以一个 if-else ifif-else 最多只会执行其中一个区块,且是依照顺序做判断,使用时要注意条件的顺序,如果顺序较前面的条件涵盖范围比顺序较後面的条件还广,可能会导致後面的内容不会被执行

如果把上面例子中的条件顺序反过来,执行的结果会变成只有 RETAKE!!FAIL!! 两种

#include<stdio.h>
#include<stdlib.h>

int main(){
	int score;
	scanf("%d", &score);
	if (score>=40)
		printf("RETAKE!!\n");
	else if(score>=60)
		printf("PASS!!\n");
	else if(score>=80)
		printf("GRATE!!\n");
	else if(score==100)
		printf("EXCELLENT!!\n");
	else
		printf("FAIL!!\n");
	
	return 0;
}

因为只会执行其中一个区块,所以如果执行的指令互相独立(可能有多个区块被执行)时,就必须拆成多个 if()

下面的例子中,不管符合几个条件,第一段程序码最多只会执行一次 printf()
但第二段程序码只要条件符合就会执行,所以最多会执行两次 printf()

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x>100)
		printf("x is greater than 100.\n");
	else if(x%2==0)
		printf("x is a even number.\n");
	
	return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x>100)
		printf("x is greater than 100.\n");
	if(x%2==0)
		printf("x is a even number.\n");
	
	return 0;
}

补充

省略大括号

如果区块中的程序码只有一行(大括号的内容只有一行)那大括号可以省略

所以上面判断奇、偶数的程序码可以改成:

#include<stdio.h>
#include<stdlib.h>

int main(){
	int x;
	scanf("%d", &x);
	
	if(x%2==0)
		printf("%d is a even number.");
	else
		printf("%d is a odd number.");
	
	return 0;
}

挖坑清单:

  • main() 前面的 int,和最後一行的 return 0;
  • 可以拆成多行的情况
  • \0 在字串、字元中的意思
  • 指标

<<:  Webview问题集(上)-另开分页

>>:  Day 6 python集合

回归初心;重新出发 IOS基础

受朋友的挑战,也是对自己的考验与面对自己。同时也是自己对自己的坦白,通过铁人赛来测试自己。 比起是比...

Day11 - 敏捷式接案实践( 三 ) - 时间管理

自从改变自己的工作模式後,现在平均的案量是每天有计时的工作时数大概是三个小时,并且同时有三位长期配合...

Day 28 实作 admin_bp (1)

前言 今天要开始写 admin_bp,有蛮多部分跟之前很像。 /admin_dashboard/po...

Day 26 Explore monitoring and reporting

Explore Azure service health Provide personalized ...

【心得】Notion笔记软件

【心得】Notion笔记软件 自知自制力不好且记忆力有限(,,・ω・,,) 从以前我就有写手帐跟做笔...