• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    C語言在電氣計(jì)算中的應(yīng)用

    2020-07-04 11:38:16羅智敏
    科學(xué)與財(cái)富 2020年15期
    關(guān)鍵詞:高效

    摘 要:C語言提供了許多低級(jí)處理的功能,但仍然保持著良好跨平臺(tái)的特性,以一個(gè)標(biāo)準(zhǔn)規(guī)格寫出的C語言程序可在許多電腦平臺(tái)上進(jìn)行編譯,甚至包含嵌入式處理器(單片機(jī)或稱MCU)以及超級(jí)電腦等作業(yè)平臺(tái)。因此學(xué)好C語言就顯得特別重要,我根據(jù)自己學(xué)習(xí)實(shí)踐心得寫《C語言在電氣計(jì)算中的應(yīng)用》,告訴大家如何編好電氣計(jì)算C語言程序,為同學(xué)們學(xué)習(xí)C語言提供新方法。

    關(guān)鍵詞:電氣測(cè)量;電氣計(jì)算; C語言;文件編譯;全局變量;高效

    一、 引言

    本文著重闡述C語言程序編寫及C語言程序?qū)嶒?yàn)所需的邏輯以及會(huì)面臨的問題。在C語言編程中使用最多得就是變量,變量分為全局變量和局部變量。如果一個(gè)程序中大量使用的全局變量會(huì)造成程序復(fù)雜化,調(diào)試也變得很麻煩。而如果把他們改在不同的程序,作為局部變量,會(huì)使代碼清晰,也可以更好地查找程序問題。這種多文件編譯法在復(fù)雜程序編程中已大量的使用,所以掌握C語言編程及實(shí)驗(yàn)對(duì)以后的編復(fù)雜程序至關(guān)重要。其實(shí)只要掌握了編程思路,再找出易錯(cuò)的地方,編程就顯得比較簡單。

    二、問題提出

    近年來,隨著計(jì)算機(jī)的不斷發(fā)展,電氣計(jì)算的方式也在不斷地變化,我們只需要測(cè)量少量電氣參數(shù)就能計(jì)算出其他電氣參數(shù),為電氣測(cè)量的快捷、高效提供可能。

    如何編寫一個(gè)快捷高效的電氣計(jì)算C程序呢?答案之一就是:程序中不要大量使用全局變量,而盡量使用的局部變量,就會(huì)避免造成程序復(fù)雜化,會(huì)使代碼清晰,也可以更好地查找程序問題。

    下面以一個(gè)電氣計(jì)算C程序編寫,來說明如何更好編寫一個(gè)電氣計(jì)算C程序。

    1.程序目的

    1. 高效實(shí)現(xiàn)多文件編譯。

    2. 了解頭文件的作用。

    2.程序內(nèi)容

    1. 編制程序計(jì)算階梯型電阻電路的電流值。電路示意圖如下:

    此電路為一個(gè)電阻分壓直流電路,但如果電源為交流電,電阻改為電感和電阻和電容組成的電路,那就是一個(gè)電網(wǎng)的簡化電路,就可以用來計(jì)算電網(wǎng)短路電流,所以此電路的通用性非常大,編寫的程序通用性也非常大。

    2. 能接收用戶輸入的電壓源電勢(shì) E 和所有電阻的電阻值。

    3. 程序能判斷輸入值是否正確,不正確時(shí)能進(jìn)行正確處理。輸入數(shù)據(jù)不正確

    情況包括:電阻輸入 0 或負(fù)值,輸入電阻的數(shù)目為奇數(shù)。

    4. 輸出計(jì)算結(jié)果:每個(gè)電阻上的電壓和電流。

    3.程序要求

    1. 建立新項(xiàng)目,錄入源代碼,編輯,編譯,運(yùn)行,調(diào)試直至得出正確運(yùn)行結(jié)果。

    2. 將主函數(shù) main、輸入 input、計(jì)算 calculate、輸出 output 共 4 個(gè)函數(shù)分配到 4 個(gè)源文件中,常量及函數(shù)原型聲明放到頭文件 def.h 中,進(jìn)行編譯。

    不允許使用全局變量,而要采用函數(shù)參數(shù)傳遞,通過實(shí)參和形參的結(jié)合傳遞必要 的參數(shù)。

    單向傳遞可用值傳遞,雙向傳遞得用地址傳遞。

    函數(shù)名 所屬源文件 功能

    main main.c

    程序入口,聲明所有程序中用到的變量、數(shù)組,并依次 調(diào)用其它 3 個(gè)子程序

    input input.c

    從鍵盤輸入電壓源電勢(shì)、電阻個(gè)數(shù)及每個(gè)電阻的阻值, 并通過函數(shù)參數(shù)返回 main 函數(shù)

    calculate calculate.c

    接收主函數(shù)給定的梯形電路的相關(guān)參數(shù),計(jì)算每一個(gè)電 阻上的電流和電壓值并返回 main 函數(shù)

    output output.c

    接收主函數(shù)給定的相關(guān)參數(shù),輸出每個(gè)電阻的阻值、電流和電壓

    4.步驟

    1. 進(jìn)入編程環(huán)境,建立新項(xiàng)目。

    2. 在項(xiàng)目中依次添加 5 個(gè)源文件:main.c, input.c, calculate.c, output.c(右鍵點(diǎn)擊 源文件,新建,選擇 C++文件),def.h 添加于頭文件下(右鍵點(diǎn)擊頭文件,新建,選 擇.h 文件)。

    3. 編譯和運(yùn)行程序。

    4. 如果編譯或運(yùn)行有錯(cuò),修改錯(cuò)誤或調(diào)試直至程序能給出正確的運(yùn)行結(jié)果。

    三、代碼的準(zhǔn)備及過程

    1.完成前的準(zhǔn)備

    首先完成該實(shí)驗(yàn)需要四個(gè)源文件和一個(gè)頭文件,并且要求不允許使用全局變量。按照要求主函數(shù)應(yīng)調(diào)用其他源文件中的三個(gè)函數(shù),相當(dāng)于原來我們?cè)谥骱瘮?shù)中需要完成的輸入輸出和計(jì)算過程的代碼,把他們分別變成三個(gè)函數(shù)放到三個(gè)源文件中。既然主函數(shù)要調(diào)用其他三個(gè)函數(shù),那其他三個(gè)函數(shù)就必須要先聲明,然后在三個(gè)源文件中分別對(duì)這三個(gè)函數(shù)的代碼進(jìn)行編寫,最后在主函數(shù)中調(diào)用這三個(gè)函數(shù)。在主函數(shù)中要確定的變量有總電壓,電阻個(gè)數(shù)和每個(gè)電阻的大小以及每個(gè)電阻的電壓電流。我們應(yīng)該明確總電壓e ,電阻個(gè)數(shù)n和每個(gè)電阻的阻值r,這些變量要在input 函數(shù)中輸入進(jìn)來,然后把這些變量傳遞到main 函數(shù)中。然后把這些變量輸入到calculate 函數(shù)中,同時(shí)calculate 函數(shù)計(jì)算出每一個(gè)電阻對(duì)應(yīng)的電壓v,電流i,把電壓v和電流i的值傳遞到主函數(shù)中。最后,把電壓v和電流i為傳遞到output 函數(shù)中, output 函數(shù)再把每一個(gè)電阻對(duì)應(yīng)的電壓和電流顯示出來。這是編寫代碼的基本思路。

    2.main 函數(shù)代碼編寫

    main函數(shù)中要定義電阻個(gè)數(shù)n總電壓e及每一個(gè)電阻的阻值r及它對(duì)應(yīng)的電壓v和電流i大小。r和v及i 應(yīng)定義為float型的數(shù)組,來存放每一個(gè)電阻的阻值,電壓和對(duì)應(yīng)的電流。n 應(yīng)定義為整形,e 應(yīng)定義為float型?,F(xiàn)在我們需要從input 的函數(shù)中得到e,n, r 這三個(gè)變量的值。但如果用return,無法返回那么多變量的值,可以換一種思路。在這里我們采用指針,把e, n ,r的地址傳遞到input 函數(shù)中, input 函數(shù)中直接把e,n, r 的地址作為scanf 函數(shù)的參數(shù),從而把輸入的值賦值給e,n, r 這三個(gè)變量的地址對(duì)應(yīng)的變量(其實(shí)就是e,n, r 這三個(gè)變量)這樣就成功的把值賦值給了e,n, r 這三個(gè)變量,把函數(shù)定義為void,沒有返回值,達(dá)到同樣效果。r 是一個(gè)數(shù)組,其本身就代表著第0個(gè)元素的地址,所以input 函數(shù)只用把e, n 的地址和r作為函數(shù)的實(shí)參 。calculate函數(shù)應(yīng)輸入總電壓e,電阻個(gè)數(shù)n, 電阻阻值r,返回每一個(gè)電阻對(duì)應(yīng)的電壓v和電流i。v 和i 也是數(shù)組,可以像input 函數(shù)一樣把v, i 當(dāng)做函數(shù)的實(shí)參,這樣他們的地址就可以輸入函數(shù)中,經(jīng)過calculate 函數(shù)的計(jì)算,計(jì)算出每個(gè)電阻對(duì)應(yīng)的電壓和電流,直接把這些值存儲(chǔ)在v, i 這兩個(gè)數(shù)組中,從而其實(shí)就得到了v, i 的值。output 函數(shù)就只需要把v, i 作為實(shí)參傳遞進(jìn)去,然后用printf 函數(shù)顯示出來。

    下面是參考代碼

    #include"def.h"

    #include

    #include

    int main()

    {

    float e, r[1000], v[1000], i[1000];

    int n;

    input(&e,&n,r);

    calculate(e, n, r, v, i);

    output(i,v,n);

    system("pause");

    return 0;

    }

    3.其他函數(shù)編寫

    input函數(shù),主要是輸入函數(shù),以下是參考代碼

    void input(float *e, int *n, float r[])

    {

    printf("請(qǐng)輸入電壓");

    scanf_s("%f",e);

    printf("請(qǐng)輸入電阻個(gè)數(shù)");

    scanf_s("%d",n);

    if (*n % 2 != 0)

    printf("電阻值必須為偶數(shù)");

    printf("請(qǐng)輸入各電阻值");

    for (int i = 0; i < *n; i++)

    scanf_s("%f",&r[i]);

    for (int i = 0; i < *n; i++)

    {

    if (r[i] <= 0)

    printf("第%d個(gè)電阻值錯(cuò)誤", i);

    }

    }

    calculate函數(shù),主要是計(jì)算函數(shù),如何計(jì)算在此不做說明,以下為參考代碼

    void calculate( float e,? int n, float r[], float v[], float i[])

    {

    float ratio;

    int k = n-1;

    v[k] = 1.0;

    i[k] = v[k]/r[k];

    k--;

    i[k] = i[k+1];

    v[k] = r[k] * i[k];

    k--;

    while(k > 0)

    {

    v[k] = v[k+1] + v[k+2];

    i[k] = v[k]/r[k];

    k--;

    i[k] = i[k+1] + i[k+2];

    v[k] = r[k] * i[k];

    k--;

    }

    ratio = e / (v[0] + v[1]);

    for(k=0; k

    {

    i[k] *= ratio;

    v[k] *= ratio;

    }

    }

    output函數(shù)為輸出函數(shù),以下為參考代碼

    void output(float i[], float v[], int n)

    {

    int a;

    for (a = 0; a < n; a++)

    {

    printf("第%d的電阻電流為%f", a + 1, i[a]);

    printf("第%d的電阻電壓為%f\n", a + 1, v[a]);

    }

    }

    此外,還需要在def.h中進(jìn)行函數(shù)的聲明,并在main.c文件中用#include"def.h"把這些聲明添加進(jìn)去,以下為參考代碼

    void input(float *,int *,float []);

    void calculate( float,? int ,? float [], float [], float []);

    void output(float[], float [], int );

    四、可能出現(xiàn)的問題

    1.函數(shù)調(diào)用時(shí)的實(shí)際參數(shù)與形參不對(duì)應(yīng),造成編譯通不過或得到的結(jié)果不對(duì)。如void calculate( float e,? int n, float r[], float v[], float i[]),但調(diào)用時(shí)卻成了calculate(e, n, r,i,v);造成得到的電壓v實(shí)際存儲(chǔ)電流i,電流i實(shí)際存儲(chǔ)為電壓v。

    2.聲明時(shí)函數(shù)的變量與編寫時(shí)類型不符合。或如聲明函數(shù)時(shí)為void calculate( float,? int ,? float [], float [], float []);但編寫時(shí)卻成了void calculate( float e,? float n, float r[], float v[], float i[])聲明時(shí)第二個(gè)參數(shù)n為int型,但編寫時(shí)把它當(dāng)作float型,造成編譯錯(cuò)誤。

    3.沒分清函數(shù)聲明與調(diào)用,如

    int main()

    {

    float e, r[1000], v[1000], i[1000];

    int n;

    void input(float *e, int *n, float r[]);

    void calculate( float e,? int n,? float r[], float v[], float i[]);

    void output(float a[], float b[], int n);

    system("pause");

    return 0;

    }

    main函數(shù)中應(yīng)該調(diào)用函數(shù),而這里卻成了聲明函數(shù),聲明應(yīng)該在main函數(shù)前,這樣就錯(cuò)了。

    4.如下

    void input(float *e, int *n, float r[])

    {

    printf("請(qǐng)輸入電壓");

    scanf_s("%f",&e);

    printf("請(qǐng)輸入電阻個(gè)數(shù)");

    scanf_s("%d",&n);

    if (*n % 2 != 0)

    printf("電阻值必須為偶數(shù)");

    printf("請(qǐng)輸入各電阻值");

    for (int i = 0; i < *n; i++)

    scanf_s("%f",&r[i]);

    for (int i = 0; i < *n; i++)

    {

    if (r[i] <= 0)

    printf("第%d個(gè)電阻值錯(cuò)誤", i);

    }

    }

    這里scanf_s函數(shù)需要的是實(shí)參e和n的地址,input函數(shù)中形參e,n為指針,他們?yōu)閷?shí)參e,n的地址,在scanf_s函數(shù)中直接用指針e,n,這樣就能直接給形參e,n賦值,如果再對(duì)形參e,n取地址,那么scanf_s函數(shù)將把輸入的值賦值給形參e,n,并沒有實(shí)現(xiàn)對(duì)實(shí)參e,n賦值。

    四、運(yùn)行結(jié)果

    五、結(jié)束語

    應(yīng)用C語言編寫電氣計(jì)算程序,可以實(shí)現(xiàn)用C語言計(jì)算電氣參數(shù),減少電氣參數(shù)的測(cè)量,簡化測(cè)量設(shè)備。并通過計(jì)算機(jī)實(shí)現(xiàn)電氣參數(shù)的存儲(chǔ),轉(zhuǎn)換,傳輸?shù)裙δ堋檫M(jìn)一步實(shí)現(xiàn)計(jì)算機(jī)在電氣設(shè)備中的普及運(yùn)用打下基礎(chǔ),更為設(shè)備的電氣自動(dòng)化、信息化等提供可能,同時(shí)又省去大量的測(cè)量儀表,為進(jìn)一步提高電氣控制自動(dòng)化提供可能。

    參考文獻(xiàn)(References)

    [1]《C語言程序設(shè)計(jì)》? 彭慧卿

    [2]《C程序設(shè)計(jì)語言》? 布萊恩?克尼漢

    [3]電路基礎(chǔ) [美] 查爾斯K.亞歷山大

    作者簡介:

    羅智敏,從事水電自動(dòng)化學(xué)習(xí).

    猜你喜歡
    高效
    讓學(xué)習(xí)在復(fù)習(xí)課中真正發(fā)生
    考試周刊(2016年86期)2016-11-11 08:07:20
    如何實(shí)現(xiàn)小學(xué)語文課堂教學(xué)的“高效”
    考試周刊(2016年85期)2016-11-11 00:58:49
    淺談交互式電子白板在中學(xué)英語課堂的有效應(yīng)用
    南北橋(2016年10期)2016-11-10 16:35:15
    計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)對(duì)物流信息化的影響
    對(duì)高校思政課教師暑期社會(huì)實(shí)踐的探索與思考
    如何高效組織基層群眾文藝表演
    如何實(shí)現(xiàn)小學(xué)語文課堂教學(xué)的高效化
    為小語課堂“瘦身”,為學(xué)生語文素養(yǎng)增“肥”
    農(nóng)田水利工程高效節(jié)水灌溉發(fā)展思路初探
    提高提問的有效性, 構(gòu)筑高效的語文課堂
    考試周刊(2016年77期)2016-10-09 10:47:06
    阿拉善右旗| 台江县| 汤原县| 钟祥市| 平利县| 卫辉市| 成安县| 资兴市| 青州市| 华容县| 同德县| 武义县| 沧州市| 卓资县| 锡林浩特市| 浑源县| 乌什县| 阜新市| 化隆| 宁国市| 庄河市| 绥化市| 光山县| 巴南区| 无极县| 祁东县| 永登县| 揭东县| 闸北区| 通河县| 牡丹江市| 西平县| 佛坪县| 长顺县| 宝丰县| 岗巴县| 东台市| 青龙| 吴忠市| 金阳县| 盐源县|