有参函数是一种接受输入参数(参数值)并执行特定操作的函数。通过向函数传递参数,你可以将数据传递给函数,让函数处理这些数据并返回结果。
例1:编写一程序,要求用户输入4 个数字,输出前两个数中的最大数、后两个数中的最大数以及四个数中的最大数。
#include
double max(double x, double y);
int main() {
double a[4];
int i;
for (i = 0; i < 4; i++) {
if (scanf("%lf", &a[i]) != 1) {
printf("输入不合法,请输入一个有效的数字。\n");
return 1; // 退出程序,返回错误代码
}
}
double t = max(a[0], a[1]);
double u = max(a[2], a[3]);
double v = max(t, u);
printf("前两个数中的最大数为%.2lf\n", t);
printf("后两个数中的最大数为%.2lf\n", u);
printf("四个数中的最大数为%.2lf\n", v);
return 0;
}
double max(double x, double y) {
return (x > y ? x : y);
}
例 2:有两个小组,分别有5名学生和10名学生。请编程输入这些学生的成绩,并调用一个 average 函数求这两个小组的平均分。
#include
float average(float a[], int n);
int main() {
float zu1[5], zu2[10];
int i;
for (i = 0; i < 5; i++) {
if (scanf("%f", &zu1[i]) != 1) {
printf("输入不合法,请输入一个有效的数字。\n");
return 1; // 退出程序,返回错误代码
}
}
for (i = 0; i < 10; i++) {
if (scanf("%f", &zu2[i]) != 1) {
printf("输入不合法,请输入一个有效的数字。\n");
return 1; // 退出程序,返回错误代码
}
}
printf("第 1 组平均分是%.2f\n", average(zu1, 5));
printf("第 2 组平均分是%.2f\n", average(zu2, 10));
return 0;
}
float average(float a[], int n) {
float sum = 0.0, average;
int i;
for (i = 0; i < n; i++) {
sum += a[i];
}
average = sum / n;
return average;
}
无参函数是一种不需要接受任何输入参数的函数。它们通常用于执行一些固定的任务或打印消息,而不依赖于外部数据。
例 1:请编程输出以下内容:
123456
小翟是大帅逼
654321
小翟是大帅逼
654321
小翟是大帅逼
#include
void a();
void b();
void c();
int main() {
a();
b();
c();
b();
c();
b();
return 0;
}
void a() {
printf("123456\n");
}
void b() {
printf("小翟是大帅逼\n");
}
void c() {
printf("654321\n");
}
例 2:请编程输入 10 个整数,并将这 10 个数由小到大排序。
#include
void paixu(int a[], int n); // 修正参数列表
int main() {
int a[10], i;
printf("请输入 10 个整数:\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
paixu(a, 10);
printf("排序后的整数依次是:\n");
for (i = 0; i < 10; i++)
printf("%d\t", a[i]);
printf("\n");
return 0;
}
void paixu(int a[], int n) {
int i, j, t;
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (a[i] > a[j]) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
函数的嵌套是指在一个函数内部调用另一个函数。这允许你将程序分解成更小的、可管理的部分。嵌套函数通常有助于提高代码的可读性和可维护性。
例 1:请编程输入 4 个整数,并找出其中最大的数。
#include
int max4(int a, int b, int c, int d);
int max2(int a, int b);
int main()
{
int a, b, c, d, zuidashu;
scanf("%d %d %d %d", &a, &b, &c, &d);
zuidashu = max4(a, b, c, d);
printf("最大数为%d\n", zuidashu);
return 0;
}
int max4(int a, int b, int c, int d)
{
int max2(int a, int b);
return (max2(max2(max2(a, b), c), d));
}
int max2(int a, int b)
{
return (a > b ? a : b);
}
递归是一种函数调用自身的过程。递归函数通常包括两个部分:基本情况和递归情况。基本情况是一个停止条件,它指定何时结束递归。递归情况则定义了函数如何继续调用自身以解决更小的子问题。递归在解决需要重复分解的问题时非常有用,如计算阶乘或斐波那契数列等。
例1:有5个学生,第5个学生比第4个学生大2岁,第4个学生比第3个学生大2岁,第3个学生比第2个学生大2岁,第2个学生比第1个学生大2岁,第1个学生是10岁。请编程计算出第5个学生的年龄。
#include
int calculateAge(int studentNumber);
int main() {
int ageOfFifthStudent = calculateAge(5);
printf("第5个学生的年龄:%d岁\n", ageOfFifthStudent);
return 0;
}
int calculateAge(int studentNumber) {
if (studentNumber == 1) {
return 10; // 第1个学生是10岁
} else {
// 递归计算年龄,每个学生比前一个学生大2岁
return calculateAge(studentNumber - 1) + 2;
}
}
例 2:用递归方法求 n!(注意取值范围)
#include
int factorial(int n);
int main()
{
int num;
printf("Please enter an integer: ");
scanf("%d", &num);
printf("%d! = %d\n", num, factorial(num));
return 0;
}
int factorial(int n)
{
int result;
if (n < 0)
printf("n < 0, incorrect input!\n");
else if (n == 0 || n == 1)
result = 1;
else
result = factorial(n - 1) * n;
return result;
}