C_流程控制_循环 笔记

循环

for

1.格式

  for(1;2;3)

  {

       语句A;

       语句B;

  }

2. 执行流程(以一个例子来说明,序号代表一个语句)

#include<stdio.h>

 
int  main(void)
{
    int  i,sum;
    sum=0;

    for(①i=1;②i<=3;③++i)   //第一次循环:先执行①,再执行②。如果②成立,执行④,最后执行③。一次循环结束。
    {                        //第二次循环:

                               //先执行②(第二次循环不执行①),再执行②。如果②成立,执行④,最后执行③。第二次循环结束。……直到②不成立,则循环结束。继续执行⑤

    ④sum=sum+i;
    }

    ⑤printf("%d",sum);

     return  0;

}        

 

for循环中的执行顺序:

⑴先执行①,再执行②。如果②成立,执行④,最后执行③。一次循环结束。

⑵先执行②(第二次循环不执行①),再执行②。如果②成立,执行④,最后执行③。第二次循环结束。

……直到②不成立,则循环结束。继续执行⑤。

 

3.有穷性

循环必须具有有穷性,不能无限循环

 

4.范围问题

for默认只能控制一个语句,控制多个需用大括号括起来(if一样)

 

5.强制数据类型转换

①格式: (数据类型)(表达式\也可以是某个量)

②举例:

//将表达式的值(浮点数型)强制转换为整型

float  i;

(int) (i*0.9);

//将整型变量强制转换成浮点型

 int   i ;

 (float) (i);

③功能

将表达式的值强制转换为前面的数据类型

 

6.代码举例

//C_流程控制_求100内奇数和(方法一)
#include <stdio.h>

int main()
{
 int i;
 int sum=0;

 for(i=1;i<=100;i+=2)
 {
  sum=sum+i;  
 }
 printf("%d",sum);

 return 0;
}
//C_流程控制_求100内奇数和(方法二)
#include <stdio.h>

int main()
{
 int i,sum;
 sum=0;

 for(i=1;i<=100;++i)
 {
  if(i%2==1)    //若i是奇数,则sum+i
    sum=sum+i;  
 }

 printf("%d\n",sum);

 return 0;
}
//1/1+1/2+…+1/100的和
​#include <stdio.h>
 
int main()
{
     int i;
     float k,sum;
     i=0;
     k=0;
     sum=0;
 
     for(i=1;i<=100;++i)
     {
          k=1/(float)(i);  //由于i和1都是整型,所以需要强制数据类型转换
          //也可以写成 k=1.0/i;  
          sum=sum+k;
     }
     printf("%f",sum);
 
     return 0;
}        

 

7.试数技巧

①不要去想程序的目的,把自己当做计算机,一步步去试

②不要省略步骤

③要写整齐,有逻辑性

 

8.浮点型的存错所带来的问题

①原因

floatfouble都不能保证准确地存储一个值(并非所有值都不能准确存储,只是不能保证每一个都准确存储)

②举例

有一个浮点数x,如何判断x的值是否等于零

 if (x0.000001的绝对值<=0.000001)

      等于零

 else

      不等于零

②注意

循环中更新(自加或自减)的变量不能定义为浮点型,因为浮点型是一个非准确存储

 

9.多个for嵌套的流程【重难点】

(为方便表示,在此数字代表表达式,称123所在循环为大循环,称456所在循环为小循环)

  for(1;2;3)

          for(4;5;6)

          语句A;

  语句B;

执行顺序:

先执行1,再执行2,如果成立,则执行4(小循环开始)

执行完4后,执行5,若成立则执行语句A,然后执行6……直到2不成立,退出

退出小循环后执行3,接着执行2,若成立则继续进入第二个循环(步骤同上,再次退出小循环后继续执行3)……直到2不成立,退出大循环,所以循环结束,执行语句B

 

while

1.格式

  while(表达式)

       语句;

 

2.执行顺序

  先判断表达式,若为真,执行语句。然后继续判断表达式直到表达式不成立,退出循环

 

3.forwhile的比较

forwhile可以相互转换,但for的逻辑性更强

for(1;2;3)

{

    A;

}

等价于

1;

while(2)

{

    A;

    3;

}

 

do......while

1.格式

  do

  {

     语句;

  } while(表达式);

 

2.流程

执行语句

判断表达式,若成立则继续执行语句,不成立则退出循环(无论表达式是否成立,语句都至少要执行一次)

 

3.whilefor的比较

do......while......不等价于whilefor。因为若表达式不成立,whilefor都不执行语句,而do......while要执行一次

posted @ 2019-06-09 21:43  Logic_Q  阅读(286)  评论(0)    收藏  举报