日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【比特鹏哥C语言_1.初识C语言】

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【比特鹏哥C语言_1.初识C语言】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一節 第一個C語言項目

C語言是通用計算機編程語言,廣泛用于底層開發。設計目標:提供一種能以簡易的方式編譯、處理低級存儲器產生少量機器碼以及不需要任何運行環境支持的編程語言。

  • 用VS2013/VS2019 可以編寫、編譯C語言代碼
  • 新建項目:創建一個項目→創建一個源文件→寫代碼→編譯代碼


  • 新建源文件:xxx.c 源文件 xxx.h 頭文件



  • ![//寫代碼 //1.寫出主函數(main函數) //C語言是從主函數的第一行開始執行的 //printf-庫函數-在屏幕上打印信息 //printf需要引用頭文件stdio.h #include <stdio.h> int main()//int是 int是函數的返回類型,int是整型//main是函數名 {printf("謙子木\n");//\n是換行return 0; }//{}是函數體 //編譯+鏈接+運行代碼 //快捷鍵:Ctrl+F5 或 菜單→調試→開始執行不調試 //如果程序執行太快,看不到窗口 //則:解決方案資源管理器→右鍵項目→屬性→鏈接器→系統→子系統改成控制臺 /*重點*/ //一個工程中可以有多個.c文件,但多個.c文件中只能有一個主函數](https://img-blog.csdnimg.cn/d796f7f30d4a4c10beabea6ac2ca45a3.png)

    工具→選項→可以調節代碼字體大小

    第二節 數據類型

    一、常見數據類型

    計算機語言→通過寫程序做橋梁→解決生活中的問題
    計算機必須有能力描述生活中的問題
    舉例:商品價格為45.6元,為小數,在C語言中稱為“浮點數”
    年齡為整數,C語言稱為整型

    //2.數據類型 int main() {//字符型char ch = 'a';//整型int age = 20;//短整型short num = 10;//單精度浮點型float weight = 55.5;//雙精度浮點型(精度更高)double d = 0.0;return 0; }


    二、printf的輸出格式

    printf的輸出格式釋義
    %d按整型實際長度輸出(十進制)
    %mdm為指定的輸出字段的寬度。若數據的位數<m,則左端補空格;若>m,則突破m的限制按實際位數輸出
    %ld長整型
    %u無符號十進制輸出整型,長整型%lu;指定字段寬度%mu
    %o無符號八進制輸出整型,長整型%lo;指定字段寬度%mo
    %x無符號十六進制輸出整型,長整型%lx;指定字段寬度%mx
    %c輸出一個字符
    %s輸出字符串
    %ms字符串占m列,若數據的位數>m,全部輸出,<m,左補空格(沒有-右對齊)
    %-ms(有-左對齊)
    %m.ns輸出占m列,但只取字符串左端n個字符。這n個字符右對齊,左補空格
    %-m.ns和上面相比,變成左對齊。若n>m,則自動取n值,保證n個字符正常輸出
    %f單浮點型(對應float)。整數部分全輸出,小數部分輸出6位
    %lf雙浮點型(對應double)
    %m.nf(%-m.nf)輸出占m列,其中n位小數,右對齊(左對齊)
    %e指數形式輸出

    三、計算機中的單位:

    bit-比特位;byte-字節-8bit;

    計算機為什么要搞這么多類型:因為每種類型所占空間不同,選擇合適的類型可以提高空間利用率

    第三節 初識常量變量

    生活中的一些數據:

  • 有些數據不能變:血型,性別,圓周率
  • 有些可變:工資,年齡,體重
  • 一、C語言怎么描述常量和變量:

    1.常量:不能改變的量
    2. 變量:能被改變的量

    //創建的一個變量//類型 變量的名字=20//20是初始值int age = 20;//也可以不設置初始值,但不推薦這種方法double weight = 75.3;age = age + 1;weight = weight - 10;printf("age=%d\n", age);//%d對應整型printf("weight=%lf\n", weight);//%f對應float %lf對應doublereturn 0; }

    二、變量的分類:

    1.局部變量 :在main函數的{}內的定義的變量

    2.全局變量:在主函數main的{}外定義的變量

    當局部變量和全局變量名字沖突的情況下,局部變量優先
    不建議全局和局部變量的名字一樣

    int a = 10;//全局變量 int main() {//局部變量- {}內部定義的int a = 100;printf("%d\n", a);return 0; }


    這個報錯推薦用scanf_s函數,但這個函數是vs編譯提供的,不是C語言標準規定的,所以不推薦用


    第四節 變量的作用域和生命周期

    一、作用域

    變量在哪里起作用,哪里就是它的作用域
    局部變量作用域:就是變量所在的局部范圍
    全局變量的作用域:整個工程

    1. 局部變量作用域舉例

    圖一將變量聲明在輸出前面,可以輸出;圖二將變量聲明在變量后面,不可以輸出;圖三、圖四



    2. 全局變量作用域舉例

    二、生命周期

    變量的生命周期:變量的創建和銷毀之間的時間段
    局部變量的生命周期:進入局部范圍生命開始,出局部范圍生命結束
    全局變量的生命周期:整個程序的生命周期

    第五節 常量

    一、常量的分類

    • 字面常量
    • const 修飾的常變量
    • #define定義的標識符常量
    • 枚舉常量

    1.字面常量

    //1.字面常量(就是直接常量) //直接常量的書寫形式決定了它的類型 int main() {3.14;//實數型常量10;//整型常量"abcdef";//字符串常量'a';//字符常量return 0; }

    2.const修飾的常變量

    “值”不能變的變量



    3.#define定義的標識符常量


    4.枚舉常量

    可以一 一列舉的常量

    第六節 字符串+轉義字符+注釋

    一、字符串

    字符串是由“雙引號”引起來的一串字符
    注:字符串的結束標志是 \0,但字符串的長度并不包括\0 在創建字符數組時尤其要注意






    注:只要鼠標點在某一行按Ctrl+C,再按Ctrl+V就會將這一行直接復制在下一行

    二、轉義字符

    轉義字符:就是轉變了字符原來的意思

    1. 常見轉義字符

    轉義字符釋義
    "用于表示一個字符串內部的雙引號
    \ \用于表示一個反斜杠,防止它被解釋為一個轉義序列符
    \n換行
    \b退格符
    \r回車
    \t水平制表符,相當于按Tab鍵
    ?在書寫連續多個?時,防止被解析為三字母詞
    `用于表示字符常量`
    \dddddd表示1~3個八進制數字。如\130表示x
    xdddd表示2個16進制數字。如、x30表示字符0

    假如我們要在屏幕上打印一個目錄:c:\code\test.c
    若將代碼寫成:

    int main() {printf("c:\code\test.c");return 0; }

    實際運行結果為:

    如果想讓這串目錄正常顯示,只需要在引起計算機誤會的地方加上一個反斜杠\,來防止譯為轉義字符

    int main() {printf("c:\\code\\test.c");return 0; }

    2.筆試題

    //程序輸出什么? #include <stdio.h> int main() {printf("%d\n",strlen("abcdef"));//\32被解析為一個轉義字符printf("%d\n",strlen("c:\test\328\test.c"));return 0; } //答:輸出6和14 //因為\t是一個字符,\32是一個字符,注意\ddd中的d是從1-3,所以不在里面,沒有被轉義

    三、注釋

    //是C++注釋風格
    /**/是C語言風格,有一缺陷是不能嵌套注釋,例如以下情況會報錯

    /* /*hhh*/ fff */

    第七節 初識選擇語句&&循環語句

    一、選擇語句

    #include <stdio.h> int main() {int coding=0;//輸入的值printf("你會去敲代碼嗎? (選擇1 or 0):>");scanf("%d",&coding);if(coding==1)//如果輸入的值為1{printf("堅持,你會有好offer\n");}else//如果輸入的值為0{printf("放棄,回家賣紅薯\n");}return 0; }

    二、循環語句

    //30000代碼-找個不錯工作 int main() {int line=0;//定義變量linewhile(line<30000){printf("寫代碼:%d\n",line);//如果line<30000,執行語句,不滿足,則退出循環line++;}if(line==30000){printf("好offer\n");}return 0; }

    第八節 初識函數和數組

    一、函數

    int main() {int num1 = 0, num2 = 0, sum = 0;printf("輸入兩個操作數:>");scanf("%d%d", &num1, &num2);sum = num1 + num2;printf("sum=%d\n", sum);return 0; }

    上述代碼,寫成函數如下:

    int add(int x, int y)//創建整型x和y,來接收傳遞過來的num1和2//add前面的int是返回值的類型 {int z = 0;z = x + y;return z;//將z的值返回給函數add } int main() {int num1 = 0, num2 = 0;printf("輸入兩個操作數:>");scanf("%d%d", &num1, &num2);int sum = add(num1, num2);//將num1和2的值傳遞給x和y,將函數add的值傳遞給sumprintf("sum=%d\n", sum);return 0; }

    二、數組

    要存儲1-10的數字,怎么存儲?
    數組:一組相同類型元素的集合
    數組定義:

    int arr[10]={1,2,3,4,5,6,7,8,9,10};//定義一個整型數組,這個數組最多放10個元素 char ch[5]={'a','b','c'};//字符型數組,不完全初始化,剩余的默認為0


    數組訪問規則:數組是由下標來訪問的

    第九節 初識操作符

    一、算數操作符:+ - * / %(取模,或稱取余,取余數)

    二、移位操作符:>>(右移) <<(左移)

    int main() {int a=2;//將a存放為整型變量int b=a<<1;//定義b為a左移一位return 0; }

    左移操作符:移動的是二進制位

    a的值為2,換算成二進制就是10,又因為a是放在整型里,整型是4個字節,一個字節是8個比特位,所以要寫出a的二進制序列,要寫出32個比特位,即:
    00000000 00000000 00000000 00000010
    向左移動一位
    0 00000000 00000000 00000000 00000100 //注最左端的移出,最右端補了一個0
    補完之后就是100,換算成十進制就是4,所以b=4

    三、位操作符:& 按位與 | 按位或 ^ 按位異或

    四、賦值操作符:= += -= *= /= &= ^= |= >>= <<=

    int main() {int a = 1;a = a + 5;//相當于:a += 5;a = a - 3;//相當于:a -= 3;a = a % 3;//相當于:a %= 3;return 0; }

    五、單目操作符

    什么是雙目操作符:比如a+b; +有2個操作數
    單目操作符:只有一個操作數

    1. 單目操作符總結

    單目操作符作用
    !邏輯取反 ,把真變成假,把假變成真;0為假,非0為真
    -負值
    +正值
    &取地址
    sizeof操作數的類型長度(以字節為單位)
    ~對一個數的二進制按位取反
    前置、后置–
    ++前置、后置++
    *間接訪問操作符(解引用操作符)
    (類型)強制類型轉換

    2. !的講解

    int main() {// !的語法講解int a=112;printf("%d\n",!a);//輸出0int b=0;printf("%d\n",!b);//輸出1//應用場景if(a){//如果a為真,做事}if(!a){//如果a為假,做事}return 0; }

    3. + -的講解

    int main() {// + -的講解a=-5;//將負五賦值給aa=+a;//將a的絕對值賦給areturn 0; }

    4. sizeof的講解

    int main() {//sizeof是一個操作符,不是函數//它是用來計算類型、變量、數組等的大小的(以字節為單位,一個字節8比特)int a=10;printf("%d\n",sizeof(int));//打印出4,因為整型是4的字節printf("%d\n",sizeof(a));//打印出4,因為整型是4的字節int arr[10]={0};printf("%d\n",sizeof(arr));//結果是40,因為每個元素是一個int,4*10=40//計算的是數組的總大小printf("%d\n",sizeof(arr[0]));//結果是4,因為計算的是元素0的大小//計算元素的個數:int sz=sizeof(arr)/sieof(arr[0]);printf("%d\n",sz);//輸出10,因為一共有10個元素return 0; }

    5. ~的講解

    int main() {// ~是按位取反(二進制);把所有二進制中的數字,1→0,0→1(符號位同樣對待)int a=0;printf("%d\n",~a);//結果為-1//整數a=0,則二進制://00000000 00000000 00000000 00000000 a// ~ 是按位取反,則二進制變為://11111111 11111111 11111111 11111111 ~a(補碼)//printf輸出的是原碼,即://10000000 00000000 00000000 00000001(即十進制是負一)return 0; }

    (1)整數在內存中存儲規則:整數在內存中存儲的是補碼(注:補碼的補碼為原碼)

    一個整數的二進制有3種:原碼、反碼、補碼
    -1的原、反、補(以下計算方式只適用于負數
    原碼:10000000 00000000 00000000 00000001(最高位叫符號位,1為負數,0為整數
    反碼:11111111 11111111 11111111 11111110 (反碼就是原碼的符號位不變,其余位,按位取反
    補碼:11111111 11111111 11111111 11111111 (補碼就是反碼+1
    正整數原、反、補碼相同

    6.前置、后置++ 前置、后置–

    (1) 前置++:先++,后使用; 后置++:先使用,后++

    int main() {int a=10;int b=++a;//前置++int c=10;int d=c++;//后置++printf("%d\n",b);//輸出11printf("%d\n",a);//輸出11printf("%d\n",c);//輸出11printf("%d\n",d);//輸出10return 0; }

    7.強制類型轉換

    int main() {//怎么消除這個警告//強制類型轉換int a = (int)3.14;printf("%d\n", a);//輸出3return 0; }

    六、關系操作符

    關系操作符名稱
    >大于
    >=大于等于
    <小于
    <=小于等于
    !=不等于
    ==等于

    七、邏輯操作符

    名稱作用
    && 邏輯與兩個都為真,才為真
    || 邏輯或兩個都為假,才為假
    int main() {int a=3;int b=5;int c=a&&b;printf("%d\n",c);//輸出1,因為a為真,b為真,兩個都為真,所以c為真return 0; }

    八、條件操作符(三目操作符):exp1 ? exp2 : exp3 表達式1 ? 表達式2 : 表達式3

    含義:若exp1成立,則計算exp2,整個表達式的結果是exp2的結果;若exp1不成立,結果為exp3的結果

    int main() {int a=0,b=3,max=0;if(a>b)max=a;else max=b;//上述if語句和下面一行代碼相等max=a>b?a:b;//a>b若成立,將a的值給max;否則將b的值給maxreturn 0; }

    九、逗號表達式:exp1, exp2, exp3, …expN

    含義:逗號隔開的一串表達式,會從左往右依次計算,整個表達式的結果取最右側表達式的結果

    int main() {int a=0;int b=3;int c=5;//a=5 c=1 b=3int d=(a=b+2,c=a-4,b=c+2);printf("%d\n",d);//結果為3return 0; }

    十、下標引用、函數調用和結構成員

    1. [ ] () . ->

    [ ]是下標引用操作符

    //下標引用操作符 int main() {int arr[5]={0};printf("%d\n",arr[5]);return 0; }

    ( )是函數調用操作符

    int main() {//調用函數的時候,函數名后面的()就是函數調用操作符printf("hello\n");return 0; }

    2.**& * . ->**這四個操作符在接下來課程中再詳細講述

    第十節 初識常見關鍵字

    一、C語言提供的關鍵字的特點

    • C語言提供的,不能自己創建關鍵字
    • 變量名不能是關鍵字

    二、關鍵字總結

    關鍵字作用
    char字符類型
    double雙精度
    float單精度浮點型
    int整型
    long長整型
    short短整型
    signed有符號的,如10 -20
    unsigned無符號的
    void
    auto是自動的意思;每個局部變量都是auto修飾的
    break在 循環 、Switch語句中會用到
    caseSwitch case語句中會用
    switchSwitch語句
    const常變量
    continue繼續
    default默認 ,在Switch case語句中會用
    dodo while循環會用
    whilewhile循環
    elseif else語句
    enum枚舉
    extern聲明外部符號的;比如在同一工程下另一個.c文件中聲明全局變量或函數
    forfor循環
    gotogoto語句
    ifif語句
    register寄存器關鍵字,用register創建的變量建議放在寄存器中
    return返回
    sizeof求大小
    static靜態的
    struct結構體
    typedef類型重定義別名,可以將類型重新定義成一個新的名字
    union聯合體(共用體)
    volatilec語言中暫時不講

    三、關鍵字詳講

    1. auto

    int main() {{int a=10;//是自動創建(進{}),自動銷毀的(出{})——自動變量auto int a=10;//兩串代碼相同(auto通常省略)//auto在新的C語言語法中也有其他用法,暫時不考慮}return 0; }

    2. register

    int main() { //大量頻繁讀取的數據,存放在寄存器中,提升效率register int num=100;//建議num的值存放在寄存器中return 0; }

    計算機中數據可以存放在哪里:

    • 寄存器 更小 ↑ 越往上
    • 高速緩存 幾十MB | 造價越高
    • 內存 8G-16G | 速度越高
    • 硬盤 500G | 空間越小
    • 網盤 2T |
      注:define和include是預處理指令,不是關鍵字

    3.typedef的講解

    typedef unsigned int u_int;//將unsigned int定義成u_int,然后這兩個就等價了 int main() {unsigned int num=100;//相當于u_int num=100; return 0; }

    4.static的講解

    ① .static修飾局部變量

    static修飾局部變量時,改變了局部變量的生命周期(本質上改變了比暗戀的存儲類型)

    ②. static修飾全局變量

    全局變量在整個工程中都可以使用
    static修飾全局變量,使得這個全局變量只能在自己所在的源文件(.c)內部可以使用,其他源文件不能使用!
    全局變量,在其它源文件內部可以使用,是因為全局變量具有外部鏈接屬性,但是被static修飾之后,就變成了內部鏈接屬性,其他源文件就不能連接到這個靜態的全局變量了!

    ③. static修飾函數

    static修飾函數,使得函數只能在自己所在的源文件內部使用,不能在其他源文件內部使用
    本質上:static是將函數的外部鏈接屬性變成了內部鏈接屬性!(和static修飾全局變量一樣)

    第十一節 #define定義常量和宏

    define是一個預處理指令

    一、define定義標識符常量

    #define MAX 1000 int main() {printf("%d\n",MAX);//輸出1000return 0; }

    二、 define定義宏

    #define ADD(X,Y) X+Y //注意:宏定義沒有分號 int main() {printf("%d\n",ADD(2,3));//輸出5return 0; } #define ADD(X,Y) X+Y //注意:宏定義沒有分號 int main() {printf("%d\n",4*ADD(2,3));//輸出11,而不是20//4*2+3=11(因為宏是變量的替換)return 0; }

    怎么讓宏定義按要求輸出結果?答:加括號

    #define ADD(X,Y) ((X)+(Y)) //注意:宏定義沒有分號 int main() {printf("%d\n",4*ADD(2,3));//輸出20return 0; }

    第十二節 指針

    一、內存

    內存是電腦上的存儲器,計算機中所有的程序的運行都是在內存中進行的。
    所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內存單元的大小是1個字節
    為了能夠有效地訪問到內存的每個單元,就給內存進行了編號,這些編號被稱為該內存單元的地址

    理解內存:在現實生活中,給每個空間都編了一個有效的地址,就可以精確地找到一個房間;對于內存也是一樣的。
    電腦有32位和64位,32位就是32位地址線→是物理線→通電→有1、0兩種狀態
    然后電信號轉換成數字信號:1和0組成的二進制序列
    32位從全0變成全1,會有2^32個地址
    那么一個32位的內存單元多大呢:4294967296 bit /8=536870912 byte /1024=524288 kb/1024=512MB /1024=0.5GB
    bit比特*8=byte字節 *1024=kb *1024=MB *1024=GB *1024=TB *1024=PB
    由于一個比特位是一個內存空間,管理的內存空間太少,因此最終取一個內存單元是一個字節,然后分配地址

    int main() {int a = 10;//a在內存中要分配空間的--4個字節printf("%p\n", &a);//%p專門用來打印地址的//&a是a的地址,地址也是要存放在內存里的int* pa = &a;//pa是用來存放地址的,在c語言中pa叫指針變量// *說明pa是指針變量// int說明pa執行的對象是int類型char ch = 'w';char* pc = &ch;return 0; }

    我們用pa存放a的地址,是為了能找到a,使用a,所以需要解引用來找到a

    int main() {int a =10;int* pa=&a;//將a的地址存放在pa變量中*pa=20;// * 是解引用操作 *pa就是通過pa里面的地址,找到aprintf("%d\n",a);//輸出20(借助pa實現對a的操作)return 0; }

    示意圖:

    指針 就是 地址

    二、指針變量的大小




    在這里可以改成x86(32位平臺),輸出就變成了4
    結論:指針的大小在32位平臺是4個字節,64位平臺是8個字節。

    第十三節 結構體

    1.結構體可以讓C語言創建新的類型出來

    比如描述學生,學生包含:名字+年齡+性別+學號 這幾項信息。
    這里只能用結構體來描述。
    例如:

    //結構體 //創建一個學生 struct Stu {char name[20];//人名int age;//年齡double score;//分數 }; //創建一個書 struct Book {char name[20];//書名float price;//價格char id[30];//編號 }; int main() {struct Stu s = { "張三",20,85.5 };//結構體的創建和初始化printf("1:%s%d%lf\n", s.name, s.age, s.score);//結構體變量.成員變量//%lf打印雙精度浮點型struct Stu* ps = &s;//結構體指針類型:*說明ps是指針變量,ps的類型是s的類型printf("2:%s%d%lf\n", (*ps).name, (*ps).age,(*ps).score);//ps是s的地址 *ps解引用后就是s 所以(*ps).name相當于s.nameprintf("3:%s%d%lf\n", ps->name, ps->age, ps->score);//這三種表達方式等價//結構體指針->成員變量return 0; }

    總結

    以上是生活随笔為你收集整理的【比特鹏哥C语言_1.初识C语言】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。