bool
#include<stdbool.h>
之后就可以使用bool和true,false。
#include<stdio.h>
#include<stdbool.h>
int main()
{
bool a = 6 > 5;
bool b = true;
b = 2;
printf("%d\n%d",b,a);
return 0;
}
显示结果:1 1
逻辑运算
逻辑运算是对逻辑量进行的计算,结果只有0或1
逻辑量是关系运算或逻辑运算的结果
| 运算符 | 描述 | 示例 | 结果 |
| ! | 逻辑非 | !a |
如果a是true结果就是false 如果a是false结果就是true |
| && | 逻辑与 | a&&b |
如果a和b都是true,结果就是true 否则就是false |
| || | 逻辑或 | a||b |
如果a和b有一个是true,结果就是true 两个都是false,结果才为false |
TRY



优先级
!>&&>||
!done&&(count>MAX)
| 优先级 | 运算符 | 结合性 |
| 1 | () | 从左到右 |
| 2 | !+ - ++ -- |
从右到左 (单目的+和-) |
| 3 | * / % | 从左到右 |
| 4 | + - | 从左到右 |
| 5 | < <= > >= | 从左到右 |
| 6 | == != | 从左到右 |
| 7 | && | 从左到右 |
| 8 | || | 从左到右 |
| 9 | = += -= *= /= %= | 从右到左 |
短路
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果,就不会做右边的计算。
a==b && b==1
a==B && b+=1
对于&&,左边是FALSE时就不做右边了
对于||,左边是TRUE时就不做右边了
(不要把复合赋值组合进表达式)
条件运算符
count=(count>20)?count-10:count+10;
条件,条件满足时的值和条件不满足时的值
相当于:

优先级
条件运算符的优先级高于赋值运算符,但低于其他运算符
m<n?x:a+5
a++ >=1 && b--> 2 ? a:b
x=3 *a>5 ? 5 : 20

条件运算符是自右向左组合的
w<x?x+w:x<y?x:y
逗号运算符

在for中使用
for(i=0,j=10;i<j;i++,j--)......
#include<stdio.h>
#include<stdbool.h>
int main()
{
int i, j;
for (i = 0, j = 10; i < j; i++, j--)
{
printf("%d %d\n",i,j);
}
printf("\n\n%dand%d",i,j);
return 0;
}

嵌套的if-else

#include<stdio.h>
#include<stdbool.h>
int main()
{
int a, b, c,max;
scanf_s("%d %d %d",&a,&b,&c);
if (a > b)
{
if (a > c) {
max = a;
}else{
max = c;
}
}else{
if (b > c){
max = b;
}else{ max = c;
}
}
printf("%d",max);
return 0;
}


else的匹配
else总是匹配最近的那个if
缩进
缩进格式不能暗示else的匹配
tips
在if或else后面总是用{}
即使只有一条语句的时候
分段函数
f(x)=-1;x<0
0;x=0
2x;x>0

#include<stdio.h>
int main()
{
int a, b, c,max;
scanf_s("%d %d %d",&a,&b,&c);
if (a > b && a>c)
{
max = a;
}else if (b > c) {
max = b;
}else{
max = c;
}
printf("%d",max);
return 0;
}
级联的if-else if-else
if(1){
pr1;
}else if(2){
pr2;
}else{
pr3;
}
多路分支
switch-case

#include<stdio.h>
int main()
{
int type;
scanf_s("%d",&type);
switch (type) {
case 1:
type=1;
break;
case 2:
type = 12;
break;
case 3:
type = 123;
break;
case 4:
type = 1234;
break;
case 5:
type = 12345;
break;
default:
type = 0;
}
printf("%d",type);
return 0;
}

控制表达式只能是整数型的结果
常量可以是常数,也可以是常数计算的表达式
break

f(x)=
-1;x<0
0;x=0
2x;x>0
分段函数用Switch...case来实现?

计算之前先保存原始的值,后面可能有用
while(x>0){
printf("%d",x);
x--;
}
和
while(x>0){
printf("%d",x);
x--;
}
中x--的位置不一样,次数不变,但是最初值和最后值会发生改变。



#include<stdio.h>
int main()
{
int number;
int sum=0;
int count=0;
scanf("%d",&number);
while(number!=-1){
sum+=number;
count++;
scanf("%d",&number);
}
printf("n=%d",sum/count);
printf("count=%d",count);
return 0;
}
#include<stdio.h>
int main()
{
int num;
int count;
scanf("%d",&num);
while(num!=6){
if(num>6){
printf("大了!\n");
count++;
}else{
printf("小了!\n");
count++;
}
scanf("%d",&num);
}
count++;
printf("猜对了,你猜了%d次!",count);
return 0;
}
随机数
每次召唤rand()就得到一个随机的整数

头文件必须加上
#include<stdlib.h>
#include<time.h>
开头加上
srand(time(0));
int num = rand()
得到随机的数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
int num = rand()%100%10;
int count=0;
int a=0;
scanf_s("%d",&a);
while(num!=a){
if(num<a){
printf("大了!\n");
count++;
}else{
printf("小了!\n");
count++;
}
scanf_s("%d",&a);
}
count++;
printf("猜对了,你猜了%d次!",count);
return 0;
}
整数的分解






本文介绍了C语言中的逻辑运算、条件与循环控制结构,包括布尔类型、逻辑运算符、if-else语句、switch-case语句、while循环等,并通过实例展示了如何使用这些结构来实现复杂的逻辑判断。
3138

被折叠的 条评论
为什么被折叠?



