• 第六章 实验报告(函数与宏定义)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,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
    ", 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); 
    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
    Acm(3,2)=%d",a,b);/*调用Acm函数输出Acm(2,1)和Acm(3,2)的结果*/
    18     return 0; 
    2 }

     

    3、问题分析:无


     

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

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

  • 相关阅读:
    ERROR 1045 (28000): Access denied for user root@localhost (using password:
    MySQL: InnoDB 还是 MyISAM?
    PHP系统函数
    为什么分离数据库软件和数据库服务?
    C#索引器的作用及使用
    asp.net 中Session的运用,及抛出错误“未将对象引用设置到对象的实例”
    C#父类对象和子类对象之间的转化
    C#中属性简写原理
    c# 中Intern的作用
    C# 中ref和out的区别
  • 原文地址:https://www.cnblogs.com/gnxyxlzj/p/10885588.html
Copyright © 2020-2023  润新知