问题标题: 酷町堂:函数的定义,形参和实参

0
0
已解决
曹砚青
曹砚青
中级光能
中级光能

谁能把     函数的定义,形参和实参      这一课的讲义发一下,嘤嘤嘤,全忘光了


0
已采纳
曲天歌
曲天歌
高级光能
高级光能

函数(一)课后讲义

知识点:函数章节第一次课

一、函数的意义:

为了实现某种功能而组合起来(封装)的多个指令。

调用函数是就相当于调用了多个指令

二、自定义 6!函数

int jc()

{

int s=1;

for(int i=1;i<=6;i++)

s=s*i;

return s;

}

自定义函数的类型由返回值决定。返回值类型是什么,函数的类型就是什么。

int main()

{

cout<<jc()<<endl;

return 0;

}

调用函数,实际上就是得到返回值。

三、定义函数

数据类型

函数名()

//函数头

{

函数体;

//执行语句(包括返回值)

}

函数不允许嵌套定义:在一个函数内定义另一个函数是非法的。但是允许嵌

套使用(调用)。

函数的数据类型是函数的返回值类型(若类型为 void ,则无返回值)。

四、形式参数

添加形参丰富函数功能。

int jc(int n)

{

int s=1;

for(int i=1;i<=n;i++)s=s*i;

return s;

}

int main()

{

cout<<jc(5)<<endl;

return 0;

}

功能:计算 5!

阶乘函数里面的 int n 是形式参数。

jc(5)里面的 5 是实际参数。

多个形式参数之间要用“,”隔开,并且都要指明数据类型。

五、例题

1176 求两个数中的较大值

#include<iostream>

using namespace std;

int f(int a,int b)

{

if(a>b)

return a;

else

return b;

}

int main()

{

int a,b;

cin>>a>>b;

cout<<f(a,b);

return 0;

}2835

#include<iostream>

#include<cmath>

using namespace std;

int Func(int a,int b){//函数定义 a 和 b 是形参

return pow(a,b);

}

int main(){

int t,n,m;

cin>>t;

while(t--){

cin>>n>>m;

cout<<Func(n,m)<<endl;//调用函数 n 和 m 是实参

}

return 0;

}

六、课后作业

1178 1177 2836

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

函数(二)课后讲义

知识点:局部变量和全局变量

1. 局部变量与全局变量

(1) 局部变量:定义在函数内的变量,是局部变量,从定义位置开始,在整

个函数内有效。

(2) 全局变量:定义在函数(main)外的变量,是全局变量,从定义位置开始,

在整个程序内有效。

int f(int n)

{

int s=0;

for(int i=1;i<=n;i++)

s+=i;

return s;

}

n,s,i 都只在 f()里面有效

定义时:局部变量的值是随机的,全局变量的值是默认为 0。

2. 函数的声明

(1) 我们可以在 main()之前先声明函数,在 main()之后统一定义函数。

定义函数在 main()之后,必须先声明,否则会报错

声明函数:数据类型 函数名(形式参数);

int f(int a,int b);

// int f(int ,int ); 这种格式也可以的

int main(){

cout<<f(1,2);

}

int f(int a,int b){

if(a>b) return a;

return b;

}

3. 课堂练习

1180

#include<iostream>

using namespace std;

int f(int n){

int sum=0;

for(int i=1;i<=n;i++)

sum+=i;

return sum;

}int main(){

int n;

cin>>n;

cout<<f(n);

return 0;

}

2837

方法一:

#include<iostream>

using namespace std;

int f(string s){

int i=0;

while(s[i]!='\0'){

i++;

}

return i;

}

int main(){

int n;

cin>>n;

string s;

getline(cin,s);

while(n--){

getline(cin,s);

cout<<f(s)<<endl;

}

return 0;

}

方法二:

#include<iostream>

using namespace std;

int f(string s){

int i=0;

while(s!=""){

s.erase(0,1);

i++;

}

return i;

}

int main(){

int n;

cin>>n;string s;

getline(cin,s);

while(n--){

getline(cin,s);

cout<<f(s)<<endl;

}

return 0;

}

3955

#include<iostream>

using namespace std;

int a[10010];

void f(int n){

int mx=0,mxi;

for(int i=1;i<=n;i++)

if(a[i]>=mx){

mx=a[i];

mxi=i;

}

cout<<mxi<<' '<<mx;

return ;

}

int main(){

int n;

cin>>n;

for(int i=1;i<=n;i++)

cin>>a[i];

f(n);

return 0;

}

4. 课后作业

3961

3962

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

函数(三)课后讲义

知识点:值传递和引用传递

1. 函数值传递

(1) int a=1;

void f(int a){

a=123;

}

int main(){

f(a);

cout<<a;

return 0;

}

运行结果输出 1。

在传递数值时,只是将实参的值复制到形参里,因此对形参的任何操作都不

会改变实参。

int a;

void f(int &a){

a=123;

}

int main(){

f(a);

cout<<a;

return 0;

}

传实参的地址就可以改变实参的值了。

“&”取地址符。

(2) 数组作为参数

数组名是该数组在内存的首地址,

将数组名作为参数传给函数,就相当于引用传递了

int a[100];

void f(int a[]){

a[3]=123;

}

int main(){f(a);

cout<<a[3];

return 0;

}

在函数中改变元素值,实参也会改变。

2. 课堂练习

4001

方法一

#include<iostream>

#include<cmath>

using namespace std;

string f(int a){

for(int i=1;i<=35;i++)

if(i*i==a)

return "Yes";

return "No";

}

int main(){

int a;

cin>>a;

cout<<f(a);

return 0;

}

方法二

#include<iostream>

#include<cmath>

using namespace std;

string f(int a){

if(sqrt(a)==int(sqrt(a)))

return "Yes";

return "No";

}

int main(){

int a;

cin>>a;

cout<<f(a);

return 0;

}2845

3. 课后作业

2844

4002

#include<iostream>

#include<cmath>

using namespace std;

int a[100];

void f(int a[],int m){

for(int i=1;i<=m;i++)

for(int j=i+1;j<=m;j++)

if(a[i]<a[j])

swap(a[i],a[j]);

for(int i=1;i<=m;i++)

cout<<a[i]<<' ';

return ;

}

int main(){

int n;

cin>>n;

while(n--){

int m;

cin>>m;

for(int i=1;i<=m;i++)

cin>>a[i];

f(a,m);

cout<<endl;

}

return 0;

}

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

函数(四) 课后讲义

知识点:sort()排序

1. sort()默认从小到大排序

加头文件#include<algotithm>

数组长度为 n,

给 a[1] a[2] a[3]......a[n]这 n 个数排序

sort(a+1,a+n+1);

给 a[0] a[1] a[2]......a[n-1]这 n 个数排序

sort(a,a+n);

2. sort()自定义函数 cmp,实现从大到小排序

bool cmp(int a,int b)

{

return a>b;

}

int a[100005];

int main()

{

int n;

cin>>n;

for(int i=1;i<=n;i++)

cin>>a[i];

sort(a+1,a+n+1,cmp);

for(int i=1;i<=n;i++)

cout<<a[i]<<' ';

return 0;

}

自定义函数是 bool 类型,自定义函数 cmp 的形参和待排序的数组类型有关。

3. sort()按照特定条件排序

(1) 例题 3827

#include<iostream>

#include<algorithm>

using namespace std;

int a[100010];

bool cmp(int x,int y){

if(x%10!=y%10)

return x%10>y%10;

else//个位相等

return x<y;

}

int main(){int n;

cin>>n;

for(int i=0;i<n;i++)

cin>>a[i];

sort(a,a+n,cmp);//自己写比较函数,按照特定的条件

for(int i=0;i<n;i++)

cout<<a[i]<<endl;

return 0;

}

(2) 例题 3977

#include<iostream>

#include<algorithm>

using namespace std;

double a[20010];

bool cmp(double x,double y){

if(x-int(x)!=y-int(y))

return x-int(x)>y-int(y);

else//小数部分相同相等

return x<y;

}

int main(){

int n;

cin>>n;

for(int i=0;i<n;i++)

cin>>a[i];

sort(a,a+n,cmp);//自己写比较函数,按照特定的条件

for(int i=0;i<n;i++)

cout<<a[i]<<' ';

return 0;

}

4. 课堂练习

3825

#include<iostream>

#include<algorithm>

using namespace std;

int a[20010];

int f(int a){

int sum=0;

while(a){

sum+=a%10;

a/=10;

}return sum;

}

bool cmp(int x,int y){

if(f(x)!=f(y)) return f(x)>f(y);

return x<y;

}

int main(){

int n;

cin>>n;

for(int i=0;i<n;i++)

cin>>a[i];

sort(a,a+n,cmp);

for(int i=0;i<n;i++)

cout<<a[i]<<' ';

return 0;

}

5. 课后作业

1762

3981

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

函数(五) 课后讲义

知识点:函数总复习

一、 课堂练习

1.3981

#include<iostream>

#include<algorithm>

using namespace std;

string s[10010];

int f(string s){//找字符串里面的数字个数

int cnt=0;

for(int i=0;i<s.size();i++)

if(s[i]>='0'&&s[i]<='9')

cnt++;

return cnt;

}

bool cmp(string x,string y){

if(f(x)!=f(y))

return f(x)>f(y);

return x<y;

}

int main(){

int n;

cin>>n;

getline(cin,s[0]);

for(int i=1;i<=n;i++)

getline(cin,s[i]);

sort(s+1,s+1+n,cmp);

for(int i=1;i<=n;i++)

cout<<s[i]<<endl;

return 0;

}

2.3995

#include<iostream>

#include<algorithm>

using namespace std;

int a[110][110];

void f(int a[][110],int m,int n){

for(int j=1;j<=n;j++)swap(a[1][j],a[m][j]);

for(int i=1;i<=m;i++)

swap(a[i][1],a[i][n]);

return ;

}

int main(){

int m,n;

cin>>m>>n;

for(int i=1;i<=m;i++)

for(int j=1;j<=n;j++)

cin>>a[i][j];

f(a,m,n);

for(int i=1;i<=m;i++){

for(int j=1;j<=n;j++)

cout<<a[i][j]<<' ';

cout<<endl;

}

return 0;

}

3.3998

#include<iostream>

#include<algorithm>

using namespace std;

int a[110][110];

void f(int a[][110],int m,int n){

for(int k=1;k<=m;k++)

//循环 m 行

for(int i=1;i<=n-1;i++)

for(int j=1;j<=n-i;j++)

if(a[k][j]>a[k][j+1])

swap(a[k][j],a[k][j+1]);

return ;

}

int main(){

int m,n;

cin>>m>>n;

for(int i=1;i<=m;i++)

for(int j=1;j<=n;j++)

cin>>a[i][j];

f(a,m,n);

for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)

cout<<a[i][j]<<' ';

cout<<endl;

}

return 0;

}

二、 课后作业

3998

4004

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

别说我复制你们火箭班的教材,我学过!

曲天歌在2020-07-15 12:14:35追加了内容

在QQ里......

0
0
褚俊皓
褚俊皓
新手天翼
新手天翼

我没有,但是你可以找老师

0
曹砚青
曹砚青
中级光能
中级光能

大佬们,快来呀

@王子健 

@李瑞曦 

@徐子玄 

@龙舟 

我要回答