一、函數的定義和調用編程
二、模塊化程序設計模塊化
調用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中,之後要注意。
一、還不怎麼會使用斷點的方法找程序的錯誤,致使我調試的效率很低。
二、不習慣使用註釋,老是本身都不懂本身的代碼。
三、容易跟着書上的提示和流程圖走,沒有本身的思路。