C语言循环结构

循环结构
一,知识点
   1 for循环:
    for (循环控制变量初始化; 循环终止条件; 循环控制变量增量)
    {
      循环体
    }
    循环执行步骤:第一,先进行循环控制变量初始化;
           第二,执行循环终止条件,如果判断结果为真,则进入第三步;如果为假则循环终止并退出;
           第三,执行循环体;
           第四,执行循环控制变量增量,转入第二步;
    注:for循环()中的三部分除了循环终止条件外,其他两部分都可以省略,但标准的for循环中,应该把循环控制变量的初始化,增量都放在()当中,并且在循环体中绝对不应该更改循环控制变量;
  2.while:
    循环控制变量初始化
    while(循环终止条件)
    {
      循环体
      循环控制变量增量
    }
    循环执行步骤:第一,先进行循环控制变量初始化(在while之前);
           第二,判断循环终止条件,如果判断结果为真,则进入第三步;如果为假则不执行循环体;
           第三,执行循环体;
           第四,执行循环控制变量增量,转入第二步;
  3 do while:
    循环控制变量初始化
    do
    {
      循环体
      循环控制变量增量
    }while (循环终止条件);
    循环执行步骤:第一,先进行循环控制变量初始化(在do while之前);
           第二,执行循环体;
           第三,执行循环控制变量增量;
           第四,判断循环终止条件,如果判断结果为真,则返回第二步;如果为假则直接退出循环;
   4 总结:不管哪种循环结构,都不能缺少循环控制条件初始化,终止条件,循环控制变量增量,循环体这四部分;while循环是先判断后执行,do while循环是先执行后判断,等循环一次之后,其实都是一样的;
   二,如何使用
   1,for循环
   例:杨老师6班测试
   【题目描述】
输入n,输出一个n*n的正方形,正方形由符号c1和c2组成,正方形的四条边和对角线由c1组成,其余部分由c2组成。

#include<stdio.h>
int main()
{
    int n,m,i,j,k;
    char b,c;
    scanf("%d %c %c",&n,&b,&c);
    m=n+1;
    for(i=1; i<=n; i++)
    {
        if(i==1||i==n)
        {
            for(j=1; j<=n; j++)
            {
                printf("%c",b);
            }
            printf("\n");
        }
           else if(i!=1&&i!=n)
            {
                for(k=1; k<=n; k++)
                {
                    if(k==1||k==n||k==i||i+k==m)
                    {
                        printf("%c",b);
                    }
                    else
                        printf("%c",c);
                }
                printf("\n");
            }
        }
        return 0;
    }    

利用for循环来控制行和列的输出;进而达到题目要求;
2,while循环
例,最短距离的点。
描述
给出一些整数对,它们表示一些平面上的坐标点,给定一个点,求所有那些点到该点最短距离的点。结构为:第一个整数对为所给定的点,后面的整数对为所有其他的点。

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c,d,x,y,n=0,e,max=99999999;
    scanf("%d %d",&a,&b);
    while(~scanf("%d %d",&c,&d))
    {
        e=sqrt((a-c)*(a-c)+(b-d)*(b-d));
        if(max>e)
        {
            max=e;
            x=c;
            y=d;
        }
    }
    printf("%d %d",x,y);
    return 0;
}

这道题没给出输入几组数据,就可以用while循环来解决,对于此类问题不知道循环结束的条件,就可以用while循环语句,在通过break结束,或者continue来继续执行;
3,do while 循环

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

输入:11
运行结果:11
虽然不满足循环条件,还是可以执行一次。
三,感悟
1,尽量使循环控制变量的取值采用半开半闭区间写法从功能上看,虽然半开半闭区间写法和闭区间写法的功能是完全相同的,但相比之下,半开半闭区间写法更能够直观地表达意思,具有更高的可读性。
2,尽量使循环体内工作量达到最小化,for 循环随着循环次数的增加,会加大对系统资源的消耗。如果你写的一个循环体内的代码相当耗费资源,或者代码行数众多(一般来说循环体内的代码不要超过 20 行),甚至超过一显示屏,那么这样的程序不仅可读性不高,而且还会让你的程序的运行效率大大降低。
3,避免在循环体内修改循环变量,在 for 循环语句中,我们应该严格避免在循环体内修改循环变量,否则很有可能导致循环失去控制,从而使程序执行违背我们的原意
4,尽量使逻辑判断语句置于循环语句外层,一般情况下,我们应该尽量避免在程序的循环体内包含逻辑判断语句。当循环体内不得已而存在逻辑判断语句,并且循环次数很大时,我们应该尽量想办法将逻辑判断语句移到循环语句的外层,从而使程序减少执行逻辑判断语句的次数,提高程序的执行效率。
5,尽量将循环嵌套控制在 3 层以内,如果超过三个循环,这样程序的执行效率也会很低。因此,如果代码循环嵌套超过 3 层,建议重新设计循环。

猜你喜欢

转载自blog.csdn.net/qq_43627087/article/details/84594555