25-变量作为函数的参数进行传递.解答

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{ int d;
{ int d;
d=x+y+z;
d=x+y+z;
return(d);
return(d);
}
}
main()
main()
{ int a,b,c; a=23;b=34; { int a=23,b=34,c,f;
c=sum(a,b);
c=sum(a,b,f);
printf(“sum is %d",c); printf(“sum is %d",c);
练习
9、编写函数解决下列问题:一球从100米 高度自由落下,每次落地后反跳回原高 度的一半,再落下。求它在第十次落地 时共经过多少米?第十次反弹多少米?
10、求3-100之间的所有素数。用函数判断 某个数是否是素数,函数的返回值是1表 示该数是素数,函数的返回值为0,则表 示该数不是素数。
printf(“a=%d,b=%d”,a,b) 调用结束:x: 7
}
y: 11 y: 11 b: 11 b: 7
y: 11
#include <stdio.h> long sum(int a, int b);
文件包含编译预处理命令
long factorial(int n);
函数声明
main()
{ int n1,n2;
long a;
long sum(int a, int b);
scanf("%d,%d",&n1,&n2);
实参 a=sum(n1,n2); 函数调用 printf("a=%1d",a);
} long sum(int a,int b)
函数定义
{ long factorial(int n); 形参
long factorial(int n) { long rtn=1;
回收空c间
5x7x
回收空a间
2x3x
xx
回收空间b
3x4x
回收空x间
2x3x
xx
回收空间y
34
回收空间z
57
5、如果实参是变量,则实参和形参的名字可以相同
也可以不同,互不影响,因为它们存储数据的空 间不同。
mmaaiinn(()) {{ iinnttaa,b,b,c,c;;
aa==2233;;bb==3344; ; cc==ssuumm((aa,,bb));; pprriinnttff((““ssuummiiss%%dd"",c,c));; }} ssuumm((iinntt aa,,iinntt bb)) {{ iinnttzz;; zz==aa++bb; ; rreettuurrnn((zz));; }}
}
}
4、形参在函数被调用前不占存储空间;函数调用时为形
参分配存储空间;调用结束,空间释放。
mmaaiinn(()) {{ iinnttaa,b,b,c,c;;
aa==2233;;bb==3344; ; cc==ssuumm((aa,,bb));; pprriinnttff((““ssuummiiss%%dd"",c,c));; }} ssuumm((iinntt xx,,iinntt yy)) {{ iinnttzz;; zz==xx++yy; ; rreettuurrnn((zz));; }}
a=23;b=24; c=sum(a,b); printf(“sum is %d",c); }
2、形参必须指定类型
int x
int y
int sum(int x, int y) { int z;
z=x+y; return(z); }
3、形参与实参类型一致,个数相同
sum(int x, int y,float z) sum(int x, int y,float z)
2、3个同学进行踢毽子比赛,编写函数, 求出踢的个数最多和最少的差。
提示:编写两个函数,分别用于求3个数的最大值 和最小值。然后再编写一个函数,调用最大值和 最小值函数求差,将求差的结果返回。
3、编写函数: 求2个数的加、减、乘、除以及余数。
4、利用函数实现如下程序:
输出n!的低2位的值,例如:5!=120 输 出20
return(z);
}
in1、t summa(iinn(t) x, int y)
{2、in{t zin; t a,b;
3、z=x+yi;nt c;
4、returan=(z3);;b=23; }5、 c=sum(a,b);
x=a
y=b
m6、ain(p)rintf(“sum is %d\n",c);
{7、in}t a,b;
#i例nc2l交ud换e两<个st数dio.h>
调用前:x: 7
main()
{ int x=7,y=11;
调用: x: 7
swap(x,y);
printf("%d,%d\n",a,b);
a: 7
} void swap(int a,int b)
swap: a: 11
{ int temp; temp temp=a; a=b; b=temp;
int i; for(i=1;i<=n;i++) rtn*=i; return(rtn); }
long c1,c2;
c1=factorial(a); c2=factorial(b); 函数调用
return(c1+c2); 函数返回值
}
函数定义、声明、调用实训练习
1、用函数实现如下题目:
相传古代印度国王舍罕要褒奖他的聪明能干的宰相达 依尔(国际象棋发明者),问他需要什么,达依尔回 答说:“国王只要在国际象棋的棋盘上第一个格子放 一粒麦子,第二格子放上两粒,第三个格子放上四粒, 依次类推,每一格子的麦子数是前一格子的两倍,一 直放到64格,我就感恩不尽了”。国王答应了,结果 全印度的粮食用完还不够。国王很那纳闷,怎末也算 不清这笔账。(1m2大约为1.42×108粒小麦)其中将 2n 的求解采用函数模块编写。
单元二 变量作为函数的参数进行传递 1、普通变量作为函数的参数进行传递
• 1.1 函数参数及其传递方式
–形参与实参
• 形式参数:定Leabharlann Baidu函数时函数名后面括号中的变量名 • 实际参数:调用函数时函数名后面括号中的表达式
例 比较两个数并输出大者 main()
{ int a,b,c;
scanf("%d,%d",&a,&b);
5、利用函数实现如下题目:
计算50以内所有能被3整出的数的倒数之积。
6、利用函数实现如下题目: 计算s=12!+ 22! + 32!+……+n2!
练习
7、利用函数求和
100 k
50
k2
10
1
1
1
1k
练习
8、利用函数编写程序求出斐波那契数列的第n项
斐波那契数列可以用递推公式来表示: F1=1 F2=1 Fn=Fn-1+Fn-2
回收空c间
5x7x
回收空a间
2x3x
xx
回收空间b
3x4x
回收空a间
2x3x
xx
回收空间b
34
回收空间z
57
例 1计算x的立方
#include <stdio.h> float c(float x) { return(x*x*x); } main() { float a, p;
printf("Please input value of a:"); scanf("%f",&a); p=c(a); printf(”Cube of %.4f is %.4f\n",a,p); } 运行情况:
int sum(int 3x, int 2y3 )
int c; a=3;b=23;
{ int z; z=x+y; 等价于z=3+23;
c=sum(a,b);
return(z); 等价于sum=z;
printf(“sum is %d\n",c); }
}
• 1.2 函数参数及其传递方式
形参与实参
说明:
内存的变化情况
a ×1×.2
p
1×.7×28
x
1.2
Please input value of a: 1.2
–1.3参数传递方式
•值传递方式
–方式:函数调用时,为形参分配单元,并将实参 的值复制到形参中;调用结束,形参单元被释 放,实参单元仍保留并维持原值
–特点: » 形参与实参占用不同的内存单元 » 单向传递 » 实参可以是常量、变量或表达式,但必须有 确定的值。
1、实参必须有确定的值
sum(int x, int y) { int z;
z=x+y; return(z); }
main() { int a,b,c;
scanf("%d,%d",&a,&b); c=sum(a,b); printf(“sum is %d",c); }
main() { int a,b,c;
c=max(a,b); (main 函数) c=max(a,b);
实参
max(int x, int y) (max 函数) printf("Max is %d",c);
{ int z;
}
z=x>y?x:y; return(z); }
max(int x, int y) { int z;
形参
z=x>y?x:y;
相关文档
最新文档