实验三: 函数实验
实验题目(1)【见实验教材实验四的题目2】:编程序exp4_2.c,巧用函数调用,打印不同行数和字符构成的等腰三角形。具体要求:定义一个函数原型void DrawTriangle (int n,char c); ,实现功能为打印一个n行的由字符c组成的等腰三角形。主程序调用该函数,实现打印5行“ '* ' ”、10行
“ '# ' ”的等腰三角形。
实验解答:
- 源程序exp4_2.c的代码是:
-
#include
void DrawTriangle(int n,char c); int main() { int n; char c; DrawTriangle( 5,'*'); printf("n"); DrawTriangle( 10,'#'); return 0; } void DrawTriangle(int n,char c) { int i,j; for(i=1;i<=n;i++) { for (j=1;j<=n-i;j++) { printf(" "); } for (j=1;j<=2*i-1;j++) { printf("%c",c); } printf("n"); } } 实验题目(2)【见实验教材实验四的题目5】:编程序exp4_5.c,验证歌德巴赫猜想:2000以内的正偶数(不包括2)都能够分解为两个质数之和。(算法提示:将整数分解为两个整数,然后判断它们是否均为质数。若是,则满足题意并输出;否则重新进行分解和判断。其中,判断一个整数是否为质数采用函数实现。每个偶数只要得到一种分解就停止,不必要求出该偶数的所有质数和组合)。
实验解答: 源程序exp4_5.c的代码是:
#include#include int judgeprime (int n) { int i,k; int judge =1; if (n==1) return 0; k=(int) sqrt (n); for(i=2;judge&&i<=k;i++) if(n%i==0) return 0; return 1; } int main() { int x,m,n; for(x=4;x<=2000;x+=2) { for (n=3;n<(x/2);n+=2) { m=x-n; if(judgeprime(n)&&judgeprime(m)) { printf("%d=%d+%dn",x,m,n); } } } return 0; }
实验题目(3)【见实验教材实验四的题目7】:编程序exp4_7.c,用递归方法实现求解两个整数的最大公约数,并与迭代方法作比较。
实验解答:
①程序exp4_7.c代码如下:
#includeint fun (int m,int n) { int x,y; if(m%n==0) return(n); else return (fun(n,m%n)); } int main() { int x,y,z; scanf("%d,%d",&x,&y); z = fun (x,y); printf("%d",z); return 0; } 迭代方法 #include int main() { int m,n,r; scanf("%d%d",&m,&n); r=m%n; while(r) { m=n; n=r; r=m%n; } printf("最大公约数为:%dn",n); return 0; }
实验题目(4)【见实验教材实验四的题目8】:用调试器观察程序exp4_8.c的运行过程,并记录各种变量在每一步执行时的变化情况,在表格中填写每一个跟踪步每个变量对应的值。程序代码如下。
#includeint a = 1; int f(int a) { auto int b = 2; static int c = 3; a = a+1; b = b+1; c = c+1; return (a+b+c); } int main() { int i; for (i=0;i<3;i++) { a = a+2; printf("%d n",f(a)); } return 0; }



