一 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清理屏幕