c語言程序設(shè)計課程教學(xué)中的案例設(shè)計_第1頁
c語言程序設(shè)計課程教學(xué)中的案例設(shè)計_第2頁
c語言程序設(shè)計課程教學(xué)中的案例設(shè)計_第3頁
c語言程序設(shè)計課程教學(xué)中的案例設(shè)計_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

c語言程序設(shè)計課程教學(xué)中的案例設(shè)計

功能強(qiáng)大,創(chuàng)造力強(qiáng)c語言在20世紀(jì)70年代出生到近50年代,在信息技術(shù)領(lǐng)域仍然很活躍。在信息技術(shù)發(fā)展日新月異的今天,一項技術(shù)生存了50年仍保青春,不得不說,C語言是一種功能強(qiáng)大,生命力強(qiáng)的程序設(shè)計語言。如此功能強(qiáng)大的結(jié)構(gòu)化的程序設(shè)計語言,有著豐富的數(shù)據(jù)類型,有著基本的語言結(jié)構(gòu),有著順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)的基本技能。傳統(tǒng)的C語言程序設(shè)計教學(xué)是采用小程序設(shè)計為案例的,它如何與面向?qū)ο蟮某绦蛟O(shè)計語言銜接呢?我們的課程采用項目化教學(xué)就非常有必要了。一、基于實際案例的案例設(shè)計在項目化教學(xué)案例的設(shè)計過程中,如果缺少與實際生活相關(guān)的例子,學(xué)生在學(xué)習(xí)過程中就會缺少學(xué)習(xí)的動力。那么老師在設(shè)計“C語言程序設(shè)計”項目化案例時,根據(jù)日常生活實際問題具體情景進(jìn)行項目設(shè)計。本案例我們應(yīng)用C語言程序設(shè)計對身份證號校驗碼驗證的項目來分析,通過對18位身份證號碼的組成原理,校驗碼的檢驗真?zhèn)嗡惴皩崿F(xiàn)身份證號校驗碼的項目設(shè)計來講解。二、關(guān)于身份密碼的知識2.1校驗碼構(gòu)成公民身份證號碼是按照一定的規(guī)則組成的,它由十七位數(shù)字和一位校驗碼構(gòu)成。從左至右一到六位數(shù)字是地址碼,七至十四數(shù)字是出生日期碼,十五至十七數(shù)字是順序碼,最后一位為校驗碼。十八位數(shù)字我們可以用字母來表示:ABCDEFYYYYMMDDXXXR。1、表達(dá)高校數(shù)據(jù)的方式表示常住戶口所在省、市、區(qū)的行政代碼。比如:340000表示安徽省;340100表示安徽省合肥市;340101表示安徽省合肥市市轄區(qū)。2、出生日期碼表示該人員的出生年月日,比如:2020年1月11日出生的人員,出生日期碼為:20200111,月份和日期不足兩位的,我們在前面加0,數(shù)字之間是不用分隔符的。3、地區(qū)同月同日出生的人員編碼順序表示是對身份證號前六位相同(同一個地區(qū)內(nèi)),又是同年同月同日出生的人員編定的順序碼,奇數(shù)代表是男性,偶數(shù)代表是女性,可以更好的區(qū)別男女。4、檢驗碼r根據(jù)前面17位數(shù)字,按照校驗碼計算方法得出一位數(shù)。2.2計算剩余余數(shù)y1、根據(jù)前面17位數(shù)字進(jìn)行加權(quán)求和:公式:S=Sum(Ai*Wi),i=1至17,其中Ai為第i位置上身份證號碼數(shù)字值,Wi為第i位置上的加權(quán)因子,相應(yīng)的17位加權(quán)因子:7910584216379105842。身份證號碼上每一位數(shù)字與相應(yīng)的加權(quán)因子相乘的積相加,計算出總和S。2、用11對計算結(jié)果取模Y=mod(S,11),S除以11,看得到的余數(shù)。余數(shù)Y有0至10共11個數(shù)字。3、按照模的值對應(yīng)的校驗碼如下圖:2.3身份證號中的同余根據(jù)上表的對應(yīng)關(guān)系,我們發(fā)現(xiàn)校驗碼有11個,如果我們用數(shù)字0到9來表示,就缺少一位。用二位數(shù)字來表示的話,身份證號就變成19位了。因為Ⅹ代青羅馬數(shù)字的10,所以這里用X來代替其中一位校驗碼。這樣可以保障公民身份證號符合國家標(biāo)準(zhǔn)。三、項目設(shè)計3.1開發(fā)環(huán)境開發(fā)工具:Code::Blocks/Dev-C++3.2校驗位校驗位判斷輸入身份證號碼,以字符串的形式放入字符數(shù)組中,調(diào)用判斷身份證號號碼函數(shù),首先判斷位數(shù)是否為18位,接著判斷除最后一位可以是大寫’X’或小寫’x’以外,其他位必須是數(shù)字,滿足以上二個條件后,再來判斷最后一位校驗位是否正確。如果以上條件都能滿足,那么我們就判斷身份證號碼是合法的,否則為不合法。3.3數(shù)據(jù)類型本案例中,我們將應(yīng)用到了intcharlong的數(shù)據(jù)類型,加權(quán)因子采用整型數(shù)組,校驗碼和身份證號碼都采用字符數(shù)組的類型。3.4自動計算數(shù)據(jù)大小本程序用到C語言基礎(chǔ)知識,所涉及到的知識點如下:(1)stdio.h、string.h和ctype.h頭文件的引入;(2)用戶自定義函數(shù)及函數(shù)的調(diào)用;(3)數(shù)組的定義和初始化,缺省數(shù)組的大小時,必須初始化數(shù)據(jù),編譯器會自動計算數(shù)據(jù)的大小。如:intR[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//加權(quán)因子;(4)調(diào)用字符串長度函數(shù)strlen(),計算字符長度;調(diào)用數(shù)字判斷isdigit()函數(shù);(5)字符轉(zhuǎn)換為數(shù)值功能,如’0’-48=0字符‘0’變成數(shù)值0;(6)gets()可以接受帶有空格的字符,而scanf()函數(shù)遇到空格就截斷,我們要理解兩者之間的區(qū)別;(7)%,取模運算就是自然數(shù)學(xué)中的求余數(shù),參與取模運算的兩個操作數(shù)都是整型數(shù)。四、項目代碼4.1身份證號校驗函數(shù)是完成某個特定功能的模塊代碼。通過調(diào)用模塊代碼完成某項功能。我們定義了一個身份證驗證函數(shù),用來檢測輸入的字符串身份證號碼的有效性。最后一位校驗碼是根據(jù)前面17位數(shù)字碼,按照ISO7064:1983.MOD11-2校驗碼計算出來的校驗碼。我們采用用戶自定義函數(shù)Chk18PaperId函數(shù)來完成身份證號校驗過程。在Chk18PaperId函數(shù)中我們首先對字符串身份證碼進(jìn)行位數(shù)的判斷,如果字符串長度不等于18位,那么我們直接返回,判定該身份證號碼為不合法。在字符串長度為18位的基礎(chǔ)上,我們再來判斷每一位是否是數(shù)字字符或者最后一位是羅馬數(shù)字X,這里為了方便,我們直接用英文字母’X’來表示。滿足以上兩個條件之后,我們再來判斷最后一位校驗碼是否正確。假設(shè)某一身份證號前17位:17位數(shù)字32062119950718302加權(quán)因子7910584216379105842根據(jù)加權(quán)求和公式S=Sum(Ai*Wi),計算17位數(shù)字各位數(shù)字與對應(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;計算S÷11的余數(shù)T:310%11=2;余數(shù)0-10對應(yīng)校驗碼為[1,0,X,9,8,7,6,5,4,3,2],那么該身份證號碼的第18位校驗碼就是X。4.2完整代

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論