初识c语言————新手小白学习c语言的第五天————do~while循环语句(上)

今天我们要学的是c语言中的分支和循环语句_do~while循环语句(上)


目录:

一.do~whiile语句的语法形式

二.do~while语句的特点

三.break和continue在do~while语句中的作用

四.练习


下面让我们正式学习c语言中的分支和循环语句_do~while循环语句(上)

 一.do~while语句的语法形式

   在第四天我们的学习中,我们知道了while循环的三个必要条件是:初始化,判断,调试。do~while循环同时也需要这三个条件,但是它的条件的放置位置可与while循环天差地别,下面是do~while循环的语法形式:

int a=0;//初始化
do
{
   printf("%d",a);
   a++;//调试
}
while(a<=10);//判断

   如图所示,do~while循环中的判断放置在了最后,这是与while循环的最大的不同

二.do~while语句的特点 

   相比于while循环语句(先判断再执行循环),do~while循环时先进行循环然后再判断 ,这导致do~while循环使用的局限性非常大,所以一般我们很少见到

三.break和continue在do~while语句中的作用

   break和continue在do~while语句中的作用基本一致,最重要的还是流程变了

   在上面的那个图片中stmt是循环语句,expr是判断

四.练习

   1.计算n的阶乘

#include <stdio.h>

int main()
{
   int a;
   int b=1;
   int n;
   scanf("%d",&n);
   for(a=1;a<=n;a++)
   {
     b=b*a;
   }
   printf("%d",b);
   return 0;
}

   代码解析:

1.<stdio.h>是有关于printf和scanf函数的头文件,所以要提前声明该头文件

2.n的阶乘是指:从1到n之间所有数之间的乘积

3.定义a=1用来进行1~n之间的乘积的计算

4.定义b=1为每次的乘法计算提供储存位置

5.b=b*a用来储存每次a与a的乘积的计算

   假设n的值为2,则程序结果为

   2.计算1!+2!+····+10!

#include <stdio.h>

int main()
{
   int a;
   int c;
   int sum=0;
   for(c=1;c<=10;c++)
   {
     int b=1;
     for(a=1;a<=c;a++)
     {
     b=b*a;
     }
     sum=sum+b;
   }
   printf("%d",sum);
   return 0;
}

   代码解析:

1.<stdio.h>是有关于printf函数的头文件,所以要提前声明该头文件

2.c的作用是执行每次阶乘的递进

3.a的作用是计算每次递进后的阶乘的结果

4.b的作用是储存每次递进后的阶乘的结果

5.sum的作用是储存每次阶乘相加的结果

   程序结果为

   3.在一个有序数组中查找具体的某一个数字 (讲解二分查找)

   注意:有序,具体,二分法(不断切割)

   非二分法:

#include <stdio.h>

int main()
{
  int num[]={1,2,3,4,5,6,7,8,9,10};
  int n=sizeof(num)/sizeof(num[0]);
  int a;
  int b;
  scanf("%d",&b);
  for(a=0;a<n;a++)
  {
    if(b==num[a])
    {
     printf("%d",a);
     break;
    }
  }
  if(a==10)
  printf("不存在");
  return 0;
}

   代码解析:

1.size(num)/size(num[0])的作用是求出非字符数组中的元素的个数,如果是数组元素可以直接用strlen函数即可

2.a==11说明不存在的原因是:for循环中是先初始化再判断,再执行语句,最后调试,其中再最后一次调试后a的值永远为11

3.这个非二分法是通过将num[a]与b不断遍历比较而得出所求元素的位置,比较复杂

4.a<n因为数组的下表是从零开始的

   程序结果为:

   当输入9:

   当输入99:

   二分法:

#include <stdio.h>

int main()
{
  int num[]={1,2,3,4,5,6,7,8,9,10};
  int n=sizeof(num)/sizeof(num[0]);
  int left=0;
  int right=n-1;
  int mid=(left+right)/2;
  int cai;
  scanf("%d",&cai);
  while(left<=right)
  {
   if(num[mid]<cai)
      {
       left=mid+1;
       mid=(left+right)/2
      }
   if(num[mid]>cai)
      {
       right=mid-1;;
      mid=(left+right)/2
      }
   if(num[mid]==cai)
    {
     printf("%d\n猜对了\n",mid);
     break;
   }
  }
   if(left>right)
    printf("没找到,不存在\n");
   return 0;
}

   代码解析:

1.二分法求数的位置是主要根据数组的左侧(left)和右侧(right)和中间(mid)的轮回替换来实现的。

2.sizeof(num)/sizeof(num[0])用来计算数组的大小

3.mid=(left+right)/2;其中mid是中部,大小为左侧和右侧下标之和

4.当(num[mid]<cai)那么说明我们要猜的数再这个原数组中间的右边,因为这个是数组是有序数组,所以我们需要重新缩小距离,重新求得left和mid的值

5.当(num[mid]>cai)那么说明我们要猜的数再这个原数组中间的左边,因为这个是数组是有序数组,所以我们需要重新缩小距离,重新求得right和mid的值

6.其中right和left的值为mid+1或mid-1是因为mid的值本来不等于要猜的数字,所以我们需要加减1来跳过这个数字

7.只有left<=right的时候执行的循环才有效,因为left的值按道理要小于right的值,除非猜数已经实现了一个轮回

程序结果为:

 当输入8时:

当输入11时:


明天我们要学的是c语言中的分支和循环语句_do~while循环语句(中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值