zoukankan      html  css  js  c++  java
  • 第四次实验报告

    C程序设计实验报告

    实验项目: 函数和宏定义实验

    姓名: 赖倍仟 实验地点: 514物联网实验室 实验时间:2019年4月30日

    一、实验目的和要求

    1.掌握函数的定义方法和调用规则。
    2.掌握C语言程序中主调函数和被调用函数之间进行数据传递的规则。
    3.了解函数的返回值及其类型,并正确使用它。
    4.了解局部变量和 全局变量的作用域及它们与储存分类的关系,理解变量的存在性和可见性的概念。
    5.练习递归函数的使用。
    6.理解宏观的概念,掌握定义无参宏和带 参宏的方法。了解文件包含的概念,掌握其用法.
    7.理解内部函数和外部函数,了解外部函数的编译和连接的方法。

    二、实验内容

    (1)实验6.4.1练习一:

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


    3、程序代码:

    #include<stdio.h>
    #include<math.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);
    }
    main()
    {
    	float x,y,z,ts;
    	printf("please enter the value of: ");
    	scanf("%f,%f,%f",&x,&y,&z);
    	ts=area(x,y,z);
    	if((x+y)>z&&(x+z)>y&&(y+z)>x)
    	printf("area=%f
    ",ts);
    	else
    	printf("data error");
    }
    

    4、问题分析:调用area函数求三角形面积,定义函数的时候要用到海伦公式,要用c语言的方式把公式表达出来。公式中包含了开方函数,所以要记得在头文件中加上math.h。在主函数中还要加上判断输入的三边是否能组成三角形,如果不能,输出错误提示。还有就是要注意将数据定义成浮点型。

    (2)实验6.4.1练习二:

    1、问题描述:编写程序,求出从主函数传来的数值i的阶乘值,然后将其传回主函数并输出。
    2、流程图:

    3、程序代码:

    #include<stdio.h>
    int N=5;
    long function(int i)
    {
    	static long f=1;
    	f=f*i;
    	return f;
    }
    main()
    {
    	long product;
    	int i;
    	for(i=1;i<=N;i++)
    	{
    		product=function(i);
    		printf("%d的阶乘是: %d
    ",i,product);
    	}
    }
    

    4、问题分析:首先定义N= 为全局变量,然后在定义function函数的时候要用到long型变量长整型数来设置更大的储存空间以求更大的数的阶乘。并且在函数定义中还要将变量定义为局部静态变量,保留上次调用的结果,依次求出1~N的阶乘值。

    (3)实验6.4.1练习三:

    1、问题描述:编写程序,从键盘输入两个整数,调用gcd()函数求出它们的最大公约数,并输出结果。
    2、流程图:

    3、程序代码:

    #include<stdio.h>
    int gcd(int a,int b)
    {
    	int temp;
    	int remainder;
    	if(a<b)
    	{
    	temp=a;
    	a=b;
    	b=temp; //*交换a和b的值*// 
    	}
    	remainder=a%b;
        while(remainder!=0)
           {
        	  a=b;
    		  b=remainder;
    		  remainder=a%b;
        	}
        	return b;
    }
    main()
    {
    	int x,y;
    	int fac;
    	printf("请输入两个整数:");
    	scanf("%d%d",&x,&y);
    	fac=gcd(x,y);
    	printf("最大公约数为:%d",fac);
    }
    

    4、问题分析:在编写代码的时候遇到的一个问题是交换a和b的值,忘记要用第三个变量作为中间变量来交换它们的值,然后就是在while循环中实现不了辗转相除,最后经过大家一起的思考才发现应该在再一次交换a、b的值后再继续求余来保证辗转相除最终求到两数的最大公约数。

    (4)实验6.4.1练习四:

    1、问题描述:输入整数n,输出高为n的等边三角形。当n=5时的等边三角形如下:

    2、流程图:

    3、程序代码:

    #include<stdio.h>
    void trangle(int n)
    {
    	int i,j;
    	for (i=0;i<n;i++)
    	{
    		for(j=0;j<n-i;j++)
    		printf(" ");
    		for(j=0;j<=2*i;j++)
    		printf("*");
    		putchar('
    ');
    	}
    }
    main()
    {
    	int n;
    	printf("请输入一个整数:");
    	scanf("%d",&n);
    	printf("
    ");
    	trangle(n);
    	 
    }
    

    4、问题分析:定义一个trangle()函数来打印高为n等边三角形,其实只用在函数中使用for循环结构就可以,找出输出的空格和星号与行列之间的关系,再用代码表达出来就OK了。

    (5)实验6.4.2练习一:

    1、问题描述:若正整数A的所有因子(包括1担不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如:6的因子之和为1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为1+2+3+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。
    求500以内所有亲密对数
    具体要求如下:
    (1)编制一个函数facsum(m),返回给定正整数m的所有因子(包括1但不包括自身)之和。
    (2)编制一个主函数,调用(1)中的函数facsum(),寻找并输出500以内的所有亲密数对。
    (3)输出要有文字说明。在输出每对亲密数时,要求从小到大排列并去掉重复的亲密数对。
    (4)所有函数中的循环均为for循环。
    2、流程图:

    3、程序代码:

    #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;
     } 
     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++;
    	 }
     }
    

    4、问题分析:在facsum(m)模块中,求出所有的因子,并将它们的作为返回值。当变量满足条件的时候再执行下一步。在主函数中,for循环从m=3开始调用facsum(m),在计算m是否有亲密对数。

    三、实验小结

    第六章学习了函数的定义和调用,在定义函数的时候,要注意变量的作用域和存储类型来保证函数的运行效果。在调用函数的时候,要注意函数的传值方式,区分和运用变量的形参变量和实参变量。最重要的是编写程序是,我们应该明确的知道程序的执行流程。

  • 相关阅读:
    There is an overlap in the region chain修复
    There is an overlap in the region chain
    region xx not deployed on any region server
    python 中的re模块,正则表达式
    TCP粘包问题解析与解决
    yield from
    Git push提交时报错Permission denied(publickey)...Please make sure you have the correct access rights and the repository exists.
    mysql 中Varchar 与char的区别
    Mysql 字符集及排序规则
    请实现一个装饰器,限制该函数被调用的频率,如10秒一次
  • 原文地址:https://www.cnblogs.com/lai-/p/10812935.html
Copyright © 2011-2022 走看看