c语言循环语句(附带习题)

简介: if 语句,关系操作符,逻辑操作符,switch语句,while循环,for循环,do-while循环,循环的嵌套,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~

相关文章
|
1月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
71 5
|
4月前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
54 2
【C语言】循环语句
|
2月前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
218 88
|
1月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
40 6
|
1月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
1月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
1月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
17 0
|
1月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
2月前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
1月前
|
编译器 C语言 C++
【C语言】循环语句(语句使用建议)
【C语言】循环语句(语句使用建议)