博客 / 詳情

返回

小凱15天快速講完c語言-簡單學習第二課

複習上一課

0.1 如何將一個十進制數轉為二進制數?

整數部分:逆序取餘
小數部分:正向取整
例題:20.28
整數部分:
20/2 10 0
10/2 5 0
5/2 2 1
2/2 1 0
1/2 0 1
小數部分:
0.28*2 0.56 0
0.56*2 1.12 1
0.12*2.....
結果就是:10100.01

0.2 如何將一個二進制數轉為十進制數?

將各個位所代表的權值 加到一起
5 4 3 2 1 0 -1 -2 -3
1 1 0 1 1 0. 1 0 1

32 + 16+0+4+2+0 + 0.5 +0 + 0.125
結果:54.625

0.3 如何在二進制和十六進制之間轉換?

核心邏輯:4個二進制位 代表1個十六進制位

比如:
二進制轉十六進制
0001 1010 1001. 1101 1000
1 A 9 D 8
十六進制轉二進制
3 D 4
0011 1101 0100

0.4 原碼,反碼,補碼

正數:三碼合一,或者也可以説正數不區分這些東西
負數:
原碼 最高位是符號位 (1代表負數) 其餘的位按照正數去寫就可以 比如 -5 1 000 0101
反碼 符號位不變 其餘的位按位取反 1 111 1010
補碼 反碼+1 1 111 1011

一個字節 是8位 如果用於存儲正整數 範圍 就是 0~ 255 (2的8次方 -1 )
一個字節 是8位 如果即用來存儲正數,也存儲負數 -127~127 但是有一個特殊規定 -0 表示-128 所以規定的範圍是 -128~127

今日內容

 

1. 預處理,庫函數,關鍵字,註釋,語句,main函數

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("hello world");
    system("pause");
    return 0;
}

1.1 預處理命令

以#開頭的一些命令,這些命令,使得 編譯器 在正式編譯之前,對源代碼進行一些處理。

#include   #define   #if...
#include <stdio.h> 的功能就是  找到 stdio.h 這樣一個文件,然後將文件中的內容複製粘貼到命令所在的位置。

賦值粘貼這樣的操作,不算是編譯
複製粘貼不是我們程序員做的,是編譯器自己做的,編寫做的這些編譯之前的操作,就叫做編譯預處理。

1.2 庫函數

C語言會將一些常用的代碼,提供給開發者去使用。這些常用的代碼,是以庫函數的方式提供給我們的。
比如:printf就是一個 庫函數,這個函數的功能是 輸出一個字符串,這個printf函數是被存放在stdio.h這個庫裏面。
如果我們想要使用庫函數,就必須先包含對應的頭文件。

1.3 練習

設置控制枱的標題為“ Hello  ” ,並輸出白底黑字的內容“i love you ”;
提示:
system("color 0A")中color後面的0是背景色代號,A是前景色代號。
各顏色代碼如下:
0=黑色       1=藍色       2=綠色       3=湖藍色      4=紅色
5=紫色       6=黃色       7=白色       8=灰色          9=淡藍色
A=淡綠色   B=淡淺綠色      C=淡紅色   
D=淡紫色   E=淡黃色          F=亮白色

system("title XXX")修改標題。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    system("title 學習快樂");
    system("color EA");
    printf("歡迎同學學習");
    system("pause");
    return 0;
}

1.4 關鍵字

1.5 註釋

不參與程序的編譯和運行,一般起到一個提示作用,註釋有兩種:
多行註釋 / /
單行註釋 //

註釋的作用:

a. 對於我們學習的時候來説,便於今後看代碼的時候進行復習。
b. 對於工作來説,便於工作的交接。

代碼寫出來主要是給別人看的,順帶着能夠正確的執行。
體現的 代碼可讀性 的重要

1.6 語句

單語句
以分號為結尾的

複合語句
使用{}括起來的一堆語句
C語言執行的基本單位 是 語句

組成C語言的基本單位 是 函數

1.7 main函數

main函數是我們編寫的第一個函數。 int 是main的返回值類型 return 0 會結束掉main函數。
C語言規定 整個程序的入口,就是main函數。一個程序只能有一個main函數。
C語言的代碼,是從main函數中的第一條語句開始,順序的往下執行。
基本寫法:

int main()
{
    return 0;
}

2. 常量和變量

2.1 常量

整型: 123 017 0xABC
浮點: 3.15 科學計數法:10.88e5
字符: ‘A’ L‘A’
字符串:“hello world” L“hello World”

2.2 變量

格式:
變量類型 變量名稱 = 初始值;

2.2.1 變量的定義,各個類型的區別

  1. 整型
    a. long 4字節
    b. short 2字節
    c. int 4字節
    d. 每一個類型的前面,都可以加上一個 unsigned 表示無符號數
  2. 浮點
    a. float 4字節
    b. double 8字節
  3. 字符
    a. char 1字節
    b. wchar_t 2字節
     

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
     //1. 定義變量
     int a = 20; //定義了一個整型變量
     char c = 'A'; //定義了一個字符型變量
     double m = 3.5;//定義了一個浮點型變量
     //這些變量的值是可以被修改的
     a = 50;//賦值 將右邊的數據存儲到左邊去
     c = 'M';
     m = 10.5;
     //2. 定義變量還有其他多種類型
     //整型
     //long long num0;  //8字節
     long int num1 =10;   //4字節 -20多億~20多億
     short int num2 =20;  //2字節 -32768~32767
     int num3 =100;        //4字節
     long  num4;
     short  num5;
     int num6;
     //字符型
     //char的範圍 就是  -128~127
     //char 類型是一個字節,説是存儲字符,實際上就是存儲數字
     //可以將char類型,看作1個字節的整數
     char cCh = 'A';
     //char cCh = 65;
     char cCh2 = '1';
     //char cCh2 = 49;
     char cCh3 = 1;
     char cCh4 = -5;
     char cCh5 = -128;
     //wchar_t的使用方式和char差不多,就是字符前面都應該加一個L
     wchar_t wCh1 = L'A';
     //浮點型 主要看的是精度
     //float  4個字節 精度低
     // 
     float fNum1 = 3.88;
     //double 8個字節  精度高
     double fNum2 = 3.88;
     return 0;
    }

    2.2.2 標識符的規則

    字母,數字,下劃線
    數字不能開頭
    不能使用關鍵字
    區分大小寫

    2.2.3 怎麼選用變量類型

    在過去的時候,硬件資源比較緊張,能用小的類型,就儘量使用更小的。
    現在:
    整型,沒有特殊要求,就是用int
    浮點,沒有特殊要求,就使用 double
    字符,沒有特殊要求,就使用 char

    2.3 關於自動類型轉換的問題

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //1. 定義變量
    int a = 20; //定義了一個整型變量
    char c = 'A'; //定義了一個字符型變量
    double m = 3.5;//定義了一個浮點型變量
    char n = 0;
    a = m;
    //第一種自動類型轉換方式
    //當賦值的時候,左右兩邊類型不一致
    //會將右邊的數據轉換為左邊的類型,再賦值
    //m是double,a是int  將m轉為int再賦值
    //轉換過程中,有可能會丟失數據
    a = 10000;
    n = a; //a是4字節  n是1字節 有可能會丟失數據

    a + m;
    //第二種自動轉換的方式
    //當一個算式中,出現了多種類型的時候,會自動往
    //範圍較大的類型去轉換,儘量的不丟失數據
    //會先將a轉為double,然後再做加法



    return 0;
}

2.4 關於顯示轉換的問題

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //1. 定義變量
    int a = 20; //定義了一個整型變量
    char c = 'A'; //定義了一個字符型變量
    double m = 3.5;//定義了一個浮點型變量
    char n = 0;
    a = (int)m;
    //第一種自動類型轉換方式
    //當賦值的時候,左右兩邊類型不一致
    //會將右邊的數據轉換為左邊的類型,再賦值
    //m是double,a是int  將m轉為int再賦值
    //轉換過程中,有可能會丟失數據
    a = 10000;
    n = (char)a; //a是4字節  n是1字節 有可能會丟失數據

    (double)a + m;
    //第二種自動轉換的方式
    //當一個算式中,出現了多種類型的時候,會自動往
    //範圍較大的類型去轉換,儘量的不丟失數據
    //會先將a轉為double,然後再做加法

    return 0;
}

顯示轉換的目的,第一個是增強了可讀性。
總結:

a. 命名一定要有含義
b. 註釋要詳細
c. 排版要清晰規範

交換兩個數:

int main(void)
{
    int a = 5;
    int b = 6;

    /*a = b;
    b = a;*/
    int c = 0;
    c = a;
    a = b;
    b = c;
    return 0;
}

關於顯示轉換,隱式轉換,可參考我之前的一篇帖子

https://segmentfault.com/a/11...

3. 輸入和輸出

3.1 輸出

基本用法:
printf("帶格式控制符的字符串",參數2,參數3,.....);
圖片.png
這裏面%d是一個格式控制符。
函數的作用:將字符串中的內容原樣輸出,遇到了格式控制符就匹配後面的參數
格式控制符:

a. 表示十進制整數
i. %d
b. 表示雙精度浮點數
i. %lf
c. 表示單個字符
i. %c
d. 表示字符串
i. %s
e. 其他的,暫時不重要
i. %o 八進制輸出
ii. %f 單精度浮點
iii. %u 無符號整數
iv. %p 輸出地址
v. ....

除了格式控制符之外,還需要知道一個轉義字符
\n 表示換行

#include <stdio.h>
int main(void)
{
    int a = 5;
    int b = 6;

    /*a = b;
    b = a;*/
    printf("a的值是%d,b的值是%d\n", a, b);
    int c = 0;
    c = a;
    a = b;
    b = c;
    printf("a的值是%d,b的值是%d\n", a, b);
    
    printf("b");
    return 0;
}

輸出

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a = 65;
    double b = 10.8;
    char cCh = 'a';
    printf("整數的值%d\n", a);
    printf("整數的值按照字符輸出%c\n", a);
    printf("浮點數的值%lf\n", b);
    printf("浮點數的值%d\n", b);

    printf("字符的值%c\n", cCh);
    printf("字符的值按照整數輸出%d\n", cCh);
    printf("字符的值按照整數輸出%d\n", cCh +2);
    return 0;
}

3.2 輸入-scanf_s

scanf_s是微軟提供的安全版本,當然也可以選擇scanf,沒有這些規定要求。

#include <stdio.h>
int main(void)
{
    //輸入兩個數,輸出兩個數的和
    int nNumberA = 0;
    int nNumberB = 0;
    printf("請輸入兩個數:");
    //注意:&它是用來獲取一個變量的地址的
    scanf_s("%d,%d", &nNumberA, &nNumberB);

    return 0;
}

scanf_的格式控制符和printf是一樣的
scanf_的格式控制符和printf是一樣的
需要注意的地方:

  1. scanf_s這個函數,是將鍵盤上輸入的內容,按照規定的格式,存儲到變量中。需要提供變量的地址才能夠正確執行。 獲取變量的地址 使用 &
  2. 在輸入單個字符(整數,浮點數不用加)的時候,需要多一個參數,要寫個1
  3. 在輸入字符串的時候,需要寫一下,最大的大小
    圖片.png

3.3 getchar putchar _getch

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
    //對於字符而言,有專門的庫函數輸入輸出字符
    //從鍵盤上獲取字符
    char a = 0;
    a = getchar();//函數的返回值,就是輸入的字符

    //將單個字符輸出
    //putchar(a);

    //無回顯的獲取字符
    char cCh = 0;
    cCh = _getch();

    return 0;
}

拓展:vs調試基礎:

關於基本的調試:
圖片.png
點一下,出現一個小紅點,這裏就是斷點。
F9:下斷點
F5 調試運行,就會中斷在第一個斷點的位置。 如果再按F5 就會運行到下一個斷點處。
F10:單步步過
F11:單步步入
遇到自己寫的函數的時候,他倆有區別,其他時候是一樣的。
在單步運行的過程中,我們可以查看 變量的值,從而去驗證我們的代碼是否正確

我曾經總結的c語言試題
(持續更新,已更新至8月25日)C語言經典題集合

user avatar yefengweiliang 頭像 unka_malloc 頭像
2 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.