C语言实验报告函数应用.docx
《C语言实验报告函数应用.docx》由会员分享,可在线阅读,更多相关《C语言实验报告函数应用.docx(15页珍藏版)》请在冰豆网上搜索。
C语言实验报告函数应用
C语言程序设计II实验报告
题目:
实验五函数应用
院系名称
:
计算机学院
专业名称
:
计算机科学与技术
班级
:
学号
:
学生姓名
:
指导教师
:
实验日期
:
2017年4月1日
报告提交截止日期:
2017年4月11日
一、实验目的
1、掌握C语言函数的定义方法、函数的声明及函数的调用方法及调用过程;
2、掌握主调函数和被调函数之间的参数传递方式;
二、实验内容与要求:
1、求两个整数的最大公约数和最小公倍数。
用一个函数求最大公约数,用另一个函数根据求出的最大公约数求最小公倍数。
(提示:
设两个整数是a,b,最大公约数是p,最小公倍数是q,那么ab=pq)
2、用牛顿迭代法求方程f(x)=ax3+bx2+cx+d=0的根。
系数a、b、c、d由主函数输入。
求根过程写成函数。
(提示:
牛顿迭代法是先给定方程f(x)=0的一个较好的初始近似根x0,然后重复使用迭代公式:
求x的近似解,直至相邻两次的近似解相差很小为止,如差值的绝对值小于1e-07。
x0可以从键盘输入或直接设定。
)
3、定义一个函数,功能是计算n个学生的成绩中高于平均成绩的人数,并作为函数返回值。
用主函数来调用它。
统计30个学生成绩中高于平均成绩的有多少人。
4、编写程序,计算下列函数值:
,其中,m,n为正整数,
,
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。
如果有两个数,每一个数的所有约数(除它本身以外)之和正好等于对方,则称这两个数为互满数。
三、实验结果
1
题目内容与要求:
求两个整数的最大公约数和最小公倍数。
用一个函数求最大公约数,用另一个函数根据求出的最大公约数求最小公倍数。
(提示:
设两个整数是a,b,最大公约数是p,最小公倍数是q,那么ab=pq)
算法简要描述(文本):
通过循环找出最大公约数,根据公式求最小公倍数。
源代码标识符说明(文本):
a,b存储数字i,j找最小公倍数和最大公因数。
源代码(粘贴程序,注意缩进,不得使用截图):
#include"stdio.h"
intf(inta,intb)
{inti,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)
returni;
}
ints(inta,intb,inti)
{returna*b/i;
}
main()
{
inta,b;
while
(1)
{
scanf("%d%d",&a,&b);
printf("最大公约数:
%d\n最小公倍数:
%d\n",f(a,b),s(a,b,f(a,b)));
}}
实验测试结果(使用截图,图形格式JPEG。
截图不要包含源代码):
讨论(文本):
2
题目内容与要求:
用牛顿迭代法求方程f(x)=ax3+bx2+cx+d=0的根。
系数a、b、c、d由主函数输入。
求根过程写成函数。
(提示:
牛顿迭代法是先给定方程f(x)=0的一个较好的初始近似根x0,然后重复使用迭代公式:
求x的近似解,直至相邻两次的近似解相差很小为止,如差值的绝对值小于1e-07。
x0可以从键盘输入或直接设定。
)
算法简要描述(文本):
通过构造函数实现题中给的公式。
源代码标识符说明(文本):
a,b,c,d,存系数x存根。
源代码(粘贴程序,注意缩进,不得使用截图):
#include"stdio.h"
#include"math.h"
floatf1(floata,floatb,floatc,floatd,floatx)
{return(a*x*x*x+b*x*x+c*x+d);
}
floatf2(floata,floatb,floatc,floatx)
{return(3*a*x*x+2*b*x+c);
}
main()
{
while
(1)
{floata,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。
截图不要包含源代码):
讨论(文本):
3
题目内容与要求:
定义一个函数,功能是计算n个学生的成绩中高于平均成绩的人数,并作为函数返回值。
用主函数来调用它。
统计30个学生成绩中高于平均成绩的有多少人。
算法简要描述(文本):
构造函数求出平均值,再和平均值一一比较。
源代码标识符说明(文本):
p指针变量操作数组。
q存大于平均值成绩的个数。
源代码(粘贴程序,注意缩进,不得使用截图):
#include"stdio.h"
intf(float*p,intn)
{inti,q=0;floats=0;
for(i=0;is+=*(p+i);
for(i=0;i{if(*(p+i)>(s/n))
q++;
}
returnq;
}
main()
{floata[30];
inti,n=30;
for(i=0;iscanf("%d",&a[i]);
printf("%d",f(a,n));
}
实验测试结果(使用截图,图形格式JPEG。
截图不要包含源代码):
讨论(文本):
4
题目内容与要求:
编写程序,计算下列函数值:
,其中,m,n为正整数,
,
算法简要描述(文本):
构造一个阶乘函数。
源代码标识符说明(文本):
x存数据。
源代码(粘贴程序,注意缩进,不得使用截图):
#include"stdio.h"
longlongs(intx)
{if(x==1)
return1;
returnx*s(x-1);
}
longlongf(inta,intb)
{returns(a)/s(b);
}
main()
{
inta,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。
截图不要包含源代码):
讨论(文本):
5
题目内容与要求:
编写和调用函数,给定圆筒的内径、外径和高,计算该圆筒的体积;给定圆锥的高、底面半径,计算该圆锥的体积和表面积。
算法简要描述(文本):
构造圆锥和圆筒体积表面积函数
源代码标识符说明(文本):
a,b,c存数据。
源代码(粘贴程序,注意缩进,不得使用截图):
#include"stdio.h"
#include"math.h"
#definePI3.1415926
floatv(floata,floatb,floath)
{if(b!
=0)
returnPI*(b*b-a*a)*h;
returnPI*a*a*h/3;
}
floats(floata,floath)
{returnPI*a*sqrt(a*a+h*h)+PI*a*a;
}
main()
{floata,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=%fs=%f\n",v(a,b,h),s(a,h));
}}
实验测试结果(使用截图,图形格式JPEG。
截图不要包含源代码):
讨论(文本):
6
题目内容与要求:
编写和调用函数,求出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"
intf(inti)
{intj,k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)
break;
if(j>=k+1)
return1;
elsereturn0;
}
intg(intx)
{inti,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);}
}
inth(intx)
{inti,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);
}}
intw(intx)
{intj,a=0;
for(j=1;j<=x/2;j++)
if(x%j==0)
a+=j;
returna;
}
ints(intx)
{inti,j,k;
for(i=1;i<=x;i++)
if(w(w(i))==i)
{if(w(i)
continue;
printf("%d,%d",i,w(i));
}}
main()
{inti,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*100+b*10+a)&&f(c*100+a*10+b))
m[j++]=i;
}}
printf("\n绝对素数为:
");
for(i=0;iprintf("%d",m[i]);
printf("\n水仙花数为:
");g(x);
printf("\n完全数为:
");h(x);
printf("\n互满数为:
\n");s(x);
}
实验测试结果(使用截图,图形格式JPEG。
截图不要包含源代码):
讨论(文本):
四、实验心得
1
通过这次试验,对构造函数慢慢理解。
2
熟悉调用函数各方面规则。
3