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

更新时间:2023-10-09 14:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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?x0?f(x0) f'(x0)求x的近似解,直至相邻两次的近似解相差很小为止,如差值的绝对值小于1e-07。x0可以从键盘输入或直接设定。)

3、 定义一个函数,功能是计算n个学生的成绩中高于平均成绩的人数,并

作为函数返回值。用主函数来调用它。统计30个学生成绩中高于平均成绩的有多少人。

4、 编写程序,计算下列函数值:f(m,n)?ns(m),其中,m,n为正整数, s(n)s(n)??p(i)?p(1)?p(2)????p(n),p(i)?i!

i?15、 编写和调用函数,给定圆筒的内径、外径和高,计算该圆筒的体积;给

定圆锥的高、底面半径,计算该圆锥的体积和表面积。

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\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(\

printf(\最大公约数:%d\\n最小公倍数:%d\\n\}}

实验测试结果(使用截图,图形格式JPEG。截图不要包含源代码):

讨论(文本):

2

题目内容与要求:用牛顿迭代法求方程f(x)=ax3+bx2+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\#include\

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(\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(\}}

实验测试结果(使用截图,图形格式JPEG。截图不要包含源代码):

讨论(文本):

3

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

算法简要描述(文本):构造函数求出平均值,再和平均值一一比较。 源代码标识符说明(文本):p指针变量操作数组。q存大于平均值成绩的个数。 源代码(粘贴程序,注意缩进,不得使用截图):#include\

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

for(i=0;i(s/n)) q++; }

return q; }

main()

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

for(i=0;i

实验测试结果(使用截图,图形格式JPEG。截图不要包含源代码):

讨论(文本):

4

题目内容与要求:编写程序,计算下列函数值:f(m,n)?s(m),其中,m,ns(n)为正整数, s(n)??p(i)?p(1)?p(2)????p(n),p(i)?i!

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

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

#include\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(\

printf(\ %d!=%lld\\n\printf(\}}

实验测试结果(使用截图,图形格式JPEG。截图不要包含源代码):

讨论(文本):

5

题目内容与要求:编写和调用函数,给定圆筒的内径、外径和高,计算该圆筒的体积;给定圆锥的高、底面半径,计算该圆锥的体积和表面积。 算法简要描述(文本):构造圆锥和圆筒体积表面积函数 源代码标识符说明(文本):a,b,c存数据。 源代码(粘贴程序,注意缩进,不得使用截图): #include\

#include\#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(\printf(\b=0;

printf(\请输入圆锥的半径,高\\n\ scanf(\

printf(\}}

实验测试结果(使用截图,图形格式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\#include\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;b=i/100;c=(i-b*100)/10; if(i<=999&&i==a*a*a+b*b*b+c*c*c) printf(\ }

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;

本文来源:https://www.bwwdw.com/article/ya9f.html

Top