C語言習題一

來源:互聯網
上載者:User

標籤:函數   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語言習題一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.