大连东软信息学院C语言实验六-函数_第1页
大连东软信息学院C语言实验六-函数_第2页
大连东软信息学院C语言实验六-函数_第3页
大连东软信息学院C语言实验六-函数_第4页
大连东软信息学院C语言实验六-函数_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验六 函数一、实验目的1掌握自定义函数的一般结构及定义 函数的方法。2掌握形参、实参、函数原型等重要概念。3掌握函数声明、函数调用的一般方法。4. 了解函数的嵌套调用以及函数的递归调用的格式。二、实验预习1 .理解为什么要在程序中引入函数?函数的引入对程序的整体结构有什么样的影响?2. 函数的定义格式,理解函数的类型说明符根据什么来确定?3. 充分理解函数实参和形参的联系和区别,掌握单向值传递的意义。4. 了解针对不同返回类型的函数返回值的应用,尤其是有无return语句的区别。5. 掌握函数调用与函数声明的格式,了解什么情况下需要进行函数声明?什么情况下不需要?6. 了解函数嵌套调用和递归

2、调用的原理及使用原则。三、实验内容(一)阅读并调试下列程序,根据要求给出程序结果。1求三角形面积函数。 编程分析 设三角形边长为a、b、c,面积area的算法是s=(a+b+c)/2,area= ,其中 显然,要计算三角形面积,需要用到三个参数,面积函数的返回值的数据类型应为实型。 尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。 参考程序/* 定义和使用求三角形面积函数的程序 */#include math.h#include stdio.hfloat area(float,float,float);

3、/*函数的声明*/ void main() float a,b,c; printf(请输入三角形的三个边长值:n) scanf(%f,%f,%f,&a,&b,&c); if(a+bc&a+cb&b+ca&a0.0&b0.0&c0.0) printf(Area=%-7.2fn,area(a,b,c); /* 以下是计算任意三角形面积的函数 */float area(float a,float b,float c) float s,area_s; s=(a+b+c)/2.0; area_s=sqrt(s*(s-a)*(s-b)*(s-c); return(area_s); 程序调试 三角形面积函数

4、area()不能单独调试,需要通过主函数调用来进行调试。 输入多个边长数据进行测试,在输入时,应考虑多种情况,如:负数值、零值、构不成三角形的数值等。运行结果:1.可构成:2.含有负数:3.含有零值:4.构不成: 上述2;3;4三种类型输入回车后退出程序。2菜单程序。编写一个菜单程序,运行后首先在屏幕显示如下菜单,当输入数值1后,调用显示“&”图案的函数程序;输入数值2后,调用显示“$”图案的函数程序;输入数值3后结束程序。* Menu section * 1. Design(&) * 2. Design($) * 3. Exit * 编程分析 在主程序中生成菜单,并提供数值输入和函数调用功能

5、。 分别设计显示“&”图案的design1()函数和显示“$”图案的design2()函数,以供主函数调用。design1()和design2()都为void型函数,无返回值,函数参数也可以缺省。 参考程序/* 菜单程序 */#include stdio.hvoid design1(),design2();void main() int op; /* 以下代码生成菜单 */ printf(n*); printf(n* Menu section *); printf(n* 1. Design(&) *); printf(n* 2. Design($) *); printf(n* 3. Exit

6、*); printf(n*); printf(nPlease enter selection:); scanf(%d,&op); if(op=1) design1(); else if(op=2) design2(); else exit(0);/* 以下是显示&图案的函数 */void design1() int i; char str31=&; for(i=1;i10;i+) puts(str); return;/* 以下是显示$图案的函数 */void design2() int i,j; for(i=1;i10;i+) for(j=1;ji;j+) putchar( ); for(j=

7、1;j30;j+) putchar($); printf(n); return; 程序调试 为提高程序的调试效率,在设计使用菜单程序之前,首先调试两个图案显示函数。1. design1 的调试: #include void design1();void main() design1(); getch(); void design1() int i; char str31=&; for(i=1;i10;i+) puts(str); return; 调试后运行结果:2. design2 的调试: #include void design2();void main() design2(); getc

8、h(); void design2() int i,j; for(i=1;i10;i+) for(j=1;ji;j+) putchar( ); for(j=1;j30;j+) putchar($); printf(n); return;调试后运行结果: 在调试菜单程序时,可以使用简单的空函数,即函数体只包含一个“return;”语句的函数。 将主函数中的ifelse结构尝试采用switch结构来实现,给出最后结果,并分析两种实现方法的异同。switch 结构:switch(op) case 1: design1();break; case 2: design2();break; case 3:

9、 exit(0);break; default(): printf(Please input correct selections number); 简单分析:if-else 语句书写更为简单易懂,两者结果相同。 3. 分析下面的程序,根据所学内容对上述程序进行调试,调试通过后写出运行结果。(1)程序分析 下面这个程序运行有些错误,学生应该从以下几点来考虑如何修改,使程序正常运行。在函数被调用前是否需要函数声明?函数返回值是否需要return语句?函数定义时的类型标识符应该根据什么来确定? 根据以上的提示对程序进行调试,并总结出这一类程序的关于函数声明,函数调用以及函数的返回值等相关的语法点。

10、(2)参考程序#include main() float n;float x=1.0,y=2.0; n=s(x,y); printf(x=%5.2f,y=%5.2f,n=%5.2f,x,y,n);s(float x,float y) float z; float x=3.0,y=4.0; z=x+y;(3)程序的执行结果为:调试结果:#include float s(float,float);main() float n; float x=1.0,y=2.0; n=s(x,y); printf(x=%5.2f,y=%5.2f,n=%5.2f,x,y,n); getch();float s(fl

11、oat a,float b) float z; a=3.0,b=4.0; z=a+b; return(z);运行结果:(二)程序编制题1. 写一个函数,使给定的一个二维整型数组(33)转置,即行列互换。编写结果:#include void copy(int s13);main() int s133=1,2,3,4,5,6,7,8,9; int i,j; copy(s1); for(i=0;i3;i+) for(j=0;j3;j+) printf(%3d,s1ij); printf(n); getch();void copy(int s13) int i,j,temp; for(i=0;i3;i

12、+) for(j=0;ji;j+) /*这个程序是学生改编人家的,这一行ji 换了其他方法不可以,它这个也不太明白,不知您是否可以上课给我们把嵌套中的东西讲一下*/ temp=s1ij; s1ij=s1ji; s1ji=temp; 运行结果:2. 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。编写结果:(不知道对不,实在有点头疼,用到主函数中有很多错误,也可能主函数有错)void turn(char An,char Bn) int i; char temp; temp=Ai; Ai=Bn; Bn=temp; i+,n-;运行结果:3. 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。四、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论