高级语言程序设计课程设计题目:专业计算机类班级计算机类1102学生学号指导教师_______________起止时间2012.2.13——2012.2.172012年2月目录实验报告.........................................................3必做题:.....................................................3选做题:.....................................................8题目10写一个日历显示程序......................8流程图:(如下).....................................14工程代码:...............................................19心得体会...................................................24实验报告必做题:(1)编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2。具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。纪录排序过程中数据比较和交换的次数,输出比较结果。#includestdio.h#includestdlib.hintmain(void){inta[300],b[300];inti,j,temp,t;ints=0,p=0,s1=0,p1=0;for(i=0;i300;i++){a[i]=rand()%100;b[i]=a[i];}for(i=0;i299;i++){for(j=i+1;j300;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;i299;i++){t=i;for(j=i+1;j300;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);return0;}运行结果:在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。关键在于产生随机数和排序。通过比较发现交换法的交换次数比选择法少,比较的次数两者一样。(2)写一个函数voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize),求一组数据的最大值、最小值和平均值,测试之。其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。测试之#includestdio.hvoidmaxMinAver(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;n10;n++){scanf(%d,&a[n]);}//交换法排序求最大最小值for(n=0;n9;n++){for(j=n+1;j10;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;n10;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======================================================…#includestdio.hintyear(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;i12;i++){printf(%d\n,a[i]);printf(%s\n,c);if(i==0){if(m==7)m=0;for(xx=0;xx3*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;xx3*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:#includestdio.h#includeli.hintmain(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;i12;i++){printf(%d\n,a[i]);printf(%s\n,c);if(i==0){if(m==7)m=0;for(xx=0;xx3*m+m*1;xx++){printf();}printf(1);for(r=2;r=7-m;r++){pr