zoukankan      html  css  js  c++  java
  • 第六章 实验报告

    C程序设计实验报告

    实验项目:

       6.4.1.1、编写由三角形三边求面积的函数
       6.4.1.2、编写求N阶乘的函数
       6.4.1.3、求两个整数的最大公约数
       6.4.1.4、打印输出指定图形
       6.4.2、模块化程序设计

    姓名:曹时仙    实验地点:教学楼514教室     实验时间:2019年4月30日上午

    6.4.1.1、编写由三角形三边求面积的函数

    ● 调用area()函数求三角形的面积

    ●在求面积函数运用海伦公式

    6.4.1.2、编写求N阶乘的函数

    ●定义符号常量

    ●使用长整型变量存放累乘积

    ●使用全局变量存放累乘积

    6.4.1.3、求两个整数的最大公约数

    ●调用bcd()函数求两个整数的最大公约数

    ●掌握辗转相除法求两个整数的最大公约数

    6.4.1.4、打印输出指定图形

    ●调用trangle()函数输出三角形

    ●在trangle()函数中用for循环的嵌套输出指定的结果

    6.4.2、模块化程序设计

    ●编制一个函数facsum(m),返回给定正整数m的所有因子(包括1但不包括自身)之和

    ●编制一个主函数,调用(1)中的函数facsum(),寻找并输出500以内的所有亲密数对

    ●输出要有文字说明。在输出每对亲密数时,要求从小到大排列并去掉重复的亲密数对

    ●所有函数中的循环均为for循环

    二、实验内容

    1、实验练习(6.4.1.1):

    1.问题的简单描述:

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

    2.程序流程图:

    3.实验代码:

    #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);
    	
    }
    main()
    {
    	float x,y,z,ts;
    	scanf("%f,%f,%f",&x,&y,&z);
    	ts=area(x,y,z);
    	if(x+y>z&&x+z>y&&z+y>x)
    	printf("area=%f
    ",ts);
    	else printf("data error!");
    }
    

      

      

    4.问题分析:

    1、第一个问题就是求三角形面积的算法,这个是最核心是的,再就是调用主函数上面的求三角形面积公式,最后一个判断三角形的算法不算很难。

    2、程序运行如下:

    2、实验练习(6.4.1.2):

    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.问题分析:

    1、第一是定义局部静态变量,需用static;后者就是调用函数function,总体来说这题难度不大。

    2、程序运行如下:

     

    3、实验练习(6.4.1.3):

    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;
    	}
    	remainder=a%b;
    	while(remainder!=0)
    	{
    		a=b;
    		b=remainder;
    		remainder=a%b;
    	}
    	return b;
    }
    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);
    }
    

      

    4.问题分析:

    1、这题主要是最大公约数的这套算法,里面的辗转相除法是一个难点,如a>b,如果a能被b整除,最大公约数就是b。如果a除以b的余数为c,则继续用b除c,如此反复,直到余数为0,则最后一个非零除数就为a,b的最大公约数。

    2、程序运行如下:

     

    4、实验练习(6.4.1.4):

    1.问题的简单描述:

    输入整数n,输出高度为n的等边三角形,当n的值为5,等边三角形为:

          *

         ***

       ******

      ********

     **********

    2.程序流程图:

    3.实验代码:

    #include<stdio.h>
    void strangle(int n)
    {
    	int i,j,b;
    	for (i=1;i<=n;i++)
    	{
    		for(j=1;j<=(n-i);j++) printf(" ");
    		for(b=1;b<=(2*i-1);b++) printf("*");
    		
    		putchar('
    ');
    	}
    }
    main()
    {
    	int n;
    	printf("please put one number:");
    	scanf("%d",&n);
    	printf("
    ");
    	strangle(n);
    	
    }
    

      

    4.问题分析:

    1、这题在之前的一个实验报告中做过类似的,主要就是掌握空格和*号的排列算法,后面的就是算法的运用了。

    2、程序运行如下:

     

    3、实验练习(6.4.2):

    1.问题的简单描述:

    若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如,6的因子之和为1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为1+2+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。
    求500以内的所有的亲密数对。

    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.问题分析:

    1、这题难度还是比较大的,我是看懂流程图来做的,里面的算法,细节我自己是想不到的。

    2、程序运行如下:

    三、实验小结

    从这一章的学习,我学会了如何调用函数,也进一步的提升了我运用C语言算法的技能,但是这不是简单的,如果我不看教材提供的流程图和算法,我可能一个也做不出来,果然算法才是核心思想,一流的程序员是靠算法,所以今后我要培养我自身的数学思想和计算机算法思维,这样学起C语言来就不会算累。

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/shixian/p/10813082.html
Copyright © 2011-2022 走看看