资源描述
高级语言程序设计课程设计
题目:
专 业 计算机 类
班 级 计算机类1102
学 生
学 号
指导老师 _______________
起止时间 .2.13——.2.17
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号开始,并按其是周几实际情况和上面星期数垂直对齐
当输入显示以下:
Input the year:
Input the file name:a
The calendar of the year .
Januray 1 February 2
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 2 3 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29
=========================== ===========================
March 3 April 4
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24
28 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");
}
}
运行结果:
这个程序要求输入任意年能打印出该年一月到十二月日历表;所以需要年份,月份,日期;但如上程序是以19971月1日(星期三)为参考,所以只能查询1997年以后年份日历(包含1997年)。
步骤图:(以下)
主步骤图:
分层步骤图:
模块步骤图:
dayin:
year:
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_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]);
#endif
心得体会
编写一个程序之前首先要分析它,知道它功效,要做什么等等,怎样实现它,需要我们认真思索,分析。对于较复杂程序能够分模块把它逐一实现。编写程序过程中,我们需要耐心,细心,信心。
展开阅读全文