• 演讲稿大全
  • 辩论技巧
  • 演讲口才
  • 口才技巧
  • 口才训练
  • 谈判技巧
  • 朗诵技巧
  • 练声方法
  • 当前位置: 工作范文网 > 口才 > 练声方法 > 正文

    C语言实验报告(函数应用)

    时间:2020-10-19 08:52:13 来源:工作范文网 本文已影响 工作范文网手机站

    C 语言程序设计 II 实验报告

    题 目:实验五 函数应用

    院系名称

    计算机学院

    专业名称

    计算机科学与技术

    班 级

    学 号

    学生姓名指导教师

    实验日期

    2017

    年 4 月 1 日

    报告提交截止日期: 2017 年 4 月 11 日

    .

    .

    一、 实验目的

    1、 掌握 C 语言函数的定义方法、 函数的声明及函数的调用方法及 调用过程;

    2、 掌握主调函数和被调函数之间的参数传递方式;

    二、 实验内容与要求:

    1、 求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用

    另一个函数根据求出的最大公约数求最小公倍数。 (提示: 设两个整数是

    a,b,最大公约数是 p, 最小公倍数是 q, 那 么 ab=pq )

    2、 用牛顿迭代法求方程 f(x)=ax

    3

    +bx

    2

    +cx+d=0 的根。系数 a、 b、c、d 由主

    函数输入。求根过程写成函数。 (提示:牛顿迭代法是先给定方程 f(x)=0

    的一个较好的初始近似根 x0,然后重复使用迭代公式 :

    x x0

    f ( x0 ) f ' ( x0 )

    求 x 的近似解,直至相邻两次的近似解相差很小为止,如差值的绝对值小于 1e-07 。x 0 可以从键盘输入或直接设定。 )

    3、 定义一个函数,功能是计算 n 个学生的成绩中高于平均成绩的人数,并作为函数返回值。用主函数来调用它。统计 30 个学生成绩中高于平均成

    绩的有多少人。

    4、 编写程序, 计算下列函数值:

    

    f (m, n)

    

    s(m)

    ,其中 ,m ,n 为正整数,

    s(n)

    s( n)

    n

    p(i )

    i 1

    

    p(1)

    

    p( 2)

    

    p(n) , p(i ) i!

    5、 编写和调用函数,给定圆筒的内径、外径和高,计算该圆筒的体积;给定圆锥的高、底面半径,计算该圆锥的体积和表面积。

    6、 编写和调用函数,求出 10000 以内的所有 素数 、 绝对素数 、水仙花数 、完全数 (或称 完数 )、互满数 。

    提示:一个素数经过任意次调换位,仍然为素数,则称其为 绝对素数 , 例如 13 和 31 就是一个绝对素数。 水仙花数 是指一个三位整数,其各位数字立方之和等于该数。例如, 153 就是一个水仙花数: 153=1*1*1+ 5*5*5+3*3*3 。完全数 是指一个数正好是它的所有约数 (本身除外) 之和。例如, 6 就是一个完全数,因为 6 的因子有 1、2、 3,并且 6=1+2+3 。如果有两个数,每一个数的所有约数(除它本身以外)之和正好等于对

    方,则称这两个数为 互满数 。

    三、 实验结果

    题目内容与要求:求两个整数的最大公约数和最小公倍数。用一个函数求最大

    公约数, 用另一个函数根据求出的最大公约数求最小公倍数。

      (提示: 设两个整数是 a,b,最大公约数是 p,最小公倍数是 q,那么 ab=pq )

    算法简要描述(文本) :通过循环找出最大公约数,根据公式求最小公倍数。源代码标识符说明(文本) : a,b 存储数字 i,j 找最小公倍数和最大公因数。源代码(粘贴程序,注意缩进,不得使用截图) :

    #include"stdio.h" int f(int a,int b)

    {int i,j; if(a>b)

    {a=a+b;b=a-b;a=a-b;

    }

    for(i=a;i>=1;i--) if(a%i==0&&b%i==0) return i;

    }

    int s(int a,int b,int i)

    {return a*b/i;

    }

    main()

    {

    int a,b; while(1)

    {

    scanf("%d%d",&a,&b);

    printf(" 最大公约数 :%d\n最小公倍数 :%d\n",f(a,b),s(a,b,f(a,b)));

    }}

    实 验 测 试 结 果 ( 使 用 截 图 , 图 形 格 式 JPEG 。

     截 图 不 要 包 含 源 代 码 ):

    讨论(文本) :

    题目内容与要求: 用牛顿迭代法求方程

    3

    f(x)=ax +bx

    2

    +cx+d=0

    的根。

     系数 a、b、

    c、d 由主函数输入。

      求根过程写成函数。(提示: 牛顿迭代法是先给定方程 f(x)=0

    的一个较好的初始近似根 x0,然后重复使用迭代公式 :

    x x0

    f ( x0 ) f ' ( x0)

    求 x 的近似解,直至相邻两次的近似解相差很小为止,如差值的绝对值小于

    1e-07 。x0 可以从键盘输入或直接设定。 )

    算法简要描述(文本) :通过构造函数实现题中给的公式。源代码标识符说明(文本) : a,b,c,d, 存 系 数 x 存 根 。源代码(粘贴程序,注意缩进,不得使用截图) :

    #include"stdio.h" #include"math.h"

    float f1(float a,float b,float c,float d,float x)

    {return (a*x*x*x+b*x*x+c*x+d);

    }

    float f2(float a,float b,float c,float x)

    {return (3*a*x*x+2*b*x+c);

    }

    main()

    {

    while(1)

    {float a,b,c,d,x,y,m,n; scanf("%f%f%f%f%f",&a,&b,&c,&d,&x); do

    {x=y;

    m=f1(a,b,c,d,x);n=f2(a,b,c,x); y=x-(m/n);

    }while(fabs(x-y)>=1e-7);

    printf("%.2f\n",y);

    }}

    实 验 测 试 结 果 ( 使 用 截 图 , 图 形 格 式 JPEG 。

     截 图 不 要 包 含 源 代 码 ):

    讨论(文本) :

    题目内容与要求: 定义一个函数,功能是计算 n 个学生的成绩中高于平均成绩的人数, 并作为函数返回值。 用主函数来调用它。 统计 30 个学生成绩中高于平均成绩的有多少人。

    算法简要描述(文本) :构造函数求出平均值,再和平均值一一比较。

    源代码标识符说明 (文本):p 指针变量操作数组。 q 存大于平均值成绩的个数。源代码(粘贴程序,注意缩进,不得使用截图) : #include"stdio.h"

    int f(float *p,int n)

    {int i,q=0;float s=0; for(i=0;i<n;i++) s+=*(p+i); for(i=0;i<n;i++)

    {if(*(p+i)>(s/n)) q++;

    }

    return q;

    }

    main()

    {float a[30]; int i,n=30;

    for(i=0;i<n;i++) scanf("%d",&a[i]);

    printf("%d",f(a,n));

    }

    实 验 测 试 结 果 ( 使 用 截 图 , 图 形 格 式 JPEG 。

     截 图 不 要 包 含 源 代 码 ):

    讨论(文本) :

    4

    题目内容与要求: 编写程序,计算下列函数值:

    

    f ( m, n)

    s(m)

    s(n)

    

    ,其中 ,m,n

    为正整数,

    

    s(n)

    n

    p(i )

    i 1

    

    p (1)

    

    p(2)

    

    p(n) , p(i ) i!

    算法简要描述(文本) :构造一个阶乘函数。源代码标识符说明(文本) : x 存数据。

    源代码(粘贴程序,注意缩进,不得使用截图) :

    #include"stdio.h" long long s(int x)

    {if(x==1) return 1; return x*s(x-1);

    }

    long long f(int a,int b)

    {return s(a)/s(b);

    }

    main()

    {

    int a,b; while(1)

    {scanf("%d%d",&a,&b);

    printf("%d!=%lld %d!=%lld\n",a,s(a),b,s(b));

    printf("s(a)/s(b)=%lld\n",f(a,b));

    }}

    实 验 测 试 结 果 ( 使 用 截 图 , 图 形 格 式 JPEG 。

     截 图 不 要 包 含 源 代 码 ):

    讨论(文本) :

    题目内容与要求: 编写和调用函数,给定圆筒的内径、外径和高,计算该圆筒的体积;给定圆锥的高、底面半径,计算该圆锥的体积和表面积。

    算法简要描述(文本) :构造圆锥和圆筒体积表面积函数

    源代码标识符说明(文本) : a,b,c 存数据。

    源代码(粘贴程序,注意缩进,不得使用截图) :

    # include"stdio.h" #include"math.h"

    #define PI 3.1415926

    float v(float a,float b,float h)

    {if(b!=0)

    return PI*(b*b-a*a)*h; return PI*a*a*h/3;

    }

    float s(float a,float h)

    {return PI*a*sqrt(a*a+h*h)+PI*a*a;

    }

    main()

    {float a,b,h; while(1)

    {

    printf(" 请输入圆筒的内径,外径,高 \n"); scanf("%f%f%f",&a,&b,&h);

    printf("v=%f\n",v(a,b,h)); b=0;

    printf(" 请输入圆锥的半径,高 \n");

    scanf("%f%f",&a,&h);

    printf("v=%f s=%f\n",v(a,b,h),s(a,h));

    }}

    实 验 测 试 结 果 ( 使 用 截 图 , 图 形 格 式 JPEG 。

     截 图 不 要 包 含 源 代 码 ):

    讨论(文本) :

    题目内容与要求: 编写和调用函数,求出 10000 以内的所有 素数、 绝对素数 、水仙花数 、完全数 (或称 完数 )、互满数 。

    提示:一个素数经过任意次调换位,仍然为素数,则称其为 绝对数 ,例如 13

    和 31 就是一个绝对素数。 水仙花数 是指一个三位整数,其各位数字立方之和

    等于该数。例如, 153 就是一个水仙花数: 153=1*1*1+ 5*5*5+3*3*3 。完全数是指一个数正好是它的所有约数(本身除外)之和。例如, 6 就是一个完全数,

    因为 6 的因子有 1、2 、3,并且 6=1+2+3 。如果有两个数,每一个数的所有约

    数(除它本身以外)之和正好等于对方,则称这两个数为 互满数 。

    算法简要描述(文本) :构造出各自函数,通过调用实现。绝对素数在已知的素

    数里面通过移位再判断是否是素数。

    源代码标识符说明(文本) : x,a,b,c 存数据。

    源代码(粘贴程序,注意缩进,不得使用截图) :

    #include"stdio.h" #include"math.h" int f(int i)

    {int j,k=sqrt(i);

    for(j=2;j<=k;j++) if(i%j==0) break; if(j>=k+1) return 1;

    else return 0;

    }

    int g(int x)

    {int i,a,b,c; for(i=100;i<=x;i++)

    {a=i%10;b=i/100;c=(i-b*100)/10;

    if(i<=999&&i==a*a*a+b*b*b+c*c*c) printf("% d",i);}

    }

    int h(int x)

    {int i,j,k,a; for(i=2;i<=x;i++)

    {a=0;

    for(j=1;j<=i/2;j++) if(i%j==0)

    a+=j; if(a==i)

    printf("% d",i);

    } }

    int w(int x)

    {int j,a=0; for(j=1;j<=x/2;j++) if(x%j==0)

    a+=j;

    return a;

    }

    int s(int x)

    {int i,j,k; for(i=1;i<=x;i++) if(w(w(i))==i)

    {if(w(i)<i) continue;

    printf("%d,%d ",i,w(i));

    }}

    main()

    {int i,j=0,x,a,b,c,m[1000]; scanf("%d",&x);

    printf(" 素数为:\n");

    for(i=2;i<=x;i++) if(f(i))

    {printf("%5d",i); if(i>9&&i<100)

    if(f(i%10*10+i/10)) m[j++]=i; if(i>100&&i<=999)

    {c=i%10;a=i/100;b=(i-a*100)/10; if(a%2==0||b%2==0||c%2==0||a==5||b==5||c==5) continue;

    if(f(a*100+c*10+b)&&f(b*100+c*10+a)&&f(b*100+a*10+c)&&f(c*10 0+b*10+a)&&f(c*100+a*10+b))

    m[j++]=i;

    }}

    printf("\n 绝对素数为 :"); for(i=0;i<j;i++)

    printf("% d",m[i]);

    printf("\n 水仙花数为 :"); g(x);

    printf("\n 完全数为 :"); h(x);

    printf("\n 互满数为 :\n"); s(x);

    }

    实 验 测 试 结 果 ( 使 用 截 图 , 图 形 格 式 JPEG 。

     截 图 不 要 包 含 源 代 码 ):

    .

    .

    .

    讨论(文本) :

    四、实验心得

    通过这次试验,对构造函数慢慢理解。

    熟悉调用函数各方面规则。

    3

    有关的专题