------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------
一函數
1概述:函數是C源程序的基本模塊,通過對函數模塊的調用實現特定的功能
分類:庫函數和用戶定義函數
庫函數:printf、scanf、getchar、putchar、gets、puts、strcat等
用戶定義函數:由用戶按需要寫的函數。
2用戶定義的函數
2.1其分爲有返回值和無返回值的函數有返回值函數: 此類函數被調用執行完後將向調用者返回一個執行結果,稱爲函數返回值。
無返回值函數: 此類函數用於完成某項特定的處理任務,執行完成後不向調用者返回函數值。
2.2無參函數和有參函數
無參函數 : 函數定義、函數說明及函數調用中均不帶參數。主調函數和被調函數之間不進行參數傳送。
有參函數: 也稱爲帶參函數。
函數的基本格式:
返回值類型 函數名稱(函數參數){函數體}2.3.1無參無返回值一般形式如下:
void 函數名(){
聲明部分}
2.3.2無參有返回值函數定義一般形式如下:
返回值類型 函數名(){ 聲明部分語句
return 返回值類型變量或常量;
//返回給主調函數
}
其中返回值類型和函數名稱爲函數頭.2.3.3有參無返回值函數定義
一般形式如下:
void 函數名(形式參數表列){ 聲明部分
語句 }
2,.3.4有參有返回值函數定義
一般形式如下:
語句
return 返回值類型變量或常量;
}
3形參和實參
定義函數的時候,函數名後面小括號中的參數,簡稱形參
調用函數的時候,函數名後面小括號,簡稱實參
式參數實際的值。形參既然是變量,必須在形參表中給出形參的類型說明。
(2)主調函數把實參的值傳送給被調函數的形參從而實現主 調函數向被調函數的數據傳送。
形參變量只有在被調用時才分配內存單元,進行函數調用時,它 們都必須具有確定的值
形參和實參類型不一致時,會自動轉化爲形參的類型。
4函數返回值
定義:函數的值(或稱函數返回值)是指函數被調用之後,執行函數體中的程序段所取得的並返 回給主調函數的值。
return語句的一般形式爲:
return 表達式;
或者爲:
return (表達式);
注意返回值類型和定義類型的一致
5函數的聲明
(1)函數在main之前可以不用聲明
(2)函數返回值是整型可以不用聲明
6兩種調用必須有返回值
1) 函數表達式
函數作爲表達式中的一項出現在表達式中,以函數返回值參與表達式的運算。這種方式要求函數 是有返回值的
2) 函數實參
這種情況是把該函數的返回值作爲實參進行傳送,因 此要求該函數必須是有返回值的。
注意)函數名不能和變量名同名函數的嵌套調用。C語言中不允許作嵌套的函數定義。
遞歸函數概述及構成條件
遞歸函數:一個函數在它的函數體內調用它自身稱爲遞歸調用。
面試題:有5個人坐在一起,問第5個人多少歲?他說比第4個人大兩歲。問 第4個人歲數,他說比第3個人大兩歲。問第3個人,又說比第2個 人大兩歲。問第2個人,說比第1個人大兩歲。最後問第1個人, 他說是10歲。請問第5個人多大?
#include <stdio.h>
int getAge(int n){
int age ;
if(n==1){ age = 10;
}else{
age = getAge(n-1)+2;
}
return age;
}
int main(int argc, const char * argv[]) {
printf("%d",getAge(5));
return 0;
}
以上的題目用數組依然可以解決二xcode的運行原理
應用程序---->實用工具---->終端
查看目錄下得文件: ls
切換目錄: cd
查看用戶 who
查看當前目錄 pwd
清屏: clear
創建文件的方法 touch
查看文件的方法 cat more
打開文件 open
刪除文件 rm
創建文件夾 mkdir
執行流程: 注意:要進行手工編譯的時候,打開終端後,要cd到當前.c文件所在的目錄
編譯:cc -c 文件名.c
鏈接:cc 文件名.o
執行:./a.out
三include文件包含
1文件包含是C預處理程序的另一個重要功能。
include 不一定非要寫在第一行
預處理的指令,所有的預處理指令都是以"#"開頭
2 include作用: 把要包含的文件的內容拷貝到當前使用include的地方include可以出現在函數的內容,也可以出現在文件開頭
3.1 #include " " 搜索順序:當前--->編譯器中找--->系統的include找--報錯
3.2 #include <> 搜索順序:先到編譯器器---->系統的include--->報錯
四C語言模塊化編程概念
概念:多文件(.c文件)編程,一個 .c 文件和一個 .h 文 件可以被稱爲一個模塊
類似於oc的類的聲明和實現
五計算機中的進制
5.1位數的轉換
10 -> 2 : 除2取餘法,把10進制數除以2,然後取得餘數的序列,再倒序
2 -> 10 : 所有位的位權相加 101 = 1*2^0+0*2^1+1*2^2
會進行不同位之間的運算
2 --> 16 : 4合1法, 整數部分從右向左 4位結合成一位,小數部分從左向右4位結合1位, 不足部分補0
 16 -->2: 1拆4法, 16進制的1位拆成二進制的4位
5.2機器數和真值
一個數在計算機中的二進制表示形式, 叫做這個數的機器數
將帶符號位的機器數對應的真正數值稱爲機器數的真值。
5.3原碼、反碼、補碼的基本概念.
1)原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值
2)反碼
反碼的表示方法是:正數的反碼是其本身
3)補碼
補碼的表示方法是:正數的補碼就是其本身
思考:以整型-13爲例,計算分別寫出-13的原碼、反碼、補碼
5.4位運算符
位運算是指按二進制進行的運算
1)& 按位與 只有對應的兩個二進位均爲1時,結果位才爲1,否則爲0
1001 &1101
------ 1001
2) | 按位或 只要對應的二個二進位有一個爲1時,結果位就爲1,否則爲0
1001 & 1101
---------------------
1101
3) ^ 按位異或 當對應的二進位相異(不相同)時,結果爲1,否則爲0
1001 ^ 1101
----------------------
0100
口訣: 同1爲1
4)~ 取反 各二進位進行取反(0變1,1變0)
原碼:0000 0000 0000 1000 0000 0001 反碼:1111 1111 1111 0111 1111 1110
知道補碼求原碼:也是符號位不變,其他各位取反+1
1、<< 左移 1、各二進位全部左移n位,高位丟棄,低位補0
2<<2 == 2*2
2、>> 右移 各二進位全部右移n位,保持符號位不變
3、位運算技巧: 1)任何數和1進行&操作,得到這個數的最低位
1001 & 0001
------------
0001
寫一個函數把一個10進制數按照二進制格式輸出
void b1(int num){
//0000 0000 0000 0000 0000 0000 0000 1101 //0000 0000 0000 0000 0000 0000 0000 0001
int len = sizeof(int)*8;
int temp;
for (int i=0; i<len; i++) {
temp = num; //每次都在原數的基礎上進行移位運算
temp = temp>>(31-i); //每次移動的位數
int t = temp&1; //取出最後一位
if(i!=0&&i%4==0)printf(" "); printf("%d",t);
}
}
printf("\n");
}
六變量在內存中存儲的細節
內存分配給變量的存儲空間是從高到低。一個變量低位低地址 高位存放高地址。