C语言---Day4

发布时间 2024-01-05 11:21:53作者: o·0

11、循环

---循环类型

             ---while循环:当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件

    // 1到100求和
    int i= 0, sum = 0;
    while (i <= 100)
    {
        sum += i;
        i++;
    }
    printf("1到100的和为:%d\n", sum); // 5050

             ---for循环:多次执行一个语句序列,简化管理循环变量的代码

    // 1到100求和
int i = 0, sum = 0;
for (i = 0; i <= 100; i++) { sum += i; } printf("1到100的和为:%d\n", sum); // 5050

             ---do...while循环:除了它是在循环主体结尾测试条件外,其他与 while 语句类似

    // 1到100求和
    int i = 0, sum = 0;
    do {
        sum += i;
        i++;
    } while (i <= 100);

    printf("1到100的和为:%d\n", sum); // 5050

             ---嵌套循环:可以在 while、for 或 do..while 循环内使用一个或多个循环

---循环控制语句:控制代码的执行顺序,可以实现代码跳转

             ---break语句:终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句;当 break 关键字用于 while、for循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环

    // break 关键字通常和 if 语句一起使用
    int i = 1, sum = 0;
    while (1) {  //循环条件为死循环
        sum += i;
        i++;
        if (i > 100) break;
    }
    printf("1到100的和为:%d\n", sum); // 5050
    // 当break用于开关语句switch语句中时,可使程序跳出switch而执行switch以后的语句
    // 输入一个数字,输出对应的星期几的英文单词
    int a;
    printf("输入数字:");
    scanf_s("%d", & a);
    switch (a)
    {
        case 1: printf("Monday\n"); break;
        case 2: printf("Tuesday\n"); break;
        case 3: printf("Wednesday\n"); break;
        case 4: printf("Thursday\n"); break;
        case 5: printf("Friday\n"); break;
        case 6: printf("Saturday\n"); break;
        case 7: printf("Sunday\n"); break;
        default: printf("error\n"); break;
    }

             ---continue语句:当在循环体中遇到 continue 关键字时,程序将立即跳过当前循环,执行下一次循环,通常用于循环体内部的条件语句中

    for (int i = 1; i < 10; i++)
    {
        if (i % 2 == 0)
        {
            continue;
        }
        printf("%d\ ", i); // 1 3 5 7 9
    }

             ---goto语句:将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句

---无限循环:如果条件永远不为假,则循环将变成无限循环;一般使用for( ; ; )结构表示无限循环

 

12、函数

---定义函数:函数由一个函数头和一个函数主体组成

      返回类型:一个函数可以返回一个值,不需要返回值时,用关键字void

      函数名称:函数的实际名称

      参数:当函数被调用时,向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,函数也可能不包含参数

      函数主体:包含一组定义函数执行任务的语句

// 返回两个数中较大的那个数
int max(int num1, int num2)
{
    int result;
    if (num1 > num2)
    {
        result = num1;
    }
    else
    {
        result = num2;
    }
    return result;
}

---函数声明:告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义

int max(int num1, int num2); // 上面定义的函数max()的函数声明

---调用函数:传递所需参数,如果函数返回一个值,则可以存储返回值

    int ret = max(21, 32);
    printf("最大数为:%d\n", ret); // 32

---函数参数:如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数,形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁;

             调用函数时,有两种向函数传递参数的方法:(默认情况下,C 使用传值调用来传递参数)

                      ---传值调用:把参数的实际值复制给函数的形式参数。修改函数内的形式参数不会影响实际参数

void swap(int m, int n);

void swap(int m, int n)
{
    int temp;
    temp = m;
    m = n;
    n = temp;

    return;
}

    // 传值调用: 虽然在函数内改变了 m 和 n 的值,但是实际上 m 和 n 的值没有发生变化
    int m = 200;
    int n = 300;
    printf("传值调用 交换前m的值为:%d\n", m); // 200
    printf("传值调用 交换前n的值为:%d\n", n); // 300
    swap(m, n);
    printf("传值调用 交换后m的值为:%d\n", m); // 200 
    printf("传值调用 交换后n的值为:%d\n", n); // 300

                      ---引用调用:通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

void swap1(int *m, int *n);

void swap1(int* m, int* n)
{
    int temp;
    temp = *m;
    *m = *n;
    *n = temp;

    return;
}

    // 引用调用: 引用调用在函数内改变了 m 和 n 的值,实际上也改变了函数外 m 和 n 的值
    int m1 = 200;
    int n1 = 300;
    printf("引用调用 交换前m的值为:%d\n", m1); // 200
    printf("引用调用 交换前n的值为:%d\n", n1); // 300
    swap1(&m1, &n1);
    printf("引用调用 交换后m的值为:%d\n", m1); // 300 
    printf("引用调用 交换后n的值为:%d\n", n1); // 200

---形参:定义函数时的那个参数

---实参:调用函数时传递的那个参数