C语言判断与循环进阶

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

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;
}

整数的分解

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员希西子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值