C语言学习笔记[26]:循环语句do...while①

do...while语句

do...while的语法格式

do
    循环语句;
while(表达式);

用do...while语句实现打印0~10

#include <stdio.h>

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

    return 0;
}

do...while是先进行一次循环以后,再进行判断的 

do...while语句中的break

#include <stdio.h>

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

    return 0;
}

do...while语句中的break用于结束循环 

do...while语句中的continue

#include <stdio.h>

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

    return 0;
}

do...while语句中的continue用于跳过此次循环中continue后面的代码,并直接进行下一次循环的判断。 

因此上述代码由于跳过了i++,所以只能打印1 2 3 4后进入死循环

while循环、for循环、do...while循环的练习

我们学习了while循环、for循环以及do...while循环,我们现在对他们进行一些练习

计算n的阶乘

#include <stdio.h>

int main()
{
    int n = 0;
    int i = 0;
    int a = 1;
    printf("输入n的值,从而计算n的阶乘");
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
    {
        a *= i;
    }
    printf("%d的阶乘为%d", n, a);
    return 0;
}

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

//代码1
int main()
{
	int n = 1;
	int ret = 0;
	do
	{
		int sum = 1;
		int i = 1;
		do
		{
			sum *= i;
			i++;
		} while (i <= n);
		ret += sum;
		n++;
	} while (n <= 10);
	printf("%d\n", ret);
	return 0;
}
// 代码2
int main()
{
	int n = 1;
	int sum = 1;
	int ret = 0;
	do 
	{
		sum = n * sum;
		ret = ret + sum;
		n++;
	} while (n <= 10);
	printf("%d\n", ret);
	return 0;
}

代码1内层循环每次都从1!开始重新计算,但是我们已知 n!=(n-1)!*n,我们可以在计算阶乘的时候直接进行相加,因此可以写出代码2

在一个有序数组中查找具体的某个数字n

对于有序数组中查找内容,我们可以使用二分查找法

二分查找的原理:

  1. 首先,从数组的中间元素开始搜索。
  2. 如果中间元素正好是要查找的元素,则搜索过程结束。
  3. 如果某一特定元素大于中间元素,则在数组的右半部分继续搜索。
  4. 如果某一特定元素小于中间元素,则在数组的左半部分继续搜索。
  5. 重复以上步骤,直到找到目标元素或者搜索范围为空(即找不到目标元素)。
#include <stdio.h>

int main()
{
    //arr是未知的
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    int f = 0;
    printf("输入需要查找数字:\n");
    scanf("%d", &f);
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;
    int right = sz - 1;
    int mid = 0;
    do
    {
        mid = (left + right) / 2;
        if(arr[mid] == f)
        {
            printf("找到了,位置为:arr[%d]\n", mid);
            break;
        }
        else if(arr[mid] < f)
            {
                left = mid + 1;
                continue;
            }
            else
            {
                right = mid - 1;
                continue;
            }
    } while (left <= right);
    if(left > right)
        printf("没有找到\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值