do while循环以及一些题目

简介: do while循环以及一些题目

一 do while语句


1 特点


do while和其他语句比较起来有个特点 在判断条件之前首先要执行一次


2 结构


do
  {
  } while (true);


3 代码


使用do while语句打印1~10


int main()
{
  int i = 1;
  do
  {
    printf("%d\n", i);
    i++;
  } 
  while (i<=10);
  return 0;
}


拓展


如果在printf前面使用continue会出现什么样的状况 这是为什么 continue的作用是什么?


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int i = 1;
  do
  {
    continue;
    printf("%d\n", i);
    i++;
  } 
  while (i<=10);
  return 0;
}


如果写出上面一段代码的话 程序会进入死循环并且最终崩溃

要理解这一点我们首先要理解continue的作用

continue:会跳过下面的语句 并且进入下一个判断条件的循环判断部分


二 题目


1 写出求n的阶乘 (n=10)


题目分析:我们可以在草稿纸上做出以下分析

n的阶乘最后一个数字一定是n

n的阶乘前面一个数一定是上面一个数字的阶乘

则我们可以写出以下代码

使用for循环来表示最后一个数字n

设定一个数字ret来表示上面一个数字的阶乘

int main()
{
  int i = 1;
  int ret = 1;
  for ( i = 1; i < 11; i++)
  {
    ret *= i;
  }
  printf("%d\n", ret);
  return 0;
}


题目完成 输出结果:3628800


2 写出1!+2!+3!+…n!


题目分析:我们上面已经实现了n的阶乘的算法 要实现这个算法我们只需要设置一个标识符变量sum将它们相加即可

代码如下


int main()
{
  int n = 0;
  int sum = 0;
  int i = 1;
  int ret = 1;
  scanf("%d", &n);
  for (i = 1; i <= n; i++)
  {
    ret *= i;
    sum += ret;
  }
  printf("%d\n", sum);
  return 0;
}


3 在一个有序数组中查找一个数


分析题目:有序数组 也就是按照顺序排列

(顺序)

说明前面的数字一定比后面的数字小

后面的数字一定比前面的数字大


1 那么我们就可以设计left和right两个数

2 通过这两个数来形成一个中间数mid

3 再用mid和我们要寻找的数来比较大小

4 如果mid大于我们要找的数字就可以将right赋值为mid-1(关键字一定再mid的左边)

5 left同上

6 循环上面几步即可


代码如下

int main()
{
  //初始化数组 左右以及中间变量
  int k = 7;
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int sz = (sizeof(arr)) / (sizeof(arr[0]));
  int left = 0;
  int right = sz-1;
  int mid = 0;
  scanf("%d", &k);
  while (left <= right)
  {
      mid = (left + right) / 2;
    if (k < mid)
    {
      right = (mid - 1);
    }
    else if (k > mid)
    {
      left = (mid + 1);
    }
    else 
    {
      printf("找到了 要找的数字的下标是%d", mid);
      break;
    }
  }
  if (left>right)
  {
    printf("不存在此数字");
  }
  return 0;
}


4 编写代码 演示字符从两端移动向中间汇聚


分析题目 和上一题一样 只要我们找到左右下标 然后慢慢像中间汇聚

每次移动一次变化两个字符

到最后的时候如果left>right则结束循环

则有以下代码


int main()
{
  //初始化数组
  char arr1[] = "hello  world!!!";
  char  arr2[] = "###############";
  //初始化left right
  int left = 0;
  int right = strlen(arr1) - 1;
  //进入循环操作
  while (left<=right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    left++;
    right--;
    // Sleep需要大写
    printf("%s\n", arr2);
    Sleep(1000);
    system("cls");
  }
  printf("%s\n", arr2);
  return 0;
}


以上有几个注意点

1 sleep的s需要大写 不然会运行错误

2 要在最后打印一个arr2 不然上面会被cls清理屏幕

相关文章
|
18天前
质数类判断方法(蓝桥杯,循环分支题型)
质数类判断方法(蓝桥杯,循环分支题型)
|
10月前
|
算法
LeetCode 37 解数独 循环+回溯算法
LeetCode 37 解数独 循环+回溯算法
42 0
剑指offer_递归与循环---斐波那契数列
剑指offer_递归与循环---斐波那契数列
50 0
剑指offer_递归与循环---矩形覆盖
剑指offer_递归与循环---矩形覆盖
63 0
|
机器学习/深度学习
剑指offer_递归与循环---变态跳台阶
剑指offer_递归与循环---变态跳台阶
48 0
剑指offer_递归与循环---跳台阶
剑指offer_递归与循环---跳台阶
43 0
|
存储 Java C++
力扣题目-两数相加(迭代递归,常用3种语言实现)
力扣题目-两数相加(迭代递归,常用3种语言实现)
LeetCode 1502. 判断能否形成等差数列
如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
86 0
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
91 0
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)