实验七函数的应用一、实验目的1. 掌握函数的定义和调用方法。
2.. 掌握函数实参与形参的参数传递关系。
二、实验任务1.阅读、调试、运行程序,比较阅读的结果和运行的结果。
1)#include "stdio.h"void main(){ int func(int a, int b);int k=4,m=1,p;p=func(k,m);printf("%d,",p);p=func(k,m);printf("%d\n",p);}int func(int a, int b){int m=0,i=2;i+=m+1;m=i+a+b;return m;}2)#include "stdio.h"void fun(int x, int y, int z){ z=x*x+y*y; }void main(){ int a=31;fun(5,2,a);printf("%d\n",a);}3)#include "stdio.h"int fun(int a, int b){ if(a>b) return(a);else return(b);}void main(){ int x=3, y=8, z=6, r;r=fun(fun(x,y), 2*z);printf("%d\n", r);}4)#include "stdio.h"void main(){ void fun(int i,int j);int i=2,x=5,j=7;fun(j,6);printf("i=%d,j=%d,x=%d\n",i,j,x); }void fun(int i,int j){ int x=7;printf("i=%d,j=%d,x=%d\n",i,j,x); }5)#include <stdio.h>void main(){int f(int a,int b);int i=2, p;p=f(i, i+1);printf("%d\n", p);}int f(int a,int b){int c;c=a;if(a>b) c=1;else if (a==b) c=0;else c=-1;return (c);}6)#include <stdio.h>int func(int a, int b){int c;c = a + b;return c;}void main(){int x = 6, y = 7, z = 8, r;r = func((x--,y++,x+y),z--);printf("%d\n",r);}2. 完善程序,并调试运行1)验证哥哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。
例如6=3+3,8=3+5,…,18=7+11。
将6——100之间的每个偶数都表示成两个素数之和。
函数prime(m)用于判断m是否为素数。
素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
[程序]#include "stdio.h"#include "math.h"void main(){ int i, k;int prime(int m);for (i=6;i<=100;i=i+2)for(k=3;k<=50;k++)if( (1) ){printf ("%d = %d+%d\n", i, k, i-k);break;}}int prime(int m){int k, n;if(m==1) return 0;n=(int)sqrt (m);for(k=2;k<=n;k++)(2) ;(3) ;}2)以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。
请填空。
#include <stdio.h>int fun(int n){int m=0,f=1, i;for(i=1;i<=n;i++){m+=i*f;f= (1) ;}return m;}void main() { printf("m=%d\n", (2) );}3)以下程序的功能是求字符串的长度, 程序中有4个空,填空使程序完整。
#include<stdio.h>int length(char str[]){ int i,n; (1) while( (2) ){n++;i++;} (3)}void main(){char s[80];int len;printf("please enter a string:\n");gets(s); (4)printf("The length of the string is:%d\n",len);}4)以下程序的功能是输出由字符w 构造成的形如W 的图形。
如图所示的为5行的图形。
#include <stdio.h> void draw(int n) { int i,j,k,r,m; for(i=1; (1) ;i++) {for(j=1;j<=2;j++) {for(r=1;r<i;r++)printf(" ");printf("w"); for(k=1; (2) ;k++)printf(" ");printf("w");for(m=1;m<i;m++)printf(" ");} (3)}}void main(){int n;printf("input a number:"); (4)draw(n);}w ww w w w w w w w w w w w w w ww ww5)以下程序的功能是求100-999之间的水仙花数(水仙花数是指一个三位数的各个位数字的立方和是这个数本身,如:153=13+53+33)。
#include <stdio.h>int fun(int n){ int i,j,k,m;m=n; (1)for(i=1;i<4;i++) { (2)m=(m-j)/10;k=k+j*j*j; } if(k==n) (3)else return(0);}void main(){ int i;for(i=100;i<1000;i++) if( (4) ==1)printf("%d is ok!\n" ,i);}3. 修正程序,并调试运行1)以下程序的功能是求S=1+211++3211+++……+n +⋯⋯+++3211。
注意:程序中有四处错误,不得增行和删行,也不得更改程序的结构! 程序如下:#include <stdio.h>void main(){int n;float fun();printf("Please input a number:");/************found************/scanf("%d",n) ;printf("%10.6f\n",fun(n));}/************found************/float fun(int n){int i,j,t;float s;s=0;/************found************/for(i=1;i<=n;i++);{t=0;for(j=1;j<=i;j++)t=t+j;/************found************/s=s+1/t; }return s;}2)下列给定程序中,函数fun的功能是:判断m是否为素数,若是返回1,否则返回0。
#include <stdio.h>int fun(int m);void main(){int m,k=0;for(m=1;m<100;m++)if(fun(m)==1){printf("%4d",m); k++;if(k%5==0)printf("\n");}}/************found************/void fun( int m){int i,k=1;if(m<=1) k=0;/************found************/for(i=1;i<m;i++)/************found************/if(m%i=0) k=0;/************found************/return m;}3)下列给定程序中,函数fun的功能是:求1到10的阶乘的和。
#include <stdio.h>void main(){int i;float s=0;float fac(int n);/************found************/for(i=1;i<10;i++)/************found************/s=fac(i);printf("%f\n",s);}float fac(int n){/************found************/int y=1;int i;for(i=1 ;i<=n;i++)y=y*i;/************found************/return;}4.编写程序,并调试运行1) 编写判断一个数是否为素数的函数,然后调用该函数,输出100以内的所有素数。
2)编写计算n!的函数,然后调用该函数计算C m n的值。