电子领域吧 关注:55贴子:208
  • 17回复贴,共1

浅论 循环(while)

只看楼主收藏回复

在生活中,往往会重复性的做某些事情,某些相像的事情。
在程序中,也会有这种情况。比如在商店计算货款的程序,需要反复的执行“单价*数量”,累加求和等。这种重复性的东西,就被称之为循环


1楼2015-04-02 11:29回复
    在C语言中,while是最基本的循环结构了,他和if很相似
    while( 表达式 )
    {
    语句组;
    }
    首先,他要判断表达式的值,如果值为真。那就执行语句,如果为假,那就不执行,
    唯一不同的一点,那就是在执行了语句之后,又重新判断表达式的值,再执行语句
    一直到表达式的值为假,那就不执行了
    这里留下一个问题,如果你已经学过了,那请不要嗤之以鼻,因为这是留给新学者的‘
    表达式又不会变,那为什么表达式的值会从真变成假呢?
    来一个简单的程序来回答这个问题
    main()
    {
    int i=1;
    while(i<5)
    {
    printf("*****\n");
    i++;
    }
    }
    按照刚刚介绍的while语句的执行顺序,想一想,这应该输出的什么东西吧
    如果你明白了,那就动手改一改,输入一个数,就把这个数输出多少次,试试吧


    3楼2015-04-02 11:41
    回复
      当然,并不是每一次循环都有固定的循环次数,比如说,输入一列数,以0结束,输出数的个数
      像这种没有固定的循环的次数,但是还是有明确的退出循环的条件
      int a,i=1;
      scanf("%d",&a);
      while(a!=0)
      { //只要输入的不是0 ,就继续输入
      scanf("%d",&a);
      i++;//每接受一个数,i 就加一个
      }
      那么最后输出 i 就是输入数的个数了
      当然,这个很简单
      再来一个,输入一列数,以0结束,输出这些数的最大值
      int a,max;
      scanf("%d",&a);
      max=a; //最开始你只输入了一个数,那这个数肯定是最大的那个
      while(a!=0)
      { //只要输入的不是0 ,就继续输入
      scanf("%d",&a);
      if(max<a)
      { //把新接受的数和曾经的最大值比较,如果新接受的数比较大
      max=a; //那新接受的数就是最大值
      }
      printf("最大值是:%d \n",max);
      }


      6楼2015-04-02 16:38
      收起回复
        感谢你的while语句


        IP属地:广东来自Android客户端7楼2015-04-06 12:04
        收起回复
          讲的不赖,我能分享到QQ空间去吧?


          IP属地:北京来自Android客户端8楼2015-04-24 06:51
          收起回复
            while和if,除了执行顺序以外,其他的都是一样,while是判断—>执行—>判断,而if是判断—>执行—>if结束,
            需要注意的一点是,while()后面是没有分号的,不过呢,while后面可以跟一个语句快或者一个语句,语句快就是花括号括起来的嘛,而如果跟一个语句的话,语句结束的标志是分号,有的时候会跟上一个空语句,可不要就以为这就错了,空语句就是只有一个分号的嘛,
            int i =0
            while(i++<10000);
            而这样写有什么用呢,
            很简单的问题,没一个语句的执行都是需要时间的,循环执行一个空语句,可以照成一种等待、延迟的效果。
            还有一种可能,那就是循环体被简写到循环里面了,呃,这里的循环里面不是指循环体里面
            比如说
            main()
            {
            int i,a;
            scanf("%d",&a);
            i=0;
            while(i*i++<a);
            printf("%d ", i-1);
            }
            如果有喜欢动脑的朋友,可以想一想这个程序是干嘛的
            在这里呢。就把循环体里面的i++,融合到判断条件里面去了,当然,绝不建议这个样去写
            这里的循环体融合到判断条件里面去了,所以只有用一个分号来表示这个循环体为空
            当然了 while(i8i++<a){ } 也行
            重点不是这个,我是想说明一点,有时候,while语句后面会跟一个分号,但是这个分号不是while的分号,而是说明while的循环体是一个空语句
            嗯,这样子是不好理解
            printf("");
            我们输出的时候,有一个输出语句,后面有一个分号,这表示输出语句结束了,这个分号是属于printf()的,但是while();后面的这个分号,不是属于while的,而是属于while的循环体的,
            就这个意思,至于之前那个程序也很简单,就是求一个数的平方根的整数部分


            9楼2015-05-01 17:24
            回复
              main()
              {
              int i=1,s=0;
              do
              {
              s+=i++;
              }while(i<=5);
              }
              这是求1到5的和,do后面一直到while的地方,就是循环的循环体了,
              一样的,如果只有一个句,可以省略大括号
              do
              s+=i++;
              while(i<=5);
              当然,如果你觉得换行太麻烦,不换行也是对的
              do s+=i++; while(i<=5);
              不过呢,s+=i++这句话是有分号的,可别省略了,
              可以不换行,但还是要用空格把他们分开,不要连在一起了,
              不过呢,还是建议写代码的时候,换行并加上大括号
              需要注意的一点是,这里的while后面有分号
              这个分号就是属于do...while();的了
              while循环又被称为 当型循环,意为,当条件成立就继续循环,
              do...while(); 被称为直到型循环,就是直到条件 不 成立,就结束循环
              没事,这个不用记,考试不考,编程不用的
              他们的区别在于,
              while是 判断->执行->判断
              do...while();是 执行->判断->执行
              区别就来了,
              while是先判断执不执行
              do...while();是先执行,再判断要不要继续执行
              其实嘛,这点区别和没有没啥区别
              不过因为do...while();的这个特点,还真有个实在的用法
              main()
              {
              char a;
              do
              scanf("%c",&a);
              while(a<='z'&&a>='a');
              }
              限定只能输入小写字母,如果不是的话,你就一直输入吧
              do...while();写程序的时候用的不多,所以这就简单的提一下,
              有兴趣的,可以把之前while的那个几个程序,全部用do...while();写一遍


              11楼2015-05-01 17:46
              收起回复