函数与宏定义

C语言程序设计实验报告

姓名:邓文超 实验地点:宿舍

1.实验项目6.3.1.1

问题的简单描述:我测试了下不能构成三角形的三条边(例如:3,2,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("请输入三角形的3条边:");
scanf("%f,%f,%f",&a,&b,&c);
ts=area(a,b,c);
if(a+b>c&&b+c>a&&a+c>b)
printf("area=%f\n",ts);
else
printf("Data error!");
}

问题分析:if语句中的条件不足,非专业性问题。doge

2.实验项目6.3.1.3

问题的简单描述:交换a和b的值的过程中,没有意识到这是关于汉诺塔问题的情况,直接'a=b;b=a',主要是瞄了眼同桌dp的代码就是这样,那时候就感觉不对劲了,结果代码果然运行不出;然后就是不理解辗转相除法了。

实验代码:

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

问题分析:明白汉诺塔的原理,但不晓得运用。

3.实验项目6.3.1.4

问题的简单描述:for循环太久没打了,导致构思代码时间有点久。

实验代码:

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

问题分析:考试月也到了,将以前学过的知识反复复习。

4.实验项目6.3.1.1

问题的简单描述:while循环一下子就忘了公式。

实验代码:

#include<stdio.h>
int 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(n);
	k=facsum(k);
	if(m==k&&m<=n)
	printf("%d%d\n",m,n);
	m++;
}
  }

问题分析:多加练习,融会贯通。

辗转相除法:

又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止,
如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
另一种求两数的最大公约数的方法是更相减损法。[搜狗百科]

实验小结

这次课我觉得学习的内容不多,但有些知识点有点晦涩难懂,比如递归,不是太懂这个用处,可能是使某些程序更简单。
其他还好,总之多练习敲代码吧。复习的话我觉得做书上的题目是一种方法。

posted @ 2021-06-05 23:08  nswz  阅读(69)  评论(0编辑  收藏  举报