for循环补充

for循环:

    for (表达式1; 表达式2 ; 表达式3)    
    {
        循环体。
    }

    表达式1 --》 表达式2 (判别表达式) --》 为真 --》 循环体。--》 表达式3 --》 表达式2 (判别表达式) --》 为真 --》 循环体 --》 表达式3

    --》 表达式2 (判别表达式)。。。。

    1--100的和: 5050

    1+2+3+4+5+6...+100

1.循环因子:    


    定义在for之外,for循环结束,也能使用。

    定义在for之内,for循环结束,不能使用。

#include<stdio.h>

// 求1-100的和   --- 基础for循环

// 循环因子i定义在for循环之内,循环结束就不能使用
// 循环因子i定义在for循环之外,循环结束还能使用

 
int main()
{
    int i = 0;
    int sum = 0;

    for(int i = 1; i <= 100; i++)
    {
      sum += i;
    }
    printf("和为:%d", sum);
    
    return 0;
}


for的3个表达式,均可变换、省略。但,2个分号不能省!

    for (i = 1, a = 3;i < 10, a < 20; i++, a+=5)
    {
        printf("i = %d\n", i);
        printf("a = %d\n", a);
        a += 5;
    }

    for(;;) == while(1)  无限循环
  

2.练习:猜数字游戏:

    1. 生成一个随机数。 

        1)添加一个随机数种子。srand(time(NULL));

        2) 添加头文件 <stdlib.h> <time.h>

        3) 生成随机数 int n = rand() % 100;  0-99

    2. 循环输入数据猜。

        int num;

        while(1)        // 死循环  for(;;)
        {
            接收用户输入 scanf("%d", &num);

            比较用户的数 和 随机生成数 大小。

            if (n > num)

            else
                break;
        }

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

// 猜数字游戏

int main()
{
    srand(time(NULL));                             // 种随机数种子
    int n = 0;     
    int num = rand() % 100;                       // 生成随机数

    for(;;)
    {                                       // for while if如果执行语句只有1条{}可以省略
        scanf("%d", &n);
        if(n < num)
        {
            printf("猜小了\n");
        }
        else if(n > num)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("猜中了\n");
            break;
        }
    }
    printf("num = %d \n", num);
    
    return 0;
}

    3. 跳出循环

        break;
            
break:

    作用1: 跳出一重循环。 for、while、do while

    作用2: 防止case穿透。 switch     


4.嵌套循环:

    外层循环执行一次,内层循环执行一周。

    for(i = 0; i < 24; i++)
    {
        for(j = 0; j< 60; j++)
        {

            for(k = 0; k< 60; i++)
            {            
            }
        }
    }

练习:    模拟电子表打印:

    10:23:45
    10:23:46
    。。。
    10:24:00

    // 小时
    for (i = 0; i < 24; i++)
    {
        // 分钟
        for (j = 0; j < 60; j++)
        {
            // 秒
            for (k = 0; k < 60; k++)
            {
                printf("%02d:%02d:%02d\n", i, j, k);
                Sleep(960);                    // #include <Windows.h>
                system("cls");  // 清屏
            }
        }
    }

练习:    打印9x9乘法表:
    
1x1 = 1
1x2 = 2     2x2 = 4
1x3 = 3     2x3 = 6     3x3 = 9
1x4 = 4
。。。
1x9 = 9    。。。。。。。。。。。。。。。。。。。。9x9 = 81

    外层循环执第i行, 内层执行i列。

    for(i=1; i<=9; i++)      // 行
    {
        for(j = 1; j <= i; j++)  //列
        {
            printf("%dx%d=%d\t", j, i, j*i);
        }
        printf("\n");  putchar('\n');
    }

#include<stdio.h>

int main()
{
    int i;
    int j;

    for(i = 1; i<=9; i++)
    {
        printf("\n");
        for(j = 1; j <=i; j++)
        {
            printf("%d*%d=%d \t", j, i, j*i);
        }
    }
    
    
    return 0;
}

5.思考题:

    如何打印如下99乘法表呢?

1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x4= 4 2x4= 8 3x4=12 4x4=16
1x3= 3 2x3= 6 3x3= 9
1x2= 2 2x2= 4
1x1= 1

    for (i = 9; i >= 1; i--)        // 行
    {
        for(j = 1; j <= i; j++)        // 列
        {
            printf("%dx%d=%d\t", j, i, j*i);

        }
        putchar('\n');
    }

#include<stdio.h>

int main()
{

    for(int i = 9; i >= 1; i--)
    {
        printf("\n");
        for(int j = 1; j <= i; j++)
        {
            printf("%d*%d=%d \t", j, i, j*i);
        }
    }
    
  
    return 0;
}

6.跳转语句:

break:【重点】

    作用1: 跳出一重循环。 for、while、do while

    作用2: 防止case 穿透。 switch     

continue:【重点】

#include<stdio.h>

int main()
{
    for ( size_t i = 0; i < 5; i++)
    {
        if(i == 3)
        {
            continue;
        }
        printf("i=%d \n", i);
        printf("=======1======\n");
    }
    
    
    return 0;
}

    
    作用:结束【本次】循环, continue关键字,之后的循环体,这本次循环中,不执行。


7.goto:    【了解】

    1. 设定一个标签

    2. 使用“goto 标签名” 跳转到标签的位置。(只在函数内部生效)

--------------------------------------------------------------------------------

8.数组:
  

 相同数据类型的有序连续存储。

    int arr[10] = {1, 2, 23, 4, 5, 6 , 10, 7, 8, 9};

    各个元素的内存地址 连续。

    数组名为地址。是数组首元素的地址。 arr == &arr[0];

    printf("数组大小:%u\n", sizeof(arr));

    printf("数组元素的大小:%u\n", sizeof(arr[0]));

    printf("数组元素个数:%d\n", sizeof(arr)/ sizeof(arr[0]));

    数据的第一个元素下标: 0

    数据的最后一个元素下标: sizeof(arr)/ sizeof(arr[0]) - 1

#include<stdio.h>

int main()
{
    int arr[10] = {1,2,4,6,76,8,90,4,3,6};    // int a = 109;

    printf("arr[0] = %d\n", arr[0]);
    printf("arr[1] = %d\n", arr[1]); 
    printf("&arr[2] = %p\n", &arr[2]);
    printf("&arr[3] = %p\n", &arr[3]);
    printf("&arr[4] = %p\n", &arr[4]);

    printf("&arr[0] = %d\n", &arr[0]);    // 取数组首元素的地址

    printf("arr = %p \n", arr);           // 取数组名
    
    printf("数组大小:%zu\n", sizeof(arr));
    printf("数组元素大小:%zu\n", sizeof(arr[0]));
    printf("数组元素个数:%d \n",sizeof(arr)/sizeof(arr[0]));
    
    return 0;
}

9.数组初始化:

    int arr[12] = { 1, 2 ,4, 6, 76, 8, 90 ,4, 3, 6 , 6, 8 }; 【重点】

    int arr[10] = { 1, 2 ,4, 6, 76, 8, 9 };  剩余未初始化的元素,默认 0 值。 【重点】

    int arr[10] = { 0 }; 初始化一个全为 0 的数组。【重点】

    int arr[] = {1, 2, 4, 6, 8};     编译器自动求取元素个数  【重点】

    int arr[] = {0};  只有一个元素,值为0

    int arr[10]; 
    arr[0] = 5;
    arr[1] = 6;
    arr[2] = 7;    其余元素未被初始化,默认值 随机数。

#include<stdio.h>

// 数组初始化的方法

int main()
{
    int arr[10] = {1,2,4,6,76,8,9};

    int n = sizeof(arr) / sizeof (arr[0]);

    for(size_t i = 0; i < n; i++)
    {
        printf("%d",arr[i]);
    }

    
    
    return 0;
}


10.练习:    数组元素逆序:

    int arr[] = {1, 6, 8, 0, 4, 3, 9, 2};  // {2, 9, 3, 4, 0, 8, 6, 1}
    int len = sizeof(arr) / sizeof(arr[0]); //数组元素个数

    int i = 0;                // i表示数组的首元素下标
    int j = len - 1;        // 表示数组的最后一个元素下标
    int temp = 0;        // 临时变量 

    // 交换 数组元素,做逆序
    while (i < j)
    {
        temp = arr[i];        // 三杯水法变量交换
        arr[i] = arr[j];
        arr[j] = temp;
        i++;
        j--;
    }

#include<stdio.h>


int main()
{
    int arr[8] = {1,6,8,0,4,3,9,2};                  // 要求从逆序排列

    int len =sizeof(arr) / sizeof(arr[0]);
    
    int i =0;     
// 表示数组的最后一个元素的下标                  
    int j = sizeof(arr) / sizeof(arr[0]) - 1;   

    int temp =0;

// 打印原始数组

    for(size_t m = 0; m < len; m++)
    {
        printf("%d", arr[m]);                   
    }
    printf("\n");

// 交换数组元素做逆序
    while(i<j)
    {
        temp = arr[i];                      // 三杯水法变量交换
        arr[i] = arr[j];
        arr[j] = temp;

        i++;
        j--;
    }

// 打印交换后的数组
    for(size_t n = 0; n < len; n++)
    {
        printf("%d", arr[n]);
    }
    printf("\n");

    return 0;
}


11.练习:    冒泡排序:

    int xjp[10] = {12, 32, 14, 62, 27, 8, 89};  --> 8 12 14 27 32 62 89

    for (size_t i = 0; i < n-1; i++)        // 外层控制行
    {
        for (size_t j = 0; j < n - 1 - i; j++)    // 内层控制列
        {
            if (xjp[j] > xjp[j + 1])        // 满足条件 三杯水交换
            {
                temp = xjp[j];
                xjp[j] = xjp[j + 1];
                xjp[j + 1] = temp;
            }
        }
    }
        


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值