实验三: 函数实验
实验题目(1)【见实验教材实验四的题目2】:编程序exp4_2.c,巧用函数调用,打印不同行数和字符构成的等腰三角形。具体要求:定义一个函数原型void DrawTriangle (int n,char c); ,实现功能为打印一个n行的由字符c组成的等腰三角形。主程序调用该函数,实现打印5行“ '*' ”、10行
“ '#' ”的等腰三角形。
实验解答:
源程序exp4_2.c的代码是:
#include <stdio.h>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 <stdio.h>#include<math.h>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+%d\n",x,m,n);}}}return 0;}
实验题目(3)【见实验教材实验四的题目7】:编程序exp4_7.c,用递归方法实现求解两个整数的最大公约数,并与迭代方法作比较。
实验解答:
①程序exp4_7.c代码如下:
#include <stdio.h>int 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 <stdio.h>int main(){int m,n,r;scanf("%d%d",&m,&n);r=m%n;while(r){m=n;n=r;r=m%n;}printf("最大公约数为:%d\n",n);return 0;}
实验题目(4)【见实验教材实验四的题目8】:用调试器观察程序exp4_8.c的运行过程,并记录各种变量在每一步执行时的变化情况,在表格中填写每一个跟踪步每个变量对应的值。程序代码如下。
#include<stdio.h>int 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;}