一、函数的定义和调用编程
二、模块化程序设计模块化
调用area()函数求三角形的面积函数
在求面积函数中运用海伦公式spa
定义符号常量设计
使用长整型变量存放累乘积3d
在函数中,使用局部静态变量存放累乘积调试
调用gcd()函数求两个整数的最大公约数code
掌握展转相除法求两个整数的最大公约数blog
调用trangle()函数输出三角形rem
在trangle()函数中用for循环的嵌套输出指定的结果
掌握C语言中定义函数的方法
掌握经过“值传递”调用函数的方法
编写程序,从键盘输入三角形的3条边,调用三角形面积函数求出其面积,并输出结果。程序流程图如图6-1所示。流程图以下:
#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; printf("请输入三条边长:"); 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\n",ts); } else printf("data error!"); }
问题:我将return(area)写成了return(p),得出结果以下:
解决办法:从新检查程序,改正过来。
编写函数,求出从主调函数传来的数值 i 的阶乘值,而后将其传回主调函数并输出。流程图以下:
#include<stdio.h> long function(int i) { static long f=1; f=f*i; return f; } main() { long product; int i; for(i=1;i<=5;i++) { product=function(i); printf("%d的阶乘是:%d\n",i,product); } }
解决办法:将printf中改为%d的阶乘是:%d。
编写程序,从键盘输入两个整数,调用 gcd()函数求它们的最大公约数,并输出结果。流程图以下所示:
#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("请输入两个数字:\n"); scanf("%d%d",&x,&y); fac=gcd(x,y); printf("The great common divisor is:%d",fac); }
因为刚开始我代码是这样写的,而后发现我若是求较小的数就能得出正确结果,数字大了就没法输出。
解决办法:听老师的提示,我在while语句中加入了break;发现能够获得正确答案,可是这只是巧合,通过参考同窗的代码,我知道应该在while语句中加上remainder=a%b,便可得到正确答案。
输入整数n,输出高度为n的等边三角形。当n=5时的等边三角形以下:
*
***
*****
*******
*********
#include<stdio.h> void trangle(int n) { int i,j; for(i=0;i<n;i++) { for(j=i;j<n;j++) printf(" "); for(j=0;j<=2*i;j++) printf("*"); putchar('\n'); } } main() { int n; printf("请输入一个整数n:\n"); scanf("%d",&n); printf("\n"); trangle(n); }
这个代码以前理论课已经碰见过,没有问题。
若正整数A的全部因子(包括1但不包括自身,下同)之和为B ,而B的因子之和为A ,则称A和B为一对亲密数。例如,6的因子之和为1+2+3=6,所以6与6为一对亲密数(即自身构成一对亲密数);又如,22的因子之和为1+2+4+5+10+11+20+22+44+55+110=248,而248的因子之和为1+2+4+71+142=220,所以220与248是一对亲密数。流程图以下:
#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\n",m,n); } m++; } }
问题:
发现没法输出结果,以后改正;
发现我没有换行,加上"\n",获得正确答案。
一、在上第六章的理论课时,发现对于函数的定义,调用和声明不太了解,可是经过这几个编程题题目我对于本章内容更加了解了,能够实际应用。果真,C语言是一门很须要实践的课程。
二、经过第一个实验和之前的一些实验,我发现本身使用if语句容易犯的几个错误,以及缘由。
三、第二个实验联系了static的用法,同时我也知道若是字符太长,就用long。
四、第三个实验我知道了怎样交换两个数字的值,以及学会了展转相除法和更相减损法。
五、又犯了一个新错误,&应该用在scanf中而不是printf中,之后要注意。
一、还不怎么会使用断点的方法找程序的错误,致使我调试的效率很低。
二、不习惯使用注释,老是本身都不懂本身的代码。
三、容易跟着书上的提示和流程图走,没有本身的思路。