cannot find module providing package github.com/× working directory is not part of a module
這個作業屬於哪個班級 | C語言--網路2011/2012 |
---|---|
這個作業的地址 | C部落格作業03--函式 |
這個作業的目標 | 學習如何設計函式、C語言基本資料型別 |
姓名 | 喻文康 |
0. 展示PTA總分
1. 本章學習總結
1.1 函式定義,宣告,呼叫
關於函式的這三點,一般注意以下幾點:
- 如果函式沒有宣告, 應該在呼叫前定義:
- 可以在函式頭宣告:
- 但一般應在檔案頭宣告:
- 函式可互呼叫, 但不能巢狀:
- 關於無引數、無返回值的函式:
如果函式沒有引數, 最好是 fun(void), 不過 fun() 也行;
如果函式沒有返回值, 要註明返回型別是 void;
在 C 語言中呼叫無參函式也要帶括號.
- 宣告函式時可以省略形參(只有在宣告的時候可以):
int sum(int, int, int); /* 省略形式引數 */
1.2 全域性、區域性變數、靜態區域性變數
全域性變數:
定義在main函式的外部
區域性變數:
定義在main函式內,在C語言中,區域性變數分配在棧中,另外在進入每個小的分支時,如進入for迴圈,
如果在for迴圈內部定義了與迴圈外同名的變數,那麼迴圈內變數優先,且不會改變迴圈外同名變數的值。
靜態變數:
又分為靜態全域性變數和靜態區域性變數,靜態區域性變數定義時前面加static關鍵字。
總結:
1、靜態區域性變數和普通區域性變數不同。靜態區域性變數也是定義在函式內部的,靜態區域性變數定義時前面要加static關鍵字來標識,靜態區域性變數所在的函式在多呼叫多次時,
只有第一次才經歷變數定義和初始化,以後多次在呼叫時不再定義和初始化,而是維持之前上一次呼叫時執行後這個變數的值。本次接著來使用。
2、靜態區域性變數在第一次函式被呼叫時創造並初始化,但在函式退出時它不死亡,而是保持其值等待函式下一次被呼叫。下次呼叫時不再重新創造和初始化該變數,
而是直接用上一次留下的值為基礎來進行操作。
3、靜態區域性變數的這種特性,和全域性變數非常類似。它們的相同點是都創造和初始化一次,以後呼叫時值保持上次的不變。不同點在於作用域不同
拓展:
在自學變數時有額外瞭解到一些知識,也把它記錄了下來
區域性變數和全域性變數的對比:
1、定義同時沒有初始化,則區域性變數的值是隨機的,而全域性變數的值是預設為0.
2、使用範圍上:全域性變數具有檔案作用域,而區域性變數只有程式碼塊作用域。
3、生命週期上:全域性變數是在程式開始執行之前的初始化階段就誕生,到整個程式結束退出的時候才死亡;而區域性變數在進入區域性變數所在的程式碼塊時誕生,在該程式碼塊退出的時候死亡。
4、變數分配位置:全域性變數分配在資料段上,而區域性變數分配在棧上。
1.3 C語言資料型別及注意點
資料型別 | 說明 | 位元組 | 應用 | 示例 |
---|---|---|---|---|
char | 字元型 | 1 | 用於儲存單個字元 | char sex ='M’; |
int | 整型 | 2 | 用於儲存整數 | int height = 18; |
float | 單精度浮點型 | 4 | 用於儲存小數 | float price = 11.1 |
double | 雙精度浮點型 | 8 | 用於儲存位數更多的小數 | double pi = 3.1415926 |
格式化輸出
格式符 | 說明 | 舉例 |
---|---|---|
%d | 帶符號十進位制整數 | int a=10; printf("%d", a);輸出結果為10 |
%c | 單個字元 | char x='a' ; printf("%c",x);輸出結果為a |
%s | 字串 | printf("%s"∵"慕課網");輸出結果為慕課網 |
%f | 6位小數 | float a=1.23;printf("%f",a);輸出結果為1.230000 |
備註:
浮點型資料在儲存時都會造成資料精度的丟失,如給某個浮點型變數賦初值3.0,則在儲存該變數時,可能會變成2.999995,即小數部分資料丟失
字元型資料在輸入時是在緩衝區內讀取的,且只能讀取單個字元,字元還包括‘\n’換行符
1.4 C運算子
名稱 | 運算子號 | 舉例 |
---|---|---|
加法運算子 | + | 2+10=12 |
減法運算子 | - | 10-3=7 |
乘法運算子 | * | 2*10=20 |
除法運算子 | / | 30/10=3 |
求餘運算子〈模運算子) | % | 23%7=2 |
自增運算子 | ++ | int a = 1; a++ |
自減運算子 | -- | int a = 1; a-- |
另外注意:取餘運算中,該運算只適合用兩個整數進行取餘運算,如:10%3 = 1;而10.0%3則是錯誤的;
運算後的符號取決於被模數的符號,如(-10)%3 = -1;而10%(-3) = 1。
運算表示式 | 說明 | 運算規則 |
---|---|---|
++a | a自增1後,再取值 | 先運算,再取值 |
--a | a自減1後,再取值 | 先運算,再取值 |
a++ | a取值後,a的值再自增1 | 先取值,再運算 |
a-- | a取值後,a的值再自減1 | 先取值,再運算 |
比較運算子
符號 | 意義 | 舉例 | 結果 |
---|---|---|---|
> | 大於 | 10>5 | 1 |
>= | 大於等於 | 10>=10 | 1 |
< | 小於 | 10<5 | 0 |
<= | 小於等於 | 10<=10 | 1 |
== | 等於 | 10==5 | 0 |
!= | 不等於 | 10!=5 | 1 |
邏輯運算子
符號 | 意義 | 舉例 | 結果 |
---|---|---|---|
&& | 邏輯與 | 0&&1 | 0 |
邏輯或 | |||
! | 邏輯非 | !o | 1 |
測試錯題領悟:
在執行完或語句的前部分後,若結果為真,則程式將不再執行後面的邏輯語句
對於C語言中運算子的優先順序,大致如下圖
1.5 學習體會
在最近的C語言學習中,漸漸發現C語言與數學之間的緊密連線,變成能力不僅取決於語言的運用是否熟練,還取決於數學的運用和自身的數學思維
另外,在最近的pta刷題過程中,漸漸感覺到一個程式不僅僅需要能夠完成所需的功能,程式執行的效率也是一個不可忽視的點。
2. 綜合作業:小學生口算表示式自動生成系統
2.1 模組流程圖
一年級模組流程圖
二年級模組流程圖
三年級模組流程圖
大致同二年級,但有相應的細節變化,如出題難度的變化,會有三個運算元的題目,會有連乘或者連除
2.2 函式功能及全域性變數介紹
函式及其功能
2.2.1 全域性變數
2.2.2 選單相關函式
2.2.3 出題相關函式
2.3 測試結果截圖,測試用例
兩題,一題對一題錯
2.4 大作業中程式設計技巧總結
在生成隨機數時,使用時間作rand函式的種子,會使每次生成不同的隨機數,但如果連續兩次呼叫rand函式的話,生成的隨機數還是會一樣
個人解決辦法是定義一個變數,讓rand函式的參每次加上這個變數,加完一次後改變這個變數的值,讓下次加的數不一樣,就實現了能夠連續呼叫的問題了
學會建檔案和分裝函式,能夠使main函式更為簡潔