今天我们来学习c++入门到入土第十节课——不花钱
上一节课,我们讲到了指针,这节课我们来讲函数
我们先来解答一下问题:
1.问题已在帖子中解决
您如有问题的话,可以回复我哦!
我会取前三个问题回答哦
函数
函数的声明
编程中的函数(function)一般是若干语句的集合。我们也可以将其称作「子过程(subroutine)」。在编程中,如果有一些重复的过程,我们可以将其提取出来,形成一个函数。函数可以接收若干值,这叫做函数的参数。函数也可以返回某个值,这叫做函数的返回值。
声明一个函数,我们需要返回值类型、函数的名称,以及参数列表。
// 返回值类型 int
// 函数的名称 work
// 参数列表 int, int
int work(int, int);
如上图,我们声明了一个名为 work
的函数,它需要接收两个 int
类型的参数,返回值类型也为 int
。可以认为,这个函数将会对传入的两个整数进行一些操作,并且返回一个同样类型的结果。
实现函数:编写函数的定义
只有函数的声明(declaration)还不够,他只能让我们在调用时能够得知函数的 接口 类型(即接收什么数据、返回什么数据),但其缺乏具体的内部实现,也就是函数的 定义(definition)。我们可以在 声明之后的其他地方 编写代码 实现(implement)这个函数(也可以在另外的文件中实现,但是需要将分别编译后的文件在链接时一并给出)。
如果函数有返回值,则需要通过 return
语句,将值返回给调用方。函数一旦执行到 return
语句,则直接结束当前函数,不再执行后续的语句。
int work(int, int); // 声明
{
/* some other code here... */
}
int sum(int x, int y) // 定义
{
int result = 2 * x + y;
return result;
result = 3; // 这条语句不会被执行
}
在定义时,我们给函数的参数列表的变量起了名字。这样,我们便可以在函数定义中使用这些变量了。
如果是同一个文件中,我们也可以直接将 声明和定义合并在一起,换句话说,也就是在声明时就完成定义。
int work(int x, int y)
{
return 2 * x + y;
}
如果函数不需要有返回值,则将函数的返回值类型标为 void
;如果函数不需要参数,则可以将参数列表置空。同样,无返回值的函数执行到 return;
语句也会结束执行。
void work()
{
cout << "hello!\n";
cout << "hello!\n";
cout << "hello!\n";
return;
cout << "hello!\n"; // 这条语句不会被执行
}
函数的调用
和变量一样,函数需要先被声明,才能使用。使用函数的行为,叫做「调用(call)」。我们可以在任何函数内部调用其他函数,包括这个函数自身。函数调用自身的行为,称为 递归(recursion)。
在大多数语言中,调用函数的写法,是 函数名称加上一对括号 ()
,如 foo()
。如果函数需要参数,则我们将其需要的参数按顺序填写在括号中,以逗号间隔,如 foo(1, 2)
。函数的调用也是一个表达式,函数的返回值 就是 表达式的值。
函数声明时候写出的参数,可以理解为在函数 当前次调用的内部 可以使用的变量,这些变量的值由调用处传入的值初始化。看下面这个例子:
void foo(int, int);
/* ... */
void foo(int x, int y)
{
x = x * 2;
y = y + 3;
}
/* ... */
a = 1;
b = 1;
// 调用前:a = 1, b = 1
foo(a, b); // 调用 foo
// 调用后:a = 1, b = 1
在上面的例子中,foo(a, b)
是一次对 foo
的调用。调用时,foo
中的 x
和 y
变量,分别由调用处 a
和 b
的值初始化。因此,在 foo
中对变量 x
和 y
的修改,并不会影响到调用处的变量的值。
如果我们需要在函数(子过程)中修改变量的值,则需要采用「传引用」的方式。
void foo(int& x, int& y)
{
x = x * 2;
y = y + 3;
}
/* ... */
a = 1;
b = 1;
// 调用前:a = 1, b = 1
foo(a, b); // 调用 foo
// 调用后:a = 2, b = 4
上述代码中,我们看到函数参数列表中的「int
」后面添加了一个「&
(and 符号)」,这表示对于 int
类型的 引用(reference)。在调用 foo
时,调用处 a
和 b
变量分别初始化了 foo
中两个对 int
类型的引用 x
和 y
。在 foo
中的 x
和 y
,可以理解为调用处 a
和 b
变量的「别名」,即 foo
中对 x
和 y
的操作,就是对调用处 a
和 b
的操作。
main
函数
特别的,每个 C/C++ 程序都需要有一个名为 main
的函数。任何程序都将从 main
函数开始运行。
main
函数也可以有参数,通过main
函数的参数,我们可以获得外界传给这个程序的指令(也就是「命令行参数」),以便做出不同的反应。
下面是一段调用了函数(子过程)的代码:
#include <bits/stdc++.h>
using namespace std;
void say_hello()
{
cout << "hello!\n";
cout << "hello!\n";
cout << "hello!\n";
}
int main()
{
say_hello();
say_hello();
return 0;
}
作业:
1. P1001 A+B Problem
难度:入门
题目描述:输入两个整数 aa 和 bb,输出它们的和。
思路:直接定义一个函数,接收两个整数参数并返回它们的和。
代码:
#include <bits/stdc++.h>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int main()
{
int a, b;
cin >> a >> b;
cout << add(a, b) << endl;
return 0;
}
2. P1421 小玉买文具
难度:普及-
题目描述:小玉有 aa 元 bb 角,她想买 cc 元 dd 角的文具,问她是否买得起。
思路:将金额统一转换为角,然后比较。
代码:
#include <bits/stdc++.h>
using namespace std;
bool canBuy(int a, int b, int c, int d)
{
int totalMoney = a * 10 + b; // 转换为角
int totalCost = c * 10 + d; // 转换为角
return totalMoney >= totalCost;
}
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
if (canBuy(a, b, c, d))
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
return 0;
}
3. P1307 数字反转
难度:普及-
题目描述:给定一个整数,将其反转后输出。
思路:通过循环取余和除法操作反转数字。
代码:
#include <bits/stdc++.h>
using namespace std;
int reverseNumber(int n)
{
int reversed = 0;
while (n != 0)
{
reversed = reversed * 10 + n % 10;
n /= 10;
}
return reversed;
}
int main()
{
int n;
cin >> n;
cout << reverseNumber(n) << endl;
return 0;
}
4. P1046 陶陶摘苹果
难度:普及-
题目描述:陶陶有 hh 的身高,苹果树上有 1010 个苹果,每个苹果的高度为 aiai,陶陶能摘到多高的苹果?
思路:遍历苹果高度,统计陶陶能摘到的苹果数量。
代码:
#include <bits/stdc++.h>
using namespace std;
int countApples(int h, int apples[])
{
int count = 0;
for (int i = 0; i < 10; i++)
{
if (h >= apples[i])
{
count++;
}
}
return count;
}
int main()
{
int h, apples[10];
for (int i = 0; i < 10; i++)
{
cin >> apples[i];
}
cin >> h;
cout << countApples(h + 30, apples) << endl; // 陶陶站在30cm的凳子上
return 0;
}
5. P1085 不高兴的津津
难度:普及-
题目描述:津津每天有学习和上课的时间,如果某天总时间超过 88 小时,她会不高兴。输出她最不高兴的那一天。
思路:遍历每天的安排,记录最不高兴的那一天。
代码:
#include <bits/stdc++.h>
using namespace std;
int findUnhappyDay(int schedule[][2])
{
int maxUnhappy = 0, day = 0;
for (int i = 0; i < 7; i++)
{
int total = schedule[i][0] + schedule[i][1];
if (total > 8 && total > maxUnhappy)
{
maxUnhappy = total;
day = i + 1;
}
}
return day;
}
int main()
{
int schedule[7][2];
for (int i = 0; i < 7; i++)
{
cin >> schedule[i][0] >> schedule[i][1];
}
cout << findUnhappyDay(schedule) << endl;
return 0;
}
6. P1424 小鱼的航程
难度:普及-
题目描述:小鱼每天游泳 xx 公里,周末休息。给定起始日期和总天数,计算小鱼游的总距离。
思路:模拟每一天,判断是否为工作日,累加游泳距离。
代码:
#include <bits/stdc++.h>
using namespace std;
int calculateDistance(int x, int startDay, int days)
{
int total = 0;
for (int i = 0; i < days; i++)
{
int currentDay = (startDay + i) % 7;
if (currentDay != 0 && currentDay != 6) // 0和6是周末
{
total += x;
}
}
return total;
}
int main()
{
int x, startDay, days;
cin >> x >> startDay >> days;
cout << calculateDistance(x, startDay - 1, days) << endl; // 转换为0-based
return 0;
}
以上c++代码为deepseek生成,请勿抄袭,请勿抄袭,请勿抄袭!!!以免成为洛谷的作弊者!!!
下一节课—— 文件操作
点赞,点赞,点赞!!!!!!!
球球了!!!!
求求了!!!!
QwQ QwQ