C语言日历显示课程设计报告.docx
《C语言日历显示课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言日历显示课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
C语言日历显示课程设计报告
C语言日历显示课程设计报告
高级语言程序设计课程设计
题目:
专业
班级
学生
学号
指导教师
起止时间2012213——2012.2.17
2012年2月
实验报告4
必做题:
4
选做题:
9
题目10写一个日历显示程序9
16
心得体会26
实验报告
必做题:
(1)编一程序对2种排序方法进行比较:
交换法、选择法、插入法、冒泡法四种方法选2。
具体比较方法是随机生成一组(M300个)的100以内的整数数据,用选定的2种排序方法进行排序。
纪录排序过程中数据比较和交换的次数,输出比较结果。
#includeh>
#include
intmain(void)
{
inta[300],b[300];
intij,temp,t;
ints=O,p=O,s1=0,p1=0;
for(i=0;i<300;i++)
{
a[i]=rand()%100;
b[i]=a[i];
}
for(i=0;i<299;i++){
for(j=i+l;j<300;j++)
{
if(a[i]{
temp=a[i];
a[i]=aUJ;
a[j]=temp;
s++;
}
P++;
}}
printf(n%d%d\n'\s,p);
printfU;
for(i=0;i<299;i++)
t=i;for(j=i+l;j<300;j++){
if(b[t]=i){temp=b[i];b[i]=b[t];b[t]=temp;sl++;
pl++;
}
}
printf(n%d%d\nH,sl,pl);return0;
}
运行结果:
ibol
在这个题目中选择了交换法和选择法,首先要产生300个随
机数,其次要懂得两种排序法的原理,然后进行编程,同时利
用循环结构。
关键在于产生随机数和排序。
通过比较发现交换
法的交换次数比选择法少,比较的次数两者一样。
(2)写一个函数voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize),求一组数据的最矢值、最小值和平均值,测试之。
其中data指向给定数据的数组的指针,max.min.ave分别指向最大值、最小值和平均值,size是数组的大小。
要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。
测试之
#include
voidmaxMinAver(int*data,int*max,int*min,float*avejntsize);intmain(void)
{
int*data9*max9*min^size;
float*ave;
maxMinAver(data,maximin,ave^size);
return0;
voidmaxMinAver(int*data,int*max,int*min,float*avejntsize){
inta[10];
intb,c,nj,s=0,temp;
floatd;
data=a;
max=&b;
min=&c;
ave=&d;
for(n=0;n<10;n++)
scanf(u%d,\&a[n]);
〃交换法排序求最大最小值
for(n=0;n<9;n++)
{
for(j=n+l;j<10;j++){if(a[n]{
temp=a[n];a[n]=a[j];a[j]=temp;
b=a[O];
c=a[9];
〃求平均数
for(n=0;n<10;n++)
s=s+a[n];
d=(float)s/10;
printf(H%d%d%r\*max,*min,*ave);
X高级程序语言设计\
(2).exe
bL2345678910
1015.500000
Processpetupned0C0x0>executiontime:
13.938s
Pressanykeytocontinue-
这个题目需要利用函数调用,还要利用指针的间接引用法,设计函数
将最大、最小以及平均值求出来。
关键是函数调用。
选做题:
题目10写一个日历显示程序
基本功能:
1).输入任一年将显示出该年的所有月份日期,对应的星期
2).注意闰年情况
其显示格式要求如下:
1)月份:
中文英文都可以,
2)下一行显示星期,从周日到周六,中英文都可以
3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐
当输入2004显示如下:
Inputtheyear:
2004
Inputthefilename:
a
Thecalendaroftheyear2004.
Januray1
February2
SunMonTueWedThuFriSatSun
MonTueWedThuFriSat
1
2
3
1
23456
7
4567
8
9
10
8
910111213
14
11121314
15
16
17
15
1617181920
21
18192021
22
23
24
22
2324252627
28
25262728:
29;
30
31
29
March3
SunMonTueWedThuFriSat
Apill4
Sun
MonTueWedThuFriSat
1234
56
123
78910111213
4
5678910
14151617181920
11
121314151617
21222324252627
18
192021222324
28293031
25
2627282930
#include
intyear(intp);
intriqi(intz);
intxinqi(intw,intljntjj);
voiddayin(intmjntn,inta[12],intb[12],charc[30]);
intmain(void)
intn9s;
intm,qq,xx;
printf(11Inputtheyear:
11);
scanf(M%dn,&n);
s=year(n);
inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};
intb[12]二{31,s,31,30,31,30,31,31,30,31,30,31};
//printf(H%d,,,b[l]);
charc[]=Hsunmontuewedthrfrisat";printf(*'Thecalendaroftheyear%d\nu,n);m=riqi(n);
//printf(,,%d\n,,,m);
dayin(m9n,a9b9c);
return0;
}
〃判断输入的那一年是否是闰年
intyear(intp)
{
if(p%4!
=0)return28;
}
if(p%4==0)if(p%100==0)
{
if(p%400==0)
{
return29;
}
return28;
}
return29;
}
}
〃求输入那一年的1月1日式星期几
/*参照1997年1月1日*/
intriqi(intz)
{
intd;
intdays=(z-1997)*365;
inti=(z-1997)/4;
days=days+i*l;
/*1997年1月1日是星期三*/
d=days%7+l;
d=(d+2)%7;
if(d==0)d=7;
returnd;
}
〃从2月开始到12月每个月份的的1号是星期几
intxinqi(intw,intl,intjj)
{
intss;
intqi;
intb[12]二{31,28,31,30,31,30^31,31,30,31,30,31};ss=year(I);
b[l]=ss;
qi=(b[jj-l]%7+(w-l)+l)%7;
returnqi;
}
voiddayin(intm,intn9inta[12],intb[12],charc[30])
{
inti,r,v,xxj,qq;
for(i=0;i<12;i++)
printf(,,%d\nn,a[i]);
printf(n%s\nn,c);
if(i==O){
if(m==7)
m=0;
for(xx=0;xx<3*m+m*1;xx++)
{
printf(Hn);
}
printf('T‘);
for(r=2;r<=7-m;r++){
printf(M%4dH,r);
}
printfW);
}
else
{
qq=xinqi(m9n9i);
m=qq;
//printf(n%d\\\\\\\\H,m);
for(xx=0;xx<3*m+m*1;xx++)
printf(Hn);
}
运行结果:
}
printf(nln);
for(r=2;r<=7-m;r++)
printf(,,%4dH,r);
}
printf(n\nn);
}
for(j=r,v=l;j<=b[i];j++,v++)
{
printf(n%-4dnj);
if(v%7==0)
printf(H\nn);}
printf(H\n==========================H);
printf(n\nn);
Inputtheyear-2012
Thecalendaroftheyear2012
1
sun
non
tue
wed
thr
Fri
sat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
sun
non
tue
wed
thrfrisat
123
4
5
6
?
8
9
10
11
12
13
14
15
16
1?
18
19
20
21
22
23
24
25
26
2?
28
29
30
31
4
sun
non
tue
wed
thr
fri
sat
1
2
3
4
5
6
7
8
?
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
这个程序要求输入任意年能打印出该年的一月到十二月的日历表;因此需要年份,月份,日期;但如上程序是以1997的1月1日(星期三)为参照,因此只能査询1997年以后的年份日历(包括1997年)。
流程图:
(如下)
主流程图:
分层流程图:
模块流程图:
dayin:
inti.r.v.xz.j・qq:
printf(“%d\n",a[i]):
printf(“%s\n",c):
m=0;
qq二xinqi(m.n.i):
m=qq:
ior(xx=0;xx<3
for
(xx=0:
xx<3*m
▼
printf(““):
1
printf(““):
printf(“1"
4lor(r=2:
r<=7-
m;r++)
For(r=2;r<=7-
m:
r++)
prinlf(“I");
prinlf(“%4printf(“\n”);
printft4d".r);
printf(“\n"):
丿
year:
xinqi:
工程代码:
l.maimc:
#include
#includeHli.hH
intmain(void)
{
intn,s;
intm,qq,xx;
printf(Y'Inputtheyear:
11);
scanf(n%dH,&n);
s=year(n);
inta[12]={1,2,3,4,5,6,7,&9,10,11,12};
intb[12]={31,5,31,30,31,30,31,31,3071,30,31};
//printf(M%df\b[l]);
charc[]=Hsunmontuewedthrfrisatn;printf(HThecalendaroftheyear%d\nn,n);m=riqi(n);
//printf(H%d\n,,,m);
dayin(m9n9a,b9c);
return0;
2erieC:
〃判断输入的那一年是否是闰年
intyear(intp)
{
if(p%4!
=0)
{
return28;
}
if(p%4==0)
{
if(p%100==0)
{
if(p%400==0)
{
return29;
}
return28;
return29;
〃求输入那一年的1月1日式星期几
/*参照1997年1月1日*/
intriqi(intz)
{
intd;
intdays=(z-1997)*365;
inti=(z-1997)/4;
days=days+i*l;
/*1997年1月1日是星期三*/
d=days%7+l;
d=(d+2)%7;
if(d==0)d=7;
returnd;
}
〃从2月开始到12月每个月份的的1号是星期几
intxinqi(intw,intl,intjj)
{
intss;
intqi;
intb[12]={31,2&31,30^31,30,31,31,30^31,30,31};
ss=year(l);
b[l]=ss;
qi=(b[jj-l]%7+(w-l)+l)%7;
returnqi;
}
〃打印日历
voiddayin(intm,intn,inta[12],intb[12],charc[30]){
inti,r,v,xxj,qq;
for(i=0;i<12;i++)
{
printf(H%d\nn,a[i]);
printf(H%s\nn,c);
if(i==0){
if(m==7)m=0;
for(xx=0;xx<3*m+m*1;xx++)
{
printf(HH);
}
printf(nr*);
for(r=2;r<=7-m;r++){
printf(H%4dK,r);
printf(n\nf,);
else
qq=xinqi(m9n4);
m=qq;
//printf(n%d\\\\\\\\n,m);
for(xx=0;xx<3*m+m*1;xx++){printf(HH);
}
printf(,,r,);
for(r=2;r<=7-m;r++)
{
printf(M%4dM,r);
}
printf(n\nH);
}
for(j=r,v=l;j<=b[i];j++,v++)
{
printf(H%-4dHJ);
if(v%7==0)printf(H\n==========================n);printf(n\n,');
}
}
3・li・h:
#ifndefLI_H
#defineLI_H
intyear(intp);
intriqi(intz);
intxinqi(intw,intl,intjj);
voiddayin(intm,intn,inta[12],intb[12],charc[30]);
#endif
心得体会
编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。
对于较复杂的程序可以分模块把它逐一实现。
编写程序的过程中,我们需要耐心,细心'信心。