3.6day04知识点复习

文章详细介绍了for循环的工作原理,包括其三个表达式的功能和可变性,并提供了1-100求和的示例。接着讨论了循环因子的定义位置、break和continue的作用。文章还涵盖了随机数生成、猜数字游戏的实现、嵌套循环以及打印电子表和9x9乘法表的练习。最后,提到了数组的概念、初始化方式以及冒泡排序的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for循环:

for (表达式1; 表达式2 ; 表达式3)

{

循环体。

}

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

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

1--100的和: 5050

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

int sum = 0;

int i = 0;

for (; ; )

{

sum = sum + i;

i++

}

循环因子:

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

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

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) 无限循环

练习:猜数字游戏:

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;

}

3. 跳出循环

break;

break:

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

作用2: 防止case穿透。 switch

嵌套循环:

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

for(i = 0; i < 24; i++)

{

for(j = 0; j< 60; j++)

{

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

{

}

}

}

练习:模拟电子表打印:

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

int main(void)
{
    int i;
    int j;
    int k;//小时

    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);
                system("cls");
            }
        }
    }
    return 0;
}

练习:打印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');

}

思考题:

如何打印如下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');

}

跳转语句:

break:【重点】

作用1: 跳出一重循环(所在的离得最近的循环)。 for、while、do while,如果break在循环里的if分支里,直接跳出循环,和分支没有关系。

作用2: 防止case 穿透。 switch ,结束switch语句。

continue:【重点】

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

goto:【了解】

1. 设定一个标签

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

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

数组:

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

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

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

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

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

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

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

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

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

数组初始化:

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;其余元素未被初始化,默认值 随机数。

练习:数组元素逆序:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main05(void) {
    int arr[10] = { 2,52,63,23,46,95,3,57,45,35 };
    int num = sizeof(arr) / sizeof(arr[0]);
    int tmp = 0;
    for (int i = 0; i <= num / 2; i++) {
        tmp = arr[i];
        arr[i] = arr[num - 1 - i];
        arr[num - 1 - i] = tmp;
    }
    for (int j = 0; j < num; j++) {
        printf("%d ", arr[j]);
    }
    return 0;
}

练习:冒泡排序:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main(void) {
    int arr[10] = { 2,52,63,23,46,95,3,57,45,35 };
    int num = sizeof(arr) / sizeof(arr[0]);
    int tmp = 0;
    for (int i = 0; i < num-1; i++) {
        for (int j = 0; j < num-i-1; j++) {//注意减一
            if (arr[j] > arr[j + 1]) {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
    for (int k = 0; k < num; k++) {
        printf("%d ", arr[k]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值