• 
    

    
    

      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)編輯:王力】

      桓仁| 海原县| 扎兰屯市| 绩溪县| 高唐县| 民乐县| 宁武县| 余江县| 东兴市| 湖南省| 台北县| 三原县| 南通市| 乐平市| 新丰县| 集安市| 和林格尔县| 内乡县| 鄯善县| 宁都县| 临夏市| 三台县| 金溪县| 铜陵市| 金湖县| 富阳市| 托克托县| 沙田区| 苍梧县| 吕梁市| 泸西县| 武城县| 建阳市| 娄烦县| 梧州市| 江口县| 漳平市| 和硕县| 上杭县| 卢氏县| 台安县|