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
对于有序数组中查找内容,我们可以使用二分查找法
二分查找的原理:
- 首先,从数组的中间元素开始搜索。
- 如果中间元素正好是要查找的元素,则搜索过程结束。
- 如果某一特定元素大于中间元素,则在数组的右半部分继续搜索。
- 如果某一特定元素小于中间元素,则在数组的左半部分继续搜索。
- 重复以上步骤,直到找到目标元素或者搜索范围为空(即找不到目标元素)。
#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;
}