c语言循环语句

目录

1、if 语句

判断是否为奇数?

练判断输入数字是0,还是正数或负数?

悬空else问题

2、关系操作符

3、逻辑操作符

判断是否是闰年?

短路求值

4、switch语句

输入1~7的数字,打印对应的星期几。

输入1~5,输出"工作日";输入6~7,输出"休息日"

5、while循环

while循环中的continue和break:

6、for循环

计算1~100之间3的倍数的数字之和

for循环中的continue和break:

7、do-while循环

输入一个正整数,计算这个正数是几位数?

do-while循环中的break和continue:

8、循环的嵌套

找出100~200之间的素数,并打印。

9、goto语句​​​​​​​


1、if 语句

//if语句的三种语法:


if(expression)         //只有一条语句的if语句
sentence;


if(expression)         //if...else...语句
sentence 1;            
else 
sentence 2;


if(expression 1)       //if...else if...语句
sentence 1;
else if (expression 2)
sentence 2;
......
else if(expression m)
sentence m;
else 
sentence n;

当表达式结果为真则语句执行,表达式为假则语句不执行(其中0为假,非0为真)
判断是否为奇数?
#include <stdio.h>
int main()
{
    int num = 0;
	scanf_s("%d", &num);
	if (num % 2 == 1)
		printf("%d是奇数\n", num);
		printf("你猜对啦\n");
return 0;
}

        这时就会发现不管输入的数字是多少“你答对啦”总是会出现,这是因为默认情况下if语句和else语句都只能控制一个语句,可以通过添加{}来解决if和else后多语句问题,具体代码如下

#include <stdio.h>
int main()
{
    int num = 0;
	scanf_s("%d", &num);
	if (num % 2 == 1)
       {
		printf("%d是奇数\n", num);
		printf("你猜对啦\n");
       }
return 0;
}

        同样的对于else来说也可以在其后增加{}来达到同样的效果

#include <stdio.h>
int main()
{	
    int num = 0;
	scanf_s("%d", &num);
	if (num % 2 == 1)
	{
		printf("%d是奇数\n", num);
		printf("你猜对啦\n");
	}
	else
	{
		printf("你猜错啦\n");
	}
		return 0;
}
练判断输入数字是0,还是正数或负数?
#include <stdio.h>
int main()
{
	int num = 0;
	scanf_s("%d", &num);
	if (num == 0)
	{
		printf("输入的数字是0\n");
	}
	else if (num > 0)
	{
		printf("输入的数字是正数");
	}
	else
	{
		printf("输入的数字是负数");
	}
		return 0;
}
	
悬空else问题
 //当if个数大于else个数时就会出现悬空else问题,具体情况如下:

//代码运行结果为空

#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)   //a != 1,表达式结果为假内部if...else...语句不执行
 {
    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;
}            

  综上所述,if语句中对于{}的运用是十分重要的,可以增强代码的可读性以及减少问题的发生。

2、关系操作符

C语言中运用比较的表达式,称为"关系表达式",里面使用的运算符就称为"关系运算符",主要有下面6个。

>   大于运算符

<   小于运算符

>=  大于等于运算符

<=  小于等于运算符

==  相等运算符

!=   不等运算符

注意!!! 相等运算符==与=是两个不一样的运算符,前者表示判断而后者表示赋值

可以通过将变量写在等号右边的位置来避免自己出错的可能

if(3 == a)  ...

同时:多个关系运算方法不可以连用。

a < b < c

应该采用这样的写法:

a < b && b < c

3、逻辑操作符

 !:逻辑取反运算符

const flag  //定义变量flag
if(!flag)   //当flag为假时执行语句printf("hehe\n")
{
printf("hehe\n");
}

 && :与运算符,同真则真

 || :或运算符,同假则假

判断是否是闰年?
//方法一
#include <stdio.h>
int main()
{
int year = 0;
scanf_s("%d",&year);
if(year %4 == 0 && year % 100 != 0)
    printf("是闰年\n");
else if(year % 400 == 0)
    printf("是闰年\n");

return 0;
}

//方法二
#include <stdio.h>
int main()
{
int year = 0;
scanf_s("%d",&year);
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
prinft("是闰年\n");
return 0;
}

短路求值

        仅根据左操作数的结果就能知道整个表达式的结果,不再对右表达式进行计算的运算称之为短路求值,具体解释如下:因为逻辑运算符的运算顺序是从左到右,对于&&而言如果左侧表达式值为假,那么就不需要运算右侧表达式,整个表达式结果为假;对于||如果左侧表达式值为真,那么就不需要运算右侧表示式,整个表达式结果为真。

4、switch语句

        除了if语句之外,C语言还提供了switch语句来实现分支结构。相比于多重的if...else if语句,它有更易用、可读性更好的优势。具体格式如下:

switch(expression)     //expression必须式整型表达式
{
case value1:           //value的值必须为整型常量表达式
    statement;
    break;
case value2:           //case和value之间必须有空格,且value之后为冒号:而非;
    statement;
    break;             //通过在case语句末尾加上break来实现跳出switch循环的目的
default:              //当为找到可以匹配的case时,就会执行default语句,一般情况下default位于                
    statement;        //switch语句末尾
    break;
}

switch语句中break的运用:

        break语句在switch语句中时十分重要的,能帮助switch实现真正的分支效果,当然break也不是每个case语句都得有,需要根据实际情况判断。下面通过两个练习来更好的根据实际情况判断break的使用时机。

输入1~7的数字,打印对应的星期几。

具体代码如下:

#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
    {
     case 1:
        printf("周一\n");
        break;

     case 2:
        printf("周二\n");
        break;

     case 3:
        printf("周三\n");
        break;

     case 4:
        printf("周四\n");
        break;

     case 5:
        printf("周五\n");
        break;

     case 6:
        printf("周六\n");
        break;

     case 7:
        printf("周日\n");
        break;

    default:
        printf("不存在\n");
        break;

    }
return 0;
}
输入1~5,输出"工作日";输入6~7,输出"休息日"
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;

    }
return 0;
}

5、while循环

C语言提供了3种循环语句,while循环就是其中一种。

while(expression)   //判断表达式expression为真时进行循环否则跳出循环
{
语句;
}
    
while循环中的continue和break:

//break的运用

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
            {
			break;                     //当i == 5 时循环全部结束,这时候输出结果为1 2 3 4
            }
        printf("%d\n", i);
		i++;
	}
return 0;
}



//continue的运用

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
            {
                continue;              //当i == 5时重新返回while(expression)处进行判断                
            }                           // 因为当i == 5时跳过了i++,所以i一直为5,死循环
        printf("%d\n", i);
		i++;
	}
return 0;
}

6、for循环

for(初始化;判断;调整)
{
语句
}
计算1~100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
    int i = 0;
    int sum = 0;
    int count =0;
    for (i = 1; i <= 100; i++)
    {
        if (i % 3 == 0)
        {
            sum += i;
            count++;
        }
    }
    printf("%d\n", sum);               //得到结果
    printf("总共有:%d个\n", count);    //判断一共有多少个满足条件的数
    return 0;
}



//更简单的写法
#include <stdio.h>
int main()
{
    int i = 0;
    int sum = 0;
    int count =0;
    for(i = 3;i <= 100 ;i+=3)
        {
        sum += i;
        count++;
        }
printf("%d\n",sum);
printf("总共有:%d个\n",count);
return 0;
}
for循环中的continue和break:
//break的运用

#include <stdio.h>
int main()
{
int i = 1;
for(i = 1;i<=10;i++)
{
    if(i == 5)
        break;                        //和while的break一样都是结束整个循环
    printf("%d",i);
}
return 0;
}

//结果为1 2 3 4 


//continue的运用
#include <stdio.h>
int main()
{
int i = 1;
for(i = 1;i<=10;i++)
{
    if(i == 5)
        continue;                 //相比于while中的continue直接跳到while(expression)处进行
    printf("%d",i);                //判断,for循环中的continue是跳转到循环的调整部分即i++处
}
return 0;
}
//结果为1 2 3 4 6 7 8 9 10

注意!!!   在进行多个for循环嵌套时,break只会结束当前for循环并不会结束上一级循环,即如果第一个for循环没有写break,第二个写break,则break之后跳转至第二个for循环处且调整部分的值仍会进行++或--等。

7、do-while循环

不同于while循环先判断再执行语句的形式,do-while循环时按照先执行后判断的形式进行的,一班do-while循环使用在循环体至少执行一次的场景下,所以较少一些。

do
{
语句;
}while(expression);   //这里的while需要加;
输入一个正整数,计算这个正数是几位数?
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
int cut = 0;
do
    {
    cnt++;
    n=n/10;
    }while(n);
printf("%d\n",cnt);
return 0;

}
do-while循环中的break和continue:

        do-while循环中的continue与break和while循环的作用几乎一模一样。

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




//continue的运用
#include <stdio.h>
int main()
{
int i = 1;
do
{
    if(i == 5)
        countinue;
    printf("%d",i);
    i++;
}while(i<=10);
return 0;
}

8、循环的嵌套

        已经学习过了while循环、for循环、do while循环,而这三种循环往往只有嵌套在一起才能更好的解决问题,我们称之为循环嵌套。

找出100~200之间的素数,并打印。

注:素数又称质数,只能被1和其本身整除的数字。

#include <stdio.h>
int main()
{
int i = 0;
for(i = 100;i<=200;i++)    //循环产生100~200的数字
{
    int j = 0;                 //初始化j,使得每次大循环结束后j的值都会被初始化
    int flag = 1;              //每次在内置for循环结束后flag就会被初始化为1,即开始时假设i为素数
    for(j = 2;j<i;j++)         //循环产生2~i-1之间的数字
    {
         if(i%j == 0)          //判断i是否是能被j整除    
         {    
             flag = 0;         //i不能被j整除时flag的值被赋值为0,同时break跳出内置for循环(含j)                          
             break;          
         }
    }
    if(flag == 1)                //如果没有任何j可以整除i那么最开始的flag的值仍等于1不会被重                    
                                 //新赋值,如果有j可以整除i那么在内置for循环中flag被重新赋值为0
                                 //不满足if(flag == 1) 不会打印i,最后进行i++开始新一轮大循环
      {
       printf("%d",i);
      }
}
return 0;
}

9、goto语句

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

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


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


//结果为:
//hehe
//跳过了haha的打印

        goto语句如果使用不当,就会导致在函数内部随意乱跳,所以一般不建议使用,但是当想要从多层循环中快速跳出的话,goto语句会显得很方便。

for(...)
{
    for(...)
        {
        for(...)
            {
            if(disaster)            //例子中的意思时当运行结果有问题时跳出循环到外面的error
            goto error;
            }
            
        }

}
error:
//.....

相比于使用多个break时在循环中一层一层的跳出,直接使用goto语句显得很方便。

~over~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值