• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      C語言程序設(shè)計(jì)項(xiàng)目化教學(xué)案例分析

      2021-05-11 18:43:27秦春娣黃曉偉
      中國新通信 2021年4期
      關(guān)鍵詞:校驗(yàn)碼身份證號(hào)項(xiàng)目化教學(xué)

      秦春娣 黃曉偉

      【摘要】 ? ?C語言程序設(shè)計(jì)作為高職計(jì)算機(jī)專業(yè)學(xué)生的基礎(chǔ)語言,在整個(gè)課程中的相當(dāng)重要的。學(xué)習(xí)C語言程序設(shè)計(jì)不僅能讓學(xué)生了解基本的程序設(shè)計(jì)概念,還能讓學(xué)生學(xué)會(huì)使用編程語言的代碼結(jié)構(gòu),更能讓學(xué)生學(xué)會(huì)編程的思想。為后續(xù)學(xué)習(xí)其他語言:如JAVA、Python等語言打下扎實(shí)的基礎(chǔ)。傳統(tǒng)的C語言學(xué)習(xí)都是通過語法學(xué)習(xí),加上小的案例來講解的,缺乏對(duì)實(shí)際生活中案例的整體框架編程設(shè)計(jì)。針對(duì)上述情況,下面將通過生活實(shí)際案例,應(yīng)用C語言程序設(shè)計(jì)判斷身份證號(hào)校驗(yàn)碼項(xiàng)目進(jìn)行教學(xué)案例分析。

      【關(guān)鍵詞】 ? ?身份證號(hào) ? ?校驗(yàn)碼 ? ?項(xiàng)目化教學(xué)

      引言:

      C語言從上個(gè)世紀(jì)70年代誕生至今將近50年,它仍舊活躍在信息技術(shù)的各個(gè)領(lǐng)域。在信息技術(shù)發(fā)展日新月異的今天,一項(xiàng)技術(shù)生存了50年仍保青春,不得不說,C語言是一種功能強(qiáng)大,生命力強(qiáng)的程序設(shè)計(jì)語言。如此功能強(qiáng)大的結(jié)構(gòu)化的程序設(shè)計(jì)語言,有著豐富的數(shù)據(jù)類型,有著基本的語言結(jié)構(gòu),有著順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)的基本技能。傳統(tǒng)的C語言程序設(shè)計(jì)教學(xué)是采用小程序設(shè)計(jì)為案例的,它如何與面向?qū)ο蟮某绦蛟O(shè)計(jì)語言銜接呢?我們的課程采用項(xiàng)目化教學(xué)就非常有必要了。

      一、案例背景

      在項(xiàng)目化教學(xué)案例的設(shè)計(jì)過程中,如果缺少與實(shí)際生活相關(guān)的例子,學(xué)生在學(xué)習(xí)過程中就會(huì)缺少學(xué)習(xí)的動(dòng)力。那么老師在設(shè)計(jì)“C語言程序設(shè)計(jì)”項(xiàng)目化案例時(shí),根據(jù)日常生活實(shí)際問題具體情景進(jìn)行項(xiàng)目設(shè)計(jì)。

      本案例我們應(yīng)用C語言程序設(shè)計(jì)對(duì)身份證號(hào)校驗(yàn)碼驗(yàn)證的項(xiàng)目來分析,通過對(duì)18位身份證號(hào)碼的組成原理,校驗(yàn)碼的檢驗(yàn)真?zhèn)嗡惴皩?shí)現(xiàn)身份證號(hào)校驗(yàn)碼的項(xiàng)目設(shè)計(jì)來講解。

      二、身份證號(hào)碼有關(guān)知識(shí)

      2.1身份證號(hào)的組成

      公民身份證號(hào)碼是按照一定的規(guī)則組成的,它由十七位數(shù)字和一位校驗(yàn)碼構(gòu)成。從左至右一到六位數(shù)字是地址碼,七至十四數(shù)字是出生日期碼,十五至十七數(shù)字是順序碼,最后一位為校驗(yàn)碼。十八位數(shù)字我們可以用字母來表示:ABCDEFYYYYMMDDXXXR。

      1、地址碼(ABCDEF):表示常住戶口所在省、市、區(qū)的行政代碼。比如:340000表示安徽省;340100 表示安徽省合肥市;340101 表示安徽省合肥市市轄區(qū)。

      2、出生日期碼(YYYYMMDD):表示該人員的出生年月日,比如:2020年1月11日出生的人員,出生日期碼為:20200111,月份和日期不足兩位的,我們在前面加0,數(shù)字之間是不用分隔符的。

      3、順序碼(XXX):表示是對(duì)身份證號(hào)前六位相同(同一個(gè)地區(qū)內(nèi)),又是同年同月同日出生的人員編定的順序碼,奇數(shù)代表是男性,偶數(shù)代表是女性,可以更好的區(qū)別男女。

      4、校驗(yàn)碼(R):根據(jù)前面17位數(shù)字,按照校驗(yàn)碼計(jì)算方法得出一位數(shù)。

      2.2校驗(yàn)碼的計(jì)算方式

      1、根據(jù)前面17位數(shù)字進(jìn)行加權(quán)求和:公式:S=Sum(Ai*Wi),i=1至17,其中Ai為第i位置上身份證號(hào)碼數(shù)字值,Wi為第i位置上的加權(quán)因子,相應(yīng)的17位加權(quán)因子:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。

      身份證號(hào)碼上每一位數(shù)字與相應(yīng)的加權(quán)因子相乘的積相加,計(jì)算出總和S。

      2、用11對(duì)計(jì)算結(jié)果取模 Y=mod(S,11) ,S除以11,看得到的余數(shù)。余數(shù)Y有0至10共11個(gè)數(shù)字。

      3、按照模的值對(duì)應(yīng)的校驗(yàn)碼如下圖:

      2.3校驗(yàn)碼出現(xiàn)‘X

      根據(jù)上表的對(duì)應(yīng)關(guān)系,我們發(fā)現(xiàn)校驗(yàn)碼有11個(gè),如果我們用數(shù)字0到9來表示,就缺少一位。用二位數(shù)字來表示的話,身份證號(hào)就變成19位了。因?yàn)棰嗔_馬數(shù)字的10,所以這里用X來代替其中一位校驗(yàn)碼。這樣可以保障公民身份證號(hào)符合國家標(biāo)準(zhǔn)。

      三、項(xiàng)目設(shè)計(jì)

      3.1開發(fā)環(huán)境

      開發(fā)語言:C語言

      開發(fā)工具:Code::Blocks/Dev-C++

      3.2項(xiàng)目需求

      輸入身份證號(hào)碼,以字符串的形式放入字符數(shù)組中,調(diào)用判斷身份證號(hào)號(hào)碼函數(shù),首先判斷位數(shù)是否為18位,接著判斷除最后一位可以是大寫X或小寫x以外,其他位必須是數(shù)字,滿足以上二個(gè)條件后,再來判斷最后一位校驗(yàn)位是否正確。如果以上條件都能滿足,那么我們就判斷身份證號(hào)碼是合法的,否則為不合法。

      3.3數(shù)據(jù)類型

      本案例中,我們將應(yīng)用到了int char long的數(shù)據(jù)類型,加權(quán)因子采用整型數(shù)組,校驗(yàn)碼和身份證號(hào)碼都采用字符數(shù)組的類型。

      3.4涉及的知識(shí)點(diǎn)

      本程序用到C語言基礎(chǔ)知識(shí),所涉及到的知識(shí)點(diǎn)如下:

      (1)stdio.h、string.h和ctype.h頭文件的引入;

      (2)用戶自定義函數(shù)及函數(shù)的調(diào)用;

      (3)數(shù)組的定義和初始化,缺省數(shù)組的大小時(shí),必須初始化數(shù)據(jù),編譯器會(huì)自動(dòng)計(jì)算數(shù)據(jù)的大小。如:int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //加權(quán)因子;

      (4)調(diào)用字符串長度函數(shù)strlen(),計(jì)算字符長度;調(diào)用數(shù)字判斷isdigit()函數(shù);

      (5)字符轉(zhuǎn)換為數(shù)值功能,如0-48=0 字符‘0變成數(shù)值0;

      (6)gets()可以接受帶有空格的字符,而scanf()函數(shù)遇到空格就截?cái)?,我們要理解兩者之間的區(qū)別;

      (7)%,取模運(yùn)算就是自然數(shù)學(xué)中的求余數(shù),參與取模運(yùn)算的兩個(gè)操作數(shù)都是整型數(shù)。

      四、項(xiàng)目編碼

      4.1核心算法分析

      函數(shù)是完成某個(gè)特定功能的模塊代碼。通過調(diào)用模塊代碼完成某項(xiàng)功能。我們定義了一個(gè)身份證驗(yàn)證函數(shù),用來檢測輸入的字符串身份證號(hào)碼的有效性。最后一位校驗(yàn)碼是根據(jù)前面 17 位數(shù)字碼,按照 ISO 7064:1983.MOD 11-2 校驗(yàn)碼計(jì)算出來的校驗(yàn)碼。

      我們采用用戶自定義函數(shù)Chk18PaperId函數(shù)來完成身份證號(hào)校驗(yàn)過程。

      在Chk18PaperId函數(shù)中我們首先對(duì)字符串身份證碼進(jìn)行位數(shù)的判斷,如果字符串長度不等于18位,那么我們直接返回,判定該身份證號(hào)碼為不合法。在字符串長度為18位的基礎(chǔ)上,我們再來判斷每一位是否是數(shù)字字符或者最后一位是羅馬數(shù)字X,這里為了方便,我們直接用英文字母X來表示。滿足以上兩個(gè)條件之后,我們再來判斷最后一位校驗(yàn)碼是否正確。

      假設(shè)某一身份證號(hào)前17位:

      17位數(shù)字 ?3 2 0 6 2 1 1 9 9 5 0 7 1 8 3 0 2

      加權(quán)因子 ?7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

      根據(jù)加權(quán)求和公式S = Sum(Ai * Wi),計(jì)算17位數(shù)字各位數(shù)字與對(duì)應(yīng)的加權(quán)因子的乘積的和S:3×7+2×9+0×10+6×5+2×8+1×4+1×2+9×1+9×6+5×3+0×7+7×9+1×10+8×5+3×8+0×4+2×2=310;

      計(jì)算S÷11的余數(shù)T:310 % 11=2;余數(shù)0-10對(duì)應(yīng)校驗(yàn)碼為[1, 0, X , 9, 8, 7, 6, 5, 4, 3, 2],

      那么該身份證號(hào)碼的第18位校驗(yàn)碼就是X。

      4.2完整代碼

      #include //輸入輸出函數(shù)scanf()和printf()包含在頭文件里面

      #include //字符串長度函數(shù)包含在頭文件里面

      #include //字符分類函數(shù)頭文件

      int Chk18PaperId (const char *sPaperId) //函數(shù)用來判斷身份證號(hào)校驗(yàn)碼是否合法

      { long lSumQT =0;

      int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //加權(quán)因子

      char sChecker[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'}; //校驗(yàn)碼

      if( 18 != strlen(sPaperId)) return -1; //檢驗(yàn)長度

      int i=0; ? ? ? ?//校驗(yàn)數(shù)字

      for (i=0; i<18; i++)

      { ? if ( !isdigit(sPaperId[i]) && ?。ǎ?X' == sPaperId[i] || 'x' == sPaperId[i])&& 17 == i) )

      { ?return -1;//如果身份證號(hào)碼中某一位不是數(shù)字或者X 的話,則返回-1,失敗}}

      for (i=0; i<=16; i++)//驗(yàn)證最末的校驗(yàn)碼

      { ? ?lSumQT += (sPaperId[i]-48) * R[i];}

      if (sChecker[lSumQT%11] != sPaperId[17] )

      { return -1;}

      return 0; ?}

      int main(void)

      { char Personal_ID[18];

      printf("請(qǐng)輸入一個(gè)身份證號(hào)碼:\n");

      gets(Personal_ID); ? ? //用戶輸入一個(gè)字符串身份證號(hào)碼

      if(!Chk18PaperId(Personal_ID)) ?printf("合法\n"); ?//調(diào)用自定義校驗(yàn)碼函數(shù)

      else ?printf("不合法\n");

      return 0;}

      五、結(jié)論

      C語言本身提供了強(qiáng)大的算法功能,而且還提供項(xiàng)目實(shí)踐功能。我們對(duì)C語言程序設(shè)計(jì)進(jìn)行項(xiàng)目化教學(xué),在教學(xué)案例設(shè)計(jì)中根據(jù)高職學(xué)生學(xué)習(xí)的特點(diǎn),設(shè)計(jì)出符合學(xué)生的C語言項(xiàng)目教學(xué)案例,從而提高學(xué)生學(xué)習(xí)C語言解決各種實(shí)際問題的能力。

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

      [1]許芝卉,李建華.關(guān)于C語言程序設(shè)計(jì)題自動(dòng)評(píng)分算法的探究,山西大同大學(xué)報(bào),2020(10).

      [2]唐小健.探究C語言程序設(shè)計(jì)在項(xiàng)目實(shí)踐中的技巧應(yīng)用,電腦編程技術(shù)與維護(hù),2020(11).

      [3]周軍強(qiáng).C 語言程序設(shè)計(jì)課程項(xiàng)目化教學(xué)研究,福建電腦,2020(04).

      [4]俞騁.項(xiàng)目教學(xué)法在技校C語言教學(xué)中的實(shí)證研究,現(xiàn)代計(jì)算機(jī),2019(14).

      [5]林劍.C語言程序設(shè)計(jì)課程教學(xué)探索,課程教育研究,2019(02).

      秦春娣(1981-),女,江蘇常州人,實(shí)驗(yàn)師,工程師,本科,主要研究方向?yàn)橛?jì)算機(jī)應(yīng)用;

      黃曉偉(1981-),男,江蘇常州人,副教授,研究方向:工業(yè)自動(dòng)化控制。

      猜你喜歡
      校驗(yàn)碼身份證號(hào)項(xiàng)目化教學(xué)
      老師情
      作品賞析(3)
      高職《管理學(xué)》課程實(shí)行項(xiàng)目化教學(xué)改革與實(shí)踐策略
      芻議項(xiàng)目化教學(xué)法在本科動(dòng)漫實(shí)訓(xùn)課程中的探索與應(yīng)用
      眾籌模式引入工業(yè)產(chǎn)品設(shè)計(jì)項(xiàng)目化教學(xué)的思考與探索
      《UG NX機(jī)械產(chǎn)品設(shè)計(jì)》課程項(xiàng)目化教學(xué)的改革研究
      科技視界(2016年18期)2016-11-03 21:50:03
      基于Excel實(shí)現(xiàn)書號(hào)校驗(yàn)碼的驗(yàn)證
      基于FPGA的循環(huán)冗余校驗(yàn)碼設(shè)計(jì)
      電子世界(2015年14期)2015-11-07 05:32:29
      身份證號(hào)碼中的數(shù)學(xué)
      《網(wǎng)印工業(yè)》關(guān)于作者投稿同時(shí)提供身份證號(hào)的通知
      宁城县| 顺义区| 鄯善县| 仪陇县| 望江县| 潮安县| 徐汇区| 靖江市| 沅陵县| 洪雅县| 麦盖提县| 盐山县| 桦南县| 龙岩市| 龙井市| 含山县| 元氏县| 图片| 信丰县| 宝清县| 手机| 望谟县| 礼泉县| 班戈县| 织金县| 黔西县| 永善县| 星子县| 江口县| 大同市| 兴城市| 沂源县| 香格里拉县| 龙山县| 英德市| 房产| 石楼县| 称多县| 西昌市| 曲沃县| 行唐县|