第一章、c語(yǔ)言初級(jí)階段

Day1.c語(yǔ)言初體驗(yàn)
  1. C語(yǔ)言中每一條語(yǔ)句后面都必須有;號(hào)
  2. C語(yǔ)言中除了""引起來(lái)的地方, 其它任何地方都不能出現(xiàn)中文
  3. main函數(shù)中的return 0;可以寫, 也可以不寫
  4. main函數(shù)前面的int可以寫, 可以不寫
  5. main函數(shù)后面的()不可以省略
  6. 不要把main寫錯(cuò)了
  7. 同一程序中只能有一個(gè)main函數(shù)
  8. 輸出函數(shù)printf("lnj;");
Day2.關(guān)鍵字

注釋的用法

  1. // 單行注釋
  2. /*
    多行注釋 (以 /星 開頭 以 星/ 結(jié)尾)
    */
  3. 單行注釋可以嵌套多行注釋
  4. 單行注釋嵌套多行注釋的時(shí)候, 多行注釋必須在同一行內(nèi)
  5. 多行注釋可以嵌套單行注釋
  6. 多行注釋不能嵌套多行注釋

常量

    // 1.整型常量
    10;
    // 2.實(shí)型常量(小數(shù))
    // 單精度f(wàn)loat / 雙精度double
    // 注意: 默認(rèn)情況下編寫的小數(shù)都是雙精度的實(shí)型常量, 也就是默認(rèn)情況下所有小數(shù)都是double
    10.1;// 雙精度double
    88.8;// 雙精度double
    5.2f; //單精度f(wàn)loat
    // 3.字符型常量, 用單引號(hào)括起來(lái)的就是字符型常量
    // 注意: 字符型常量的單引號(hào)中只能寫一個(gè)字符, 如果寫多個(gè)會(huì)報(bào)錯(cuò)
    'a'; // 字符型常量
    'ab'; // 錯(cuò)誤
    '1';
    '12'; // 錯(cuò)誤, 12是由兩個(gè)字符組成, 由1和2組成
    // '李'; // 錯(cuò)誤寫法, 因?yàn)橐粋€(gè)漢字占3個(gè)字節(jié)
    // 字符型常量的特殊情況, 在C語(yǔ)言中, 系統(tǒng)給某些字符的組合定義了特殊的函數(shù), 這些字符的組合可以當(dāng)做單個(gè)字符來(lái)使用
    '\n';
 
    // 4.字符串型常量, 用雙引號(hào)括起來(lái)的就是字符串型常量
    // 注意: 無(wú)論你用雙引號(hào)括起來(lái)了幾個(gè)字符, 只要使用雙引號(hào)括起來(lái)的都是字符串常量
    "abc";
    "a";

變量

// 1.申請(qǐng)一塊存儲(chǔ)空間, 也就是定義一個(gè)變量
    /*
    // 定義變量的格式: 數(shù)據(jù)類型  變量名稱;
    // 定義一個(gè)基本數(shù)據(jù)類型的變量
    // int float double char
    int number; // 定義了一個(gè)名稱叫做number的變量
    // 會(huì)在內(nèi)存中開辟一塊存儲(chǔ)空間給number, 用于存儲(chǔ)數(shù)據(jù)
    */
    /*
    // 2.連續(xù)定義, 如果多個(gè)變量都是相同類型的, 那么可以采用連續(xù)定義
    int number, value;
    // 3.如何往變量對(duì)應(yīng)的存儲(chǔ)空間當(dāng)中存儲(chǔ)數(shù)據(jù)
    // 注意: 變量中不能隨便存儲(chǔ)數(shù)據(jù), 只能存儲(chǔ)與之對(duì)應(yīng)的數(shù)據(jù)
    // 概念: 變量的第一次賦值, 我們稱之為初始化,
    // 注意, 要想使用變量都必須先對(duì)變量進(jìn)行初始化, 然后才能夠使用
    // 如果不對(duì)變量進(jìn)行初始化, 那么其實(shí)變量中存儲(chǔ)的是一些垃圾數(shù)據(jù)
    number = 10; // 會(huì)將等號(hào)右邊的數(shù)據(jù)放到等號(hào)左邊的變量對(duì)應(yīng)的存儲(chǔ)空間中
    // 4.如何使用變量
    // 占位符號(hào), %號(hào)是占位符號(hào)的起始符號(hào)
    printf("%i\n", number);

    float floatValue; // 定義了一個(gè)實(shí)型的變量
    floatValue = 10.1f; // 往floatValue對(duì)應(yīng)的存儲(chǔ)空間中存儲(chǔ)了10.1這個(gè)值
    printf("%f\n", floatValue);
    
    int intValue, age; // 定義了一個(gè)整型的變量
    printf("%i\n", intValue);
    printf("%i\n", age);
    */
    
    // 6.初始化的兩種方式
    /*
    // 1.先定義再初始化
    int number;
    number = 10;
    // 2.定義的同時(shí)初始化
    int value = 10;
     */
    
    // 7.完全初始化
//    int number, value;
//    number = value = 10;
    
    int number;
    number = 10;
    int value;
    value = number;

    // 8.部分初始化
//    int number, value = 10;

// 內(nèi)存尋址從大到小, 如果按照這種規(guī)則, 那么先定義的變量?jī)?nèi)存地址一定大于后定義的變量
    int number = 0;
    int value = 0;
    // 如何獲得變量的詳細(xì)地址(變量的地址), &變量名稱
    // 利用%p占位符來(lái)打印變量的詳細(xì)地址
    // 輸出的是一個(gè)十六進(jìn)制的數(shù)
    printf("%p\n", &number);
    printf("%p\n", &value);

printf和scanf函數(shù)

  1. printf函數(shù):
// 1.輸出基本數(shù)據(jù)類型
    /*
    int number = 10;
    int value = 20;
    printf("%i, %i\n", number, value);
    
    float floatValue = 10.1f;
    printf("%f\n",floatValue);
    
    char charValue = 'a';
    printf("%c\n", charValue);
    
    double doubleValue = 9.9;
    printf("%lf", doubleValue);
     */
    
    // 3..指定位寬
//    int number = 99;
//    printf("%5i!!!", number); 這個(gè)是右對(duì)齊 左邊補(bǔ)3個(gè)空格
//    printf("%-5i!!!", number);這個(gè)是左對(duì)齊 右邊補(bǔ)3個(gè)空格
    
        int number = 9999;
        printf("%2i", number);這個(gè)是位寬不夠自動(dòng)升級(jí) 正常輸出9999
    /*
     // 如何指定位寬? %mi; // 其中m就是位寬 而i輸出對(duì)應(yīng)類型的數(shù)據(jù)
     // 默認(rèn)情況下位寬是右對(duì)齊, 如果需要輸出的類型寬度不夠, 會(huì)在左邊補(bǔ)空格
     // 如果在位寬前面加上-號(hào), 就會(huì)改變位寬的對(duì)齊方式為左對(duì)齊,如果需要輸出的類型寬度不夠,會(huì)在右邊補(bǔ)空格
    // 注意: 如果指定了位寬, 但是實(shí)際輸出的內(nèi)容超出了寬度, 會(huì)按照實(shí)際的寬度來(lái)輸出
    
    // 可以在位寬前面加上0, 如果輸出的內(nèi)容寬度不夠就會(huì)用0來(lái)補(bǔ), 如果寬度已經(jīng)夠了, 那么會(huì)按照實(shí)際的寬度輸出
    int number = 8;
    // 01
    // 2015-06-05
    printf("%02i", number);這個(gè)輸出08
     */
    // 3.保留位數(shù)
    /*
    // %f默認(rèn)會(huì)保留6位小數(shù)
    // 指定保留多少位小數(shù): %.nf, 其中n就是需要保留多少位小數(shù), f用于輸出實(shí)型
    float floatValue = 3.14;
    printf("%.2f", floatValue);
     */
    // 4.%f各種坑
    /*
    // 為什么指定保留10位之后還不對(duì)呢? 因?yàn)閒loat類型有效位數(shù)是7位(不包括小數(shù)點(diǎn))
    // 如何計(jì)算有效位? 從第一個(gè)數(shù)開始計(jì)算
    // 如果輸出的數(shù)據(jù)超出了有效位數(shù), 那么就會(huì)出現(xiàn)一些垃圾數(shù)據(jù)
    float floatValue = 3.1415926525;
    printf("%.10f\n", floatValue); // 默認(rèn)情況保留6位
這個(gè)輸出:3.1415927410 保留6位 然后第七位四舍五入
    // 如何想完整的輸出那么必須將數(shù)據(jù)保存位double類型, 因?yàn)閐ouble類型的有效位是15位
    double doubleValue = 3.1415926525;
    printf("%.10lf\n", doubleValue);
這個(gè)輸出:3.1415926525
     */
    // 5.如何提高比格
    float floatValue = 3.1415926;
    printf("%.*f", 5,floatValue);
  1. scanf函數(shù)
// 1.要求: 存儲(chǔ)用戶輸入的整數(shù)
    /*
    // 1.用戶輸入的整數(shù)確定嗎? 不確定 --> 定義變量
    // 2.如何接收用戶輸入的整數(shù)? scanf函數(shù)
    // scanf格式: scanf("格式化字符串", 列表項(xiàng)); --> scanf("%i", 變量);
    
    // 1.定義變量
    int number;
    // 2.利用scanf函數(shù)接收用戶輸入的數(shù)據(jù)
    scanf("%i", &number);// 注意: 必須告訴scanf函數(shù)變量的詳細(xì)地址, 才能存儲(chǔ)用戶輸入的數(shù)據(jù)
    // 3.輸出接收到的數(shù)據(jù)
    printf("number = %i", number);
     */
    
    // 2.要求從控制臺(tái)接收用戶輸入的兩個(gè)整數(shù), 然后計(jì)算兩個(gè)整數(shù)的和
    /*
    // 0.提示用戶輸入數(shù)據(jù)
    printf("親, 請(qǐng)輸入第一個(gè)數(shù)字, 以回車鍵結(jié)束\n");
    // 1.定義兩個(gè)變量保存用戶輸入的數(shù)據(jù)
    int num1, num2;
    // 2.利用scanf接收用戶輸入的數(shù)據(jù)
    // 2.1接收第一個(gè)數(shù)
    scanf("%i", &num1);
    printf("親, 請(qǐng)輸入第二個(gè)數(shù)字, 以回車鍵結(jié)束\n");
    scanf("%i", &num2);
    
    // 3.將接收到的兩個(gè)數(shù)相加
    int result = (num1 + num2);
    
    // 4.輸出兩個(gè)數(shù)驗(yàn)證結(jié)果
    printf("result = %d", result);
     */
    /*
    int num1, num2;
    num1 = num2 = 10;
    printf("num1 = %i, num2 = %i", num1, num2);
     */
    
    /*
    // 0.提示用戶輸入數(shù)據(jù)
    printf("親, 請(qǐng)輸入兩個(gè)數(shù)字, 以回車鍵結(jié)束\n");
    // 1.定義兩個(gè)變量保存用戶輸入的數(shù)據(jù)
    int num1, num2;
    // 2.利用scanf接收用戶輸入的數(shù)據(jù)
    // 注意: 利用scanf接收多個(gè)數(shù)據(jù)的時(shí)候, 輸入的內(nèi)容要求和"格式化字符串"中的一模一樣
    // 如果輸入的數(shù)據(jù)與格式化字符串中的不匹配, 那么scanf函數(shù)會(huì)自動(dòng)終止
//    scanf("%i,%i", &num1, &num2);
//如果多個(gè)數(shù)據(jù)之間沒(méi)有其它字符, 那么可以利用 空格, 回車, table來(lái)作為分隔
    // 但是, 如果格式化字符串中有%c除外
//    scanf("%i%i", &num1, &num2);
    char charValue;
    // 輸入: 123-->num1, a -->charValue, 456-->num2
    // 技巧: 無(wú)論想接收什么類型的數(shù)據(jù), 只要有需要一次性接收多個(gè), 就給每一個(gè)數(shù)據(jù)之間加上固定的符號(hào)作為分隔符(例如: ,)
    scanf("%i-%c-%i", &num1, &charValue, &num2);
    
    // 3.將接收到的兩個(gè)數(shù)相加
//    int result = (num1 + num2);
    
    // 4.輸出兩個(gè)數(shù)驗(yàn)證結(jié)果
//    printf("result = %d", result);
    
    printf("num1 = %i, char = %c , num2 = %i", num1, charValue, num2);
     */
    
    // 3.\n問(wèn)題
    int number, number2;
    // \n代表?yè)Q行
    // 如何告訴scanf函數(shù)我們輸入完畢? 回車 == \n
    // 因?yàn)榛剀囀莝canf的結(jié)束符, 所以不能在scanf的格式化字符串末尾寫上\n
    // 如果不小心把\n放到了scanf格式化字符串的末尾, 也可以破, 原樣輸入或輸入一個(gè)不匹配的類型
    scanf("%i\n%i\n", &number, &number2);//這個(gè)分割符千萬(wàn)不要用\n,不能出現(xiàn)
    printf("number = %i , number2 = %i\n", number, number2);
Day3.運(yùn)算符及if

運(yùn)算

  1. 類型轉(zhuǎn)換
    自動(dòng)類型的提升, 將參與運(yùn)算的數(shù)據(jù)都轉(zhuǎn)換為同一類型后再運(yùn)算,會(huì)自動(dòng)將小的數(shù)據(jù)類型提升為大的數(shù)據(jù)類型。
// 在算術(shù)運(yùn)算中, 參與運(yùn)算的是什么類型, 計(jì)算出來(lái)就是什么類型
//    double result = 1.0 / 2; // 1.0 / 2.0 --> 0.5
//    double result = (double)1 / 2;// 1.0 / 2.0 --> 0.5
    double result = (double)(1 / 2); // (double)(0) --> 0.0
    printf("result = %lf\n", result);
     */
  1. 運(yùn)算符(主要注意%)
    // 注意: 取模運(yùn)算只能用于整數(shù)
//    result = 10.0 % 3.0;錯(cuò)誤
    // 取模運(yùn)算的正負(fù)性取決于左邊的操作數(shù), 如果左邊為負(fù)數(shù), 那么結(jié)果就是負(fù)數(shù)
//    result = 10 % -3;結(jié)果 1
//    result = -10 % -3;結(jié)果 -1
//    result = -10 % 3;結(jié)果 -1
    // 如果取模運(yùn)算的左邊小于右邊, 那么結(jié)果就是左邊
//    result = 2 % 9; 結(jié)果2

總結(jié)一句話: ++在前, 先自增再運(yùn)算, ++在后, 先運(yùn)算再自增
  1. sizeof簡(jiǎn)介(主要用來(lái)運(yùn)算字節(jié)數(shù))
  • sizeof可以用來(lái)計(jì)算一個(gè)變量或一個(gè)常量、一種數(shù)據(jù)類型所占的內(nèi)存字節(jié)數(shù)
  • 注意: sizeof是一個(gè)運(yùn)算符, 不是一個(gè)函數(shù)利用sizeof計(jì)算的格式: sizeof(變量/常量/數(shù)據(jù)類型);
  1. 逗號(hào)運(yùn)算符
 // 逗號(hào)運(yùn)算符的結(jié)果是 最后一個(gè)表達(dá)式的結(jié)果
    int a = 10;
    int b = 5;
    //   6       a = 10 + 5 = 15 b = 5 + 1 = 6
    int result = ((a = a + 5), (b = b + 1)); // 僅僅作為了解
    printf("a = %i, b = %i, result = %i\n", a, b, result);
結(jié)果15, 6, 6
  1. 三目運(yùn)算符格式: 條件表達(dá)式 ? 結(jié)果A : 結(jié)果B
    // 結(jié)合性: 從左至右
    // 只要條件表達(dá)式為真就返回結(jié)果A, 如果條件表達(dá)式為假, 那么就返回結(jié)果B
    // a大于b嗎? 如果a大于b就返回a, 否則返回b
    // int result = (a > b)? a : b;
// arc4random_uniform方法會(huì)根據(jù)傳入的整數(shù)生產(chǎn)一個(gè)隨機(jī)數(shù)
    // 生成的值就是 0~(N-1)的值
    int cmp =  arc4random_uniform(3);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容