C语言日历显示课程设计报告.docx
《C语言日历显示课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言日历显示课程设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
C语言日历显示课程设计报告
高级语言程序设计课程设计
题目:
专业计算机类
班级计算机类1102
学生
学号
指导教师_______________
起止时间2012.2.13——2012.2.17
2012年2月
实验报告
必做题:
(1)编一程序对2种排序方法进行比较:
交换法、选择法、插入法、冒泡法四种方法选2。
具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。
纪录排序过程中数据比较和交换的次数,输出比较结果。
#include
intmain(void)
{
inta[300],b[300];
inti,j,temp,t;
ints=0,p=0,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+1;j<300;j++)
if(a[i]{temp=a[i];a[i]=a[j];a[j]=temp;s++;}p++;}}printf("%d%d\n",s,p);printf("\n");for(i=0;i<299;i++){t=i;for(j=i+1;j<300;j++){if(b[t]t=j;if(t!=i){temp=b[i];b[i]=b[t];b[t]=temp;s1++;}p1++;}}printf("%d%d\n",s1,p1);return0;}运行结果: 在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。关键在于产生随机数和排序。通过比较发现交换法的交换次数比选择法少,比较的次数两者一样。 (2)写一个函数voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize),求一组数据的最大值、最小值和平均值,测试之。其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。测试之#includevoidmaxMinAver(int*data,int*max,int*min,float*ave,intsize);intmain(void){int*data,*max,*min,size;float*ave;maxMinAver(data,max,min,ave,size);return0;}voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize){inta[10];intb,c,n,j,s=0,temp;floatd;data=a;max=&b;min=&c;ave=&d;for(n=0;n<10;n++){scanf("%d",&a[n]);}//交换法排序求最大最小值for(n=0;n<9;n++){for(j=n+1;j<10;j++){if(a[n]{temp=a[n];a[n]=a[j];a[j]=temp;}}}b=a[0];c=a[9];//求平均数for(n=0;n<10;n++){s=s+a[n];}d=(float)s/10;printf("%d%d%f",*max,*min,*ave);}这个题目需要利用函数调用,还要利用指针的间接引用法,设计函数将最大、最小以及平均值求出来。关键是函数调用。选做题:题目10写一个日历显示程序基本功能:1).输入任一年将显示出该年的所有月份日期,对应的星期2).注意闰年情况其显示格式要求如下:1)月份:中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐当输入2004显示如下:Inputtheyear:2004Inputthefilename:aThecalendaroftheyear2004.Januray1February2SunMonTueWedThuFriSatSunMonTueWedThuFriSat123123456745678910891011121314111213141516171516171819202118192021222324222324252627282526272829303129======================================================March3April4SunMonTueWedThuFriSatSunMonTueWedThuFriSat12345612378910111213456789101415161718192011121314151617212223242526271819202122232428293031252627282930======================================================…#includeintyear(intp);intriqi(intz);intxinqi(intw,intl,intjj);voiddayin(intm,intn,inta[12],intb[12],charc[30]);intmain(void){intn,s;intm,qq,xx;printf("Inputtheyear:");scanf("%d",&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("%d",b[1]);charc[]="sunmontuewedthrfrisat";printf("Thecalendaroftheyear%d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);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*1;/*1997年1月1日是星期三*/d=days%7+1;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(l);b[1]=ss;qi=(b[jj-1]%7+(w-1)+1)%7;returnqi;}voiddayin(intm,intn,inta[12],intb[12],charc[30]){inti,r,v,xx,j,qq;for(i=0;i<12;i++){printf("%d\n",a[i]);printf("%s\n",c);if(i==0){if(m==7)m=0;for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}else{qq=xinqi(m,n,i);m=qq;//printf("%d\\\\\\\\",m);for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}for(j=r,v=1;j<=b[i];j++,v++){printf("%-4d",j);if(v%7==0)printf("\n");}printf("\n==========================");printf("\n");}}运行结果:这个程序要求输入任意年能打印出该年的一月到十二月的日历表;因此需要年份,月份,日期;但如上程序是以1997的1月1日(星期三)为参照,因此只能查询1997年以后的年份日历(包括1997年)。流程图:(如下)主流程图:分层流程图: 模块流程图:dayin:year: xinqi:工程代码:1.main.c:#include#include"li.h"intmain(void){intn,s;intm,qq,xx;printf("Inputtheyear:");scanf("%d",&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("%d",b[1]);charc[]="sunmontuewedthrfrisat";printf("Thecalendaroftheyear%d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);return0;}2.ri.c://判断输入的那一年是否是闰年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*1;/*1997年1月1日是星期三*/d=days%7+1;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(l);b[1]=ss;qi=(b[jj-1]%7+(w-1)+1)%7;returnqi;}//打印日历voiddayin(intm,intn,inta[12],intb[12],charc[30]){inti,r,v,xx,j,qq;for(i=0;i<12;i++){printf("%d\n",a[i]);printf("%s\n",c);if(i==0){if(m==7)m=0;for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}else{qq=xinqi(m,n,i);m=qq;//printf("%d\\\\\\\\",m);for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}for(j=r,v=1;j<=b[i];j++,v++){printf("%-4d",j);if(v%7==0)printf("\n");}printf("\n==========================");printf("\n");}}3.li.h:#ifndefLI_H#defineLI_Hintyear(intp);intriqi(intz);intxinqi(intw,intl,intjj);voiddayin(intm,intn,inta[12],intb[12],charc[30]);#endif心得体会编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。对于较复杂的程序可以分模块把它逐一实现。编写程序的过程中,我们需要耐心,细心,信心。
temp=a[i];
a[i]=a[j];
a[j]=temp;
s++;
p++;
}}
printf("%d%d\n",s,p);
printf("\n");
for(i=0;i<299;i++)
t=i;
if(b[t]
t=j;
if(t!
=i){
temp=b[i];
b[i]=b[t];
b[t]=temp;
s1++;
p1++;
printf("%d%d\n",s1,p1);
return0;
运行结果:
在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。
关键在于产生随机数和排序。
通过比较发现交换法的交换次数比选择法少,比较的次数两者一样。
(2)写一个函数voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize),求一组数据的最大值、最小值和平均值,测试之。
其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。
要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。
测试之
voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize);
int*data,*max,*min,size;
float*ave;
maxMinAver(data,max,min,ave,size);
voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize)
inta[10];
intb,c,n,j,s=0,temp;
floatd;
data=a;
max=&b;
min=&c;
ave=&d;
for(n=0;n<10;n++)
scanf("%d",&a[n]);
//交换法排序求最大最小值
for(n=0;n<9;n++)
for(j=n+1;j<10;j++){
if(a[n]{temp=a[n];a[n]=a[j];a[j]=temp;}}}b=a[0];c=a[9];//求平均数for(n=0;n<10;n++){s=s+a[n];}d=(float)s/10;printf("%d%d%f",*max,*min,*ave);}这个题目需要利用函数调用,还要利用指针的间接引用法,设计函数将最大、最小以及平均值求出来。关键是函数调用。选做题:题目10写一个日历显示程序基本功能:1).输入任一年将显示出该年的所有月份日期,对应的星期2).注意闰年情况其显示格式要求如下:1)月份:中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐当输入2004显示如下:Inputtheyear:2004Inputthefilename:aThecalendaroftheyear2004.Januray1February2SunMonTueWedThuFriSatSunMonTueWedThuFriSat123123456745678910891011121314111213141516171516171819202118192021222324222324252627282526272829303129======================================================March3April4SunMonTueWedThuFriSatSunMonTueWedThuFriSat12345612378910111213456789101415161718192011121314151617212223242526271819202122232428293031252627282930======================================================…#includeintyear(intp);intriqi(intz);intxinqi(intw,intl,intjj);voiddayin(intm,intn,inta[12],intb[12],charc[30]);intmain(void){intn,s;intm,qq,xx;printf("Inputtheyear:");scanf("%d",&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("%d",b[1]);charc[]="sunmontuewedthrfrisat";printf("Thecalendaroftheyear%d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);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*1;/*1997年1月1日是星期三*/d=days%7+1;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(l);b[1]=ss;qi=(b[jj-1]%7+(w-1)+1)%7;returnqi;}voiddayin(intm,intn,inta[12],intb[12],charc[30]){inti,r,v,xx,j,qq;for(i=0;i<12;i++){printf("%d\n",a[i]);printf("%s\n",c);if(i==0){if(m==7)m=0;for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}else{qq=xinqi(m,n,i);m=qq;//printf("%d\\\\\\\\",m);for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}for(j=r,v=1;j<=b[i];j++,v++){printf("%-4d",j);if(v%7==0)printf("\n");}printf("\n==========================");printf("\n");}}运行结果:这个程序要求输入任意年能打印出该年的一月到十二月的日历表;因此需要年份,月份,日期;但如上程序是以1997的1月1日(星期三)为参照,因此只能查询1997年以后的年份日历(包括1997年)。流程图:(如下)主流程图:分层流程图: 模块流程图:dayin:year: xinqi:工程代码:1.main.c:#include#include"li.h"intmain(void){intn,s;intm,qq,xx;printf("Inputtheyear:");scanf("%d",&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("%d",b[1]);charc[]="sunmontuewedthrfrisat";printf("Thecalendaroftheyear%d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);return0;}2.ri.c://判断输入的那一年是否是闰年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*1;/*1997年1月1日是星期三*/d=days%7+1;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(l);b[1]=ss;qi=(b[jj-1]%7+(w-1)+1)%7;returnqi;}//打印日历voiddayin(intm,intn,inta[12],intb[12],charc[30]){inti,r,v,xx,j,qq;for(i=0;i<12;i++){printf("%d\n",a[i]);printf("%s\n",c);if(i==0){if(m==7)m=0;for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}else{qq=xinqi(m,n,i);m=qq;//printf("%d\\\\\\\\",m);for(xx=0;xx<3*m+m*1;xx++){printf("");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}for(j=r,v=1;j<=b[i];j++,v++){printf("%-4d",j);if(v%7==0)printf("\n");}printf("\n==========================");printf("\n");}}3.li.h:#ifndefLI_H#defineLI_Hintyear(intp);intriqi(intz);intxinqi(intw,intl,intjj);voiddayin(intm,intn,inta[12],intb[12],charc[30]);#endif心得体会编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。对于较复杂的程序可以分模块把它逐一实现。编写程序的过程中,我们需要耐心,细心,信心。
temp=a[n];
a[n]=a[j];
b=a[0];
c=a[9];
//求平均数
s=s+a[n];
d=(float)s/10;
printf("%d%d%f",*max,*min,*ave);
这个题目需要利用函数调用,还要利用指针的间接引用法,设计函数将最大、最小以及平均值求出来。
关键是函数调用。
选做题:
题目10写一个日历显示程序
基本功能:
1).输入任一年将显示出该年的所有月份日期,对应的星期
2).注意闰年情况
其显示格式要求如下:
1)月份:
中文英文都可以,
2)下一行显示星期,从周日到周六,中英文都可以
3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐
当输入2004显示如下:
Inputtheyear:
2004
Inputthefilename:
a
Thecalendaroftheyear2004.
Januray1February2
SunMonTueWedThuFriSatSunMonTueWedThuFriSat
1231234567
45678910891011121314
1112131415161715161718192021
1819202122232422232425262728
2526272829303129
======================================================
March3April4
123456123
7891011121345678910
1415161718192011121314151617
2122232425262718192021222324
28293031252627282930
…
intyear(intp);
intriqi(intz);
intxinqi(intw,intl,intjj);
voiddayin(intm,intn,inta[12],intb[12],charc[30]);
intn,s;
intm,qq,xx;
printf("Inputtheyear:
");
scanf("%d",&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("%d",b[1]);
charc[]="sunmontuewedthrfrisat";
printf("Thecalendaroftheyear%d\n",n);
m=riqi(n);
//printf("%d\n",m);
dayin(m,n,a,b,c);
//判断输入的那一年是否是闰年
intyear(intp)
if(p%4!
=0)
return28;
if(p%4==0)
if(p%100==0)
if(p%400==0)
return29;
//求输入那一年的1月1日式星期几
/*参照1997年1月1日*/
intriqi(intz)
intd;
intdays=(z-1997)*365;
inti=(z-1997)/4;
days=days+i*1;
/*1997年1月1日是星期三*/
d=days%7+1;
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(l);
b[1]=ss;
qi=(b[jj-1]%7+(w-1)+1)%7;
returnqi;
voiddayin(intm,intn,inta[12],intb[12],charc[30])
inti,r,v,xx,j,qq;
for(i=0;i<12;i++)
printf("%d\n",a[i]);
printf("%s\n",c);
if(i==0){
if(m==7)
m=0;
for(xx=0;xx<3*m+m*1;xx++)
printf("");
printf("1");
for(r=2;r<=7-m;r++){
printf("%4d",r);
else
qq=xinqi(m,n,i);
m=qq;
//printf("%d\\\\\\\\",m);
for(r=2;r<=7-m;r++)
for(j=r,v=1;j<=b[i];j++,v++)
printf("%-4d",j);
if(v%7==0)
printf("\n");}
printf("\n==========================");
这个程序要求输入任意年能打印出该年的一月到十二月的日历表;因此需要年份,月份,日期;但如上程序是以1997的1月1日(星期三)为参照,因此只能查询1997年以后的年份日历(包括1997年)。
流程图:
(如下)
主流程图:
分层流程图:
模块流程图:
dayin:
year:
xinqi:
工程代码:
1.main.c:
#include"li.h"
2.ri.c:
//打印日历
3.li.h:
#ifndefLI_H
#defineLI_H
#endif
心得体会
编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。
对于较复杂的程序可以分模块把它逐一实现。
编写程序的过程中,我们需要耐心,细心,信心。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1