当前位置:文档之家› C语言日历显示课程设计报告(含源代码)

C语言日历显示课程设计报告(含源代码)

高级语言程序设计课程设计题目:专业计算机类班级计算机类1102学生学号指导教师_______________起止时间2012.2.13——2012.2.172012年2月目录实验报告 (3)必做题: (3)选做题: (8)题目10 写一个日历显示程序 (8)流程图:(如下) (14)工程代码: (19)心得体会 (24)实验报告必做题:(1)编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2。

具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。

纪录排序过程中数据比较和交换的次数,输出比较结果。

#include<stdio.h>#include<stdlib.h>int main(void){int a[300],b[300];int i,j,temp,t;int s=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]<a[j]){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]<b[j])t=j;if(t!=i){temp=b[i];b[i]=b[t];b[t]=temp;s1++;}p1++;}}printf("%d %d\n",s1,p1);return 0;}运行结果:在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。

关键在于产生随机数和排序。

通过比较发现交换法的交换次数比选择法少,比较的次数两者一样。

(2)写一个函数void maxMinAver(int *data, int *max, int*min,float * ave,int size), 求一组数据的最大值、最小值和平均值,测试之。

其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。

要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。

测试之#include<stdio.h>void maxMinAver(int *data, int *max, int *min,float * ave,int size);int main(void){int *data,*max,*min,size;float *ave;maxMinAver(data,max,min,ave,size);return 0;}void maxMinAver(int *data, int *max, int *min,float * ave,int size) {int a[10];int b,c,n,j,s=0,temp;float d;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]<a[j]){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显示如下:Input the year:2004Input the file name:aThe calendar of the year 2004.Januray 1 February 2Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat1 2 3 1 2 3 4 5 6 74 5 6 7 8 9 10 8 9 10 11 12 13 1411 12 13 14 15 16 17 15 16 17 18 19 20 2118 19 20 21 22 23 24 22 23 24 25 26 27 2825 26 27 28 29 30 31 29=========================== ===========================March 3 April 4Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat1 2 3 4 5 6 1 2 37 8 9 10 11 12 13 4 5 6 7 8 9 1014 15 16 17 18 19 20 11 12 13 14 15 16 1721 22 23 24 25 26 27 18 19 20 21 22 23 2428 29 30 31 25 26 27 28 29 30=========================== ===========================…#include<stdio.h>int year(int p);int riqi(int z);int xinqi(int w,int l,int jj);void dayin(int m,int n,int a[12],int b[12],char c[30]);int main(void){int n,s;int m,qq,xx;printf("Input the year:");scanf("%d",&n);s=year(n);int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};int b[12]={31,s,31,30,31,30,31,31,30,31,30,31};//printf("%d",b[1]);char c[]="sun mon tue wed thr fri sat";printf("The calendar of the year %d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);return 0;}//判断输入的那一年是否是闰年int year(int p){if(p%4 != 0){return 28;}if(p%4 == 0){if(p%100 == 0){if(p%400 == 0){return 29;}return 28;}return 29;}}//求输入那一年的1月1日式星期几/*参照1997年1月1日*/int riqi(int z){int d;int days=(z-1997)*365;int i = (z- 1997)/4;days=days+i*1;/*1997年1月1日是星期三*/d=days%7+1;d=(d+2)%7;if(d == 0)d = 7;return d;}//从2月开始到12月每个月份的的1号是星期几int xinqi(int w,int l,int jj){int ss;int qi;int b[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;return qi;}void dayin(int m,int n,int a[12],int b[12],char c[30]) {int i,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:Start(p%4!=0)return(p%100==0)(p%400==0)returnreturnendreturn(p%4==0) xinqi:工程代码:1.main.c :#include<stdio.h>#include"li.h"int main(void){int n,s;int m,qq,xx;printf("Input the year:");scanf("%d",&n);s=year(n);int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};int b[12]={31,s,31,30,31,30,31,31,30,31,30,31};//printf("%d",b[1]);char c[]="sun mon tue wed thr fri sat";printf("The calendar of the year %d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);return 0;}2.ri.c://判断输入的那一年是否是闰年int year(int p){if(p%4 != 0){return 28;}if(p%4 == 0){if(p%100 == 0){if(p%400 == 0){return 29;}return 28;}return 29;}}//求输入那一年的1月1日式星期几/*参照1997年1月1日*/int riqi(int z){int d;int days=(z-1997)*365;int i = (z- 1997)/4;days=days+i*1;/*1997年1月1日是星期三*/d=days%7+1;d=(d+2)%7;if(d == 0)d = 7;return d;}//从2月开始到12月每个月份的的1号是星期几int xinqi(int w,int l,int jj){int ss;int qi;int b[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;return qi;}//打印日历void dayin(int m,int n,int a[12],int b[12],char c[30]) {int i,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 :#ifndef LI_H#define LI_Hint year(int p);int riqi(int z);int xinqi(int w,int l,int jj);void dayin(int m,int n,int a[12],int b[12],char c[30]);#endif心得体会编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。

相关主题