




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验3-2 函数(上)【实验目的】1. 掌握return的用法2. 熟练掌握函数使用的三个环节:声明、定义、调用3. 掌握逐步求精的解决问题的方法4. 掌握函数调用机制的执行流程,掌握程序跳转被调函数前必做的三件事:类型匹配、为形参开辟空间、实参向形参单向值传递5. 正确识别实参与形参,掌握实参向形参单向顺序值传递的特性【实验内容】Part1:基础练习(课堂练习)1. C语言中,以下不正确的说法是 B 。A. 实参可以是常量、变量或表达式B. 形参可以是常量、变量或表达式C. 实参可以为任意类型D. 形参应与其对应的实参类型一致2. 以下正确的说法是 C 。A. 定义函数时,形参的类型说明可以放在函数体内B. return后面的值不能为表达式C. 如果函数首部的返回值类型与函数体中return语句中带回的参数类型不一致,以函数首部的返回类型为准D. 如果形参与实参的类型不一致,以实参类型为准3. C语言中,简单数据类型的变量作为实参,它和对应形参之间的数据传递方式是 B 。A. 地址传递B. 单向值传递C. 由实参传给形参,再由形参传回给实参D. 由用户指定传递方式4. 以下说法正确的是 B 。A. 函数定义可以嵌套,但函数的调用不可以嵌套B. 函数定义不可以嵌套,但函数的调用可以嵌套C. 函数定义和函数的调用均不可以嵌套D. 函数定义和函数的调用均可以嵌套5. 以下程序有语法性错误,有关错误原因的正确说法是 C 。main()int Digit = 5, k;void prt_char();k = prt_char(Digit);A. 语句void prt_char();有错,它是函数调用语句,不能用void说明B. 变量名不能使用大写字母C. 函数说明和函数调用语句之间有矛盾D. 函数名不能使用下划线6. C语言允许函数值类型缺省定义,此时该函数返回值隐含的类型是 B 。A. float 型 B. int 型 C. long型 D. double型7. 以下错误的描述为 D 。A. 函数调用可以出现在执行语句中B. 函数调用可以出现在一个表达式中C. 函数调用可以作为一个函数的实参D. 函数调用可以作为一个函数的形参8. C语言中,如何指出函数的结果?函数首部中的ResultType9. 假设有一函数,原型如:double func(double, double); 即使对该函数要做什么一无所知,该原型提供了哪些有关使用该函数的信息?返回值类型,函数名,参数个数及类型10. 分析以下程序,试说明以下程序执行流程,并解释程序执行结果(1)L2处并无错误,此时系统将默认该函数的返回值类型为 int 型。但这不是好习惯,建议将该句改写为 void fun (int x,int y); ,同时第 11 行也应同步修改为 void fun (int x,int y) 。(2)程序的执行流程为:L5:程序执行的入口点L6:程序为main中的x, y 分配空间,并初始化x= 2 ,y= 3 。 L7: 此处进行函数 调用 (声明?定义?调用?),此处的 x,y叫做 实参 (实参or形参?),程序执行到L7时,将跳转到第 12 行。L11:本行中的x, y叫做 形参 (实参or形参?)这里的变量x与main中的x是同一个变量吗? 不是 y呢? 不是 L13:本行结束后,x = 5 L14:本行执行完毕后,y = 2 L15:本行结束后,x = 3 L16:本行输出内容为: in fun:x=3,y=2 L17:fun函数执行完毕,从结果观察,fun函数的功能是对调形参数值。然后程序将返回第 8 行L8: 本行输出内容为 in main:x=2,y=3 L9:结束程序,尝试解释L16的输出与L8的输出为何不一样? 值传递中,对形参的修改不影响实参 11. 定义函数digit(n,k),它回送整数n的从右开始数第k个数字的值。例如:digit(15327,4)=5; digit(289,5)=0,请尝试补充完成本程序。#include int digit(int n,int k); /声明函数void main()int n, k;printf(Enter n,k: ); scanf(“%d,%d”,&n,&k); /接收用户输入的n,k值printf(nThe result is:%dn, digit(n,k) ); /调用函数 int digit( int n,int k )/定义函数,内容行数不限,实现功能即可 int d; for(d=1;dk;d+) n/=10; d=n%10; return (d); /向主调函数返回第k位数字值12. 程序填空#include double max(double a,double b); main()double x, y;printf(please input two double number: );scanf(%lf %lf, &x, &y);printf(%.2fn, max( x , y );double max(double a, double b)return ( ab?a:b );13. 定义一个函数check(n, d),它回送一个结果。如果数字d在整数n的某位中出现,则回送“真”,否则回送“假”。例如:check(3256,2)=true; check(1725,3)=false编写完整的程序。改进版:类似于上例,6出现在41632中,那么能否具体告知出现在右起第几位?如check(41632, 6)=3,若未出现,则check(1725,3)=0本题答案仅上交其中一个版本即可#include void check(int n,int d); /声明函数main()int n,d;printf(Enter n,d:);scanf(%d,%d,&n,&d);check(n,d); /函数调用printf(n);void check(int n,int d)/函数定义int i,count=0;for(i=n;i0;i/=10) /d不在n中的出口 count+;/计数 if(i%10=d) /取个位数与d进行比较判断 break; /d在n中的出口if(i0)/d在n中的出口printf(The digit %d is in data %d,position is %d.,d,n,count);else /d不在n中的出口printf(The digit %d is not in data %d.,d,n);Part2:巩固提高(课后实践)1. 有程序如下:(1) 本程序中,除了主函数main之外,有一个用户自定义函数,该函数名为 fun ,在第 8 行中声明,在第 14 行到第 18行定义,在第 10 行被调用。(2) 上述函数定义中,函数头(函数首部)在第 14 行,函数体在第 15 行到第 18 行。其中函数头定义了返回值类型为 int ,参数个数为3 ,函数定义中的参数称为 形参 (形参or实参)。其中的参数列表中,参数类型说明能否省略? 不能 。(3) 出现在函数调用中的参数称为 实参 (形参or实参)。其中的参数列表中,能否使用参数类型说明符? 否 。(4) 在程序的执行流程中,由L10跳转到L15之前,系统要做的三件事为:a. 分别检查5、2、a和x、y、z的类型是否匹配,由于这6个常量或变量均为int型,因此匹配成功。b. 为 x,y,z 开辟空间。c. 实参向形参传值,因此 x = 5 , y = 2 , z = a 。(5) 运行结果是_ a=31,value=29 。2. 有程序如下:(1) 本程序中,除了主函数main之外,有一个用户自定义函数,该函数名为 func ,在第 6 行到第 9 行定义,在第 15 行被调用。注意本程序隐式地声明了该函数,系统只在用户函数出现在主调函数之 前 时,才能隐式声明函数。(2) 本程序中,函数两次被调用。第一次函数调用为L15中的func(x,y),在程序的执行流程中,由L15跳转到L7之前,系统要做的三件事为:d. 分别检查 x 、 y 和 a 、 b 的类型是否匹配,由于这4个常量或变量均为int型,因此匹配成功。e. 为 形参 a,b 开辟空间。f. 实参向形参传值,因此 a = 2 , b = 5 。(3) L8执行加法操作带值 7 返回第 15 行,该值作为函数参数再次进行函数调用,相当于func( 7 , z),在程序的执行流程中,由L15跳转到L7之前,系统要做的三件事为:g. 分别检查 7 、 z 和 a 、 b 的类型是否匹配,由于这4个常量或变量均为int型,因此匹配成功。h. 为 a,b 开辟空间。i. 实参向形参传值,因此 a = 7 , b = 8 。(4) 运行结果是 15 。注意:本程序及说明函数调用也可以作为函数的参数出现,也说明函数调用可以嵌套。3. 参考课件中阶乘的求解方法,请补充完成函数设计,计算组合数与排列数,并进行测试。#include int factorial (int base); /阶乘计算函数int combination(int n, int k); /组合数计算函数int permutation(int n, int k); /排列数计算函数main() int n, k, comb, perm; printf(please input two number,like x y: ); scanf(%d %d, &n, &k); comb = combination(n, k);perm = permutation(n, k);printf(comb(%d, %d) = %d.n, n, k, comb);printf(perm(%d, %d) = %d.n, n, k, perm);int factorial (int base)int count , product=1;for(count=1; count = base; count+) product *= count;return (product);int combination(int n, int k)return(factorial(n)/(factorial(k)*factorial(n-k);/返回组合数int permutation(int n, int k)return(factorial(n)/factorial(n-k);/返回排列数4. 写一个GetPower函数,向它提供两个整数n和k,返回nk。并设计主函数显示一张2k的表,k从010。#include int GetPower(int n,int k);/函数声明main()int k,count=0;for(k=0;k=10;k+)printf(pow(2,%d)=%-6d,k,GetPower(2,k);count+;if(count%5=0)printf(n);printf(n);int GetPower(int n,int k)/函数定义int i,x=1;for(i=1;i=k;i+)x*=n;return(x);5. 编写一个函数,计算某日是该年的第几天?(1) 不考虑是否闰年的情况,2月份一律按28天计算,在主函数中输入月、日,在主函数中输出该日是一年中的第几天。(2) 改进版:考虑闰年的情况,在主函数中输入年、月、日,在主函数中输出该日是该年的第几天。(提示:是否是闰年的判别条件为两个:l 能被4整除,但不能被100整除的年份l 能被100整除,又能被400整除的年份,参阅教科书P17,P107)#include main()int i,m,d;int a12=31,28,31,30,31,30,31,31,30,31,30,31;/inputprintf(Please input month and day:);scanf(%d,%d,&m,&d);/calculationfor(i=0;im-1;i+)d+=ai;/outputprintf(This is %dth day of a year.n,d);(2)#include int isLeapYear(int n,int s);/检验是否是闰年main()int i,m,d,y;int a12=31,28,31,30,31,30,31,31,30,31,30,31;/inputprintf(Please input year month and da
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 菌群移植生物标志物-第1篇-洞察及研究
- 油墨厂搅拌桨磨损细则
- 江苏省苏州市昆山市秀峰中学2025-2026学年上学期七年级9月月考数学卷(含答案)
- 2024-2025学年湖南省张家界市高二(下)期末物理试卷(含答案)
- 印刷厂油墨存储管理规定
- 手受伤后安全培训课件
- 社区结构预测-洞察及研究
- 手势小星星课件
- 中国银行新员工思想汇报模板图文
- 咨询工程师《项目决策分析与评价》考试题(附答案)
- ISO 22000-2018食品质量管理体系-食品链中各类组织的要求(2023-雷泽佳译)
- 卡巴斯基应急响应指南
- 理财规划大赛优秀作品范例(一)
- 2023年四川能投筠连电力招聘笔试参考题库附带答案详解
- 护理管理组织结构与设计
- 静配中心清洁消毒考核试题
- 一级烟草专卖管理师理论考试题库(含答案)
- 小学数学《分数除法》50道应用题包含答案
- 碳捕集、利用与封存技术课件
- 化工试生产总结报告
- 复句与单句的辨析课件
评论
0/150
提交评论