第六章 实验报告(函数与宏定义)2

Posted gnxyxlzj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章 实验报告(函数与宏定义)2相关的知识,希望对你有一定的参考价值。

C程序设计实验报告

实验项目:函数和宏定义实验

姓名:罗子健 实验地点:物联网实验室 实验时间:2019年5月16日

一、实验目的与要求

(1)掌握函数定义方法和调用规则。

(2)掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则。

(3)了解函数的返回值及其类型,并正确使用它。

(4)了解局部变量和全局变量的作用域及它们与储存分类的关系,理解变量的存在性和可变性的概念。

(5)练习递归函数的使用。

(6)理解宏的概念,掌握定义无参宏和带参宏的方法。了解文件包含的概念,掌握其用法。

(7)理解内部函数和外部函数,了解外部函数的编译和连接的方法。


 

二、实验内容

6.4.2 实验练习2

1、问题的简单描述:利用复式梯形公式计算定积分。

2、实验流程图、代码和结果:

技术图片

 1 /*sab.h*/
 2 #include<stdio.h>
 3 double f(double x);
 4 double sab(double a, double b,int n)
 5 {
 6     double h,result,x1,x2,x3=0,t,k;
 7     h=(b-a)/n;/*求h的值*/
 8     x1=f(a);/*求f(a)的值*/
 9     x2=f(b);/*求f(b)的值*/
10     for(k=1;k<=(n-1);k++)/*for循环的循环体*/
11     {
12     t=a+k*h;
13     x3=x3+f(t);/*求h n-1Σk=1f(xk)*/
14     } 
15     result=h*(x1+x2)/2+h*x3;/*最终的值存入result中*/
16     return result; 
17 }
 1 /*2-1.cpp*/
 2 #include<stdio.h>
 3 #include<math.h>
 4 #include"sab.h"
 5 double f(double x)
 6 {
 7     double result;
 8     result=x*x*exp(x);/*f(x)=x^2*e^x的程序段*/
 9     return result; 
10 }
11 main()
12 {
13     double a,b,result;
14     int n;
15     printf("请输入a,b,n:");/*提示输入a,b,n*/
16     scanf("%lf,%lf,%d",&a,&b,&n);/*输入a,b,n*/
17     result=sab(a,b,n);/*调用sab(a,b,n)求积分*/
18     printf("sab=%lf",result);/*输出结果*/
19     return 0;
20 }
 1 /*2-2.cpp*/
 2 #include<stdio.h>
 3 #include"sab.h"
 4 double f(double x)
 5 {
 6     double result;
 7     result=1/(25+x*x);/* f(x)=1/(25+x*x); f(x)=1/(25+x^2)的程序段*/
 8     return result; 
 9 }
10 main()
11 {
12     double a,b,result;
13     int n;
14     printf("请输入a,b,n:");/*提示输入a,b,n*/
15     scanf("%lf,%lf,%d",&a,&b,&n);/*输入a,b,n*/
16     result=sab(a,b,n);/*调用sab(a,b,n)求积分*/
17     printf("sab=%lf",result);/*输出结果*/
18     return 0;
19 }

技术图片

技术图片

3、问题分析:要分成3个独立的文件,就好比是html中css的引用一样的使用。

6.4.2 实验练习3

1、问题的简单描述:计算Ackerman函数。

2、实验流程图、代码和结果:

技术图片

 1 #include<stdio.h>
 2 int Ack(int n,int x,int y)
 3 {
 4     int a;
 5     if(n==0)/*判断回归条件1的if语句头部*/
 6     a=x+1;
 7     if(n==1&&y==0)/*判断回归条件2的if语句头部*/
 8     a=x;
 9     if(n==2&&y==0)/*判断回归条件3的if语句头部*/
10     a=0;
11     if(n==3&&y==0)/*判断回归条件4的if语句头部*/
12     a=1;
13     if(n>=4&&y==0)/*判断回归条件5的if语句头部*/
14     a=2;
15     if(n!=0&&y!=0)
16     a=Ack(n-1,Ack(n,x,y-1),x);/*进一步递推的语句*/
17     return a;
18 }
19 main()
20 {
21     int n,x,y,result;
22     printf("please input n,x,y:");/*提示输入n,x,y*/
23     scanf("%d,%d,%d",&n,&x,&y);/*输入n,x,y*/
24     if(n<0&&x<0&&y<0)
25     printf("输出错误并重新输入");/*如果输入不合法,输出错误提示信息并重新输入*/
26     else
27     result=Ack(n,x,y);/*用输入的两个数据,调用递归函数*/
28     printf("Ack(%d,%d,%d)=%d\\n",n,x,y,result); 
29 }

 技术图片

3、问题分析:注意判断输入不合法的条件。

6.4.3 实验练习1

1、问题的简单描述:编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出。

2、实验流程图、代码和结果:

技术图片

 1 #include"stdio.h"
 2 long getpower(int x, int y)
 3 {
 4     if(y==1)/*判断回归条件的if语句头部*/
 5         return x;
 6     else
 7         return x*getpower(x,y-1);/*进一步递推的语句*/ 
 8 }
 9 main()
10 {
11     int num, power;
12     long answer;
13     printf("输入一个数:");/*提示输入一个数*/
14     scanf("%d",&num);/*输入一个整数*/
15     printf("输入幂次方:");/*提示输入幂次方*/
16     scanf("%d",&power);/*输入一个整数*/
17     answer=getpower(num,power);/*用输入的两个数据,调用递归函数*/
18     printf("结果是:%ld\\n", answer); 
19 } 

技术图片

3、问题分析:无

6.4.3 实验练习2

1、问题的简单描述:编写计算学生年龄的递归函数。

2、实验流程图、代码和结果:

技术图片

 1 #include<stdio.h>
 2 int age(int n)
 3 {
 4     int c;
 5     if(n==1)/*判断回归条件的if语句头部*/
 6         c=10;
 7     else
 8         c=age(n-1)+2;/*进一步递推的语句*/ 
 9     return c;
10 } 
11 main()
12 {
13     int n=5;
14     n=age(n);/*调用递归函数输出第5位学生的年龄*/
15     printf("第5位学生的年龄是:%ld\\n",n); 
16 }

 技术图片

3、问题分析:无

6.4.3 实验练习3

1、问题的简单描述:编写递归函数实现Ackman函数。

2、实验流程图、代码和结果:

 技术图片

 1 #include<stdio.h>
 2 Acm(int m,int n)
 3 {
 4     int a;
 5     if(m==0)/*判断回归条件的if语句头部*/
 6         a=n+1;
 7     if(n==0)
 8         a=Acm(m-1,1);
 9     if(n>0&&m>0)
10         a=Acm(m-1,Acm(m,n-1));/*进一步递推的语句*/
11 }
12 int main()
13 {
14     int a,b;
15     a=Acm(2,1);
16     b=Acm(3,2);
17     printf("Acm(2,1)=%d\\nAcm(3,2)=%d",a,b);/*调用Acm函数输出Acm(2,1)和Acm(3,2)的结果*/
18     return 0; 
2 }

 技术图片

3、问题分析:无


 

三、实验小结(在本次实验中收获与不足)

在寝室写实验报告时,实验报告的数据的前两个总是不能得到正确答案,在请教周萌同学之后,才发现是因为逗号的原因,因为在运行框中输入的逗号是中文逗号,而不是英文逗号,所以不能获得正确的实验数据。在以后的程序编写过程中,要注意中英文的切换。要注意到符号的不同所导致的错误。

以上是关于第六章 实验报告(函数与宏定义)2的主要内容,如果未能解决你的问题,请参考以下文章

第六章 实验报告(函数与宏定义)

第六章 实验报告 (函数与宏定义)

第六章函数与宏定义实验报告(后半部分)

第六章 实验报告 (函数与宏定义)

第六章函数与宏定义实验报告

第六章实验报告(函数与宏定义)