浙师大 C语言 实验9函数定义+答案 下载本文

上机实验九 函数定义与函数调用

学号 姓名

一.目的要求

1. 掌握函数声明、定义 2. 掌握函数调用的基本方法

3. 掌握利用函数进行程序设计的基本方法 二.实验内容

【实验题1】程序填充:输入double型变量x的值,计算下列算式的值,直到最后一项的绝对值小于10-5。

x2x3x4x5x6s?x??????...

2!3!4!5!6!源程序如下:

#include #include double fact(int n); /*函数声明*/ int main() { int i; double x,item,s=0; printf(\ scanf(\ /*输入实数x */ i=1; do{ item= pow(x,i)/fact(i) ; /*用数学库函数pow()和自定义函数fact(),求加项item*/ s= s+item; /*line 11*/ i++; }while( fabs(item)>=1e-5 ); /*循环条件:加项item的绝对值不小于10-5*/ printf(\ /*输出算式的值,保留4位小数*/ } /* 自定义函数fact() ,实现求n!的功能*/ double fact( int n) { int i; double f=1; for(i=1; i<=n; i++) f*= i; /*line 21*/ return f; }

编译、连接并运行程序,输入0.5, 则显示: ;输入

1 ,则显示: ;输入1.7,则显示:

line 21中的表达式“f*=i”,等同于表达式“ f=f*i ”;同理,line 11中的表达式“s= s+item”也可替换为“ s+=item ”.

【实验题2】 程序填空:验证哥德巴赫猜想——任何一个大于6的偶数均可表示为两个素数之和。例如:6=3+3, 8=3+5,10=5+5,…,18=7+11。要求将6-100之间的偶数均表示为素数之和,一行输出5组。 【分析】

1. 本程序采用双层循环:外层循环负责对6~100之间的偶数逐个输出加法式子;内层循环负责为一个特定的偶数k, 找出相应的素数a和b. 2. 对于偶数k(k>=6),符合条件的两个素数a和b必然位于区间[3, k/2].(为什么不从2开始?) 3. 由于k=a+b,通过内层循环试探性地找出第一个加数a后,第二个加数b可用推算而得,再调用函数prime()来判断a、b是否是素数,如果两者均为素数,则停止寻找素数,并输出k=a+b.

源程序如下:

#include #include int prime(int n); //函数申明 int main() { int a,b,k ; for ( k=6; k<=100; k+=2 ){ //逐个处理6~100之间的偶数k for ( a=3; a<=k/2; a++ ) //针对偶数k, 寻找第一个素数加数项a { b=k-a; if( prime(a)==1 && prime(b)==1 ) break;//如果a,b同为素数, 跳出内循环 } //内层循环 if ( a==k ) continue; //没发现,不打印 printf(\ //输出k=a+b if ( k%5==0 ) printf(\ //每行输出5组 }//外层循环 } //自定义函数prime(n),判断整数n是否是素数,是则返回1,不是则返回0 int prime(int n) { int i ; for ( i=2; i<=sqrt(n) ;i++) if ( n%i==0) return 0 ; // n不是素数返回0 return 1; // n是素数返回1 }

编译、连接并运行该程序,结果显示:

【实验题3】程序设计:主函数的功能是输入整数n,k,调用自定义的函数f(n,k)计算并输出多项式1k+2k+…ik+…前n项的和。自定义函数f(n,k)=1k+2k+…nk ,形参k和n的类型为int,f(n,k)函数类型为double,可调用系统函数pow()用来计算加数项。

运行程序,输入: 5 2 ,则输出: 55.000000

#include #include //为了库函数double pow(double x,double y); double f(int n,int k); int main() { int n,k; printf(\ scanf(\ printf(\} // 自定义函数f(n,k)=1k+2k+…nk double f(int n,int k) { int i; double s=0; for ( i=1; i