黑馬程序員——黑蘋果的日記(3)——函數和進制

------<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自定義函數的書寫格式

函數的基本格式:

返回值類型 函數名稱(函數參數){函數體}

2.3.1無參無返回值一般形式如下:

void 函數名(){

    聲明部分
}

2.3.2無參有返回值函數定義一般形式如下:

返回值類型 函數名(){ 聲明部分
    語句
return 返回值類型變量或常量;
//返回給主調函數

}

其中返回值類型和函數名稱爲函數頭.

2.3.3有參無返回值函數定義
一般形式如下:
void 函數名(形式參數表列){ 聲明部分
    語句 }


2,.3.4有參有返回值函數定義

一般形式如下:


返回值類型 函數名(形式參數表列){ 聲明部分
    語句
return 返回值類型變量或常量;
}

3形參和實參

定義函數的時候,函數名後面小括號中的參數,簡稱形參

調用函數的時候,函數名後面小括號,簡稱實參


(1)在進行函數調用時,主調函數將賦予這些形
式參數實際的值。形參既然是變量,必須在形參表中給出形參的類型說明。

(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");
}

六變量在內存中存儲的細節

內存分配給變量的存儲空間是從高到低。一個變量低位低地址 高位存放高地址。

























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章