色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

函數(shù)與C語(yǔ)言基本語(yǔ)句

汽車(chē)電子技術(shù) ? 來(lái)源:玉工講技術(shù) ? 作者: 玉素甫·買(mǎi)買(mǎi)提 ? 2023-02-21 16:06 ? 次閱讀

編程學(xué)習(xí)過(guò)程中,我曾經(jīng)我犯過(guò)一個(gè)錯(cuò)誤(我想多數(shù)人也跟我一樣心急)?!皩W(xué)”完C語(yǔ)言后緊接著學(xué)C++,等稍微有基礎(chǔ)了之后開(kāi)始接觸C++ GUI Qt編程等。但學(xué)習(xí)Qt圖形化編程的過(guò)程中又發(fā)現(xiàn)寫(xiě)程序的關(guān)鍵點(diǎn)無(wú)外乎編寫(xiě)函數(shù)或方法。自己對(duì)函數(shù)編寫(xiě)的理解不太深入而導(dǎo)致不會(huì)寫(xiě)“自己”的C/C++函數(shù)(或方法)。雖然我們能夠?qū)⑿枨蠓纸獬啥鄠€(gè)模塊或函數(shù),但這并不意味著我們也能將需求編寫(xiě)成函數(shù)(或方法)來(lái)讓程序正常運(yùn)行。因此,本文簡(jiǎn)要總結(jié)一下有關(guān)函數(shù)的一些概念及個(gè)人學(xué)習(xí)體會(huì)。

圖片

圖1 人腦將概念分解成“屬性”和“函數(shù)”的過(guò)程

1、內(nèi)存中用一維空間來(lái)表示多維世界

也許我們活在一維世界里,只是我們認(rèn)為這個(gè)世界是三維(3D)或更多維的復(fù)雜多樣。 為什么這么說(shuō)呢?因?yàn)橛?jì)算機(jī)的世界就是由一維數(shù)組升級(jí)成多維數(shù)組形式給我們演變出了多維畫(huà)面和模型。比如,內(nèi)存存最小地址標(biāo)識(shí)單位為字節(jié)(byte),然后我們將一維內(nèi)存通過(guò)多維形式標(biāo)識(shí)并在此基礎(chǔ)上借助數(shù)組、指針、結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)構(gòu)造了更復(fù)雜的模型和需求,最終能夠在內(nèi)存的一維空間中完成多維現(xiàn)實(shí)世界的“模擬”需求。如下圖2所示一維數(shù)組多種標(biāo)識(shí)方法就是其中的具體案例之一。計(jì)算機(jī)內(nèi)存其實(shí)一維的,一維空間來(lái)表示多維空間是我們不可否認(rèn)的事實(shí)。圖片

圖2 內(nèi)存中一維數(shù)組來(lái)表示多維數(shù)組

2、為什編寫(xiě)函數(shù)是程序員的基本功

雖然我們通過(guò)一維內(nèi)存空間來(lái)表示出多維現(xiàn)實(shí)世界,但其現(xiàn)實(shí)過(guò)程需要較理解不同數(shù)據(jù)類(lèi)型及其在內(nèi)存中的布局、程序的運(yùn)行原理、內(nèi)存中多種數(shù)據(jù)結(jié)構(gòu)的融融應(yīng)用等基礎(chǔ)概念及原理。我之前對(duì)編程感到恐怖,因?yàn)榭吹侥切┐a時(shí)腦袋的形成的形象是空白的(或者說(shuō)一維的),腦海里沒(méi)有形成這些代碼在磁盤(pán)、內(nèi)存、寄存器、CPU等之間“流”進(jìn)“流”的過(guò)程和狀態(tài)。

在這樣的狀態(tài)下,我們無(wú)論學(xué)C或面向?qū)ο蟮腃++及Qt等其他編程語(yǔ)言及工具,最終編寫(xiě)函數(shù)或?qū)ο蟮姆椒ǖ倪^(guò)程中總會(huì)感覺(jué)到無(wú)從下手。我想這也是我們覺(jué)得C/C++難學(xué)原因之一,因此我回頭重學(xué)了C語(yǔ)言的基礎(chǔ)知識(shí)。在這個(gè)過(guò)程中,兩個(gè)內(nèi)容的回顧對(duì)我?guī)?lái)了意想不到的收獲。其中之一是C語(yǔ)言面向?qū)ο缶幊?,尤其是用C語(yǔ)言實(shí)現(xiàn)封裝和繼承特性。其二是用C語(yǔ)句描述算法的相關(guān)解釋說(shuō)明。

圖片

圖3 程序在內(nèi)存中布局

3、用C語(yǔ)句描述算法

程序就是對(duì)計(jì)算機(jī)要執(zhí)行的一組操作序列的描述。高級(jí)語(yǔ)言源程序的基本組成單位是語(yǔ)句。語(yǔ)句按功能可以分為兩類(lèi): 一類(lèi)用于描述計(jì)算機(jī)要執(zhí)行的操作運(yùn)算(如賦值語(yǔ)句),另一類(lèi)是控制上述操作運(yùn)算的執(zhí)行順序(如循環(huán)控制語(yǔ)句) 。前一類(lèi)稱(chēng)為操作運(yùn)算語(yǔ)句,后一類(lèi)稱(chēng)為流程控制語(yǔ)句。

C語(yǔ)言是一種表達(dá)式語(yǔ)言,所有的操作運(yùn)算都通過(guò)表達(dá)式來(lái)實(shí)現(xiàn)。由表達(dá)式組成的語(yǔ)句稱(chēng)為表達(dá)式語(yǔ)句,它由一個(gè)表達(dá)式后接一個(gè)分號(hào)組成(注意,沒(méi)有分號(hào)的不是語(yǔ)句)。表達(dá)式語(yǔ)句可以分為以下三種基本類(lèi)型:

(1) 賦值語(yǔ)句:由賦值表達(dá)式加一個(gè)分號(hào)組成。例如:i=1;

(2) 函數(shù)調(diào)用語(yǔ)句:

(3) 空語(yǔ)句

高級(jí)語(yǔ)言一般以?xún)煞N形式提供流程控制:

(1)形成流程控制結(jié)構(gòu)(如if、while、for語(yǔ)句)。

(2)簡(jiǎn)單的流程轉(zhuǎn)向。

控制結(jié)構(gòu)分為順序、選擇和循環(huán)等三種基本結(jié)構(gòu),大多數(shù)高級(jí)語(yǔ)言都提供這三種控制結(jié)構(gòu)。準(zhǔn)確地說(shuō),是后兩種。因?yàn)轫樞蛐褪亲匀恍纬傻?,無(wú)須在程序中加以專(zhuān)門(mén)的控制。

圖片

圖4 if或switch語(yǔ)句模擬多路選擇結(jié)構(gòu)的開(kāi)關(guān)電路

限定轉(zhuǎn)向語(yǔ)句(簡(jiǎn)單的流程轉(zhuǎn)向)不形成控制結(jié)構(gòu),只是簡(jiǎn)單地使流程從其所在處轉(zhuǎn)向另一處。但是它不允許用戶(hù)自己指定轉(zhuǎn)向,而是按系統(tǒng)事先規(guī)定的原則向某一點(diǎn)轉(zhuǎn)移,用戶(hù)不必指定轉(zhuǎn)向。C語(yǔ)言中屬于這類(lèi)的語(yǔ)句有三種:

(1) break 語(yǔ)句:它的功能是把流程從所在處轉(zhuǎn)向所在的循環(huán)結(jié)構(gòu)或多路選擇結(jié)構(gòu)之后,或者說(shuō)是中止執(zhí)行這些結(jié)構(gòu)(見(jiàn)圖5)。

(2) continue 語(yǔ)句:使本次循環(huán)體的執(zhí)行提前結(jié)束(不再執(zhí)行continue下面的語(yǔ)句),然后再根據(jù)循環(huán)條件是否滿(mǎn)足,決定是否進(jìn)入下次循環(huán)(見(jiàn)圖5)。

圖片

圖5 限定轉(zhuǎn)向語(yǔ)句(簡(jiǎn)單的流程轉(zhuǎn)向)

(3) 函數(shù)調(diào)用和返回: 函數(shù)調(diào)用的功能是使流程轉(zhuǎn)向所調(diào)用的函數(shù)體。return語(yǔ)句的功能是使流程從被調(diào)用函數(shù)返回主調(diào)函數(shù)。這兩種流程控制都可能伴隨有參數(shù)傳遞。

綜前所述,函數(shù)編寫(xiě)的關(guān)鍵在理解和善用操作語(yǔ)句(賦值語(yǔ)句)和控制語(yǔ)句,把C語(yǔ)言中的基本語(yǔ)句歸納如下:

圖片

圖6 C語(yǔ)言中的基本語(yǔ)句

4、理解指針(地址)和結(jié)構(gòu)體

指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。要搞清一個(gè)指針需要搞清指針的四方面的內(nèi)容:指針的類(lèi)型、指針?biāo)赶虻念?lèi)型、指針的值或者叫指針?biāo)赶虻膬?nèi)存區(qū)、指針本身所占據(jù)的內(nèi)存區(qū)。

結(jié)構(gòu)體是構(gòu)造復(fù)雜數(shù)據(jù)類(lèi)型的最有效的工具,對(duì)這個(gè)概念還不了解,基本上無(wú)法構(gòu)造數(shù)據(jù)模型,一般能日常使用的程序中沒(méi)有一個(gè)業(yè)務(wù)體是完全使用原生數(shù)據(jù)類(lèi)型來(lái)完成的,如下圖6所示。設(shè)計(jì)數(shù)據(jù)模型的時(shí)候,一般先把頭文件中的結(jié)構(gòu)體數(shù)據(jù)整理出來(lái)。然后設(shè)計(jì)好功能函數(shù)的參數(shù),以及名字,然后才真正開(kāi)始寫(xiě)C源碼。

圖片

圖7 用C語(yǔ)言來(lái)封裝屬性和函數(shù)

其實(shí)C語(yǔ)言也能編寫(xiě)面向?qū)ο缶幊田L(fēng)格的程序,如附件1所示的封裝特性演示代碼就采用封裝特性 ,還有繼承特性的實(shí)現(xiàn),篇幅原因不再贅述。當(dāng)看懂了這段代碼后,我突然明白了函數(shù)指針、結(jié)構(gòu)體、面向?qū)ο缶幊讨械膖his(或self),及構(gòu)造函數(shù)等等的來(lái)歷。也領(lǐng)悟到了將函數(shù)封裝到的類(lèi)(class或?qū)ο螅├镏螅ㄟ^(guò)點(diǎn)或指針訪(fǎng)問(wèn)函數(shù)(方法)來(lái)實(shí)現(xiàn)對(duì)結(jié)構(gòu)體成員訪(fǎng)問(wèn)和修改在內(nèi)存中的實(shí)現(xiàn)過(guò)程。

5、結(jié)束語(yǔ)

函數(shù)、指針、結(jié)構(gòu)體這三大塊硬骨頭是學(xué)習(xí)C語(yǔ)言(或編程)的絆腳石 ,下功夫拿掉基本上C語(yǔ)言的大動(dòng)脈就打通了,如果想開(kāi)發(fā)實(shí)際能用到的程序,那么也需要了解 文件和數(shù)據(jù)庫(kù)的讀寫(xiě)等第四塊常被我們忽視的骨頭。 尤其是每當(dāng)通過(guò)new來(lái)創(chuàng)建對(duì)象或定義結(jié)構(gòu)體變量來(lái)創(chuàng)建數(shù)據(jù)模型時(shí),我們會(huì)感覺(jué)到計(jì)算機(jī)世界里創(chuàng)建資源和使用資源時(shí)多么“簡(jiǎn)單”和“直接”的。如果在現(xiàn)實(shí)世界,從0到1的價(jià)值創(chuàng)造(不是資源調(diào)配)是多么難的事情,需要我們要么用金錢(qián)換來(lái)或其他方式對(duì)等交換。因此,雖然編程很“難”(與其說(shuō)難、不如說(shuō)我們貪),但相對(duì)于現(xiàn)實(shí)世界的種種困難,讓我們?cè)谟?jì)算機(jī)虛擬世界里擁有無(wú)限的資源和可能性。

圖片

圖8 電腦對(duì)“程序”的理解和處理過(guò)程

參考資料

C語(yǔ)言程序設(shè)計(jì)教程 譚浩強(qiáng) 張基溫 唐永炎 高等教育出版社

C語(yǔ)言游戲?qū)崙?zhàn)教程

附件1:C語(yǔ)言封裝特性演示代碼

#define _CRT_SECURE_NO_WARNINGS


#include 
#include 
#include 


struct student {
    void (*setStudentId)(struct student* s, int year, int classNum, int serialNum);
    const char* (*getGender)(struct student* s);
    void (*setGender)(struct student* s, const char* strGender);


    int id;         //  學(xué)號(hào)
    char name[20];  //  姓名
    int gender;     //  性別
    int mark;       //  分?jǐn)?shù)
};


void setStudentId(struct student* s, int year, int classNum, int serialNum)
{
    char buffer[20];
    sprintf(buffer, "%d%d%d", year, classNum, serialNum);
    int id = atoi(buffer);
    s->id = id;
}




const char* getGender(struct student* s)
{
    if (s->gender == 0)
    {
        return "女";
    }
    else if (s->gender == 1)
    {
        return "男";
    }
    return "未知";
}


void setGender(struct student* s, const char* strGender)
{
    int numGender;
    if (strcmp("男", strGender) == 0)
    {
        numGender = 1;
    }
    else if (strcmp("女", strGender) == 0)
    {
        numGender = 0;
    }
    else
    {
        numGender = -1;
    }
    s->gender = numGender;
}


void initStudent(struct student* s)
{
    s->setStudentId = setStudentId;
    s->getGender = getGender;
    s->setGender = setGender;
}


int main()
{
    struct student stu;
    //  初始化student
    initStudent(&stu);


    //  學(xué)號(hào):202212326
    //  姓名:小明
    //  性別: 男
    //  分?jǐn)?shù):98
    stu.setStudentId(&stu, 2022, 123, 26);
    strcpy(stu.name, "小明");
    stu.setGender(&stu, "男");
    stu.mark = 98;


    //  打印這些數(shù)值
    printf("學(xué)號(hào):%d\\n", stu.id);
    printf("姓名:%s\\n", stu.name);
    const char* gender = stu.getGender(&stu);
    printf("性別:%s\\n", gender);
    printf("分?jǐn)?shù):%d\\n", stu.mark);
    return 0;
}

收錄于合集 **#**軟件工程

9個(gè)

上一篇編程思想-模塊化程序設(shè)計(jì)案例DCIM(3)下一篇編程思想-軟件產(chǎn)品的定義及定價(jià)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7532

    瀏覽量

    88435
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3048

    瀏覽量

    74209
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3296

    瀏覽量

    49042
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言基礎(chǔ)知識(shí)(5)--循環(huán)語(yǔ)句

    C語(yǔ)言基礎(chǔ)知識(shí)(5)--循環(huán)語(yǔ)句
    的頭像 發(fā)表于 06-15 10:18 ?2473次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>基礎(chǔ)知識(shí)(5)--循環(huán)<b class='flag-5'>語(yǔ)句</b>

    C語(yǔ)言中break語(yǔ)句的語(yǔ)法和基本應(yīng)用

    C語(yǔ)言中,break語(yǔ)句是一種控制流語(yǔ)句,它用于終止當(dāng)前所在的循環(huán)結(jié)構(gòu)(for、while、do-while)或者switch語(yǔ)句,從而跳
    發(fā)表于 08-17 15:35 ?1852次閱讀

    C語(yǔ)言中if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句詳解

    C語(yǔ)言中,有三種條件判斷結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句
    發(fā)表于 08-18 16:36 ?1.2w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中if<b class='flag-5'>語(yǔ)句</b>、if-else<b class='flag-5'>語(yǔ)句</b>和switch<b class='flag-5'>語(yǔ)句</b>詳解

    C語(yǔ)言的break轉(zhuǎn)移語(yǔ)句講解

    C語(yǔ)言的break轉(zhuǎn)移語(yǔ)句是一種用于跳出循環(huán)或者switch語(yǔ)句的控制結(jié)構(gòu)。它的作用是提前結(jié)束循環(huán)或者switch語(yǔ)句,從而避免不必要的計(jì)算
    的頭像 發(fā)表于 11-22 15:34 ?750次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的break轉(zhuǎn)移<b class='flag-5'>語(yǔ)句</b>講解

    C語(yǔ)言語(yǔ)句的規(guī)則函數(shù)

    的,而C語(yǔ)言語(yǔ)句的規(guī)則函數(shù)返回的數(shù)據(jù)類(lèi)型+函數(shù)名+參數(shù)+函數(shù)主體所以這幾行代碼也就不難理解了。該函數(shù)
    發(fā)表于 07-14 08:13

    C語(yǔ)言入門(mén)教程-if語(yǔ)句和while循環(huán)

    if語(yǔ)句和while循環(huán) C語(yǔ)言中,if語(yǔ)句和while循環(huán)都會(huì)用到布爾表達(dá)式。下面是一個(gè)使用if語(yǔ)句的簡(jiǎn)單例子: #include
    發(fā)表于 07-29 10:48 ?8571次閱讀

    單片機(jī)C語(yǔ)言教程-基礎(chǔ)語(yǔ)句

    單片機(jī)C語(yǔ)言教程-基礎(chǔ)語(yǔ)句   C語(yǔ)言入門(mén)之基礎(chǔ)語(yǔ)句  從程序流程的角度來(lái)看,程序可以分為三種
    發(fā)表于 03-27 17:15 ?3159次閱讀

    C語(yǔ)言入門(mén)C語(yǔ)言語(yǔ)句的更換技巧

    C語(yǔ)言中有很多條語(yǔ)句, 在我們以后接觸到的程序中無(wú)非只有5條語(yǔ)句,而像do while和switch這樣的語(yǔ)句并不常用,就只剩下if、for
    發(fā)表于 04-28 14:57 ?123次下載

    淺談C語(yǔ)言return語(yǔ)句和main 函數(shù)的返回值

    函數(shù)中,如果碰到return 語(yǔ)句,那么程序就會(huì)返回調(diào)用該函數(shù)的下一條語(yǔ)句執(zhí)行,也就是說(shuō)跳出函數(shù)的執(zhí)行,回到原來(lái)的地方繼續(xù)執(zhí)行下去。但是如
    發(fā)表于 05-10 10:53 ?5347次閱讀

    C語(yǔ)言基礎(chǔ)教程之語(yǔ)句的詳細(xì)資料和實(shí)例說(shuō)明

    1表達(dá)式語(yǔ)句 表達(dá)式語(yǔ)句是指任何一種表達(dá)式末尾加上分號(hào)〔;)所組成的語(yǔ)句。在C語(yǔ)言程序中,表達(dá)式語(yǔ)句
    發(fā)表于 11-13 17:55 ?13次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>基礎(chǔ)教程之<b class='flag-5'>語(yǔ)句</b>的詳細(xì)資料和實(shí)例說(shuō)明

    8051單片機(jī)的語(yǔ)句詳細(xì)資料說(shuō)明

    C語(yǔ)言語(yǔ)句來(lái)向計(jì)算機(jī)發(fā)出操作指令。一個(gè)C語(yǔ)句經(jīng)編譯后,可以生成若干條機(jī)器指令,它是構(gòu)成函數(shù)的基
    發(fā)表于 06-10 17:48 ?0次下載
    8051單片機(jī)的<b class='flag-5'>語(yǔ)句</b>詳細(xì)資料說(shuō)明

    C語(yǔ)言的for語(yǔ)句嵌套資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言的for語(yǔ)句嵌套資料免費(fèi)下載。
    發(fā)表于 03-21 08:00 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的for<b class='flag-5'>語(yǔ)句</b>嵌套資料免費(fèi)下載

    C語(yǔ)言總結(jié)_語(yǔ)句、運(yùn)算符

    當(dāng)前文章復(fù)盤(pán)C語(yǔ)言的: 位運(yùn)算運(yùn)算符、基本運(yùn)算符、數(shù)據(jù)類(lèi)型、變量、for語(yǔ)句、while語(yǔ)句、goto語(yǔ)句、switch
    的頭像 發(fā)表于 08-14 09:39 ?1040次閱讀

    C語(yǔ)言-語(yǔ)句(if,for,while.....)

    這篇文章作為C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn),介紹C語(yǔ)言常用的幾個(gè)語(yǔ)句的用法、規(guī)則、使用案例。
    的頭像 發(fā)表于 08-14 10:00 ?1844次閱讀

    C語(yǔ)言for語(yǔ)句介紹

    除了可以用while語(yǔ)句和do...while語(yǔ)句實(shí)現(xiàn)循環(huán)外,C語(yǔ)言還提供for語(yǔ)句實(shí)現(xiàn)循環(huán),而且for
    的頭像 發(fā)表于 03-09 11:14 ?1420次閱讀
    主站蜘蛛池模板: 国产在线精品亚洲另类| 超碰国产视频免费播放| 三级aa久久| 欧美高清vivoesond在线播放| 精品水蜜桃久久久久久久| 国产精品一区二区激情| 国产成人无码精品久久久影院 | 波多野结衣网站www| jizz丝袜| zoovideo人与驴mp4| JEALOUSVUE成熟老师APP| h片下载地址| 成人在线免费视频播放| 国产AV麻豆出品在线播放| 国产成人一区二区三中文 | 嗯别插太快好深再深点| 暖暖视频在线高清播放| 欧美最猛性XXX孕妇| 日欧一片内射VA在线影院| 色欲人妻无码AV精品一区二区| 视频一区亚洲视频无码| 午夜小视频免费观看| 亚洲国产精品一区二区久久第| 国自精品三七区| 精品久久免费视频| 久久精品国产免费中文| 恋老视频 国产国佬| 欧美人与动牲交A精品| 色琪琪丁香婷婷综合久久| 我强进了老师身体在线观看 | 在线亚洲黄色| 99RE6这里只有精品国产AV| www.青青草| 国产精品搬运| 黄色a三级免费看| 久久中文字幕亚洲精品最新| 男女啪啪抽搐呻吟高潮动态图 | 亚洲伊人久久网| 91素人约啪| 高清国产激情视频在线观看| 国产亚洲精品久久无码98|