你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發入門 ☞ C言語系列二

iOS開發入門 ☞ C言語系列二

編輯:IOS開發綜合

常量

C言語有豐厚的數據類型,在開發中,普通用常量或許變量來表示這些數據

"量"表示數據。常量,則表示一些固定的數據,也就是不能改動的數據。

10.1;// 雙精度double

5.2f; //單精度float

'a'; // 字符型常量

'ab'; // 錯誤

'李'; // 錯誤寫法, 由於一個漢字占3個字節

'\n';//字符型常量(本義字符,表示單個字符)

  

定義常量的辦法:

const int a=100;

變量

變量:代表了內存的一個空間,用來寄存常常變化的數據。(變量名就是空間的稱號,變量的類型決議著變量占用多大的內存空間)

變量名:是我們操作數據(寄存數據)的根據。

初始化:就是清空(賦初值,0/NULL)的意思,清算一些渣滓數據。

變量的運用:存值和取值。

  int a; //定義一個變量,未初始化。

  a的值的能夠性:1) 零碎的數據; 2) 上一個順序遺留的數據; 3) 渣滓數。

變量的作用域:(變量的運用范圍)

部分變量(外部變量):在函數的外部或許代碼塊的外部定義的變量。

  ※ 作用域:從部分變量定義的地位開端,到它所在的代碼塊或函數體的“}”為止。

  ※ 留意:在代碼塊的外部可以定義和塊內部同名的變量,塊外部的會暫時屏蔽(內部的不起作用)塊內部的變量的作用域。  

#include <stdio.h>

 

int main() {

    int age=20;

    //代碼塊代表一個空間,與age的空間並列

    {//代碼塊開端

        int a=5;

        printf("a=%d\n", a); //a=5

        int age=25; //在代碼塊外部可以定義和代碼塊內部同名的變量

        printf("age=%d\n",age); //age=25;

    }//代碼塊完畢(此時代碼塊外部一切的空間會釋放)

    printf("age=%d\n", age);//age=20;

    return 0;

}

變量的命名:命名需求契合標識符語法要求。

  • 必需以字母或下劃線掃尾
  • 包括字母、下劃線或數字
  • 大小寫敏感的
  • 不能與關鍵字抵觸
  • 標識符實際上講,長度有限制,但太長了會被編譯器截斷

變量的聲明(定義):在相反的作用域內變量不可反復定義!

語法格式:變量類型  變量名;

  如: int age;

    float result;

    double x,y,z;

  變量類型:表示我所定義的這個變量可以寄存什麼樣類型的常量

  變量稱號:它一個標示符,來標識我們在內存中開拓這塊存儲區域,方便我們當前運用

  變量的作用域:從定義那一行開端直到其所在大括號完畢為止

//1.定義變量(即在內存中開拓一塊空間,空間的大小跟定義的類型有關,空間的名字就是變量名)

int age;//這一行代碼就在內存中開拓一塊4個字節的存儲區域,它名字叫age;這塊存儲區域是用來寄存int類型的數據的

//2.初始化:變量第一次賦值稱為初始化。

age=22; //這行代碼是把22,放到名字為age的這塊存儲區域中

   

  • 未經聲明的變量不能運用;變量在運用之前要聲明,且只聲明一次。
  • 變量用來保管順序執行進程發生的暫時值,可以屢次賦值,但只會保管最後一次的值。

 

變量的存儲
  • 變量所占的存儲空間(字節數):跟變量的類型和編譯器環境有關。
  • 變量存儲單元的第一個字節的地址就是該變量的地址(詳細地址/首地址)
  • 任何變量在內存中都是以二進制的方式存儲:

   一個正數的二進制方式,其實就是對它的負數的二進制方式停止取反再加1。

1. 不同的數據類型占用不同的存儲空間:

  

2. 不同數據類型表示的范圍:

  

  

變量在內存中怎樣貯存?(變量為什麼要有類型)

  • 只需定義變量,零碎就會開拓一塊存儲空間給我們的變量存儲數據
  • 越先定義的變量,內存地址越大(從字節地址最大的開端找)
  • 內存尋址是從大到小,高位放在高字節上,低位放在低字節上
  • 變量的地址就是變量所占的存儲空間最小的字節地址(即首地址:&變量稱號)

  計算機中最小貯存單元是字節,每個字節都有一個地址。

    

// 擴展:獲取每個字節中存儲的數據

    char *p = &value;

    for (int i = 0; i < sizeof(value); i++) {

        printf("%i\n", *(p + i));// 取出每個字節中存儲的數據(88 2 0 0)

    }

留意:在這裡,地址(int型指針)+1 相當於 char型指針+4

  

//  當定義變量的時分,這個變量外面終究有什麼東西是不確定的

    int score;//渣滓值

 

//  printf函數打印 % 字符要用 %% 才干打印

printf("5%%2=%d\n",5%2);//後果為:5%2=1

 

 

交流整型變量a、b的值:

  比方:a=10、b=11;交流後:a=11,b=10。用兩種方式完成:

  1. 運用第三方變量

    int temp;

    temp = a;

    a = b;

    b = temp;

  1. 不運用第三方變量

    a = b - a;

    b = b - a;

    a = b + a;

printf 函數:

printf函數稱為格式輸入函數,其關鍵字最末一個字母f即為“格式”(format)之意

printf函數調用的普通方式為:(其中格式控制字符串用於指定輸入格式)

  printf(“格式控制字符串”, 輸入表列); 

格式字符串的普通方式為:(其中方括號[]中的項為可選項)

  %[標志][輸入最小寬度][.精度][長度]類型。

//應用printf函數可以計算字符串的長度

int length = printf("IOS開發\n");

printf("共占%i個字節\n", length);// 10 (1+1+1+3+3+1)

1. 類型(格式控制符)

  

 2. 標志

  標志字符為 -、+、# 和空格四種,其意義下表所示:

  

  • 指定位寬:
    1. %0nd:在%與d之間,0n,n表示輸入的數字的寬度,假如不夠就用0補齊右邊(重點)
    2. %nd:在%與d之間n,n表示輸入的數字的寬度,假如不夠就用空格補齊右邊
    3. %-nd:在%與d之間 -n,n表示輸入的數字的寬度,假如不夠就用空格補齊左邊
  • 指定位數:

      %m.nf:在%與f之間,可以有m.n,m表示輸入數字所占的寬度,m表示小數點前面的位數,假如不夠會用空格補齊右邊

#include <stdio.h>

 

int main() {

    float m=3.141592f;

    printf("m=%8.4f\n", m);//默許空格補在右邊

//  %-m.nf 輸入共占m位,其中小數占n位,假如數值寬小於m右端補空格

    printf("m=%-8.4f\n", m);//-號表示空格補左邊

//  %*.*特殊用法:

    printf("m=%*.*f\n",6,2,m);//m=  3.14

    printf("%.*s\n",4,"abcdkkkkkkk");//abcd

    return 0;

}

%g:自動選f格式或e格式中較短的一種輸入,且不輸入有意義的零。

%p:輸入地址(指針)

/**

 *  %f默許會保存6位小數

 *  指定保存多少位小數: %.nf, 其中n就是需求保存多少位小數, f用於輸入實型

 */

float value = 3.14;

printf("%f\n", value);//3.140000

printf("%.2f\n", value);//3.14

 

/**

     *  float和double的無效位數:

     *  float最多表示7位無效數據。double最多表示16位無效數據。

     *

     *  float類型要點:

     *  1.小數末尾要加f/F,指定為float類型

     *  2.默許狀況保存6位小數

     *  3.精度為7位無效數字(右邊第一個不為零的數開端,除小數點外前7位數字無效,超出7位的是渣滓數據)

     *

         1bit(符號位) 8bits(指數位) 23bits(尾數位)

         精度是由尾數的位數來決議的

         float:2^23 = 8388608,一共七位,這意味著最多能有7位無效數字,

         但相對能保證的為6位,也即float的精度為6~7位無效數字;

     */

    float value = 3.1415926525;

    printf("%f\n", value);//3.141593 (默許狀況保存6位)

    //float無效數字是7位,多余位數則會顯示渣滓數據(不精確)

    printf("%.10f\n", value); //3.1415927410

 

    // 如何想完好的輸入那麼必需將數據保管為double類型, 由於double類型的無效位是15位

    double value = 3.1415926525;

    printf("%.10lf\n", value);

    

    //如何進步逼格(保存幾位小數不確定時)

    //指定保存多少位小數時,可以經過*號占位,當前賦值詳細保存的小數位

    float value = 3.1415926;

    printf("%.*f\n", 5, value);

    &是C言語中的一個地址運算符,可以用來獲取變量的地址

    &可以獲取變量的地址,例如:&num

    *可以依據地址數據找到變量,例如:*(&num)

scanf 函數

  scanf函數是一個阻塞式函數

  順序會停在scanf函數呈現的中央,直到接納到數據才會執行前面的代碼

//  運用scanf接納用戶從鍵盤上輸出

    scanf("%d", &a);//留意: 必需通知scanf函數變量的詳細地址, 才干存儲用戶輸出的數據

//  %與d之間可以無數字n,這個n表示承受數據的寬度

    scanf("%2d",&a);

scanf 函數要點:

  1. 鍵盤輸出的數據與格式化字符串中的要婚配, 不婚配時scanf函數就會自動終止。
  2. scanf接納多個數據時,為了避免出錯普通加一個分隔符(例如:,)

    (空格、回車、Tab可以做%c除外的分隔符,由於空格、回車、Tab是字符)

  1. 不能在scanf的格式化字符串末尾寫上\n

    

    

// \n代表換行

// 如何通知scanf函數我們輸出終了? 回車(\n)

// 由於回車是scanf的完畢符, 所以不能在scanf的格式化字符串末尾寫上\n。(假如加在末尾,會永遠完畢不了輸出,即scanf函數不會終止)

// 假如不小心把\n放到了scanf格式化字符串的末尾,也可以破,原樣輸出(輸 \n)或輸出一個不婚配的類型(如:輸 a)

scanf("%i%i\n", &num1, &num2);

 

scanf函數完成原理

scanf函數的運轉原理:

    零碎會將用戶輸出的內容放入輸出緩沖區

    scanf函數會從輸出緩沖區中逐一取出內容賦值給格式符,假如類型不分歧不會修正原無數據。

  

  

scanf錄入數據的時分,錄入格式必需與格式化字符串中格式分歧

  1. scanf("%d-%d-%d", &a, &b, &c);

    留意:scanf占位符兩頭聯系符可以是恣意的,不一定要用中劃線-,可以是逗號、空格、星號*、井號#等等,甚至是英文字母

  1. scanf("%d %d %d", &a, &b, &c);

    3個%d之間是用空格隔開的,我們在每輸出一個整數後必需輸出一個分隔符,分隔符可以是空格、tab、回車

    scanf格式字符串最前面不要加\n,比方scanf("%d\n", &a);這將招致scanf函數無法完畢。

   

面試題

  int  a;

  請問a外面有值嗎,是多少? 渣滓值

//判別一個年份能否是閏年

    //能被4整除,但(並且)不能被100整除,或許能被400整除

    int year;//保管年份

    printf("請輸出一個年份:");

    scanf("%d", &year);

    if((year%4==0 && year%100!=0) || year % 400 == 0){

        printf("是閏年\n");

    }else{

        printf("不是閏年");

    }

 

  ※ 變量剖析題:(留意變量的作用域)

  

 

【iOS開發入門 ☞ C言語系列二】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved