標籤:函數 block 相等 產生 har color oat 錯誤 free
第一道題題目:正數n的平方根可以通過一系列近似值來獲得。每個近似值都比前一個更加接近準確值。第一個近似值是1,接下來的近似值則通過下面的公式來獲得。
ai+1=(ai+(n/ai))/2
編寫一個程式,讀入一個值,計算並列印出它的平方根。如果你將所有的近似值都列印出來,你會發現這種方法獲得準確結果的速度有多快、原則上,這種計算可以永遠進行下去,它會不斷產生更加準確的結果。但在實際中,由於浮點變數的精度限制,程式無法一直計算下去,當某個近似值與前一個近似值相等時,你就可以讓程式停止計算了。思路:定義兩個變數,分別記錄前一個值和後一個值。後一個值通過公式計算,並計算兩個值的絕對值,通過迴圈,找到最接近的值。代碼如下:
1 #include<stdio.h> 2 #include<math.h> 3 float CalaValue(int value) 4 { 5 float frontValue = 1.0; //前一個值 6 7 float lastValue = (1 + value) / 2.0; //後一個值 8 while ((fabs(lastValue - frontValue))>0.0000001) 9 {10 frontValue = lastValue;11 lastValue = (frontValue + value / frontValue) / 2.0; 12 }13 return lastValue;14 }15 int main()16 {17 int value = 0;18 printf("Input a number:");19 scanf("%d", &value);20 if (value>=0)21 {22 printf("%d的平方根為%f\n", value, CalaValue(value));23 }24 else25 {26 printf("輸入值不合法\n");27 }28 }
第二道題題目:一個整數如果只能被它本身和1整除,它就被稱為質數。請編寫一個程式,列印出1-100之間的質數思路:判斷質數,使用平方根方法判斷(數學原理)代碼如下:
1 #include<stdio.h> 2 #include<math.h> 3 int isPrime(int value) 4 { 5 if (value == 1) 6 { 7 return 0; 8 } 9 else if (value == 2)10 {11 return 1;12 }13 for (int i = 2; i <= (int)sqrt(value); i++)14 {15 if (value%i == 0)16 {17 return 0;18 }19 }20 return 1;21 }22 int main()23 {24 int i;25 for (i = 1; i < 100; i++)26 {27 if (isPrime(i))28 {29 printf("%d,",i);30 }31 }32 return 0;33 34 }
第三道題題目:請編寫一個函數,它從字串中提取一個子字串。函數的原型如下:int substr(char dst[], char src[], int start, int len);函數的任務是從src數組起始位置向後位移start個字元的位置開始,最多複製len個非NUL字元到dst數組。在複製完畢之後,dst數組必須以NUL位元組結尾。函數的傳回值是儲存於dst數組中的字串長度。如果start 所指定的位置越過了src數組的尾部,或者start或len的值為負,那麼複製到dst數組的是個Null 字元串。思路:動態為目標字串申請空間並賦值代碼如下:
1 #include<stdio.h> 2 #include<string.h> 3 int substr(char dst[], char src[], int start, int len) 4 { 5 int i = 0; 6 if (start < 0 || len < 0 || start>strlen(src)) 7 { 8 return 0; 9 }10 else11 {12 while (src[start] != ‘\0‘ &&i<len)13 {14 dst[i] = src[start];15 start++;16 i++;17 }18 }19 return i;20 }21 int main()22 {23 char *src = "hello";24 char *dst = (char *)malloc(sizeof(char) * 100);25 printf("儲存於dst數組中的字串長度為:%d\n", substr(dst, src, 0, 9));26 free(dst);27 return 0;28 29 }
總結:前面兩道題比較簡單,難度為一顆星。最後這道有點難度,主要用到了指標,動態分配記憶體知識,可能指標的操作自己忘記了,感覺還是有問題。然後今天自己捕捉到很多有關字串,指標的錯誤,值得好好學習下。歡迎交流!
C語言習題一