C语言之总结篇——02——while



----------------------  ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------


说起while,很熟悉,她用到的地方很多。我们的很多程序都需要她。如花朵一般默默奉献自己的清香。
连续做俯卧撑20次,计算1+2+3+4....+n的和......。下面来慢慢的延伸一下。

      第一个问题:计算1+2+3+4....+n的和,题目不难


#include<stdio.h>

int main()

{

   int n =0;

   while (n <=0)

    {

        printf("请输入一个正整数:\n");

        scanf("%d", &n);

    }

   int sum =0;

   int number =0;

   while (number < n)

    {

        number++;

        sum += number;

    }

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

    return 0;

}


      我们来稍微延伸下。计算1-2+3-4+5.....+n的和,下面会附带部分分析过程。

#include<stdio.h>

int main()

{

        int n =0;

    //  判断n是否为正整数

   while (n <=0)

    {

        printf("输入一个正整数:\n");  

        scanf("%d", &n);

    } 

   int sum =0

   int current =0

   while (current < n) {

        current++;   

        // 如果是偶数,就减

       if (current %2 ==0) {

            sum -= current;

        }else {// 如果是奇数,就加

            sum += current;

        }

    } 

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

    return 0;

}


      是不是复杂点了。说起while大家一定不会陌生一道题目:
      耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这个叛徒:15人围坐一圈,从第一个开始报号:1、2、3、1、2、3.......,凡是报到”3“就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒,请找出它原来的序号。
这里说的是C语言,所以只能用C语言来做。


#define N13

#define LEN sizeof(struct person)

#include<stdio.h>

int main()

{

   int i, count;

   struct person

    {

       int number;

       struct person *next;

    };

   struct person *head, *p1, *p2;

    head = p2 =NULL;

   for(i =1; i<=N; i++)

    {

        p1=(struct person *)

        malloc(LEN);

        p1 -> number = i;

       if (head ==NULL)  head = p1;

       else  p2 -> next = p1;  p2 = p1;

        

    }

    p2 -> next = head;

    printf("\n退出圈子的人的原来序号是:\n");

   for (count =1; count<N; count++)

        

    {

        i =1;

       while( i !=3)

        {

            p1 = head;

            head = head -> next;

            i++;

        }

        p2 = head;

        printf("%3d", p2 -> number);

        p1 -> next = head = p2 -> next;

        free(p2);

    }

    printf("\n出卖耶稣的叛徒的原来序号是:\n%3d\n", head->number);

    return 0;

}



      这道题涉及的范围很广,牵扯到指针、指向函数的指针、for循环,说句实话我只知道原理,但是目前我还不能独自编写出来。如题我知道结果,知道如何计算,但是就是写不出来代码,很遗憾。但是我相信用不了多久我就能独自完成了。


       说起while,就不得不提另一个常用的循环结构了:for。我们都用过QQ吧,点开QQ有很多列表,而点开每个列表你可以在列表下面找自己的好友、同学...,这里就需要用到for循环了。当然这里只说一些很简单的,假如有4个列表,每个列表有6个好友。


#include <stdio.h>

int main()

{

    for (int i =1; i<=4; i++)

    {

        printf("好友列表%d\n", i);

        for (int j =1; j<=6; j++)

        {

            printf("    好友%d\n", j);

        }

    }

    

    return 0;

}


    

       这样我们是不是可以制作一些简单的列表了。一个问题,我们每个列表下好友不可能都相等,这该如何处理?


       说道循环结构,就不得不说到break和continue。总结下它俩的特点:

       break:在switch语句中,退出整个switch(选择结构)语句;在循环结构中,退出整个循环语句;它只对最近的循环结构有效                         (最近原则)。

       continue:在循环结构中,结束当前这次的循环体,进入下一次循环体;只对最近的循环结构有效(最近原则)。


#include<stdio.h>

int main()

{

   for (int i =0; i<10; i++) {

       if (i %2) continue;

       if (i ==8)break;

        printf("i=%d\n", i);

    }

    return 0;

}


附带一道简单题目。


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值