C程序设计实验报告
实验项目:6.3.1-1、6.3.1-2、6.3.1-3、6.3.1-4、6.3.2-1、6.3.3-1
姓名:刘裕汕
实验地点:家里
实验时间:2020年4月21日
一、实验目的与要求
1、熟练地掌握函数的定义方法和调用规则。
2、掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则。
3、了解函数的返回值及其类型,并正确使用它。
4、了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性和可见性的概念
5、练习递归函数的使用
二、实验内容
1、实验练习:6.3.1-1
1问题的简单描述:已知三角形三边长,求其面积
2实验代码:
#include<math.h>
#include<stdio.h>
float area(float a,float b,float c)
{
float s,p,area;
s=(a+b+c)/2;
p=s*(s-a)*(s-b)*(s-c);
area=sqrt(p);
return area;
}
void main()
{
float a,b,c,ts;
scanf("%f %f %f",&a,&b,&c);
ts=area(a,b,c);
if((a+b>c)&&(a+c>b)&&(b+c>a))
printf("area=%f\n",ts);
else printf("Data error!");
}
3问题分析:scanf内的地址符不能少,否则出不了结果;函数定义时要将结果赋予area,函数才能成立。
2、实验练习:6.3.1-2
1问题的简单描述:求N的阶乘。
2实验代码:
#include "stdio.h"
#define N 5
long function(int i)
{
static long f=1;
f=f*i;
return f;
}
void main()
{
long product;
int i;
for(i=1;i<=N;i++)
{
product=function(i);
printf("%d的阶乘为%d\n",i,product);
}
}
3问题分析:函数定义使用累乘思想进行编写;#define的用法是#define+代号+被代替的主体。
3、实验练习:6.3.1-3
1问题的简单描述:求两个整数的最大公约数。
2实验代码:
#include<stdio.h>
int gcd(int a,int b)
{
int temp;
int remainder;
if(a<b)
{
temp=a;a=b;b=temp;
}
remainder=a%b;
while(remainder!=0)
{
a=b;b=remainder;
remainder=a%b;
}
return b;
}
void main()
{
int x,y;
int fac;
printf("Please input two integers:");
scanf("%d %d",&x,&y);
fac=gcd(x,y);
printf("The great common divisor is %d",fac);
}
3问题分析:在whlie循环中也要加入remainder=a%b;否则会陷入死循环,出不了结果。
4、实验练习:6.3.1-4
1问题的简单描述:打印出指定图形
2实验代码:
#include<stdio.h>
void trangle(int n)
{
int i,j;
for(i=1;i<=n;i++)
{
{
for(j=0;j<=n-i;j++)
printf(" ");
}
{
for(j=1;j<2*i;j++)
printf("*");
}
putchar('\n');
}
}
void main()
{
int n;
printf("请输入一个整数:");
scanf("%d",&n);
printf("\n");
trangle(n);
}
3问题分析:三角形的打印可以运用第五章中的for循环嵌套,然后再控制输入的值;如果for循环中的条件为i<n,则会出现少打印一行的情况。
5、实验练习:6.3.2-1
1问题的简单描述:求500以内的所有亲密数对。
2实验代码:
#include<stdio.h>
int facsum(int m)
{
int sum=1,f=2;
while(f<=m/2)
{
if(m%f==0)
sum=sum+f;
f++;
}
return sum;
}
void main()
{
int m=3,n,k;
for(m;m<=500;)
{
n=facsum(m);
k=facsum(n);
if((m==k)&&(m<=n))
printf("%d,%d\n",m,n);
m++;
}
}
3问题分析:由于在for循环的执行语句中有m++;所以在for语句后可不填;
6、实验练习:6.3.3-1
1问题的简单描述:编写计算x的y次幂的递归函数,并在主程序中实现输入输出。
2实验代码:
#include"stdio.h"
long getpower(int x,int y)
{
if(y==1)
return x;
else
return x*getpower(x,y-1);
}
void main()
{
int num,power;
long answer;
printf("输入一个数:");
scanf("%d",&num);
printf("输入幂次方:");
scanf("%d",&power);
answer=getpower(num,power);
printf("%d^%d=%ld\n",num,power,answer);
}
3问题分析:递归的主要思路是不断重复代入实现循环,所以在第二个return返回的值为函数的起始。