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