完整word版C语言课程设计.docx

上传人:b****7 文档编号:10829621 上传时间:2023-02-23 格式:DOCX 页数:29 大小:126.42KB
下载 相关 举报
完整word版C语言课程设计.docx_第1页
第1页 / 共29页
完整word版C语言课程设计.docx_第2页
第2页 / 共29页
完整word版C语言课程设计.docx_第3页
第3页 / 共29页
完整word版C语言课程设计.docx_第4页
第4页 / 共29页
完整word版C语言课程设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

完整word版C语言课程设计.docx

《完整word版C语言课程设计.docx》由会员分享,可在线阅读,更多相关《完整word版C语言课程设计.docx(29页珍藏版)》请在冰豆网上搜索。

完整word版C语言课程设计.docx

完整word版C语言课程设计

分屏处理数据系统

一、设计内容

随机产生1000个数,并分屏显示(每行显示10个数字,每页显示10行),而且在每一屏的下方显示本屏中数据的最大值、最小值和平均值。

提示:

循环显示,在分屏点上输出pressanykeytocontinue…,通过getchar()函数让用户以按回车键的方式进入下一屏。

二、方案设计与论证

生成一个随机数,放入二维数组,输出。

每输出十个一个回车。

调用自定义函数求这个数组的最大最小值,平局值。

摁下回车清屏。

循环十次。

三、程序运行结果(截图)

 

 

四、心得体会

运行时数字挤在一起,最后一行输出十个,每输出一行一个回车;

五、参考资料与致谢

查找书本清屏,随机函数的写法。

六、源程序

#include

#include

#include

#defineMAX99

#defineMIN0

intmain()

{

intma(inta[120]);

intmi(inta[120]);

floatv(inta[120]);

inti,j,k,max,min,a[120];

floatavg;

intx;

srand((unsigned)time(NULL));

for(i=1;i<=10;i++)//显示十页

{

for(j=1,x=1;j<=10;j++)//显示十行

{

for(k=1;k<=10;k++,x++)//显示十个

{

a[x]=rand()%(MAX-MIN+1)+MIN;

printf("%d",a[x]);

}

printf("\n");

}

max=ma(a);

min=mi(a);

avg=v(a);

printf("最大:

%d最小:

%d平均:

%.2f\n",max,min,avg);

printf("请按回车键进入下一屏。

");

getchar();//下一页

system("cls");//清屏

}

return0;

}

intma(inta[120])//最大

{

inti,z;

for(i=1,z=0;i<=100;i++)

{

if(a[i]>=z)z=a[i];

elseif(a[i]

}

returnz;

}

intmi(inta[120])//最小

{

inti,z;

for(i=1,z=999999999;i<=100;i++)

{

if(a[i]>=z)z=z;

elseif(a[i]

}

returnz;

}

floatv(inta[120])//平均

{

intsum=0,i;

floatz;

for(i=1;i<=100;i++)

{

sum=sum+a[i];

}

z=sum*1.0/100;

returnz;

}

求积分

一、设计内容

小明最近在学高等数学,被数学里面的微积分难倒了。

但小明编程能力很强,于是他就突发奇想,看能不能用编程的方法来帮助理解数学的学习。

以下是他想求解的问题:

请编程求解

的值,并分析

的值与

的关系。

(提示:

如下图,按照积分的原理,将函数区间切分为非常小的长方形,其中长方形的宽度为切分的间距

,长方形的高度为方格所在横坐标对应的函数值

,则图中第

个小长方形(阴影部分)面积为

,而最终函数的积分值为所有小方格的面积之和。

)0.128

二、

二、方案设计与论证

将不规则图形分割成小矩形,最后求和。

三、

程序运行结果(截图)

 

四、心得体会

将不规则图形分的越多,面积越准确。

五、参考资料与致谢

查找积分的几何意义。

六、源程序

#include

#defineN100000

intmain()

{

floatx,sum;

inti;

for(i=1,sum=0,x=1;i<=N;i++)

{

sum=sum+(1.0/(x*x+4*x))*(1.0/N);

x=x+1.0/N;

}

printf("%f",sum);

return0;

}

求离群点

一、设计内容

随机生成一组位于二维坐标系中的点集(集合大小小于50),点集中每个点的位置由x轴分量和y轴分量组成,且1

x

80,1

y

80。

求这组点集中的离群点。

(离群点定义:

远离点集一般水平的极端大值和极端小值)。

要求:

若有离群点,请输出离群点的坐标;若无离群点,则输出“Nooutliers!

”,将离群点在终端用#输出表示,非离群点用*输出表示,显示方式如下图所示。

提示:

离群点判断的方法不止一种,例如,可借助点集所有的数据的平均值为圆心,以所有点集到圆心的平均距离为半径,所构成的圆。

在圆中的为正常点,否则为离群点。

二、方案设计与论证

开一个90*90的数组,并随机生成50个点。

再开一个90*90的数组,计算50个点到80*80个点的平均距离,找到最小的(离群点)。

计算所有点到离群点的距离,小于等于就为正常点,否则为离群点。

三、程序运行结果(截图)

 

四、心得体会

由于行间距不对,所以看起来很怪,本来是正方形的。

没有离群点的概率太小了……..

五、参考资料与致谢

参考题目的提示来写的。

参考随机数生成法。

六、源程序

#include

#include

#include

#defineMAX80

#defineMIN1

intmain()

{

inta[90][90],b[170];

floatr[90][90],min;

inti,j,k,m,n,q=0,x,y,l;

srand((unsigned)time(NULL));

for(i=1;i<=80;i++)//准备工作,全为0

{

for(j=1;j<=80;j++)

{

a[i][j]=0;

r[i][j]=0.0;

}

}

for(1;1;1)

{

for(i=1;i<=160;i++)//取随机数

{

b[i]=rand()%(MAX-MIN+1)+MIN;

}

for(j=2;j<=160;j=j+2)

{

m=b[j];

n=b[j-1];

if(a[m][n]==1)continue;

elseif(a[m][n]!

=1){a[m][n]=1;q++;}

if(q==50)break;

}

if(q<50)continue;

elseif(q==50)break;

}

for(i=1;i<=80;i++)//计算平均圆心距

{

for(j=1;j<=80;j++)

{

for(m=1;m<=80;m++)

{

for(n=1;n<=80;n++)

{

if(a[m][n]==1)

{

x=m-i;

x=abs(x);

x=x*x;

y=n-j;

y=abs(y);

y=y*y;

r[i][j]=r[i][j]+sqrt(x+y);

}

}

}

r[i][j]=r[i][j]*1.0/50;

}

}

for(i=1,min=r[1][1];i<=80;i++)//找最小

{

for(j=1;j<=80;j++)

{

if(r[i][j]<=min)

{

min=r[i][j];m=i;n=j;

}

elseif(r[i][j]>min)

{

min=min;

}

}

}

for(l=0,i=1,k=0;i<=80;i++)//判断该点是什么类型

{

for(j=1;j<=80;j++)

{

if(a[i][j]==1)

{

x=m-i;

x=abs(x);

x=x*x;

y=n-j;

y=abs(y);

y=y*y;

if(sqrt(x+y)<=min)

{

a[i][j]=3;

}

elseif(sqrt(x+y)>min)

{

a[i][j]=2;

l++;

}

}

}

}

if(l==0)

printf("Nooutliers!

");

else

{

for(i=1;i<=80;i++)//输出

{

for(j=1;j<=80;j++)

{

if(a[i][j]==0)

printf("");

elseif(a[i][j]==2)

printf("#");

elseif(a[i][j]==3)

printf("*");

}

printf("\n");

}

printf("\n");

n=80-n;

printf("(%d,%d)\n",m,n);

}

return0;

}

2阶曲线绘制

一、设计内容

2阶曲线公式可描述为

其中,

为曲线的参数,由用户手动输入。

请编程绘制出该曲线的图形,坐标原点,y轴正方向,x轴正方向,如下图所示

提示:

可利用二维数组预先计算并存储每个点(图中用“*”表示)的坐标,然后利用循环一次性输出图形。

二、方案设计与论证

开一个400*80的二维数组(以中心点做原点)。

再开一个数组,计算-40~40的x代入方程的所得值。

如果这个值大于200或小于-200,就计算下一个。

输出。

三、程序运行结果(截图)

 

四、心得体会

由于WIN10于VC6.0不兼容,输出图形变形,于是输出一行一个回车。

五、参考资料与致谢

六、源程序

#include

intmain()

{

floata0,a1,a2,a[420][90],zhi[90];

float;

inti,j,k,x,y;

scanf("%f%f%f",&a0,&a1,&a2);

for(i=1;i<=401;i++)//准备

{

for(j=1;j<=85;j++)

{

a[i][j]=0;

}

}

for(i=1;i<=79;i++)//建坐标系

{

a[201][i]=1;

}

for(i=1;i<=401;i++)

{

a[i][40]=2;

}

a[1][40]=6;

a[201][40]=4;

a[201][79]=5;

for(i=-39,j=1;i<=39;i++,j++)//算y值

{

zhi[j]=a0+a1*i+a2*i*i;

}

for(i=1;i<=79;i++)//计算对应坐标

{

y=zhi[i];

if(y>=200||y<=-200)continue;

y=201-y;

a[y][i]=3;

}

for(i=1;i<=401;i++)

{

for(j=1;j<=79;j++)

{

if(a[i][j]==0)

printf("");

elseif(a[i][j]==1)

printf("-");

elseif(a[i][j]==2)

printf("|");

elseif(a[i][j]==3)

printf("*");

elseif(a[i][j]==4)

printf("+");

elseif(a[i][j]==5)

printf(">");

elseif(a[i][j]==6)

printf("^");

}

printf("\n");

}

return0;

}

概率法求圆周率

一、设计内容

如下图所示,设一直角坐标系中,有一边长为1的正方形,以原点为中心1为半径,在正方形中画一扇形(1/4圆)。

概率法求解圆周率的过程为:

随机产生n个范围在(0,1)之间的点,若其中有m个点落于扇形中,则

提示:

根据圆的特点,

判断随机生成的点是否在扇形内。

二、方案设计与论证

随机产生0~1之间的小数,赋值给x,y。

计算x^2+y^2是否<=1。

循环,让数据更准确。

三、程序运行结果(截图)

 

四、心得体会

随机数并不是真正意义上的随机数。

五、参考资料与致谢

RAND_MAX是rand()随机产生的最大数。

六、源程序

 

#include

#include

#include

#include

intmain()

{

floatx,y,pi;

inti,k;

srand((unsigned)time(NULL));

for(k=0,i=1;i<=10000;i++)

{

x=rand()*1.0/RAND_MAX;

y=rand()*1.0/RAND_MAX;

if(sqrt(x*x+y*y)<=1)

k++;

}

pi=4*(k*1.0/10000);

printf("%f",pi);

return0;

}

推箱子游戏设计

一、设计内容

功能:

实现简易小人推箱子游戏,游戏过程:

(1)初始时,小人在窗口的左上角位置,箱子在小人的右侧;

(2)在小人前方随机生成若干个阻碍物;(3)在窗口的右侧随机生成一个出口;(4)要求小人能够将箱子推到窗口右侧出口。

基本要求:

1用键盘上、下、左、右按键控制小人移动。

2在小人前方随机生成若干个阻碍物和一个箱子。

3小人必须推箱子,而不能拉箱子。

4小人必须穿过阻碍物之间的空隙,到达出口。

5小人进入出口时提示游戏成功。

6小人无路可走时提示游戏失败。

7小人每移动一步在窗口的左下角显示当前已经移动的步数。

8用户可自行放弃游戏

提示:

小人可以用“

”表示(ASCII码值为12),阻碍物可用“

”表示(ASCII码值为5),推箱子可用“

”表示(ASCII码值为30)。

二、方案设计与论证

利用整形二维数组,围一个(0~25)*(0~81)的空间。

全部赋值为0。

最边上一圈为墙,用1表示。

随机生成墙,出口。

人用7表示。

方块用4表示。

用Getch读取上下左右,计算人,方块的坐标。

输出,逢0输出空格,逢1输出墙,逢7输出人,逢4输出方块。

三、程序运行结果(截图)

 

 

四、心得体会

上下左右的读入有点小困难,在网上找了好久。

控制台行间距太大,看起来很难受。

五、参考资料与致谢

按照网上的方法,getch上下左右,输出前都有“-32”

上72

下80

左75

右77

六、源程序

#include

#include

#include

intmain()

{

inta[40][100];

inti,j,k,m,n,p,q,bu,cheng,zhong;

srand((unsigned)time(NULL));

for(i=1;i<=23;i++)//画空气0

{

for(j=1;j<=80;j++)

{

a[i][j]=0;

}

}

for(i=0;i<=85;i++)

{

a[0][i]=1;

a[24][i]=1;

}

for(i=0;i<=30;i++)

{

a[i][0]=1;

a[i][81]=1;

}

m=rand()%21+2;//画随机墙1

n=rand()%21+2;

p=rand()%21+30;

for(1;1;1)

{

q=rand()%21+30;

if(q>(p+4)||q<(p-4))break;

}

for(i=1;i<=23;i++)

{

if(i==m)continue;

a[i][p]=1;

}

a[m+1][p]=0;

for(i=1;i<=23;i++)

{

if(i==n)continue;

a[i][q]=1;

}

a[n+1][q]=0;

zhong=rand()%21+2;//随机终点

a[zhong-1][80]=1;

a[zhong-1][79]=1;

a[zhong+1][80]=1;

a[zhong+1][79]=1;

a[1][1]=7;//人

a[2][2]=4;//箱子

for(bu=0,cheng=9;1;1)

{

for(i=1;i<=23;i++)

{

for(j=1;j<=80;j++)

{

if(a[i][j]==0)

printf("");

elseif(a[i][j]==1)

printf("%c",5);

elseif(a[i][j]==7)

{

printf("%c",12);

m=i;

n=j;

}

elseif(a[i][j]==4)

{

printf("%c",30);

p=i;

q=j;

}

}

printf("\n");

}

printf("总共%d步。

(ESC退出)\n",bu);

if(cheng==1)

{

printf("游戏成功!

");

break;

}

elseif(cheng==0)

{

printf("游戏失败!

");

break;

}

k=getch();

if(k==27)break;

if(k==75)//左

{

if(q==(n-1)&&m==p)//箱子在左边

{

if(a[m][q-1]==1);//箱子左边是墙

elseif(a[m][q-1]!

=1)//箱子左边不是墙

{

a[m][q]=0;

a[m][q-1]=4;

a[m][n]=0;

a[m][n-1]=7;

bu++;

q=q-1;

n=n-1;

}

}

elseif((q!

=(n-1)&&m==p)||m!

=p)//箱子不在

{

if(a[m][n-1]==1);//人左边是墙

elseif(a[m][n-1]!

=1)//人左边不是墙

{

a[m][n]=0;

a[m][n-1]=7;

bu++;

n=n-1;

}

}

}

elseif(k==77)

{

if(q==(n+1)&&m==p)//箱子在右边

{

if(a[m][q+1]==1);//箱子右边是墙

elseif(a[m][q+1]!

=1)//箱子右边不是墙

{

a[m][q]=0;

a[m][q+1]=4;

a[m][n]=0;

a[m][n+1]=7;

bu++;

q=q+1;

n=n+1;

}

}

elseif((q!

=(n+1)&&m==p)||m!

=p)//箱子不在

{

if(a[m][n+1]==1);//人右边是墙

elseif(a[m][n+1]!

=1)//人右边不是墙

{

a[m][n]=0;

a[m][n+1]=7;

bu++;

n=n+1;

}

}

}

elseif(k==72)

{

if(p==(m-1)&&n==q)

{

if(a[p-1][q]==1);

elseif(a[p-1][q]!

=1)

{

a[p][q]=0;

a[p-1][q]=4;

a[m][n]=0;

a[m-1][n]=7;

bu++;

p=p-1;

m=m-1;

}

}

elseif((p!

=(m-1)&&n==q)||n!

=q)

{

if(a[m-1][n]==1);

elseif(a[m-1][n]!

=1)

{

a[m][n]=0;

a[m-1][n]=7;

bu++;

m=m-1;

}

}

}

elseif(k==80)

{

if(p==(m+1)&&n==q)

{

if(a[p+1][q]==1);

elseif(a[p-1][q]!

=1)

{

a[p][q]=0;

a[p+1][q]=4;

a[m][n]=0;

a[m+1][n]=7;

bu++;

p=p+1;

m=m+1;

}

}

elseif((p!

=(m+1)&&n==q)||n!

=q)

{

if(a[m+1][n]==1);

elseif(a[m+1][n]!

=1)

{

a[m][n]=0;

a[m+1][n]=7;

bu++;

m=m+1;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1