C語(yǔ)言程序設(shè)計(jì)實(shí)踐實(shí)驗(yàn)題目_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)踐實(shí)驗(yàn)題目_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)踐實(shí)驗(yàn)題目_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)踐實(shí)驗(yàn)題目_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)踐實(shí)驗(yàn)題目_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、綏化學(xué)院程序設(shè)計(jì)實(shí)踐實(shí)驗(yàn)報(bào)告范例 參考實(shí)驗(yàn)題目:循環(huán)結(jié)構(gòu)程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康模?.熟悉vc+6.0的運(yùn)行環(huán)境,掌握c程序的執(zhí)行方法;2.掌握三種基本數(shù)據(jù)類(lèi)型、部分運(yùn)算符號(hào)和常用函數(shù);3.掌握三種循環(huán)控制語(yǔ)句及break和continue語(yǔ)句的使用方法;4.掌握循環(huán)結(jié)構(gòu)的嵌套及正確控制計(jì)數(shù)型循環(huán)結(jié)構(gòu)次數(shù)的方法。實(shí)驗(yàn)內(nèi)容:程序1:搬磚問(wèn)題:36塊磚,36人搬,男搬4,女搬3,兩個(gè)小孩抬1磚,要求一次搬完,問(wèn)男、女和小孩各若干?#include “stdio.h”main() int men,women,children; men=0; while(men=8) women=0; while(women

2、=11) children=36-men-women; if(men*4+women*3+children/2= =36)&children%2= =0) printf(“men=%d,women=%d,children=%dn”,men,women,children); women+; men+; 程序2 打印形狀為直角三角形的乘法口訣。#include stdio.h main() int i,j,result; for (i=1;i10;i+) for(j=1;ji;j+) result=i*j; printf(%d*%d=%-3d,i,j,result);/*-3d表示左對(duì)齊,占3位*

3、/ printf(n);/*每一行后換行*/ 程序3 求1000以?xún)?nèi)的所有素?cái)?shù)。#include “stdio.h”main( ) int m,i;for(m=2;m=100;m+) for(i=2;im-1) printf(%5d,m); 程序4:計(jì)算和統(tǒng)計(jì)旅客運(yùn)費(fèi)程序 。由鍵盤(pán)輸入旅客行李重量(w),按公式 :若( w50kg)f=1.5*50 + 2.8*(w-50) ( w50kg ) 計(jì)算運(yùn)費(fèi),要求: (1)打印每位旅客的順序號(hào),行李重量,應(yīng)付運(yùn)費(fèi) ; (2)假定每天最多辦理100人的行李托運(yùn)手續(xù)或當(dāng)w0時(shí)循環(huán)結(jié)束, 下班時(shí)打印出全天的運(yùn)費(fèi)總收入和辦理的總?cè)藬?shù)。方法一(while結(jié)構(gòu)

4、) #include “stdio.h”main( ) int num=0; float w,f,total=0; scanf(%f ,&w); while (w0&num100 ) if (w=50) f=1.5*w; else f=1.5*50+2.8*(w-50); num+; printf ( %d,%6.0f,%8.2fn,num,w,f); total+=f; scanf (%f,&w); printf (customers=%d totalincome=%10.2fn,num,total);方法二(do-while結(jié)構(gòu))#include “stdio.h”main( ) int

5、num=0; float w,f,total=0; do scanf(%f ,&w); if (w=0) break; if (w=50) f=1.5*w; else f=1.5*50+2.8*(w-50); num+; printf ( %d %6.0f %8.2fn,num,w,f); total+=f; while (num0&num=100;num+) if (w=50) f=1.5*w; else f=1.5*50+2.8*(w-50); printf ( %d %6.0f %8.2fn,num,w,f); total+=f; scanf(%f,&w); printf (custom

6、ers=%d totalincome=%10.2fn,num,total); 實(shí) 驗(yàn) 二:數(shù)組實(shí)驗(yàn)?zāi)康模?.更加靈活的使用一維數(shù)組和二維數(shù)組 2.把數(shù)組和指針結(jié)合使用實(shí)驗(yàn)內(nèi)容:1.約瑟夫環(huán)問(wèn)題由n個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。從第一個(gè)人開(kāi)始,從1開(kāi)始報(bào)數(shù),報(bào)到3的人出圈,剩下的人繼續(xù)從1開(kāi)始報(bào)數(shù),直到所有的人都出圈為止。求出所有人的出圈順序。 #includemain()int a10; int n=8,i,k=0,j=1,len; len=n; i=0; /給數(shù)組賦值 for(i=0;i0) if(ak%n0) if(j%3=0) printf(%dn,ak%n);/找到要出圈的人,并把圈中

7、人數(shù)減一 ,最后一個(gè)人才輸出 ak%n=-1; j=1; k+; len-; else/報(bào)數(shù)不是3 k+; j+; else/遇到空位了,就跳到下一位,但j不加一,也就是這個(gè)位置沒(méi)有報(bào)數(shù) k+; 2.學(xué)生成績(jī)統(tǒng)計(jì)與分析輸入10名學(xué)生的英語(yǔ)、c語(yǔ)言、計(jì)算機(jī)文化基礎(chǔ)成績(jī),統(tǒng)計(jì)每名學(xué)生三科成績(jī)的平均分,分析三門(mén)課程的優(yōu)秀率,85分以上為優(yōu)秀。#include void main()int grade104;int i,j,average,egood,cgood,jgood;for(i=0;i10;i+)printf(請(qǐng)輸入第%d個(gè)學(xué)生的英語(yǔ)、c語(yǔ)言、計(jì)算機(jī)n,i+1);for(j=0;j3;j+)s

8、canf(%d, &gradeij );egood=cgood=jgood=0;for(i=0;i10;i+) /10個(gè)人average=0;for(j=0;j=85) if(j=0) egood+; if(j=1) cgood+; if(j=2) jgood+;gradei3=average/3;for(i=0;i10;i+)printf(第%d個(gè)學(xué)生的三科平均分為:%dn,i+1,gradei3);printf(英語(yǔ)成績(jī)優(yōu)秀的學(xué)生為%dn,egood);printf(c語(yǔ)言成績(jī)優(yōu)秀的學(xué)生為%dn,cgood);printf(計(jì)算機(jī)成績(jī)優(yōu)秀的學(xué)生為%dn,jgood);3.利用指針實(shí)現(xiàn)數(shù)組合

9、并數(shù)組a:“1,7,9,11,13,15,17,19”; 數(shù)組b:“2,4,6,8,10”,兩個(gè)數(shù)組合并為數(shù)組c,按升序排列。#includevoid main() int paixu (int c);int a8=1,7,9,11,13,15,17,19;int b5=2,3,6,8,10;int c13;int *p,*q,*s;for(p=a,s=c;p8+a;p+,s+)*s=*p;for(q=b;qb+5;q+,s+)*s=*q;paixu(c);paixu(int c)int i,j,k;for(j=0;j12;j+)for(i=0;ici+1) k=ci;ci=ci+1;ci+1

10、=k;for(i=0;i13;i+)printf(%dn,ci);實(shí) 驗(yàn) 三:函數(shù)實(shí)驗(yàn)?zāi)康模?.更加靈活的使用數(shù)組和指針作為函數(shù)參數(shù);2.更加靈活使用指針處理字符串。實(shí)驗(yàn)內(nèi)容:1.字符串復(fù)制輸入一個(gè)長(zhǎng)度不大于30的字符串,將此字符串中從第m個(gè)字符開(kāi)始的剩余全部字符復(fù)制成為另一個(gè)字符串,并將這個(gè)新字符串輸出。要求用指針?lè)椒ㄌ幚碜址?.插入字符串從鍵盤(pán)上先后讀入兩個(gè)字符串,假定存儲(chǔ)在字符數(shù)組s1和s2中。注意,這兩個(gè)字符串最長(zhǎng)均可達(dá)到26個(gè)字符、最短均可為0個(gè)字符。將字符串s2插入字符串s1中,生成一個(gè)新的字符串s。插入方法為s2的第i個(gè)字符插入到原s1的第i個(gè)字符后,如果s2比s1(假定s1

11、的長(zhǎng)度為l1)長(zhǎng),則s2的第l1個(gè)字符開(kāi)始到s2結(jié)尾的所有字符按在s2中的順序放在新生成的字符串s之后。用指針完成程序。3.學(xué)生成績(jī)管理系統(tǒng)某班期末考試科目為數(shù)學(xué)(mt)、英語(yǔ)(en)和物理(ph),有最多不超過(guò)30人參加考試。(1)計(jì)算每個(gè)學(xué)生的總分;(2)按總分成績(jī)由高到低排出成績(jī)的名次;(3)打印出名次表,包括名次、學(xué)生編號(hào)、各科分?jǐn)?shù)、總分;要求程序運(yùn)行后先打印出一個(gè)菜單,提示用戶(hù)選擇:成績(jī)錄入、成績(jī)排序、成績(jī)查找,在選擇某項(xiàng)功能后執(zhí)行相應(yīng)的操作。 實(shí) 驗(yàn) 四:結(jié)構(gòu)體實(shí)驗(yàn)?zāi)康模?.更加靈活的使用數(shù)組作為函數(shù)參數(shù);2.初步掌握開(kāi)發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法;3.初步掌握書(shū)寫(xiě)程序設(shè)計(jì)開(kāi)發(fā)文檔

12、的能力。實(shí)驗(yàn)內(nèi)容:程序一:學(xué)生信息管理系統(tǒng)編寫(xiě)程序,實(shí)現(xiàn)學(xué)生信息的管理(包括學(xué)生信息的建立、增加、刪除、修改、查找),要求:小組分工情況小組分工情況統(tǒng)計(jì)表班級(jí)信息工程學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè) 2012級(jí) 軟件工程(方向) 班 組名稱(chēng)學(xué)生信息管理系統(tǒng)項(xiàng)目組長(zhǎng) (本次項(xiàng)目小組組長(zhǎng))組員組員學(xué)號(hào)工作簡(jiǎn)介一 需求分析 i設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng)至少具有以下功能:(1)菜單功能:采用文本菜單界面。(2)學(xué)生信息的建立。(3)學(xué)生信息的增加。(4)學(xué)生信息的刪除。(5)學(xué)生信息的修改。(6)學(xué)生信息的查找。ii數(shù)據(jù)庫(kù)結(jié)構(gòu)struct student char num10; char name10; ch

13、ar xibie10; char sex; int age; st30;二 總體設(shè)計(jì)框架結(jié)構(gòu)圖(系統(tǒng)的功能結(jié)構(gòu)圖)學(xué)生成績(jī)管理系統(tǒng)輸入增加.退出程序流程圖: (visio)退出結(jié)束開(kāi)始輸出菜單根據(jù)菜單輸入n的值選擇程序輸入增加刪除修改查找三、詳細(xì)設(shè)計(jì)(流程圖?。┧?、程序源代碼(參考答案)1.用結(jié)構(gòu)體數(shù)組完成2.用結(jié)構(gòu)體指針完成1. #include stdio.h#include string.htypedef struct node char num10; char name10; char xibie10; char sex; int age; st;int n;st *creslink(

14、) int i; st s10; printf(請(qǐng)輸入要錄入的人數(shù):); scanf(%d,&n); for (i=0;i=n-1;i+) printf(請(qǐng)輸入第%d名學(xué)生的學(xué)號(hào),姓名,系別,年齡,性別:,i+1); scanf(%s%s%s%d%c,si.num,,si.xibie,&si.age,&si.sex); return s;int getlen(st s) return n;insert(st s,char num,char name,char xibie,int age,char sex) strcpy(sn.num,num); strcpy(,na

15、me); strcpy(sn.xibie,xibie); sn.age=age; sn.sex=sex; n+; delete(st s,char num)int i,j; for(i=0;in;i+) if(strcmp(si.num,num)=0)break; for(j=i+1;jn;j+)sj-1=sj; n-;void list(st s) int i; printf(學(xué)號(hào)t姓名t系別t年齡t性別n); for(i=0;in;i+) printf(%st%st%st%dt%cn,si.num,,si.xibie,si.age,si.sex); void main() i

16、nt k,f,age; char num10,name10,xibie10,sex; st *s; while(1) printf(nnttt學(xué)生信息管理系統(tǒng)n); printf(tt*n); printf(ttt1.錄入學(xué)生信息n); printf(ttt2.插入新學(xué)生信息n); printf(ttt3.刪除學(xué)生信息n); printf(ttt4.輸出學(xué)生信息n); printf(ttt5.輸出學(xué)生總數(shù)n); printf(ttt6.退出n); printf(tt*n); printf(請(qǐng)選擇:); scanf(%d,&k); switch(k) case 1:s=creslink();br

17、eak; case 2: printf(請(qǐng)輸入新學(xué)生的學(xué)號(hào),姓名,系別,年齡,性別:); scanf(%s%s%s%d%c,num,name,xibie,&age,&sex); insert(s,num,name,xibie,age,sex); break; case 3:printf(請(qǐng)輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):); scanf(%s,num); delete(s,num); break; case 4:list(s);break; case 5:f=getlen(s);printf(學(xué)生總數(shù)為:%d,f);break; case 6:return; 2.#include stdio.h#in

18、clude string.h#define null 0typedef struct node char num10; char name10; char xibie10; char sex; int age; struct node *next;slink;slink *creslink()slink *head,*p,*s;int i,n;printf(請(qǐng)輸入要錄入的人數(shù):);scanf(%d,&n);if(nnext=null;for (i=1;inum,s-name,s-xibie,&s-age,&s-sex); p-next=s; p=s; p-next=null; return h

19、ead;int getlen(slink *head) slink *p; int n; p=head-next;n=0; while (p!=null) n+; p=p-next; return n;insert(slink *head,char num,char name,char xibie,int age,char sex) slink *p,*q; p=head; while(p-next!=null) p=p-next; q=(struct node *)malloc (sizeof(slink); strcpy(q-num,num); strcpy(q-name,name); s

20、trcpy(q-xibie,xibie); q-sex=sex; q-age=age; q-next=p-next; p-next=q;delete(slink *head,char num) slink *p,*q; p=head; while(p-next!=null&strcmp(p-next-num,num)!=0) p=p-next; q=p-next; p-next=q-next; free(q); void list(slink *head) slink *p; printf(學(xué)號(hào)t姓名t系別t年齡t性別n); p=head-next; while(p!=null) printf

21、(%st%st%st%dt%cn,p-num,p-name,p-xibie,p-age,p-sex); p=p-next; printf(n);void main() int k,f,age; char num10,name10,xibie10,sex; slink *head; while(1) printf(nnttt學(xué)生信息管理系統(tǒng)n); printf(tt*n); printf(ttt1.錄入學(xué)生信息n); printf(ttt2.插入新學(xué)生信息n); printf(ttt3.刪除學(xué)生信息n); printf(ttt4.輸出學(xué)生信息n); printf(ttt5.輸出學(xué)生總數(shù)n); p

22、rintf(ttt6.退出n); printf(tt*n); printf(請(qǐng)選擇:); scanf(%d,&k); switch(k) case 1:head=creslink();break; case 2: printf(請(qǐng)輸入新學(xué)生的學(xué)號(hào),姓名,系別,年齡,性別:); scanf(%s%s%s%d%c,num,name,xibie,&age,&sex); insert(head,num,name,xibie,age,sex); break; case 3:printf(請(qǐng)輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):); scanf(%s,num); delete(head,num); break; cas

23、e 4:list(head);break; case 5:f=getlen(head);printf(學(xué)生總數(shù)為:%d,f);break; case 6:return; 實(shí)驗(yàn)五 文件操作實(shí)驗(yàn)?zāi)康模?初步了解c語(yǔ)言中文件操作的類(lèi)型;2掌握文件的打開(kāi)、關(guān)閉及讀寫(xiě)的操作3能熟練進(jìn)行字符及數(shù)據(jù)塊的讀寫(xiě)操作,為后續(xù)的課程設(shè)計(jì)打好基礎(chǔ)。實(shí)驗(yàn)內(nèi)容:程序1:從鍵盤(pán)上輸入若干個(gè)學(xué)生的學(xué)號(hào)及考試成績(jī), 將這些數(shù)據(jù)寫(xiě)入磁盤(pán)文件y.dat中。(由學(xué)號(hào)等于0作終止標(biāo)記)#include stdio.hmain() struct student int num; float score; ;struct student

24、stu;file *fp;fp=fopen(y.dat,w);scanf(%d%f,&stu.num,&stu.score);while(stu.num!=0) fprintf(fp, %d %fn,stu.num,stu.score); scanf(%d%f,&stu.num,&stu.score);fclose(fp);程序2:設(shè)有一文件cj.dat存放了50個(gè)人的成績(jī)(英語(yǔ)、計(jì)算機(jī)、數(shù)學(xué)),存放格式為:每人一行,成績(jī)間由逗號(hào)分隔。計(jì)算三門(mén)課平均成績(jī),統(tǒng)計(jì)個(gè)人平均成績(jī)大于或等于90分的學(xué)生人數(shù)。 #include main() file *fp; int i=0,num=0; float

25、x , y , z , s1=0, s2=0, s3=0 ; fp=fopen (cj.txt,r); while(i=90) num=num+1; i+; printf(分?jǐn)?shù)高于90的人數(shù)為:%d,num); fclose(fp);程序3:統(tǒng)計(jì)上題cj.dat文件中每個(gè)學(xué)生的總成績(jī),并將原有數(shù)據(jù)和計(jì)算出的總分?jǐn)?shù)存放在磁盤(pán)文件“stud”中。#include stdio.h main() file *fp1,*fp2; float x,y,z; fp1=fopen(cj.txt,r); fp2=fopen(stud.txt,w); while(!feof(fp1) fscanf (fp1,%f

26、,%f,%f,&x,&y,&z); printf(%f,%f,%f,%fn,x,y,z,x+y+z); fprintf(fp2,%f,%f,%f,%fn,x,y,z,x+y+z); fclose(fp1); fclose(fp2); 實(shí) 驗(yàn) 六:萬(wàn)年歷實(shí)驗(yàn)?zāi)康模?、復(fù)習(xí)、鞏固c語(yǔ)言的基礎(chǔ)知識(shí),進(jìn)一步加深對(duì)c語(yǔ)言的理解和掌握;2、將課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來(lái),鍛煉分析解決實(shí)際問(wèn)題的能力3、提高學(xué)生適應(yīng)實(shí)際,實(shí)踐編程的能力。實(shí)驗(yàn)內(nèi)容:程序一:編寫(xiě)萬(wàn)年歷小組分工情況小組分工情況統(tǒng)計(jì)表班級(jí)信息工程學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè) 2012級(jí) 軟件工程(方向) 班 組名稱(chēng)學(xué)生成績(jī)管理系統(tǒng)項(xiàng)目組長(zhǎng) (

27、本次項(xiàng)目小組組長(zhǎng))組員組員學(xué)號(hào)工作簡(jiǎn)介一 需求分析萬(wàn)年歷能實(shí)現(xiàn)一些功能,主要包括以下幾點(diǎn):(1)日歷顯示功能。能根據(jù)系統(tǒng)日期進(jìn)行初始化,如果沒(méi)有任何輸入,則顯示系統(tǒng)日期所在月份的月歷。 判斷星期,但根據(jù)蔡勒公式,可以很容易地有年月日推斷出星期:nday=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nday%7;其中year:要查詢(xún)的年份nday:從該年的一月一日起到該天的天數(shù)w:得出的星期數(shù),w=0表示星期天。 在打印月歷時(shí),只要知道第一天的星期,就可以依次輸入后面的日期,通過(guò)定長(zhǎng)度輸出日期,在遇到某天時(shí)星期六時(shí),就換行輸出,因此可以按

28、照月歷的格式輸出。對(duì)于初始輸入當(dāng)前月歷,可以通過(guò)中的time 和localtime函數(shù)取出系統(tǒng)時(shí)間進(jìn)行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一個(gè)時(shí)間結(jié)構(gòu)體,可以從中取出年月日.(2)日歷查詢(xún)、閏年判斷功能。輸入日期進(jìn)行查詢(xún),顯示查詢(xún)?nèi)掌谒谠路莸脑職v,還將顯示所在年份是否為閏年 能被4整除但不能被100整除,或者能被400整除的年份為閏年,否則為平年。日期的查詢(xún),就是直接打印改天所在月份的月歷(3)參數(shù)檢查功能。如果輸入日期不合法,查詢(xún)將被拒絕,并顯示提示信息。判斷日期是否合法,可以先判斷

29、年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通過(guò)此判斷合法,再判斷是否時(shí)閏年,如果時(shí)閏年,則判斷二月份是否滿(mǎn)足要求,閏年二月份不能超過(guò)29天,平年二月份不能超過(guò)28天。在查詢(xún)過(guò)程中,如果發(fā)現(xiàn)輸入不合法或者不滿(mǎn)足輸入要求,則要求重新輸入。(4)通過(guò)鍵盤(pán)操作(如:光標(biāo)上、下、左、右移動(dòng)鍵,pageup、pagedown鍵)調(diào)整年份、月份和日期,并顯示調(diào)整后的日期及月歷。捕獲鍵盤(pán)的輸入,通過(guò)兩個(gè)getch();將后一個(gè)getch()的返回值付給整型或字符型k,k為相應(yīng)鍵的ascii值,判斷ascii值,就可以知道時(shí)哪個(gè)鍵的輸入。若捕獲到某鍵的輸入,則設(shè)置相應(yīng)的年或月或日的值,再進(jìn)

30、行刷性輸出,就可以實(shí)現(xiàn)日期的調(diào)整。二 總體設(shè)計(jì)(visio) 本系統(tǒng)包括4個(gè)模塊,分別是功能控制模塊打印輸出模塊日歷顯示模塊和鍵值獲取模塊。 1、功能控制模塊。該模塊用于實(shí)現(xiàn)日期有效性檢查判斷是否是閏年和返回指定日期對(duì)應(yīng)的日期。 2、打印輸出模塊。該模塊主要是進(jìn)行輸出顯示,包括打印指定個(gè)數(shù)的空格打印分隔線(xiàn)打印用戶(hù)使用手冊(cè)打印當(dāng)前日期對(duì)應(yīng)的星期以及打印指定的星期。 3、日歷顯示模塊。該模塊是系統(tǒng)的核心模塊,是用來(lái)顯示指定日期所在月份的月歷。 4、鍵值獲取模塊。該模塊接受鍵盤(pán)操作,獲取鍵值,來(lái)進(jìn)行日期調(diào)整,并調(diào)用日歷顯示模塊中的函數(shù)來(lái)顯示調(diào)整后的日歷。萬(wàn)年歷日歷顯示模塊鍵值獲取模塊打印輸出模塊功能

31、控制模塊 幫助退出修改日期日歷查詢(xún)?nèi)諝v顯示 圖2-1功能模塊圖總函數(shù)流程圖 圖3-1總函數(shù)流程圖三、詳細(xì)設(shè)計(jì)(1)由于萬(wàn)年歷具有以下特點(diǎn):平年365天(52周+1天),閏年366天(52周+2天)。平年2月28天,閏年2月29天。(2)根據(jù)萬(wàn)年歷以上特點(diǎn)進(jìn)行編寫(xiě) 1)首先對(duì)萬(wàn)年歷年、月、日進(jìn)行編寫(xiě),編寫(xiě)程序先定義每月的天數(shù)為28天,如月份為1、3、5、7、8、10、12就定義天數(shù)為31天反之如果月份為4、6、9、11就輸出天數(shù)為30天,由上可見(jiàn)2月份為28天但是如果為閏年就有29天就要定義一個(gè)數(shù)組存放天數(shù),用while循環(huán)控制。2)再對(duì)其中的星期進(jìn)行編寫(xiě):由于公元1月1日設(shè)為星期六,故3月1日

32、為星期三,可以用萬(wàn)年3月1日星期算法(特別是那個(gè)三)由于其公式為:某年3月1日星期幾=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7閏4百年3月1日星期算法(百年%4=0)其公式為:某年3月1日星期幾=(年+年/4+月星期表+日+2天)%7例: 2000年3月1日星期幾=(0+0/4+0+1+2)%7=3%7=星期三平4百年3月1日星期算法(百年%40)其公式為:某年3月1日星期幾=(百年%4*5天+年+年/4+月星期表+日+2天)%7 例:2100年3月1日星期幾=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)

33、其中萬(wàn)年某日星期算法 其公式為:某日星期幾=(百年%4*5天+年+年/4+月星期表+日+2天)%7(1)int isleapyear(int year);該函數(shù)判斷某年是否是閏年,參數(shù)year表示要判斷的年份,返回值1表示該年為閏年,0表示該年為平年。int isleapyear( int year )if (year %4 = 0) & (year % 100 != 0) |(year % 400 = 0) )return 1; else return 0;開(kāi)始流程圖:year%400 return 1 y nyear%100return 0year%4 y n n yreturn 1ret

34、urn 0 閏年判斷(2)struct tm* getday();該函數(shù)用以取得系統(tǒng)的時(shí)間。該函數(shù)沒(méi)有參數(shù),返回值類(lèi)型為struct tm*,是一個(gè)包含時(shí)間的結(jié)構(gòu)體struct tm* getday()/從系統(tǒng)取得當(dāng)前時(shí)間time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;(3)int getwday(int year,int month,int day);該函數(shù)用以根據(jù)一個(gè)日期推斷星期,參數(shù)為要判斷的年月日。返回值為整型,123456分別表示星期一到星期六,0表示星期天。int getwday(i

35、nt year,int month,int day)/取得星期int nday=0,nday,i,w;for(i=0;imonth-1;i+)nday+=daysofmonthrunyear(year)i;nday+=day;nday=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nday%7;return w;(流程圖?。┧摹⒊绦蛟创a#include#include#include#include#include #define keynumup 0x48#define keynumdown 0x50 #define keynumle

36、ft 0x4b #define keynumright 0x4d#define keynumpageup 0x49 #define keynumpagedown 0x51 int year,month,day;/全局變量記錄時(shí)間int daysofmonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int runyear(int year)/判斷是否是閏年int flag=0;if(year%400=0|(year%4=0&year%100!=0)flag=1;return flag

37、;struct tm* getday()/從系統(tǒng)取得當(dāng)前時(shí)間time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;int dayexame(int year,int month,int day)/檢查日期是否正確if(year0|month12|day31)return 0;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(day31)return 0;break;case 4:case 6:case 9:case 1

38、1:if(day30)return 0;break;default:if(runyear(year)&day29)return 0;else if(runyear(year)=0&day28)return 0;return 1;int getwday(int year,int month,int day)/取得星期int nday=0,nday,i,w;for(i=0;imonth-1;i+)nday+=daysofmonthrunyear(year)i;nday+=day;nday=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nday

39、%7;return w;void printcalender(int year,int month,int day);void setday(int year,int month,int day)/調(diào)節(jié)日期char k;printf(%c:上一年 %c:下一年n,24,25);printf(%c:上個(gè)月 %c:下個(gè)月n,27,26);printf(pageup:昨天 pagedown:明天n);printf(其他:返回主菜單n);getch();k=getch();switch(k)/通過(guò)方向鍵和pageup、pagedown鍵來(lái)調(diào)整日期case keynumup:year-;if(dayex

40、ame(year,month,day)=0)year+; printf(%c,7);/檢查日期的合法性,/若錯(cuò)誤,保持日期不變,并警告system(cls);printcalender(year,month,day);setday(year,month,day);break;case keynumdown:year+;if(dayexame(year,month,day)=0)year-;printf(%c,7);system(cls);printcalender(year,month,day);setday(year,month,day);break;case keynumleft:mont

41、h-;if(dayexame(year,month,day)=0)month+;printf(%c,7);system(cls);printcalender(year,month,day);setday(year,month,day);break;case keynumright:month+;if(dayexame(year,month,day)=0)month-;printf(%c,7);system(cls);printcalender(year,month,day);setday(year,month,day);break;case keynumpageup:day-;if(dayexame(year,month,day)=0)day+;printf(%c,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論