版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
標(biāo)準(zhǔn)文案學(xué)生學(xué)號 0120903490*** 實驗課成績學(xué)生實驗報告書實驗課程名稱開課學(xué)院指導(dǎo)教師姓名學(xué)生姓名學(xué)生專業(yè)班級
MIS系統(tǒng)軟件管理學(xué)院*****2011 -- 2012 學(xué)年 第 二 學(xué)期大全標(biāo)準(zhǔn)文案實驗項目名稱加密解密算法實驗成績實驗者**專業(yè)班級信管0901班組別同組者無實驗日期2012年03月07日大全標(biāo)準(zhǔn)文案第一部分:實驗預(yù)習(xí)報告1、實驗?zāi)康摹⒁饬x通過簡單的加密解密算法的實現(xiàn)理解系統(tǒng)中加密解密的基本思想,熟練掌握使用C語言基本語句。2、實驗基本原理與方法①單字母替換加密方法——愷撒密碼加密方法是把英文字母按字母表的順序編號作為明文,將密鑰定為 m,加密算法為將明文加上密鑰 m,得到密碼表,通過相反的過程由密文得到明文。②單字母替換加密方法——單表置換密碼由密鑰Key構(gòu)造字符置換表,完成加密和解密過程。③多字母替換加密方法——維吉利亞密碼假設(shè)明文 m=m1m2m3?mn;密鑰k=k1k2k3 ?kn,對應(yīng)密文 c=c1c2c3 ?cn,密文為:ci=(mi+ki )mod26,26個字母的序號依次為 0~25,ci,mi,,ki 是分別是密文明文密鑰中第 i個字母的序號。④轉(zhuǎn)換加密方法通過將明文每m個字符一組按順序分為若干個字符串,再按照先列后行形成密文,并分析給出解密的方法?;蛘咄ㄟ^給出一個密鑰字符串,將明文按密鑰字符串長度按順序分為若干組字符串,再按照密鑰字符串各個字符的順序形成密文,并分析給出解密的方法。3、主要儀器設(shè)備及耗材實驗室提供計算機(jī)和上網(wǎng)條件, C語言上機(jī)環(huán)境。4、實驗方案與技術(shù)路線(綜合性、設(shè)計性實驗)大全標(biāo)準(zhǔn)文案第二部分:實驗過程記錄實驗原始記錄(包括實驗數(shù)據(jù)記錄,實驗現(xiàn)象記錄,實驗過程發(fā)現(xiàn)的問題等)單表置換:先選定一個單詞,例如 BEIJINGTSINGHUA,然后將它排列在密碼對照表(兩行 26列第一行存a到z的字母,第二行存對照的密碼)下方,重復(fù)出現(xiàn)的字母以第一次現(xiàn)時對應(yīng)的明文字母為準(zhǔn);后面以該單詞中未出現(xiàn)的字母按順序排列備齊,生成一個密碼,然后可以用此密碼本進(jìn)行加密或解密。加密過程:首先輸入加密明文如important,然后輸入密鑰如BEIJINGTSINGHUA。再然后建立臨時密碼表如下:(上一行是字母,下一行是密碼)之后,將important 對照第一行的相應(yīng)密匙如 i 對應(yīng)H,依次輸出。結(jié)果應(yīng)為 HDLKOQBFQ;解密過程:首先輸入密文如 HDLKOQBFQ,然后輸入密匙 BEIJINGTSINGHUA。同理加密過程,可以對照密碼表依次找到密文中對應(yīng)的原文。結(jié)果應(yīng)為 important 。2.凱撒密碼:把英文字母按字母表的順序編號作為明文,將密鑰定為 m,加密算法為將明文加上密鑰 m,得到密碼表,通過相反的過程由密文得到明文。加密過程:首先輸入明文為 Thisisasecret, 然后輸入密鑰 9,之后同樣會形成兩行對應(yīng)的同1方法一樣的密碼表:ABCDEFGHIJKLMNOPQRSTUVWXYZXYZABCDEFGHIJKLMNOPQRSTUVW之后,將自動輸出加密后的密文,結(jié)果為: cqrb!rb!j!bnlanc ;解密過程:輸入需要解密的密文如: cqrb!rb!j!bnlanc ,然后輸入密鑰 9(為簡便起見,同加密過程使用同樣的密鑰) ,則得到加密過程中的同樣密碼表,然后依次對應(yīng)輸出原文,結(jié)果為Thisisasecret 。3.輪轉(zhuǎn)法:大全標(biāo)準(zhǔn)文案通過將明文每 m個字符一組按順序分為若干個字符串,再按照先列后行形成密文,并分析給出解密的方法。加密過程:首先輸入明文 itcanallowstudentstogetcloseupviews ,然后輸入密匙5,之后輸入的明文會按照每行 3個字符的形式進(jìn)行排列,如此例中形成如下的排列:之后,輸出加密后的密文則使用先列后行的方法,此例結(jié)果為:iasngovtlttesiclusteeaodtcuwnweolps;解密過程:首先輸入密文 icteccnrbouicumsanb ,然后輸入密匙 5,之后同樣會將輸入的密文按照每行 3個字符的形式排列,形成如下排列:icbcaccountnumberis之后,輸出解密后的明文使用先列后行的方法,此例結(jié)果為 icbcaccountnumberis 。維吉利亞密碼:假設(shè)明文 m=m1m2m3?mn;密鑰 k=k1k2k3 ?kn,對應(yīng)密文 c=c1c2c3 ?cn,密文為:ci=(mi+ki )mod26,26個字母的序號依次為 0~25,ci,mi,,ki 是分別是密文明文密鑰中第 i個字母的序號。(如下圖)加密過程:首先輸入明文如 information ,然后輸入密匙如 star,第一個字符的密文可以求得c1=(w+i)mod26=4,,此時對應(yīng)編號 4的字母為 E,則明文W對應(yīng)的密文為 E,依次類推,可以將所有明文加密得到密文: AGFFJFAKAHN;大全標(biāo)準(zhǔn)文案解密過程:首先輸入密文 esioqgm,然后輸入與密文字符數(shù)相等的密匙如 iloveyu ,將加密過程的原理反過來運(yùn)用,如第一個密文字符為 E,則對應(yīng)的編號為 4,然后求的明文為 W,依次類推,求得明文為: whutmis。大全標(biāo)準(zhǔn)文案第三部分 結(jié)果與討論(可加頁)實驗結(jié)果分析(包括數(shù)據(jù)處理、實驗現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)程序設(shè)計類實驗: 包括原程序、輸入數(shù)據(jù)、運(yùn)行結(jié)果、實驗過程發(fā)現(xiàn)的問題及解決方法等;分析與設(shè)計、軟件工程類實驗:編制分析與設(shè)計報告,要求用標(biāo)準(zhǔn)的繪圖工具繪制文檔中的圖表。系統(tǒng)實施部分要求記錄核心處理的方法、技巧或程序段;其它實驗:記錄實驗輸入數(shù)據(jù)、處理模型、輸出數(shù)據(jù)及結(jié)果分析運(yùn)行結(jié)果分析:在vc++6.0的編譯環(huán)境下,點擊運(yùn)行后出現(xiàn)加密算法選擇的界面:(1)凱撒密碼選擇1后回車,閱讀完介紹性文字后,再接著選擇 1進(jìn)行對輸入字符串進(jìn)行加密(例如輸入字符串"******'sbirthdayis" ,接著輸入密鑰 7):大全標(biāo)準(zhǔn)文案得到密文:govbephv(z!ipyaokhf!pz!此時我為了對一段字符串進(jìn)行凱撒解密"govbephv(z!ipyaokhf!pz!",同時輸入密鑰7,同樣會得到加密前的明文:(2)單表置換密碼按照提示,回車后又進(jìn)入加密算法選擇主界面,此時選擇 2. 單表置換密碼,加密下面一句話todayisapril1,2012,namelyAprilfool'sday :大全標(biāo)準(zhǔn)文案得到密文 pjuzvenzkmed1,2012,gzfxdvAkmedijjd'nuzv ,(沒有處理空格及標(biāo)點符號等特殊字符,但加密效果已有) 。為了證明對應(yīng)的解密是否正確,現(xiàn)進(jìn)行解密環(huán)節(jié),把剛才密文解密,從截圖中可以看到當(dāng)時加密使用的密鑰時zhouxiaoyeah解密后的字符串跟之前原明文完全一樣。(3)維吉利亞密碼維吉利亞密碼由于需要產(chǎn)生一個維吉利亞字母代換表,此處為了學(xué)習(xí)方便,在程序運(yùn)行過程中特意將該表也打印到了屏幕:輸入明文:guoqingjiekuaile ,密鑰:whutms(此例為課件上一例子)大全標(biāo)準(zhǔn)文案選擇解密過程,幫剛才的密文重新翻譯成明文:(4)輪換算法主要函數(shù)介紹大全標(biāo)準(zhǔn)文案凱撒密碼:voidkaisa_de();// 解密voidkaisa_en();// 加密void_kaisa(); 調(diào)用上面兩個子函數(shù)單表置換加密:voiddbzh_alphabeta();// 產(chǎn)生代換字符表voiddbzh_en();// 產(chǎn)生密文,即加密voiddbzh_de();// 產(chǎn)生明文,即解密void_danbiaozhihuan(); 被main()調(diào)用,運(yùn)行時根據(jù)選擇調(diào)用上面的三個函數(shù)維吉利亞密碼:voidwjly_en(); 維吉利亞加密函數(shù)voidwjly_de(); 解密函數(shù)int_weijiliya(); 調(diào)用加密解密函數(shù)輪換法加密:大全標(biāo)準(zhǔn)文案voidlunhuan_en();voidlunhuan_de();void_lunhuan();實驗中的問題1)各個加密函數(shù)之間的基本上完全獨(dú)立,內(nèi)部定義了太多的自己變量,從空間上看運(yùn)行起來占用空間較大。可以嘗試定義幾個全局變量,讓他們共用。如輸入的密文,密鑰,產(chǎn)生的明文等等。2)操作不夠人性化。由于時間的原因,沒有在程序的界面上話太多工夫,比如運(yùn)行完加密或者解密過程后,該轉(zhuǎn)到第一個主界面(四個加密算法的選擇界面)還是仍然留在當(dāng)前密碼方法的界面,退出時時直接退出控制臺程序還是退出到開始界面。此外,程序的容錯處理還不完善,一下非法輸入還不能很友好的處理。操縱的人性化四種加密算法源代碼:#include<iostream>#include<string>#include<ctype.h>#include<conio.h>#include<stdlib.h>usingnamespacestd;#defineMING_WEN1000//設(shè)明文長度最大為1000charmingwen[MING_WEN];//存放明文charmiwen[MING_WEN];//存放密文charmiyuejvzi[100];//密鑰句子charalphabeta[27];//代換字母表stringstr="abcdefghijklmnopqrstuvwxyz";voidkaisa_de();//解密voidkaisa_en();//加密void_kaisa();voiddbzh_alphabeta();//產(chǎn)生代換字符表voiddbzh_en();//產(chǎn)生密文voiddbzh_de();//產(chǎn)生密文void_danbiaozhihuan();voidwjly_en();voidwjly_de();voidCreate_miyuejvzi(char);int_weijiliya();voidlunhuan_en();voidlunhuan_de();void_lunhuan();大全標(biāo)準(zhǔn)文案voidmain(){intchoice;printf(" \n");// 起始輸出界面printf("-----------------------------------------\n");printf(" 信息管理與信息系統(tǒng) **班\n\n");printf(" ** 學(xué)號:0120903490**\n");while(1)/* 循環(huán)測試*/{printf("\n");printf("*****************************************\n");printf("\n");printf(" | 加密解密方法 \n");printf("\n");printf(" | 1 、凱撒密碼 \n");printf(" | 2 、單表置換 \n");printf(" | 3 、維吉利亞密碼 \n");printf(" | 4 、輪換法 \n");printf(" | 5 、退出 \n");printf("----------------------------------------\n");printf(" 請輸入1--5進(jìn)行選擇:");scanf("%d",&choice);while(choice>5||choice<=0)// 如果輸入數(shù)字不符要求,重新輸入,直至正確為止{printf("\n 請輸入選項前面的編號 :");scanf("%d",&choice);}switch(choice)// 調(diào)用不同的解密加密算法{case1:_kaisa();break;// 凱撒密碼case2:_danbiaozhihuan();break;// 單表置換密碼case3:_weijiliya();break;// 維吉利亞密碼case4:_lunhuan();break;// 輪換法case5:exit(0);// 退出程序}system("pause");/* 暫停*/system("cls"); /*清屏*/}}//凱撒密碼void_kaisa(){intchoice;大全標(biāo)準(zhǔn)文案do{system("CLS");printf("\n");printf("\t\t 凱撒加密\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");printf("____________________________________________________________________\n");printf("%15c",'');printf(" 注:---- 愷撒密碼按 c=(m+9)%%26加密----\n");printf("%19c",'');printf("---- 除字母其他字符均按 c=(m+1)%%26加密----\n");printf("%19c",'');printf("---- 當(dāng)其他其它字符 +1為字母時+26跳過字母加密 ----\n");printf("%19c",'');printf("---- 當(dāng)其他其它字符 +1超出 ASCII 碼表示范圍時 -128 循環(huán)表示----\n");scanf("%d",&choice);getchar();if(choice==1){kaisa_en();break;}elseif(choice==2){kaisa_de();break;}elseif(choice==3){printf("\n%33c",'');printf("3: 退出\n");exit(0);}else{printf(" 輸入錯誤,按任意鍵繼續(xù) :\n");getchar();system("cls");}}while(choice!=1||choice!=2);}凱撒加密voidkaisa_en()// 加密大全標(biāo)準(zhǔn)文案{intleng,i,miyue;charchc[MING_WEN],chp[MING_WEN];printf(" 請輸入你要加密的明文 :\n");printf("%28c",'');gets(chc);printf(" 請輸入密鑰(如數(shù)字9):");scanf("%d",&miyue);leng=strlen(chc);printf("%28c",'');printf(" 密文:\n");printf("%28c",'');for(i=0;i<leng;i++){if(isupper(chc[i])){if(chc[i]+miyue>'Z'){chp[i]=chc[i]+miyue-26;printf("%c",chp[i]);}else{chp[i]=chc[i]+miyue;printf("%c",chp[i]);}}elseif(islower(chc[i])){if(chc[i]+miyue>'z'){chp[i]=chc[i]+miyue-26;printf("%c",chp[i]);}else{chp[i]=chc[i]+miyue;printf("%c",chp[i]);}}else{chp[i]=chc[i]+1;if(chp[i]=='A'||chp[i]=='a')//遇到+1為字母時的處理chp[i]+=26;elseif(chp[i]>127)//遇到+1超出ASCII碼表示范圍時chp[i]=char(chp[i]-128);printf("%c",chp[i]);}大全標(biāo)準(zhǔn)文案}printf("\n");}//凱撒解密voidkaisa_de()// 解密{intleng,i,miyue;charchc[MING_WEN],chp[MING_WEN];printf(" 請輸入你要解密的密文 :\n");printf("%28c",'');gets(chc);printf(" 請輸入密鑰(如數(shù)字9):");scanf("%d",&miyue);leng=strlen(chc);printf("%28c",'');printf(" 明文:\n");printf("%28c",'');for(i=0;i<leng;i++){if(isupper(chc[i])){if(chc[i]-miyue<'A'){chp[i]=chc[i]-miyue+26;printf("%c",chp[i]);}else{chp[i]=chc[i]-miyue;printf("%c",chp[i]);}}elseif(islower(chc[i])){if(chc[i]-miyue<'a'){chp[i]=chc[i]-miyue+26;printf("%c",chp[i]);}else{chp[i]=chc[i]-miyue;printf("%c",chp[i]);}}else{chp[i]=chc[i]-1;大全標(biāo)準(zhǔn)文案if(chp[i]=='Z'||chp[i]=='z')// 遇到-1為字母時的處理chp[i]-=26;elseif(chp<0)// 遇到-1超出ASCII碼表示范圍時chp[i]=char(chp[i]+128);printf("%c",chp[i]);}}printf("\n");}///// 單表置換加密void_danbiaozhihuan(){system("CLS");intchoice;printf("\n");printf("\t\t 單表置換加密\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");scanf("%d",&choice);if(choice==1){printf("請輸入你想加密的字符串(請不要超出%d個字符,不能輸入中文):",MING_WEN);getchar();gets(mingwen);printf(" 你輸入的明文是 :%s\n",mingwen);intmingwen_length=strlen(mingwen);// 明文長度dbzh_alphabeta();// 產(chǎn)生代換字符表dbzh_en();// 加密}if(choice==2){printf(" 請輸入你想解密的字符串 :");getchar();gets(miwen);printf(" 你輸入的密文是 :%s\n",miwen);intmiwen_length=strlen(miwen);// 密文長度dbzh_alphabeta();// 產(chǎn)生代換字符表dbzh_de();}}單表置換產(chǎn)生代換字符表voiddbzh_alphabeta(){inti,j;大全標(biāo)準(zhǔn)文案printf("請輸入密鑰句子,至少為1個字符,最多100個字符,且第一個字符必須是小寫字母:\n");gets(miyuejvzi);// 輸入的密鑰句子,至少為 1個字符,最多 100個字符,且第一個必須為字母printf("%s",miyuejvzi);intlength=strlen(miyuejvzi);intpos=0;// 指示填充位置inttag=1;//alphabeta[0]=miyuejvzi[0];// 填充第0個位置for(i=1;i<length;i++){if(isalpha(miyuejvzi[i])!=0)// 是字母{tag=1;for(j=0;j<=pos;j++){if(alphabeta[j]==miyuejvzi[i])//alphabet 表中已經(jīng)存在字母miyuejvzi[i]{tag=0;break;}}if(tag==1)alphabeta[++pos]=miyuejvzi[i];}}for(i=0;i<26;i++)// 把英文字母表中還沒有出現(xiàn)在代換字母表中的字母存入代換字母表{tag=1;for(j=0;j<=pos;j++){if(alphabeta[j]==str[i])//alphabet 表中已經(jīng)存在英文字母表中的第 i個字母{tag=0;break;}}if(tag==1)alphabeta[++pos]=str[i];}cout<<" 原始字母表為 "<<str<<endl;大全標(biāo)準(zhǔn)文案cout<<" 代換密碼表為 "<<alphabeta<<endl;}單表置換加密voiddbzh_en()// 產(chǎn)生密文{對明文中的每一個字母加密計算出該字母在字母表中的序號,a序號為0,b序號為1...,依次類推//alphabeta[0]是序號為0的字母a的密文,alphabeta[1]是序號為1的字母的密文...,依次類推intpos;for(inti=strlen(mingwen);i>=0;i--){if(islower(mingwen[i]))// 假如當(dāng)前字符是小寫字母{pos=mingwen[i]-'a';// 計算出當(dāng)前字母在字母表中的序號miwen[i]=alphabeta[pos];}else// 不是字母,原樣復(fù)制miwen[i]=mingwen[i];}printf(" 明文為:%s\n",mingwen);printf(" 密文為:%s\n",miwen);}//單表置換解密(產(chǎn)生明文)voiddbzh_de(){for(inti=strlen(miwen);i>=0;i--){if(islower(miwen[i]))// 假如當(dāng)前字符是小寫字母{for(intj=0;j<26;j++){if(miwen[i]==alphabeta[j])// 當(dāng)前密文字符 ,在代換字符表的第 j個位置 ,在其明文字符為 str[j];{mingwen[i]=str[j];break;}}}else// 不是字母,原樣復(fù)制mingwen[i]=miwen[i];}printf(" 密文為:%s\n",miwen);printf(" 明文為:%s\n",mingwen);}大全標(biāo)準(zhǔn)文案////// 維吉尼亞加密int_weijiliya(){system("CLS");inti,j;char*alphabet="abcdefghijklmnopqrstuvwxyz";charvtable[26][26];printf("vigeneretable\n");printf("\t%s\n",alphabet);for(i=0;i<26;i++){printf("\n %c ",*alphabet);//for(j=0;j<26;j++){if(*alphabet+j<=122){vtable[i][j]=*alphabet+j-32;printf("%c",vtable[i][j]);}else{vtable[i][j]=*alphabet+j-58;printf("%c",vtable[i][j]);}}*alphabet++;printf("\n");}intchoice;printf("\n");printf("\t\tvigenere 密碼(本算法規(guī)定:明文為小寫字母,密文為大寫字母)\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");scanf("%d",&choice);switch(choice){case1:printf(" 請輸入明文(小寫字母) :");getchar();gets(mingwen);printf(" 請輸入密鑰:");gets(miyuejvzi);wjly_en(); //加密break;case2:printf(" 請輸入密文(大寫字母) :");getchar();gets(miwen);printf(" 請輸入密鑰:");gets(miyuejvzi);wjly_de(); //解密break;case3:break;}大全標(biāo)準(zhǔn)文案return0;}維吉利亞加密voidwjly_en(){unsignedintmiyuejvzi_length,mingwen_length,i,j,d,mod;miyuejvzi_length=strlen(miyuejvzi);mingwen_length=strlen(mingwen);d=mingwen_length/miyuejvzi_length;//d 為明文長度除密鑰長度后去整mod=mingwen_length%miyuejvzi_length;//mod 為取余if(d>0){for(i=1;i<d;i++){for(j=0;j<miyuejvzi_length;j++)miyuejvzi[i*miyuejvzi_length+j]=miyuejvzi[j];}for(i=0;i<mod;i++){miyuejvzi[d*miyuejvzi_length+i]=miyuejvzi[i];}for(i=0;i<strlen(miyuejvzi);i++){if(mingwen[i]+miyuejvzi[i]-'a'>122)miwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32-26;elsemiwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32;}}else{for(i=0;i<miyuejvzi_length;i++){if(mingwen[i]+miyuejvzi[i]-'a'>122)miwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32-26;elsemiwen[i]=mingwen[i]+miyuejvzi[i]-'a'-32;}}printf(" 明文是:%s\n",mingwen);printf(" 密鑰是:%s\n",miyuejvzi);printf(" 密文是:%s\n",miwen);}維吉利亞解密voidwjly_de(){unsignedintmiyuejvzi_length,miwen_length,i,j,d,mod;miyuejvzi_length=strlen(miyuejvzi);miwen_length=strlen(miwen);d=miwen_length/miyuejvzi_length;//d 為密文長度除密鑰長度后去整mod=miwen_length%miyuejvzi_length;//mod 為取余大全標(biāo)準(zhǔn)文案if(d>0){for(i=1;i<d;i++){for(j=0;j<miyuejvzi_length;j++)miyuejvzi[i*miyuejvzi_length+j]=miyuejvzi[j];}for(i=0;i<mod;i++){miyuejvzi[d*miyuejvzi_length+i]=miyuejvzi[i];}for(i=0;i<strlen(miyuejvzi);i++){if(miwen[i]+32-miyuejvzi[i]>=0)mingwen[i]=miwen[i]-miyuejvzi[i]+32+'a';elsemingwen[i]=miwen[i]-miyuejvzi[i]+32+'a'+26;}}else{for(i=0;i<miyuejvzi_length;i++){if(miwen[i]+32-miyuejvzi[i]>=0)mingwen[i]=miwen[i]-miyuejvzi[i]+32+'a';elsemingwen[i]=miwen[i]-miyuejvzi[i]+32+'a'+26;}}printf(" 密文是:%s\n",miwen);printf(" 密鑰是:%s\n",miyuejvzi);printf(" 明文是:%s\n",mingwen);}轉(zhuǎn)換加密voidlunhuan_en(){charData[50];charShade[50];// 存取密文intdlg,i,j,m,cnt,k;for(i=0;i<50;i++){Data[i]='\0';}printf(" 請輸入明文!\n");fflush(stdin);gets(Data);dlg=strlen(Data);for(i=0;i<dlg;i++){if(Data[i]==''){for(k=i+1;k<dlg;k++){大全標(biāo)準(zhǔn)文案Data[k-1]=Data[k];}dlg--;i--;}elseif((Data[i]<'A'||Data[i]>'Z')&&(Data[i]<'a'||Data[i]>'z')){printf(" 你輸入的明文不正確 !\n");break;}elseif(Data[i]>='A'&&Data[i]<='Z'){Data[i]+=32;}}printf("\n 明文是:");puts(Data);cnt=(dlg-1)/5+1;for(i=dlg;i<cnt*5;i++){Data[i]='\0';}m=0;for(i=0;i<5;i++){for(j=0;j<cnt;j++){if(Data[i+5*j]=='\0'){m--;}else{Shade[m]=Data[i+5*j];}m++;}}Shade[dlg]='\0';printf("\n 密文是:");puts(Shade);printf("\n");}////// 輪換解密voidlunhuan_de(){大全標(biāo)準(zhǔn)文案inti,j,slg,m,cnt,k=0;charshade[50];charshow[50];for(i=0;i<50;i++){shade[i]='\0';}printf("\n 請輸入密文!\n");fflush(stdin);gets(shade);slg=strlen(shade);for(i=0;i<slg;i++){if(shade[i]==''){printf("\n 本系統(tǒng)譯文不支持空格 !請重新輸入!");}elseif((shade[i]<'A'||shade[i]>'Z')&&(shade[i]<'a'||shade[i]>'z')){printf("\n 你輸入的密文不正確 !\n");}elseif(shade[i]>='A'&&shade[i]<='Z'){shade[i]+=32;}}printf("\n 輸入的密文是:");puts(shade);cnt=(slg-1)/5+1;for(i=slg;i<5*cnt;i++){shade[i]='\0';}m=0;if(slg%5==1){for(i=0;i<cnt;i++){show[i*5]=shade[k];k++;m=k-1;}for(j=1;j<5;j++){for(i=0;i<cnt-1;i++){show[i*5+j]=shade[m+1];大全標(biāo)準(zhǔn)文案m++;}}m=0;k=0;}elseif(slg%5==2){for(j=0;j<2;j++){for(i=0;i<cnt;i++){show[i*5+j]=shade[k];k++;m=k-1;}}for(j=2;j<5;j++){for(i=0;i<cnt-1;i++){show[i*5+j]=shade[m+1];m++;}}}else{for(i=0;i<cnt;i++){for(j=0;j<5;j++){if(shade[j*cnt+i]=='\0'){}else{show[m]=shade[j*cnt+i];m++;}}}}show[slg]='\0';printf("\n 明文是:");puts(show);printf("\n");}void_lunhuan()// 只實現(xiàn)先行后列的方法大全標(biāo)準(zhǔn)文案{intchoice;system("CLS");printf("\n");printf("\t\t 輪換加密\n\t\t\t 請選擇操作:\n");printf("\t\t\t1. 加密\n\t\t\t2. 解密\n\t\t\t3. 退出\n");fflush(stdin);scanf("%d",&choice);switch(choice){case1:case'a':lunhuan_en();break;case2:lunhuan_de();break;default:break;}}---------------------------------------------------------------------------------------------------------------------------實驗報告評語及成績(請按優(yōu),良,中,及格,不及格五級評定)成績:教師簽字:大全標(biāo)準(zhǔn)文案實驗項目名稱進(jìn)程管理實驗實驗成績實驗者**專業(yè)班級**組別同組者無實驗日期2012年03月15日第一部分:實驗預(yù)習(xí)報告1、實驗?zāi)康摹⒁饬x用高級語言編寫和調(diào)試一個進(jìn)程調(diào)度程序,以加深對進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。2、實驗基本原理與方法進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來先服務(wù)算法。每個進(jìn)程有一個進(jìn)程控制塊( PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、到達(dá)時間、需要運(yùn)行時間、已用 CPU時間、進(jìn)程狀態(tài)等等。進(jìn)程的優(yōu)先數(shù)及需要的運(yùn)行時間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生) 。進(jìn)程的到達(dá)時間為進(jìn)程輸入的時間。每個進(jìn)程的狀態(tài)可以是就緒 W(Wait)、運(yùn)行 R(Run)、或完成 F(Finish)三種狀態(tài)之一就緒進(jìn)程獲得 CPU后都只能運(yùn)行一個時間片。用已占用 CPU時間加1來表示。進(jìn)程的運(yùn)行時間以時間片為單位進(jìn)行計算。如果運(yùn)行一個時間片后,進(jìn)程的已占用 CPU時間已達(dá)到所需要的運(yùn)行時間,則撤消該進(jìn)程,如果運(yùn)行一個時間片后進(jìn)程的已占用 CPU時間還未達(dá)所需要的運(yùn)行時間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減 1(即降低一級),然后把它插入就緒隊列等待 CPU。每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊列、以及各個進(jìn)程的 PCB,以便進(jìn)行檢查。重復(fù)以上過程,直到所要進(jìn)程都完成為止。3、主要儀器設(shè)備及耗材實驗室提供計算機(jī)和上網(wǎng)條件, C語言上機(jī)環(huán)境。4、實驗方案與技術(shù)路線(綜合性、設(shè)計性實驗)大全標(biāo)準(zhǔn)文案第二部分:實驗過程記錄實驗原始記錄(包括實驗數(shù)據(jù)記錄,實驗現(xiàn)象記錄,實驗過程發(fā)現(xiàn)的問題等)原理分析(1) 假定系統(tǒng)有五個進(jìn)程,每一個進(jìn)程用一個進(jìn)程控制塊 PCB來代表,進(jìn)程控制塊的格式為:進(jìn)程名指針要求運(yùn)行時間優(yōu)先數(shù)狀態(tài)其中,進(jìn)程名——作為進(jìn)程的標(biāo)識,假設(shè)五個進(jìn)程的進(jìn)程名分別為 P1,P2,P3,P4,P5。指針——按優(yōu)先數(shù)的大小把五個進(jìn)程連成隊列,用指針指出下一個進(jìn)程的進(jìn)程控制塊的首地址,最后一個進(jìn)程中的指針為“0”。要求運(yùn)行時間——假設(shè)進(jìn)程需要運(yùn)行的單位時間數(shù)。優(yōu)先數(shù)——賦予進(jìn)程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進(jìn)程先執(zhí)行。狀態(tài)——可假設(shè)有兩種狀態(tài), “就緒”狀態(tài)和“結(jié)束”狀態(tài)。五個進(jìn)程的初始狀態(tài)都為“就緒”,用“R”表示,當(dāng)一個進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“結(jié)束” ,用“E”表示。在每次運(yùn)行你所設(shè)計的處理器調(diào)度程序之前,為每個進(jìn)程任意確定它的“優(yōu)先數(shù)”和“要求運(yùn)行時間”。為了調(diào)度方便,把五個進(jìn)程按給定的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進(jìn)程,用指針指出隊列的連接情況。例:隊首標(biāo)志K2KPK2PK3PK4PK5P1123450KKKK45312312415342RRRRRPCB1PCB2PCB3PCB4PCB5處理器調(diào)度總是選隊首進(jìn)程運(yùn)行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進(jìn)程每運(yùn)行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進(jìn)程并不實際的啟動運(yùn)行,而是執(zhí)行:優(yōu)先數(shù)-1要求運(yùn)行時間-1來模擬進(jìn)程的一次運(yùn)行。提醒注意的是:在實際的系統(tǒng)中,當(dāng)一個進(jìn)程被選中運(yùn)行時,必須恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運(yùn)行,直到出現(xiàn)等待事件或運(yùn)行結(jié)束。在這里省去了這些工作。(5) 進(jìn)程運(yùn)行一次后,若要求運(yùn)行時間 0,則再將它加入隊列(按優(yōu)先數(shù)大小插入,且置大全標(biāo)準(zhǔn)文案隊首標(biāo)志);若要求運(yùn)行時間 =0,則把它的狀態(tài)修改成“結(jié)束” (E),且退出隊列。(6) 若“就緒”狀態(tài)的進(jìn)程隊列不為空,則重復(fù)上面( 4)和(5)的步驟,直到所有進(jìn)程都成為“結(jié)束”狀態(tài)。在所設(shè)計的程序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進(jìn)程的進(jìn)程名以及運(yùn)行一次后進(jìn)程隊列的變化。為五個進(jìn)程任意確定一組“優(yōu)先數(shù)”和“要求運(yùn)行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或打印逐次被選中進(jìn)程的進(jìn)程名以及進(jìn)程控制塊的動態(tài)變化過程。主要模塊(1) 數(shù)據(jù)結(jié)構(gòu)設(shè)計定義進(jìn)程控制塊:structpcb{charname[10];// 進(jìn)程名charstate;// 進(jìn)程狀態(tài)intsuper;// 它的前一個運(yùn)行的進(jìn)程intntime;// 進(jìn)程運(yùn)行完成所需時間intrtime;// 當(dāng)前進(jìn)程已運(yùn)行的時間structpcb*link;// 下一個要執(zhí)行的進(jìn)程};功能函數(shù)(忽略返回值及參數(shù))Input() : 用于建立進(jìn)程控制塊。主要通過輸入各進(jìn)程信息,然后根據(jù) sort() 進(jìn)行優(yōu)先級排序。Sort(): 進(jìn)程優(yōu)先級排序函數(shù)。通過建立鏈表來將各進(jìn)程按照優(yōu)先級高到低排好序。Running(): 進(jìn)程運(yùn)行時間到 ,置就緒狀態(tài)(不考慮資源) 。Check(): 進(jìn)程查看函數(shù)。用于查看當(dāng)前運(yùn)行的進(jìn)程和就緒隊列中的進(jìn)程。Disp(): 專門用于顯示當(dāng)前進(jìn)程。由 check()調(diào)用。大全標(biāo)準(zhǔn)文案第三部分 結(jié)果與討論(可加頁)實驗結(jié)果分析(包括數(shù)據(jù)處理、實驗現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)程序設(shè)計類實驗: 包括源程序、輸入數(shù)據(jù)、運(yùn)行結(jié)果、實驗過程發(fā)現(xiàn)的問題及解決方法等;分析與設(shè)計、軟件工程類實驗:編制分析與設(shè)計報告,要求用標(biāo)準(zhǔn)的繪圖工具繪制文檔中的圖表。系統(tǒng)實施部分要求記錄核心處理的方法、技巧或程序段;其它實驗:記錄實驗輸入數(shù)據(jù)、處理模型、輸出數(shù)據(jù)及結(jié)果分析1.輸入與輸出(1)在模擬一開始需要數(shù)據(jù)進(jìn)程的個數(shù),然后依次輸入進(jìn)程名,它的優(yōu)先級別(整數(shù)) ,數(shù)據(jù)這一次錄入后,以后就不需要輸入,只需回車不斷查看“進(jìn)程”執(zhí)行的情況。以后回車每次輸出當(dāng)前正在“運(yùn)行”的“進(jìn)程”和就緒隊列中的情況,包括進(jìn)程名、狀態(tài)、優(yōu)先級別、總共所需實際和已經(jīng)運(yùn)行多久。2.運(yùn)行結(jié)果截圖及分析大全標(biāo)準(zhǔn)文案某一錄入的數(shù)據(jù):進(jìn)程0進(jìn)程1進(jìn)程2進(jìn)程3進(jìn)程4進(jìn)程名Pcb1Pcb2Pcb3Pcb4Pcb5優(yōu)先級別23124運(yùn)行時間15342狀態(tài)RRRRR第一次執(zhí)行時,由于 pcb5的優(yōu)先級是 4,為最高,故先它先執(zhí)行。如下圖:回車,執(zhí)行第二次。由于pcb5還未完成,故優(yōu)先級降1,與pcb2同級,然后pcb2要早于pcb5到達(dá),所以當(dāng)前運(yùn)行的時pcb2,pcb5進(jìn)入就緒隊列:大全標(biāo)準(zhǔn)文案同理,到了第三次,pcb2還需要運(yùn)行5-1=4個單位時間,優(yōu)先級降1,pcb5重新又獲得占用“CPU”,一個單位時間后,pcb5正好運(yùn)行完成:以后的執(zhí)行情況同理,剩下的進(jìn)程中又三個處于 2級,但 pcb1最先到達(dá),所以第四次執(zhí)行進(jìn)程pcb1(運(yùn)行1次即可完成):經(jīng)過實際運(yùn)行發(fā)現(xiàn),總夠 15次后,pcb2最后一個運(yùn)行完成:大全標(biāo)準(zhǔn)文案3.源程序及注釋#include<stdio.h>#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0structpcb{/* 定義進(jìn)程控制塊 PCB*/charname[10];// 進(jìn)程名charstate;// 進(jìn)程狀態(tài)intsuper;// 它的前一個運(yùn)行的進(jìn)程intntime;intrtime;structpcb*link;}*ready=NULL,*p;typedefstructpcbPCB;voidsort()/* 建立對進(jìn)程進(jìn)行優(yōu)先級排列函數(shù) */{PCB*first,*second;intinsert=0;if((ready==NULL)||((p->super)>(ready->super)))/* 優(yōu)先級最大者 ,插入隊首*/{p->link=ready;ready=p;}else/* 進(jìn)程比較優(yōu)先級 ,插入適當(dāng)?shù)奈恢弥?*/{first=ready;second=first->link;while(second!=NULL){if((p->super)>(second->super))/* 若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大,*/
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理干預(yù)對角化不全心理康復(fù)-洞察分析
- 2024年地鐵站內(nèi)餐飲業(yè)商鋪租賃服務(wù)合同范本3篇
- 采訪企業(yè)管理者
- 2024年度新能源汽車電池回收利用合作協(xié)議書范本3篇
- 行程編碼技術(shù)創(chuàng)新-洞察分析
- 舞蹈編導(dǎo)創(chuàng)新實踐-洞察分析
- 藥物釋放系統(tǒng)-洞察分析
- 遠(yuǎn)程醫(yī)療服務(wù)-洞察分析
- 2024年徐匯汽車吊車租賃項目合作協(xié)議范本6篇
- 采購合同買賣合同的培訓(xùn)成果展示會3篇
- 扁平化春暖花開教育環(huán)保春天主題模板課件
- 吊車安全技術(shù)交底
- 《讓學(xué)生看見你愛》心得體會
- Windows-Server-2012網(wǎng)絡(luò)服務(wù)架構(gòu)課件(完整版)
- GB∕T 9286-2021 色漆和清漆 劃格試驗
- 環(huán)境監(jiān)測所需各類原始記錄填寫格式模板參考模板范本
- 01土地復(fù)墾適宜性評價案例
- 天津城建樁基礎(chǔ)課程設(shè)計
- 備件的ABC分類管理規(guī)定法
- 2019年11月浙江省高中化學(xué)學(xué)考選考試題與答案
- 英文期刊投稿流程詳解(課堂PPT)
評論
0/150
提交評論