C语言---Day4
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
---形参:定义函数时的那个参数
---实参:调用函数时传递的那个参数