for循环
语法
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分 ,用于初始化循环变量
表达式2为条件判断部分 ,用于判断循环时候终止
表达式3为调整部分,用于循环条件的调整
//while 缺点,间距过长,容易失误 #include<stdio.h> int main() { int i = 0;//初始化 while (i < 10)//判断 { i++;//调整 } return 0; }
#include<stdio.h> int main() { int i = 0; // 初始化 判断 调整 for (i = 1; i <= 10; i++) { printf("%d", i); } return 0; }
#include<stdio.h> int main() { int i = 0; //初始化 判断 调整 for (i = 1; i <= 10; i++) { if (i == 5) break;//1234跳出循环 //continue;1234678910, printf("%d", i); } return 0; }
for语句的循环控制变量
1.不可在for循环内修改循环表里,防止for循环失去控制
#include<stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i = 5)//这里禁止修改 printf("%d", i); printf("%d", i); } return 0; }
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法
#include<stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; for (i = 1; i <10; i++) { printf("%d", arr[i]); }
return 0; }
#include<stdio.h> int main() { for (;;)//判断省略,条件恒为真,死循环 { printf("hehe\n"); } return 0; }
//循环几次 0次 #include<stdio.h> int main() { int i = 0; int k = 0; for (i = 0, k = 0; k = 0; i++, k++)//赋值 k++; return 0; }
do...while()循环
do 循环语句;
while(表达式);
#include <stdio.h> int main() { //1-10 int i = 1;//1、创建变量 do { if (i == 5) break;//1,2,3,4 //continue 1.2.3.4死循环,跳过后面代码 printf("%d\n", i);//3. i++;//4 } while (i <= 10);//2. return 0; }
练习
//1. 计算 n的阶乘 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 0; int n = 0; int ret = 1; scanf("%d", &n);//100 for (i = 1; i <= n; i++) { ret = ret * i; } printf("ret =%d\n", ret); return 0; }
//2. 计算 1!+2!+3!+……+10! //方法 1 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 0; int n = 0; int ret = 1; int sum = 0; //1+2+6=9 for (n = 1;n <= 3; n++) { ret = 1;//不赋值,会变 for (i = 1; i <= n; i++)//产生1-n的数 { ret = ret * i;//将i累乘赋值给ret } sum = sum + ret; } //ret=1*1 //ret=1*1*2 //ret=1*1*2*3 printf("sum=%d\n", sum); return 0; } //方法二 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 0; int n = 0; int ret = 1; int sum = 0; //1+2+6=9 for (n = 1; n <= 3; n++) { ret = ret * n; sum = sum + ret; } printf("sum=%d\n", sum); return 0; }
//3. 在一个有序数组中查找具体的某个数字n //查找7 #include<stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 7; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]);//求数组长度 for (i = 0; i < sz; i++) { if (k == arr[i]) { printf("找到了,下标是:%d\n", i); break; } } if (i == sz) printf("找不到\n"); return 0; } //二分法查找算法、折半查找算法——复杂度-log以2为底的n #include<stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int k =7; int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数 int left = 0;//左下标 int right = sz - 1;//右下标 int mid = (left + right) / 2; while (left<=right)//存在条件 { if (arr[mid] > k) { right = mid - 1; } if (arr[mid] < k) { left = mid + 1; } else { printf("找到了,下标是:%d\n", mid); break; } } return 0; }
//4. 编写代码,演示多个字符从两端移动,向中间汇聚。 #include<stdio.h> #include<string.h> #include<windows.h> int main() { char arr1[] = "welcome to bit!!!";//未给定空间大小,不用计算 char arr2[] = "#################"; int left = 0; int right = strlen(arr1) - 1;//strlen求字符串长度 //或者sizeof(arr1) / sizeof(arr1[0])-2 //arr[]="abc"; //[a b c \0] // 0 1 2 3 //4-2 while (left<=right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n", arr2); Sleep(1000);//休息一秒 system("cls");//执行系统命令的一个函数-cls清空屏幕 left++; right--; } printf("%s\n", arr2); return 0; }
//5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int i = 0; char password[20] = { 0 }; for (i = 0; i < 3; i++) { printf("请输入密码:>"); scanf("%s", password); if (strcmp(password , "123456")==0)//库函数-strcmp //password大于字符串,返回大于0的值 //password小于字符串,返回小于0的值 //if (password == "123456") //==不能用来判断两个字符串是否相等 { printf("登陆成功\n"); break; } else { printf( "密码错误\n" ); } } if (i == 3) printf("三次密码均错误,退出程序\n"); return 0; }
1
1