C語言程序設計實驗報告_第1頁
C語言程序設計實驗報告_第2頁
C語言程序設計實驗報告_第3頁
C語言程序設計實驗報告_第4頁
C語言程序設計實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGE7-C程序訓練報告題目:C語言程序設計綜合訓練院系:計算機學院專業(yè)班級:信息安全11-x班學號:201x302xxx學生姓名:xxx指導教師:xxx201x年x月x日安徽理工大學程序訓練任務書計算機學院院系信息安全教研室學號201x302xxx學生姓名xxx專業(yè)(班級)信息安全(11-x)班設計題目(1)雞兔同籠;(2)日歷問題;(3)身份證校驗設計技術參數(shù)(1)用C語言實現(xiàn)設計任務;(2)所設計的程序可讀性好,執(zhí)行效率高;(3)有良好的操作界面;(4)設計說明書能很好地反映設計內容設計要求(1)問題分析及解決方案框架確定(2)詳細設計和編碼(3)上機前編寫程序與檢查(4)上機調試程序(5)完成課程設計報告工作量要求設計說明書的字數(shù)在3000字以上。工作計劃2011.11.10-11.20根據(jù)課程設計大綱的要求,查找相關資料,完成需求分析;2011.11.21-12.30進行系統(tǒng)的概要設計;2011.12.01-12.10進行系統(tǒng)的詳細設計和源代碼的書寫;2011.12.11-12.25對系統(tǒng)進行調試分析,寫出程序訓練報告。參考資料[1]何欽銘.C語言程序設計.北京:高等教育出版社,2008[2]顏暉.C語言程序設計實驗指導.北京:高等教育出版社,2008[3]譚浩強編著.C程序設計(第二版).北京:清華大學出版社,1999指導教師簽字教研室主任簽字201x年x月x日目錄1雞兔同籠 -1-1.1設計內容 -1-1.2解題思路 -1-1.3調試過程 -1-1.4程序清單 -2-1.5測試數(shù)據(jù) -2-1.6小結 -3-2日歷問題 -3-2.1設計內容 -3-2.2解題思路 -4-2.3調試過程 -4-2.4程序清單 -4-2.5測試數(shù)據(jù) -5-2.6小結 -5-3身份證校驗 -5-3.1設計內容 -5-3.2解題思路 -6-3.3調試過程 -6-3.4程序清單 -6-3.5測試數(shù)據(jù) -7-3.6小結 -7-1雞兔同籠1.1設計內容問題描述一個籠子里面關了雞和兔子(雞有2只腳,兔子有4只腳,沒有例外)。已經(jīng)知道了籠子里面腳的總數(shù)a,問籠子里面至少有多少只動物,至多有多少只動物。輸入數(shù)據(jù)第1行是測試數(shù)據(jù)的組數(shù)n,后面跟著n行輸入。每組測試數(shù)據(jù)占1行,包括一個正整數(shù)a(a<32768)。輸出要求n行,每行輸出對應一個輸入。輸出是兩個正整數(shù),第一個是最少的動物數(shù),第二個是最多的動物數(shù),兩個正整數(shù)用空格分開。如果沒有滿足要求的情況出現(xiàn),則輸出2個0。輸入樣例2320輸出樣例005101.2解題思路這個問題可以描述成任給一個整型數(shù)組,其中包含n(<10)個數(shù)N,如果N是奇數(shù),輸出00,否則如果N是4的倍數(shù),輸出N/4N/2,如果N不是4的倍數(shù),輸出(N+2)/4N/2。這是一個一般的計算題,只要實現(xiàn)相應的循環(huán)及判斷和輸出代碼就可以了。題目中說明了輸入整數(shù)在一個比較小的范圍內,所以只需要考慮整數(shù)運算就可以了。1.3調試過程(1)因對問題分析不清楚,給出了錯誤的計算公式;(2)由于沒有很好的準備,造成循環(huán)條件錯誤一直沒有結果輸出;(3)輸入程序時容易丟標點符號,如在每行末尾缺少分號。1.4程序清單#include<stdio.h>intmain(void){ inti,n,max,min; inta[10]; printf("Entern(<10):"); scanf("%d",&n); printf("Enter%dintegers:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++){ if((a[i]%2!=0)&&(a[i]%4!=0)){ min=0; max=0; printf("%d%6d%6d\n",a[i],min,max);} else if((a[i]%2==0)&&(a[i]%4==0)){ min=a[i]/4; max=a[i]/2; printf("%d%6d%6d\n",a[i],min,max);} else{ min=(a[i]+2)/4; max=a[i]/2;printf("%d%6d%6d\n",a[i],min,max);} } return0;}1.5測試數(shù)據(jù)1.6小結通過該計算類的程序設計,使我掌握了C語言中數(shù)組的定義及運用,同時又掌握了循環(huán)條件的編寫,能從自然語言描述中抽象出一個計算問題,繼而能通過程序實現(xiàn),并將計算結果還原成對原問題的解答。2日歷問題2.1設計內容問題描述在我們現(xiàn)在使用的日歷中,閏年被定義為能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它們不是閏年。例如:1700,1800,1900和2100不是閏年,而1600,2000和2400是閏年。給定從公元2000年1月1日開始逝去的天數(shù),你的任務是給出這一天是哪年哪月哪日星期幾。輸入數(shù)據(jù)輸入包含若干行,每行包含一個正整數(shù),表示從2000年1月1日輸出要求對每個測試樣例,輸出一行,該行包含對應的日期和星期幾。格式為“YYYY-MM-DDDayOfWeek”,其中“DayOfWeek”必須是下面中的一個:"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"and"Saturday“。輸入樣例1730174017501751-1輸出樣例2004-09-26Sunday2004-10-06Wednesday2004-10-16Saturday2004-10-17Sunday2.2解題思路對于這個問題我們首先要想辦法解決如何實現(xiàn)天數(shù)減少,如1740天,怎樣才能是這個天數(shù)減少到在一年之內及小于365天,再要想的問題是在調用函數(shù)時怎樣實現(xiàn)多個值返回給主函數(shù),解決這兩個問題我們可運用指針來實現(xiàn),因為指針的運用在C語言中是很靈活的。而對于輸出星期幾,我們可以用switch()函數(shù)與字符函數(shù)strcpy()結合。想到這些我們就可以解決日歷問題了。2.3調試過程(1)在包含命令中忘記了“#include<string.h>”,而使調用函數(shù)“strcpy()”出現(xiàn)錯誤;(2)由于對指針的掌握不夠,造成指針定義混亂不能正常使用;(3由于沒有掌握指針,不能反回多個只給主函數(shù));(4)在“switch()”中沒有“default”,而出現(xiàn)錯誤結果。2.4程序清單#include<stdio.h>#include<string.h>intmain(void){inti,n,day,month,year,passday,choice;inta[10]; charsa[10]; voidYear_of_Day(intpassday,int*pyear,int*pmonth,int*pday); printf("Entern(<10):"); scanf("%d",&n); printf("Enter%dpassdays:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++){ passday=a[i]-1;Year_of_Day(passday,&year,&month,&day); choice=passday%7; switch(choice){ case0:strcpy(sa,"Sunday");break; case1:strcpy(sa,"Monday");break; case2:strcpy(sa,"Tuesday");break; case3:strcpy(sa,"Wednesday");break; case4:strcpy(sa,"Thursday");break; case5:strcpy(sa,"Friday");break; default:strcpy(sa,"Saturday");break;} printf("%d_%d_%d_%s\n",year,month,day,sa);} return0;}voidYear_of_Day(intpassday,int*pyear,int*pmonth,int*pday){ intj=0,k,leap; inttab[2][13]={ {0,31,29,31,30,31,30,31,31,30,31,30,31}, {0,31,28,31,30,31,30,31,31,30,31,30,31}}; leap=(j%4==0); k=1; while(passday>tab[leap][k]){ passday=passday-tab[leap][k]; k++; if(k>12){ k=1;j++;} } *pyear=2000+j; *pmonth=k; *pday=passday;}2.5測試數(shù)據(jù)2.6小結通過編程解決這個問題,我掌握了一些基本函數(shù)的定義及運用,如“switch()”和“strcpy()”。解決該問題運用了指針,是我對指針有了更深的了解。在思考解決這個問題時我學會了怎樣把一個復雜問題分成若干小問題使其簡單化,結構化。3身份證校驗3.1設計內容題目描述我國國標〖GB11643-1999〗中規(guī)定:公民身份號碼是18位特征組合碼,由十七位數(shù)字本體碼和一位數(shù)字校驗碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗碼。其校驗碼(最后一位)計算方法和步驟為:(1)十七位數(shù)字本體碼加權求和公式S=Sum(Ai*Wi),i=0,...,16,先對前17位數(shù)字的權求和其中Ai:表示第i位置上的身份證號碼數(shù)字值Wi:表示第i位置上的加權因子,前17位加權因子從左到右分別為Wi:7910584216379105842(2)計算模Y=mod(S,11)(3)通過模Y查下表得到對應的校驗碼Y012345678910校驗碼10X98765432例如:某身份證前17位為11010519491231002i1234567891011121314151617wi791058421637910584211010519491231002積7905020292427718305004得到和為:167;則模為y=167%11=2查(3)得校驗碼為x請按上面所述步驟編程,輸入一個二代身份證號,檢查該身份證是否正確。3.2解題思路看到這個問題,首先我們應該想到如何將表格轉化成計算機可讀的C語言及如何接受輸入的身份證號,解決該兩個問題我們可以定義數(shù)組來解決。而對于解決校驗碼的檢驗我們可以用“switch()”來解決。3.3調試過程(1)定義數(shù)組“W”時,由于沒有弄清其中元素的個數(shù)而造成無正確結果輸出;(2)定義數(shù)組“A”時,錯將其定義為整型而不能接受校驗碼為“X”的身份證號;(3)在對前17位數(shù)字的權求和時,沒有將字符數(shù)組“A”中的元素轉化成數(shù)值型,造成無正確結果輸出;3.4程序清單#include<stdio.h>intmain(void){ inti,j,sum,Y,W[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; charX,M,A[17]; sum=0; j=0; printf("Inputthenumberofpeople:"); for(i=0;i<18;i++) scanf("%c",&A[i]); for(i=0;i<17;i++,j++) sum=sum+(A[i]-'0')*W[j]; Y=sum%11; switch(Y){ case0:M='1';break; case1:M='0';break; case2:M='X';break; case3:M='9';break; case

溫馨提示

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

評論

0/150

提交評論