请问循环要循环多少次?
#include int main() { int i = 0; int k = 0; for(i =0,k=0; k=0; i++,k++) k++; return 0; }
答案是零次!
for里面的判断部分他变成了赋值,但是赋值结果是0,所以是假,因此for不执行
1.1 do while
1.1.1 语句的语法:
do 循环语句; while(表达式);
先执行循环语句然后再判断表达式是否成立
1.1.2 语句的特点:
循环至少执行一次!使用的场景有限,所以不是经常使用
1.1.3 do while循环中的break和continue:
同我们以前说的for和while里的是一样的都是永久结束循环和跳过当前循环
练习:
1. 计算 n的阶乘。
#include <stdio.h> int main() { int n = 0, i = 1, sum = 1; scanf("%d", &n); for (i = 1; i <= n; i++) { sum = i * sum; } printf("%d", sum); return 0; }
2. 计算 1!+2!+3!+……+10!
#include <stdio.h> int main() { int j = 0, SUM = 0; int sum = 1; for (j = 1; j <= 10; j++) { sum = j * sum; SUM += sum; } printf("%d", SUM); return 0; }
3. 在一个有序数组中查找具体的某个数字n。(二分查找/折半查找)
#include <stdio.h> 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 reght = sz - 1; //右下标 while (left <= reght) { int mid = left + (reght - left) / 2; if (arr[mid] < k) { left = mid + 1; } else if (arr[mid] > k) { reght = mid - 1; } else { printf("目标已找到!下标是%d", mid); break; } } if (reght < left) { printf("找不到了!"); } return 0; }
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include <string.h> #include <Windows.h> #include <stdio.h> #include <stdlib.h> int main() { char arr1[] = { "welcome to my world!" }; char arr2[] = { "####################" }; int left = 0; int reght = strlen(arr1) - 1; while (left<=reght) { arr2[left] = arr1[left]; arr2[reght] = arr1[reght]; printf("%s\n", arr2); Sleep(1000); // ms system("cls"); left++; reght--; } printf("%s\n", arr2); return 0; }
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
#include <stdio.h> int main() { char passwords[20] = { 0 }; for (int i = 0; i < 3; i++) { printf("请输入密码!\n"); scanf("%s", passwords); if(strcmp(passwords, "abcd") == 0) { printf("密码正确!"); break; } else { printf("密码输入错误,请重新输入!\n"); } if (i == 3) // for是调整完再判断 所以最后一次的i为3 { printf("三次密码均错误,退出程序"); } } return 0; }
2. goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
goto语句无法跨函数跳跃
适用于以下情况 for(...) for(...) { for(...) { if(disaster) goto error; } } … error: if(disaster) // 处理错误情况