第二章-分支語句和迴圈語句2
阿新 • • 發佈:2021-09-28
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> intmain() { 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