C程序设计实验报告

实验项目:函数与宏定义

姓名:涂宇昌  实验地点:家  实验时间:2020/4/26

一、实验目的与要求

1、熟练地掌握函数的定义方法和调用规则。
2、掌握再 C语言程序种主调函数和被条用函数之间进行数据传递的规则。
3、了解函数的返回值及其类型,并正确使用它
4、了解局部变量和全局变量的作用城及它们与存储分类的关系,理解变量的存在性和可见性的概念
5、练习递归函数的使用

二、实验内容

1、实验练习:6.3.1-1

1问题的简单描述:编写程序,从键盘输入三角形的3条边,调用三角形函数求出其面积,并输出结果。

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;
     printf("请输入三角形的三边;
");
     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
",ts);
     else printf("Date error!");
}

3问题分析:要用math.h,海伦公式求面积方程:s=(a+b+c)/2

2、实验练习:6.3.1-2

1问题的简单描述:编写函数,求出从主调函数传来的数值i的阶乘值,然后将其传回主调函数并输出

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
",i,product);
    }
}

3问题分析:按照书上的来,再多看看同学的就好了

3、实验练习:6.3.1-3

1问题的简单描述:编写程序,从键盘输入两个整数,调用gdc()函数求他们的最大公约数,并输出结果。

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("请输入两个整数:");
    scanf("%d,%d",&x,&y);
    getchar();
    fac=gcd(x,y);
    printf("The great common divisor is%d",fac); 
}

3问题分析:temp可以用作a,b交换的中介。相除的最大公约数表示为:a=b;b=remainder;remainder=a%b

4、实验练习:6.3.1-4

1问题的简单描述:输入整数n,输出高度为n的等边三角形。

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=0;j<2*i-1;j++)
        printf("*");
        putchar ('
');    
    }
    
}
void main()
{
    int n;
    printf("Please input int n:
");
    scanf("%d",&n);
    printf("
");
    trangle(n);
}

3问题分析:普通三角形,理清何时输出*即可

5、实验练习:6.3.2-1

1问题的简单描述:若正整数 A 的所有因子( 包括 1 但不包括自身,下同)之和为 B ,而 B 的因子之和为 A,则称 A 和 B 为一对亲密数。例如,6的因子之和为1+2+3=6,因此6与6为一对亲密数。求出500以内的所有亲密数对。

2实验代码:

#include<stdio.h>
facsum(int m)
{
    int sum=1,f=2;
    while (f<=m/2)
    {
        if (m%f==0)
        sum=sum+f;
        f=f+1;
    }
    return sum;
}
main()
{
    int m=3,n,k;
    while (m<=500)
    {
        n=facsum(m);
        k=facsum(n);
        if (m==k&&m<=n)
        printf("%d %d
",m,n);
        m++;
    }
}

3问题分析:按照模板一样中间加上void,会得不出结果,记得去掉。要了解facsum是什么意思,for循环从m=3才开始调用facsum。

6、实验练习:6.3.3-1

1问题的简单描述:编写程序,分别从键盘输入数据x和y,计算x的y次幂并输出。

2实验代码:

#include"stdio.h"
long getpower(int x,int y)
{
    if(y==1)
    return x;
    else
    x=x*getpower(x,y-1);
}
main()
{
    int num,power;
    long answer;
    printf("请输入一个数:");
    scanf("%d",&num);
    printf("输入幂次方:") ;
    scanf("%d",&power);
    answer=getpower(num,power);
    printf("%d^%d=%1d
",num,power,answer); 
}

3问题分析:这波我是真的裂开了,幸好看了同学的,调用的递归函数方程为:x=x*getpower(x,y-1);

7、实验练习:6.3.3-2

1问题的简单描述:用递归方法计算学生的年龄。已知第一位学生年龄最小为10岁,其余学生一个比另一个大2岁,求第5位学生的年龄。

2实验代码:

#include<stdio.h>
int age(int n)
{
    int c;
    if (n==1)
    c=10;
    else
    c=age(n-1)+2;
    return c;
 } 
 main()
 {
     int n=5,sage;
     sage=age(n);
     printf("第%d位学生的年龄为:%d
",n,sage);
 }

3问题分析:递归公式sage=age(n)

三、实验小结

       实验报告圆满结束。非常感谢此次会作业的同学,谢谢他们对我这次作业编程过程中的帮助。我们有讨论、有质疑、有对喷、有理解,却没有打架、我很庆幸,选择了优秀而又负责的同学。同学们编程思维都很好,办事有效率,很负责,对我的很多问题都能予以分析、理解与肯定,例如:输入数据的合理性、函数与宏定义的应用、界面的美观方便;我们一起讨论,大力帮助。
  在编码过程中,看别人实验报告可以让你很快发现错误,并且在发现问题后能够更快的提出解决方案,通过查看,我编写代码的质量以及速度都有着很大的提高。除此之外,C语言程序设计使我的思维方式也有所转变,在今后的编程中,我会增加对函数与宏定义的使用。

 

原文地址:https://www.cnblogs.com/tuyuchang/p/12782985.html