1. 程式人生 > 其它 >第二章-分支語句和迴圈語句2

第二章-分支語句和迴圈語句2

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