实验三: 函数实验
实验题目(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;
}