C语言分支与循环(全)

#小结总结#

1.if语句

        if语句的语法形式是if(表达式)——表达式成立(为真),则语句执行,表达式不成立(为假的),则语句不执行。

        在C语言中,0为假,非0为真,也就是表达式的结果如果是0,则语句不执行,如果结果不是0,则语句执行。 

        使用代码举例:一个用if语句判断是否是奇数的代码,那么如果不是奇数的话他肯定就是偶数,那么就需要用到else了。

#include<stdio.h>
int main()
{
    int num=0;
    scanf("%d",&num);
    if(num%2==1)          //输入一个数如果除以2的余数为1的时候那么这个数就是奇数
        printf("%d",num);
    return 0;
}

      else:

        else的作用就是判断一个条件如果第一个不成立的话那么其他的就进入else判断。

        举例如下:

#include<stdio.h>
int main()
{
    int num=0;
    scanf("%d",&num);
    if(num%2==1)
        printf(“%d",num);   //如果是奇数则打印这个
    else
        printf("%d",num);    //如果是偶数则打印这个
    return 0;
}

        嵌套if:

        在if else 语句中,else可以与另一个if语句连用,构成多重判断.

       代码举例:判断一个条件多种情况就可以用到else if 并且else if不止可以写一条,可以写多条。

#include<stdio.h>
int main()
{
    int num=0;
    scanf("%d ",&num);
    if(num==0)
        printf("输入的数字是0\n");
    else if (num>0)
        printf("输入的是正数\n");
    else
        printf("输入的是负数");   
    return 0;
}

        并且判断语句里面也可以判断,就叫嵌套。

        代码举例:输入一个整数,如果他是正数,在判断它是奇数还是偶数,并输出;如果不是正整数则输出:非正数。

#include<stdio.h>
int main
{
    int num = 0;
    scanf("%d ", &num );
    if(num > 0)
    {
        if(num%2 == 0)
            printf( "是偶数\n" );
        else
            printf(" 是奇数\n ");
    }
    else
        printf(" 非正数\n ");
    return 0;
}

        悬空else问题:

        如果有多个if和else,可以记住这样一条规则,else总是跟最近的if匹配。

        代码举例:这段代码是什么都不输出的。

        原因:因为else总跟最接近的if匹配。因为eles是跟第二个if匹配的,所以就是if

里面嵌套了一个if....else,所以当第一个if的条件不成立的时候,将不会进入条件,所以这段代码什么都不打印。

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

        但是如果你希望else确实跟第一个if匹配的话,可以这样写:

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
    {  if(b == 2)
    }     printf("hehe\n");
    else
    {    
        printf("haha\n");
    }
    return 0;
}

2.关系操作符

        C语言中用于比较的表达式,称为关系表达式,里面使用的运算符就称为关系运算符

           ·     > ——大于运算符     举例:a>b

           ·      <——小于运算符       举例:a<b 

           ·     >=——大于等于运算符      举例:a>=b

           ·   <=——小于等于运算符        举例:a<=b

           ·     ==相等运算符          举例:a==b

           ·    !=——不相等运算符        举例:a!=b

关系表达式通常返回0或1,表示真假。

C语言中,0表示假,所有非零表示真。比如,20>12返回1,12>20返回0。

        注意:多个关系运算符不宜连用,举例:a>b>c

        谨记:关系运算符是从左到右计算。举例:(a<b)<c  如果a<b不成立为假就是0 那么0<c 反之一样。


 3.条件操作符

        条件操作符也叫三目操作符,需要接收三个操作数的,形式如:exp?exp2:exp3    。

        条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算结果是整个表达式的结果;如果exp1为假,进行exp3计算,计算结果是整个表达式的结果。


        

4.逻辑操作符

        && :与运算符,并且的意思(两侧的表达式都为真,则为真,有一个假的就全是假的)

        举例:

#include<stdio.h>
int main()
{
      int month=0;
    scanf("%d ",&month);
    if(month>=3 && month<5)//如果满足在三月到五月那么就是春季
        printf("春季\n")
return 0;
}

        ||     :异或,或者的意思(两侧至少有一个表达式为真,那么整个表达式就是真的。

        举例:

#include<stdio.h>
int main()
{
    int month=0;
    scanf("%d",&month);
    if(month==12||month==1||month==2)//一年中十二月或者一月或者2月是冬天 只要一个满足那么就是冬季
            printf("冬季\n");
return 0;}

        !   :逻辑取反操作符(改变单个表达式的真假)

        举例:

#include<stdio.h>
int main
{
    int flag=0;//0为假 说明flag为假
    if(!flag)  //!flag和flag相反 那么就是真 进入循环
    {
        printf("hehe\n")
    }
return 0;
}

        注意:C语言逻辑运算符还有一个特点,他总是对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。但是如果左边的表达似乎满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为短路

                    但是根据左值可以知道整个表达式结果,不再对右操作数进行计算的运算称为短路求值。

        举例:

     if(month>=3 && month<=5)
    //表达式中&&的做操作数是month>=3,右操作数是month<=5,当左操作数month>=3结果是0的时候,即使不判断month<=5,整个表达式结果也是0(不是春季)。
    






      if(month==12 || month==1 || month==2)
    //如果month==12,则不用再判断month是否等于1或者2,整个表达式的结果也也是1(是冬季)
    //这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为(短路求值)。

5.switch语句

        switch 与 case密不可分。

        用法注意:case和后面的数字之间必须有一个空格。  每个case语句代码执行完之后需要加上break,才可以跳出switch语句。

        原因是switch语句是存在分支效果的,只有在switch语句中使用break才可以跳出switch语句,如果某个case语句后面没有break语句,代码会继续执行下去,如果下面还有语句的话则会把下面的语句全部执行。

        所以再switch中break语句是非常重要的,能够真正的实现分支效果。

        代码举例:

输入任意一个整数值,计算除3后的余数
        

#include<stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);//输入一个整数
    switch(n%3)//判断一个整数取余之后的得数 假如是1 那么就跳入case 1中,之后break跳出循环。
    {
        case 0:
            printf("整除,余数为0\n");
break;  //跳出循环
        case 1:
            printf("余数为%1\n");
break;  //跳出循环
        case 2:
            printf("余数为2\n");
break; //跳出循环
    }return 0;
}

        当然break也不是每个case语句都得有,这需要根据实际的情况来看,举例:

#include<stdio.h>
int main()
{
    int day=0;
    scanf("%d ",&day);
    switch(day)
    {
        case 1: 
        case 2:
        case 3:
        case 4:
        case 5:
            prinf("工作日\n") // 1 2 3 4 5属于工作日 那么就不需要每个都打印出来加break了
            break;
        case 6:
        case 7:
            printf("休息日\n")//和上面逻辑一样
            break;
    }return 0;
}

        那1 2 3 4 5 是工作日 6 7是休息日 那我输入 8 怎么办 ,这个时候就需要用到default了,举例:

#include<stdio.h>
int main()
{
    int day=0;
    scanf("%d ",&day);
    switch(day)
    {
        case 1: 
        case 2:
        case 3:
        case 4:
        case 5:
            prinf("工作日\n") // 1 2 3 4 5属于工作日 那么就不需要每个都打印出来加break了
            break;
        case 6:
        case 7:
            printf("休息日\n")//和上面逻辑一样
            break;
    default://输入的不是1 ~ 7 的数字,那么走这个程序
        printf("输入错误\n");
        break;
    }return 0;
}

       注意:再switch中case子句和default子句没有顺序要求,只要顺序可以满足实际需求就可以,不过通常都是吧default子句放在最后处理的。


6.while循环

        while的语句语法结构和if的语句非常相似,例如:

if(表达式)
语句;


while(表达式)
语句;

        while语句执行流程:首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完之后在继续判断,是否进行下一次判断。

        解析:首先执行表达式1初始化循环变量,接下来执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完之后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。

        整个循环的过程中,表达式1初始化部分只被执行1次僧下的就是表达式2,循环语句,表达式3在循环。

        代码举例:打印1-100的数字 

while循环在屏幕上打印1-100的数字

#include<stdio.h>
int main
{
    itn i=1;  //从1开始
    while(i<=100) //1<100条件成立进入循环(当i>=100时循环停止)
    {
        printf("%d ",i); //打印i的值
           i++; //i++   之后等于2 一直循环到i>=100
    }
return 0;
}

7.for循环

        for循环时三种循环使用最多的,for循环的语法形式如下:

for(表达式1;表达式2;表达式3)
    语句;

        表达式1:用于循环变量初始化

        表达式2:用于循环结束条件的判断

        表达式3:用于循环变量的调整 

for循环的执行流程:首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。

        整个循环过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2,循环语句,表达式3在循环。

        for循环代码示例:打印1-10的数字:

#include<stdio.h>
int main()
{
    int i=0;
    for(i=1;i<=10;i++)
        printf("%d ",i);
return 0;
}

8.do-while循环

        在循环中do while循环使用最少,语法如:

do     

    语句;
while(表达式);

        while和for循环都是先判断,条件满足的情况下才会进入循环,执行循环语句,如果不满足就退出循环。

        而do while 循环则是先进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

        do while循环的执行流程:在do while循环中先执行图上的“语句”,执行完语句,再去执行“判断表达式”,判断摆到是结果!=0,则循环继续,执行循环语句;判断表达式结果如果==0,则循环结束。

        所以在do while语句中循环体是至少执行一次的,这是do while循环比较特殊的地方。

        代码示例:使用do while打印1-10的数字:

#include<stdio.h>
int main()
{
    int i=1;
    do
    {
        printf("%d ",i);
        i++;
    }while(i<=10)
return 0;
}

9.break和continue

             break  ——

                 其实和while循环中的break一样,for循环中的break也是用于终止循环到,不管循环还需要多少次,只要执行到了break,循环就彻底终止。

                例如代码: break的作用的永久终止循环,未来我们在某个条件发生的时候,不想继续循环的时候就可以用break来执行终止。

#include<stdio.h>
int main()
{
    int i=1;
    for(i=1;i<=10;i++)
    {
        if(i==5)
            break;
        printf(“%d ”,i);
    
    }return 0;
}

运行结果为:1  2  3  4

             continue  ——

                       在for循环中contiue的作用是跳过本次循环中continue后的代码,直接去循环的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用continue来实现。

                        代码示例:

#include<stdio.h>
int main()
{
    for(int i=1;i<=10;i++)
    {
        if(i==5)
            contnue;
        printf("%d ",i);
    }return 0;
}

               : do while中的break和continue和while中几乎一模一样.

10.语句的嵌套

               前面讲了三种循环while,do while,for,这三种循环往往会嵌套在一起才能更好的解决问题,就是我们所说的循环嵌套

                代码示例:这是一个要从100~200之间找出素数的代码,使用了嵌套。

#include<stdio.h>
int main()
{
    int i=0;
    for(i=100;i<=200;i++)//找到100-200之间的数字
    {
        int j=0;
        int flag=1;//假设素数是i
        for(j=2;j<i;j++)//使用除了1和自身之外的数字试着除
        {
            if(i%j==0)//如果被整除 证明不是素数
            {
                flag=0 ;//等于0就不是素数
                break;//跳出循环
            }
        }
        if(flag==1)//等于1就是素数
            printf("%d ",i);
    }
    return 0;
}

11.goto语句

                C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到设置好的标号处。

                代码示例:使用goto语句和跳转标号实现了跳过语句。

#include<stdio.h>
int main()
{
    printf("hehe\n");
    goto next:
    printf(“haha\n”);


    next:
    printf("跳过了haha的打印\n");
    return0;
}

        注意:goto语句如果使用不当,就会导致在函数内部随意跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用;但是goto语句也不是一无是处,在多层循环的代码中,如果想要快速跳出,使用goto语句就非常方便。

        示例:

for(...)
{  
  for(...)
    {
        for(...)
            {
                for(disaster)
                    goto error;    
            }  
    }error:
        //。。。。。。
}

                本来for循环想提前退出需要使用break,但是一个break不足以全部退出,所以在这种情况下我们使用goto语句就会更加快捷。


12.利用分支循环做小项目

举例一个通过分支循环写的猜数字强制关机的小游戏。

//void game()
//{
//	int input = 0;
//	int ret = rand() % 100 + 1;
//	printf("请输入您的数字:>\n");
//	int count = 5; // 错误次数计数器
//	while (count > 0)
//	{
//		scanf("%d", &input);
//		if (input < ret)
//		{
//			printf("猜小了,还有%d次机会\n", count - 1);
//		}
//		else if (input > ret)
//		{
//			printf("猜大了,还有%d次机会\n", count - 1);
//		}
//		else
//		{
//			printf("猜对了,答案为:%d\n", ret);
//			break;
//		}
//		count--;
//		if (count == 0)
//		{
//			printf("五次输入错误,程序强制关闭。\n");
//			system("shutdown /s /t 0");
//		}
//	}
//}
//
//void menu()
//{
//	printf("*************************\n");
//	printf("********* 1.play ********\n");
//	printf("********* 0.gun  ********\n");
//	printf("*************************\n");
//}
//
//int main()
//{
//	int input = 0;
//	srand((unsigned int)time(NULL));
//	do
//	{
//		menu();
//		printf("请选择:>");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			game();
//			break; // 添加break语句以退出switch语句
//		case 0:
//			printf("退出游戏\n");
//			break;
//		default:
//			printf("输入错误,重新输入\n");
//			break; // 添加break语句以退出switch语句
//		}
//	} while (input != 0); // 修改退出条件为输入0
//	return 0;
//}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值