• 《C语言程序设计》实验报告(五)


    C语言程序设计报告

    实验项目:课堂练习6.3.1-1,6.3.1-2,6.3.1-3.6.3.1-4,6.3.2,6.3.3

    姓名:余永祥 实验地点:家 实验时间:2020年4月21日

    一、实验目的与要求

    1.熟练地掌握函数的定义方法和调用规则;

    2.掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则;

    3.了解函数的返回值及其类型,并正确使用它;

    4.了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性和可见性的概念;

    5.练习递归函数的使用.

    二、实验内容

    1.实验练习:

    实验6.3.1-1

    实验代码:

    #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 a,b,c,ts;
    	printf("请输入三角形的三条边:
    ");
    	scanf("%f %f %f",&a,&b,&c);
    	ts=area(a,b,c);
    	if(a<=0||b<=0||c<=0)//确认输入的全为正数 
    	printf("输入错误!");
    	if((a>b&&a>c&b+c>a)||(b>a&&b>c&&a+c>b)||(c>a&&c>b&&a+b>c))//确认输入的为三角形  
    	printf("area=%f",ts);
    	else
    	printf("输入错误!");
    	return 0;
    

    出现问题:无

    注意事项:1.这里运用了math的头文件,要注意不能遗漏;

    2.要控制a,b,c三个数都为正数.

    2.实验练习:

    实验6.3.1-2

    实验代码:

    #include<stdio.h>
    #define N 5//设置定值N的值为5 
    long function(int i)
    {
    	static long f=1;
    	f=f*i;
    	return f;//累乘函数 
    }
    int main()
    {
    	long product;
    	int i;
    	for(i=1;i<=N;i++)
    	{
    	product=function(i);//调用函数,实现累乘 
    	printf("product=%d
    ",product);
    	}
    }
    

    出现问题:结果不正确

    解决方法:经检查后发现for()语句遗漏了{},导致第二句未循环,出现错误.

    3.实验练习:

    实验6.3.1-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的值,保证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);
    	return 0;
     } 
    

    出现问题:不知道如何求最大公约数,在过程中遗漏关键的语句

    解决方法:参考课本流程图后,加以修改后,可以正确运行

    4.实验练习:

    实验6.3.1-4

    实验代码:

    #include<stdio.h>
    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("*");//控制产生的*数 
    		}
    		printf("
    ");
    	 } 
    }
    main()
    {
    	int n;
    	printf("输入一个正整数n:
    ");
    	scanf("%d",&n);
    	trangle(n);//调用函数 
    	return 0;
    

    出现问题:无

    解决方法:无

    5.实验练习:

    6.3.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;
    }//设计调用的函数 
    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);
    			printf("
    ");
    		}
    		m++;
    	}
    }
    

    出现问题:无

    解决方法:无

    6.实验练习:

    6.3.3

    实验代码:

    #include<stdio.h>
    long getpower(int x,int y)
    {
    	if(y==1)
    	return x;
    	else
    	{
    		x=x*getpower(x,y-1);//利用递归设计函数 
    		return x;
    	}
    }
    main()
    {
    	int num,power;
    	long answer;
    	printf("输入一个整数:");
    	scanf("%d",&num);
    	printf("输入幂次方:");
    	scanf("%d",&power);
    	answer=getpower(num,power);
    	printf("%d^%d=%ld
    ",num,power,answer);
    }
    

    出现问题:无论输入什么,结果都是0

    解决方法:检查后,发现引用的函数出现了问题,原先是x=getpower(x,y),改正后为x=x*getpower(x,y),遗漏乘号

    三、实验小结

    收获:

    1.知晓了局部变量和全局变量,并且可以加以运用;

    2.熟悉掌握了调用函数的使用方法,可以更加熟练的使用;

    3.对递归函数的理解与运用更加充分了;

    4.对一些数学模型有所了解了,比如求最大公约数的模型和幂函数的模型.

    不足:

    1.常常出现遗漏问题,是熟练度不过导致的,要多加训练;

    2.数学问题常常不知如何处理,要学会自己构建流程图,还要加强数学知识的理解.

  • 相关阅读:
    PHP 快递单号查询api接口源码指导
    电商平台适用基础快递查询api接口对接demo解决方案
    智能物流查询api接口demo(php示例)
    解决在TP5中无法使用快递鸟查询API接口方案
    解析快递鸟在线预约取件API接口对接编码
    快递鸟批量打印电子面单接口及控件安装
    「note」原根照抄
    「atcoder
    Solution -「NOI 2021」轻重边
    Solution Set -「ARC 124」
  • 原文地址:https://www.cnblogs.com/GZ-1128-XZ/p/12744270.html
Copyright © 2020-2023  润新知