【iOS開發基礎】【C語言】02,ios開發02
一、函數
(一)什麼是函數
任何一個C語言程式都是由一個或者多個程式段(小程式)構成的,每個程式段都有自己的功能,我們一般稱這些程式段為“函數”。
(二)函數的定義
目的:將一個常用的功能封裝起來,方便以後調用
步驟:確定函數名,確定函數體,調用
格式:傳回值類型 函數名(形式參數列表)
{函數體}
(三)函數的調用
1 int average(int num1,int num2) 2 3 { 4 5 return (num1 + num2)/2; 6 7 } 8 9 int main()10 11 {12 13 int a = 1;14 15 int b = 3;16 17 int c = average(a,b); //調用函數18 19 return 0;20 21 }樣本:
(四)函數的參數
①. 形參:定義函數時,函數名後面的參數 如num1和num2
②. 實參:調用函數時,傳人的具體資料 如a和b
③. 形參和實參的個數必須相等
④. 函數體內部不能定義和形參同名的變數
⑤. 如果是基本的資料類型作為形參,則是純粹的值傳遞,修改函數內部形參的值並不會影響到實參的值
⑥. 一個函數可以沒有形參,也可以有無限個形參
(五)函數的傳回值
1.return 的作用:
①. 退出函數
②. 返回一個具體的值給函數的調用者
2.傳回值使用注意:
①. C語言是弱文法弱類型的語言,非常不嚴格
②. 如果沒有寫清楚傳回值的類型,則預設為int型的
③. void代表沒有傳回值
④. 就算明確聲明了傳回值類型,也可以不返回任何的值
⑤. C語言預設情況下,不允許有兩個同名的函數
(六)函數使用注意
①. 預設不允許函數重名
②. 函數之間是平等的,不能夠嵌套定義
③. 函數不可以重複定義,但是可以重複聲明,只要是在調用前聲明就可以,地方隨便
④. 函數如果是只要聲明沒有定義,那麼編譯可以成功,但連結時會失效
(七)多人協作開發
#include<stdio.h>是一個系統標頭檔。
#include<abc.txt>相當於把abc.txt檔案中的所有內容以純文字的方式拷貝到當前位置。
""表示檔案與.c檔案處於同一路徑,可以使用相對路徑也可以使用絕對路徑。左邊有/的是絕對路徑,沒有/則為相對路徑。
注意:自訂的檔案使用"",系統檔案使用<>。
函數如果在調用時,函數定義在調用之後,且前面沒有進行相應的聲明,則編譯器報錯;
調用函數,沒有函式宣告,編譯器不會報錯,連結時報錯,不定義函數反而不報錯。
連結:把項目中所以相關的.o目標檔案和c語言的函數庫合并在一起,產生可執行檔。
通常:
①. 函數的定義放在.c檔案中,函數的聲明放在.h檔案中
②. 如果要是有某個.c檔案中定義的函數,只需要包含.c檔案對應的.h檔案即可
③. .h檔案生下來就是打醬油被別人拿來拷貝包含的,編譯連結時不用寫出
(八)函數的補充
(1)main函數
傳回值是返回給作業系統的,0為正常退出,其他值為非正常退出。
(2)printf函數
傳回值為字元數。如printf("abc");則傳回值為3,若printf("abc男\n");的傳回值為7,因為一個中文在 Mac OS X 系統中佔3個字元。
(3)scanf函數
①.使用前必須加入#include <stdio.h>。
②.調用scanf函數時,需要傳入變數的地址作為參數,scanf函數會等待輸入資料,並且將輸入的資料賦值給地址對應的變數。
③.用scanf函數接收多個數值時,數值之間的分隔字元是任意的。
④.scanf的第一個參數中不要包含\n,比如scanf("%d\n", &a); 這將導致scanf函數無法結束。
二、運算
(一)算術運算
C語言一共有34種運算子,包括常見的加減乘除運算
①. 加法:+ 還可以表示正號
②. 減法:- 還可以表示負號
③. 乘法:* 非數學意義上的X
④. 除法:/ 注意1/2的值為0,並不是二分之一
⑤. 取餘(模運算):兩個整數相除之後的餘數(注意兩邊都必須是整數,正負性取決於%左側的數值)
注意:
①. int a = 10.8;//丟失精度。結果為10——自動類型轉換
②. int a = (int)10.8;//把10.8強制轉換為整型——強制類型轉換
③. Double c = 10.6 + 6//結果為16.600000。在電腦中,拿兩個數值進行運算,如果類型不同則進行自動型別提升。即把6轉為6.000000後再參與運算——自動型別提升
(二)賦值運算
①.簡單賦值
int a = 10 + 5;a = b = 10;//從右向左,左邊不能為常量
②.複合賦值
a = a + 5; => a += 5;
a = a * 5; => a *= 5;
a += 5 * 6 + 4; => a = a +(5 * 6 + 4)
提示:運算順序取決於運算子的優先順序和結合的順序。
(三)自增自減
int a = 10;
把a的值加1有四種方法:
①. a = a + 1;
②. a += 1;
③. a++;
④. ++a;
簡單區分a++和++a。
int b;
int a = 10;
b = ++a; //a == 11,b == 11;a先把值加1為11,再賦值給b
b = a++; //a == 11,b == 10;a先把值10複製給b,a自己再加1為11
b = (a++) + (++a); //a1 == 10,a2 == 12,b == 22
b = (++a) + (a++); //a1 == 11,a2 == 11,b == 22
注意:int d = 10++;//這種寫法是錯誤的,因為對常量進行自加和自減沒有任何意義。
(四)sizeof
作用:用來計算變數,常量或者是一種資料類型所佔的記憶體位元組數。
基本形式:sizeof(變數名|常量|資料類型),完成之後返回一個值。
①. Sizeof 變數|常量
②. Sizeof (變數|常量)
③. Sizeof (資料類型)
注意:資料類型一定要用括弧括起來,不能寫成sizeof 資料類型這樣的形式。
(五)關係運算
(1)條件判斷
預設情況下。在程式中寫出的每一句正確的代碼都會被執行,但很多時候我們需要在某個條件成立的情形下才執行某一段代碼,如登入操作,這種情況可以使用條件陳述式來完成。
(2)真假
在C語言中,條件成立稱為“真”,條件不成立稱為“假”。
C語言規定,任何數值都有真假性,任何非0值都為真,只有0才為假,無布爾類型。
(3)關係比較
關係運算的結果只有兩種情況,如果條件成立就為真,值為1,如果條件不成立就為假,值為0。有6種運算子,分別是:(1) < (2) <= (3) > (4) >= (5) == (6) !=
(4)使用注意
①. == 和 != 優先順序相等,其他四個關係運算子的優先順序相等,且前者的優先順序低於後者。如2 == 3 > 1 應該先計算3 > 1
②. 關係運算子中,若優先順序相同,則“從左往右”結合。如4 > 3 < 2,先計算4 > 3
③. 關係運算子的優先順序低於算術運算子。如3 + 4 > 8 - 2 相當於(3 + 4) > (8 - 2)
④. 練習5 != 4 + 2 * 7 > 3 == 10 先計算5 != 18 > 3 == 10,5 != 1 == 10,1 == 10,假
(六)邏輯運算
邏輯運算的結果只有兩個:真(0)和假(1)
①. 邏輯與 && 條件1 && 條件2 只有的那個條件1和條件2都成立時,才為真否則為假。
②. 邏輯或 || 條件1 || 條件2 當條件1或條件2中有一個成立時就為真,都不成立時為假。
③. 邏輯非 ! !條件 取反
注意:邏輯運算子在進行運算時,只要能夠確定整體的真假性,後面的條件就不再進行而是直接忽略。
int a = b = 10;
int c = (a > 5) && (++b >= 11);//此時a == 10,b == 11,c == 1
int c = (a < 5) && (++b >= 11);//此時a == 10,b == 10,c == 0
提示:在進行邏輯運算時,如果搞不清楚各個符號的優先順序,可以使用()。
(七)三目運算
雙目:需要兩個值參與運算
單目:1個數值參與運算 如!5
三目:需要3個數值參與
格式:條件?數值1:數值2
先判斷?前的條件,若條件成立則返回數值1,若條件不成立則返回條件2。
要求比較a和b的值,把數值大的存入到c中 c = a > b ? a : b
比較a,b,c三個數的值,把最大的值存入到d中
int abmax = (a > b) ? a : b;
d = abmax > c : abmax : c;