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;
}