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

    一種可以實(shí)現(xiàn)C語(yǔ)言過(guò)程評(píng)分的方法

    2022-02-17 00:29:53王猛,趙軍富
    電腦知識(shí)與技術(shù) 2022年35期

    王猛,趙軍富

    摘要:C語(yǔ)言程序設(shè)計(jì)在評(píng)分過(guò)程中,大多數(shù)的考試系統(tǒng)只能按照結(jié)果評(píng)分,這就導(dǎo)致學(xué)生考試成績(jī)要么滿分要么零分,不能夠真實(shí)反映學(xué)生的學(xué)習(xí)水平,利用正則表達(dá)式對(duì)C語(yǔ)言的程序進(jìn)行知識(shí)點(diǎn)的過(guò)程評(píng)分,并通過(guò)預(yù)設(shè)輸入值,讓學(xué)生運(yùn)行自己的程序,得出結(jié)果與預(yù)設(shè)結(jié)果值進(jìn)行匹配,得出結(jié)果分,最終結(jié)合是否編譯,得出總分。

    關(guān)鍵詞:C語(yǔ)言程序設(shè)計(jì);過(guò)程評(píng)分;正則表達(dá)式

    中圖分類(lèi)號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

    文章編號(hào):1009-3044(2022)35-0037-03

    1 引言

    C語(yǔ)言程序設(shè)計(jì)是大學(xué)本科工科類(lèi)專業(yè)所開(kāi)設(shè)的必修課程,對(duì)于程序設(shè)計(jì)題目,在平時(shí)的作業(yè)及考試都需要對(duì)程序設(shè)計(jì)題目進(jìn)行評(píng)分,有些院校對(duì)于程序設(shè)計(jì)題還是人工評(píng)分,尤其是作業(yè);有些院校采購(gòu)了考試系統(tǒng),但大多數(shù)的考試系統(tǒng)或網(wǎng)絡(luò)評(píng)測(cè)系統(tǒng)中,評(píng)測(cè)都是以運(yùn)行結(jié)果作為評(píng)分依據(jù)。并不查看學(xué)生的編程過(guò)程,其評(píng)分原則并不能體現(xiàn)學(xué)生對(duì)知識(shí)的掌握程度,有其局限性。對(duì)于程序設(shè)計(jì)題這種間于自然語(yǔ)言和程序語(yǔ)言之間的主觀題,可部分?jǐn)[脫語(yǔ)言的約束和限制[1-2],具有較高研究?jī)r(jià)值。本方法在對(duì)過(guò)程評(píng)分主要通過(guò)正則表達(dá)式進(jìn)行評(píng)定,因?yàn)檎齽t表達(dá)式不僅能夠處理傳統(tǒng)的文本匹配,更重要的是正則表達(dá)式具有強(qiáng)大的結(jié)構(gòu)描述能力,同時(shí)能夠描述文本深層次的特征,可以通過(guò)簡(jiǎn)單有效的方式對(duì)文本進(jìn)行的復(fù)雜控制[3-4]。根據(jù)正則表達(dá)式的特點(diǎn),其特別適用于程序類(lèi)代碼的匹配評(píng)測(cè)。

    2 C語(yǔ)言過(guò)程評(píng)分實(shí)現(xiàn)

    C語(yǔ)言程序題在評(píng)分由三個(gè)部分構(gòu)成:結(jié)果分值、編譯分值、過(guò)程分值[5]。結(jié)果分值通過(guò)評(píng)判數(shù)據(jù)庫(kù)中預(yù)設(shè)的結(jié)果來(lái)評(píng)定;編譯分值通過(guò)是否編譯評(píng)定;過(guò)程分值由事先設(shè)定的多個(gè)正則表達(dá)式評(píng)定,其中正則表達(dá)式由參考代碼中的關(guān)鍵代碼構(gòu)成,然后利用ckstr函數(shù)對(duì)參考代碼進(jìn)行匹配,得出過(guò)程分。C語(yǔ)言整體評(píng)測(cè)過(guò)程如圖 1所示:

    對(duì)于正則表達(dá)式,常用的替換字符包括:.*可以匹配單行任意字符;[\s\S].*可以匹配多行任意字符;[ ].*可以匹配零個(gè)或多個(gè)空格;[ ]+可以匹配一個(gè)或多個(gè)空格。利用正則表達(dá)式的這些特點(diǎn),我們可以對(duì)常用的C語(yǔ)言結(jié)構(gòu)及部分帶代碼,用正則表達(dá)式去表示。

    例如選擇結(jié)構(gòu)單分支結(jié)構(gòu)語(yǔ)法如下:

    if(條件)

    {

    表達(dá)式;

    }

    轉(zhuǎn)換為正則表達(dá)式如下:if[ ]*\(.*\)[ ]*\{[\s\S]*\}

    對(duì)于數(shù)據(jù)庫(kù)中題目表的部分主要字段設(shè)置如表 1:

    最終分值計(jì)算的公式如下:

    $fz_cfd=100*($bl_cfd/($bl_da+$bl_by+$bl_cfd))*($cfd/$sum)

    $zf=$fz_da+$fz_by+$fz_cfd;

    說(shuō)明如下:

    $sum為所有正則表達(dá)式的分值

    $cfd為考生獲取正確正則表達(dá)式的值

    $fz_cfd為過(guò)程分值

    $fz_da為結(jié)果分值

    $fz_by為編譯分值

    以下為程序評(píng)定過(guò)程中的部分代碼:

    $sum=0;

    $cfd=0; ? ? //用于統(tǒng)計(jì)各個(gè)正則表達(dá)式采分點(diǎn)的和

    while($row=mysqli_fetch_array($result_zz))

    {

    $sum=$sum+$row[1]; //row數(shù)組為數(shù)據(jù)庫(kù)中正則表達(dá)式

    $str1="/".$row[0]."/";

    $str2=$content;? ?//$content為參考代碼

    if(ckstr($str1,$str2)==1)

    {

    $cfd=$cfd+$row[1];

    }

    }

    if($sum==0)

    $fz_cfd=0;

    else

    $fz_cfd=round(100*(1.0*$r_tm->bl_cfd/($r_tm->bl_da+$r_tm->bl_by+$r_tm->bl_cfd))*(1.0*round($cfd,2)/$sum),2);

    $zf=$fz_da+$fz_by+$fz_cfd;

    3 實(shí)例分析

    1) 題目?jī)?nèi)容:

    實(shí)現(xiàn)功能:請(qǐng)編寫(xiě)一個(gè)函數(shù)fun,該函數(shù)的功能是:計(jì)算正整數(shù)n以內(nèi)(包括n),能被5或9整除的所有自然數(shù)的倒數(shù)的和,并將計(jì)算結(jié)果作為函數(shù)值返回在主函數(shù)中保留兩個(gè)小數(shù)位輸出。

    例如:若輸入n的值為20,則輸出結(jié)果為0.58.

    注意:

    ① 所寫(xiě)代碼中,不得定義其他變量;

    ② 本題必須使用for循環(huán),if語(yǔ)句;

    ③ 不允許改動(dòng)預(yù)編譯命令行及主程序,且必須運(yùn)行程序;

    ④ 程序代碼編寫(xiě)在****BEGIN*****與****END****之間;

    ⑤*********BEGIN**********和*********

    END**********不可刪除。

    ⑥ 其中函數(shù)void bky(? )為自動(dòng)評(píng)分函數(shù),禁止修改、刪除

    2)給出代碼如下:

    #include<stdio.h>

    void bky( );

    float fun( int n)

    {

    int i;

    float sum=0;

    /***********BEGIN*********/

    /***********END*********/

    }

    void main()

    {

    float fun( int n);

    int m;

    float s;

    printf("\n 請(qǐng)輸入一個(gè)正整數(shù):");

    scanf("%d",&m);

    s=fun(m);

    printf("\n the result is:%.2f",s);

    bky();

    }

    void bky()

    {

    FILE *IN,*OUT;

    float s ;

    int t;

    float o;

    IN=fopen("in.dat","r");

    if(IN==NULL)

    {

    printf("Read FILE Error");

    }

    OUT=fopen("out.dat","w");

    if(OUT==NULL)

    {

    printf("Write FILE Error");

    }

    fscanf(IN,"%d",&t);

    o=fun(t);

    fprintf(OUT,"%.2f\n",o);

    fclose(IN);

    fclose(OUT);

    }

    3) 題目?jī)?nèi)容設(shè)置如圖 2所示,設(shè)置答案、編譯及過(guò)程的采分比例如圖 3所示:

    4) 設(shè)置的正則表達(dá)式采分點(diǎn)如所表 2示:

    5) 參考答案如下:

    for(i=1;i<=n;i++)

    if(i%5==0 || i%9==0)

    sum=sum+1.0/i;

    return sum;

    6) 分別找cs和cs2兩位測(cè)試同學(xué)進(jìn)行測(cè)試,學(xué)生代碼如圖 4下:

    根據(jù)前面題目分值比例的設(shè)置:本題的結(jié)果分為50分;編譯分為10分;過(guò)程分為40分。cs這位同學(xué)的結(jié)果、編譯、正則表達(dá)式所有的采分點(diǎn)全部正確,得分100;而cs2這位同學(xué)的結(jié)果錯(cuò)誤,結(jié)果分為:0分、編譯過(guò),編譯分為:10分,過(guò)程分共40分,但正則表達(dá)式中,其中第5項(xiàng)和第8項(xiàng)不正確,只能拿到6/8的過(guò)程分,故總分=0+10+40*6/8=40分,具體評(píng)分結(jié)果如表 3 :

    4 結(jié)語(yǔ)

    本文提出了一種可以實(shí)現(xiàn)C語(yǔ)言程序自動(dòng)評(píng)分的方案。在C語(yǔ)言程序中,評(píng)分過(guò)程無(wú)非三個(gè)方面:結(jié)果是否正確,是否進(jìn)行編譯,代碼準(zhǔn)確率三個(gè)方面,本方法不僅可以評(píng)判結(jié)果,更重要的是可以評(píng)判代碼的準(zhǔn)確率,使得C語(yǔ)言程序的評(píng)判更加客觀和準(zhǔn)確,減輕了教師的負(fù)擔(dān)。

    但在評(píng)判代碼準(zhǔn)確率的時(shí)候,通過(guò)前文可知道,需要對(duì)給定程序做出很多限定,例如:功能實(shí)現(xiàn)時(shí),限定代碼必須用for循環(huán)結(jié)構(gòu)實(shí)現(xiàn);還有代碼中限定不得再定義其他變量;還有些較復(fù)雜代碼,限定變量的含義等缺陷。但是鑒于目前人工智能、信息技術(shù)的發(fā)展水平,目前這種評(píng)判方法是一種高效、客觀、準(zhǔn)確率高的方法,而且本方法也可適用于其他類(lèi)編程語(yǔ)言的自動(dòng)評(píng)分,具有較高的推廣價(jià)值。

    參考文獻(xiàn):

    [1] 曹亞妮.C語(yǔ)言在線考試系統(tǒng)開(kāi)發(fā)及關(guān)鍵技術(shù)的研究[D].西安:西安理工大學(xué),2016.

    [2] 吳艷玲.基于WEB的C語(yǔ)言編程題自動(dòng)閱卷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2011.

    [3] 姜英杰.支持正則表達(dá)式的文本匹配優(yōu)化算法[D].沈陽(yáng):東北大學(xué),2012.

    [4] 張雪英.基于機(jī)器學(xué)習(xí)的文本自動(dòng)分類(lèi)研究進(jìn)展[J].情報(bào)學(xué)報(bào),2006(6):730-739.

    [5] 刁善會(huì).C程序設(shè)計(jì)考試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].重慶:重慶大學(xué),2009.

    【通聯(lián)編輯:王力】

    洛隆县| 固阳县| 崇礼县| 林州市| 丰都县| 固阳县| 应用必备| 甘南县| 祁门县| 兴文县| 扶风县| 尉氏县| 孟州市| 重庆市| 元谋县| 乐都县| 华容县| 平顶山市| 翁源县| 上蔡县| 桓台县| 新安县| 交口县| 阿鲁科尔沁旗| 丽水市| 专栏| 巴林左旗| 南丰县| 攀枝花市| 和平区| 黔东| 云龙县| 南木林县| 时尚| 邓州市| 泰安市| 会宁县| 陆川县| 黎城县| 平舆县| 阳朔县|