C语言学习日记——循环控制

目录

前言:

1 goto语句:

1.1一般形式

1.2使用goto语句和if语句构成的循环结构求1到100的整数和:

1.3逻辑流程图:

2 while语句:

2.1一般形式:

2.2使用while循环结构求1到100的整数和:

2.3逻辑流程图:

3 do   while语句:

3.1一般形式

3.2使用do  while循环结构求1到100的整数和:

3.3逻辑流程图:

4 while语句和do  while语句的比较:

5 for语句:

                   5.1一般形式

 5.2使用for循环结构求10000以内的回文数:

 5.3逻辑流程图:

6 break语句:

总结:



前言:

  循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。 

1 goto语句:

1.1goto语句为无条件转向语句,它的一般形式为

goto 语句标号(标识符)


语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,
其第一个字符必须为字母或下划线。不能用整数来作标号。例如:

goto label_1;

是合法的,

goto 123;

是不合法的。

结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程
序流程无规律、可读性差。但也不是绝对禁止使用goo语句。一般来说,有两种用途:
(1)与if语句一起构成循环结构。
(2)从循环体中跳转到循环体外,但要注意goto语句只能从本函数内跳转

1.2下面是使用goto语句和if语句构成的循环结构求1到100的整数和:

include <stdio.h>

void main()
{
    int i,sum = 0;
    i = 1 ;
    loop: if(i <= 100)
    sum = sum + i;
    i++;
    goto loop;
}
    printf("%d\n",sum);
}

 运行结果如下:

5050

1.3逻辑流程图:

2 while语句:

2.1while语句用来实现“当型”循环结构。其一般形式如下:

while(循环执行条件)
{
    循环体;
}

注意:保证while语句和“{ }”循环体之间没有其他语句,while语句后没有“;”
当表达式为非0值时,执行while语句中的内嵌语句,其特点是:
先判断表达式,后执行语句。

2.2下面是使用while循环结构求1到100的整数和:

#include <stdio.h>
void main()
{
    int i,sum = 0;
    i = 1;
    while (i <= 100)
    {
        sum=sum十i;
        i++
    }
    printf("%d\n”,sum);
}

运行结果如下:

5050


2.3逻辑流程图:

3 do   while语句:

do...while语句的特点是先执行循环体,然后判断循环条件是否成立

3.1do while语句一般形式为:
 

do
{
    循环体
}
while(循环执行条件);

 注意:do  while语句与“{}”循环体之间同样不可以有其他语句,与while语句不同的是,do while 语句中的while语句后面需要加上“;”

3.2下面是使用do  while循环结构求1到100的整数和:

include <stdio.h>
void main()
{
    int i,sum = 0;
    i =1;
    do
    {
        sum = sum + i;
        i++;
    }
    while(i <= 100);
    printf("%d\n",sum);
}

运行结果如下:

5050


3.3逻辑流程图:

4 while语句和do  while语句的比较:

 while 语句:

#include <stdio.h>
void main ()
{
    int sum = 0,i;
    scanf("%d"”,&i);
    while (i <= 10)
    {
        sum = sum + i;
        i++;
    }
    printf("sum=%d\n",sum);
}

 输出结果如下:

输入:i = 1
输出:sum = 55
输入:i = 11
输出:sum = 0

do  while语句

#include <stdio.h>
void main()
{
    int sum = 0,i;
    scanf("%d”,&i);
    do
    {
        sum = sum + i:
        i++;
    }
    while (i <= 10);
    printf("sum=%d\n",sum);
}

输出结果如下:

输入:i = 1
输出:sum = 55
输入:i = 11
输出:sum = 11

可以看到:当输人i的值小于或等于10时,二者得到结果相同。而当i>10时,二者
结果就不同了。这是因为此时对while循环来说,表达式为假(“i<=10”)时,一次也不执行循环体,而对do...while循环语句来说则要执行一次循环体。

可以得到结论:循环体相同时,当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,二者结果不相同。 

5 for语句:


5.1for语句的一般形式为

for(表达式1;表达式2;表达式3;)
{
    循环体;
}
for(循环变量赋初值;循环条件;循环变量增值)
{
    循环体
}

 注意:1 循环变量赋初值中 

for(int i = 0;语句2;语句3)

这种形式仅C11支持,C99,C88会编译报错。尽量使用以下形式。

int i = 0;
for ( i = 0; 语句2;语句3)

2 循环变量赋初值可以省略不写

3 循环条件省略不写(永远为真),循环结构将变成死循环。

4循环变量增值可以写在循环体内

for(语句1;语句2;++i)
{
    循环体
}

也可以写为:

for(语句1;语句2;)
{
    循环体;
    ++i;
}

 5.2下面是使用for循环结构求10000以内的回文数:

  1 #include<stdio.h>
  2 
  3 int main (void)
  4 {
  5     int i = 0;
  6     int k = 0;
  7     for(i = 1; i < 10000;++i)
  8     {
  9         int j = i;
 10         while(j != 0)
 11         {
 12             k = k * 10 + j % 10;
 13             j = j / 10;
 14         }
 15         if(k == i)
 16         {
 17             printf("%d ",i);                                                                                                                                                     
 18         }
 19 
 20         k = 0;
 21     }
 22     printf("\n");
 23     return 0;
 24 }
      

 注意:在这段代码中,k为参与循环的全局变量。在这行代码中

           k = k * 10 + j % 10;

 可以理解为:

           k(第二次循环) = k(第一次循环的残余) * 10 + j % 10;

 因此需要清理循环残余

 20  k = 0;

 或者将k定义为循环内的局部变量。对于定义在循环结构中的变量,每次循环结束后,系统将自动销毁该变量的存储空间,并在下一次循环开始时为变量重新开辟新的存储空间。

  1 #include<stdio.h>
  2 
  3 int main (void)
  4 {
  5     int i = 0;
  6   
  7     for(i = 1; i < 10000;++i)
  8     {
  9         int j = i;
 10         int k = 0;
 11         while(j != 0)
 12         {
 13             k = k * 10 + j % 10;
 14             j = j / 10;
 15         }
 16         if(k == i)
 17         {
 18             printf("%d ",i);                                                                                                                                                     
 19         } 
 20       
 21     }
 22     printf("\n");
 23     return 0;
 24 }
      

5.3if语句的逻辑流程图:

6 break语句:

break语句的一般形式为

break;

break语句不能用于循环语句和switch语句之外的任何其他语句中且只能跳出一层循环。对于跳出多层循环的情况可以使用goto语句,但不推荐。break语句用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。

例如:

float pi=3.14159;
for(r=1;r<=10:r++)
{
    area=pi *r*r;
    if(area > 100)
    {
        break;
    }
    printf("r=%f,area=%f\n",r,area);
}


程序的作用是计算r=1到r=10时的圆面积,直到面积area大于100为止。从上面的
for循环可以看到:当area>l00时,执行break语句,提前结束循环,即不再继续执行其
余的几次循环。

总结:

        循环语句主要由循环变量初始化语句循环执行条件语句使循环趋于结束的语句构成。对于三种常用的循环语句 while语句,do while语句和for语句,三者的工作效率基本相同。循环结构中的死循环常用于裸机开发中。定义变量时尽量不使用拼音作为标识符,以提高代码的复用性。在循环结束时,循环变量的值一定为循环条件初次为假的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值