C语言课程设计报告.docx
《C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告.docx(48页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告
中南大学
课程设计报告
课程名称
C语言课程设计
学院
化学化工学院
姓名
******
班级
化工0808班
学号
1505080802
时间
09年7月
2008~2009学年第2学期
文档一.使用菜单选择趣味程序
【一.问题描述】菜单是应用程序的界面,控制语句用来改变程序执行的顺序,是实现结构化设计的基础。
本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。
【二.具体要求】本题的设计分两步:
(1).先设计一个含有多个菜单项的菜单演示程序;菜单内容程序运行后,给出七个菜单项的内容和输出提示:
1.FindNum2.FindRoot3.Detective4.Bear5.Curve6.YearDay7.GoodBye!
(2).设计要求:
使用数字1-7来选择菜单项,其他输入则不起作用。
再为上述菜单配上相应的功能,即以上述菜单的设计为基础,增加菜单项的处理功能。
菜单设计要求(这是六道编程题,要求在运行菜单时,能给出每个程序的运行结果):
1.FindNum
有1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。
□□□+□□□=□□□□
2.FindRoot
求方程x3-3x-1=0在区间【-8,8】内的全部实根。
3.Detective
这是一个侦探题,有一辆汽车撞人后逃跑了,四个目击证人提供线索如下:
牌照三、四位相同;牌号为31xxxx;牌照五、六位相同,三到六位是一个整数的平方。
4.Bear
有一只狗熊到玉米地里吃玉米,一边掰一边吃。
第一天吃了一半,又拿走一个回去喂小熊,第二天,又去吃了剩下的一半,走时仍带走一个回去喂小熊。
以后每天都吃前一天剩下的一半,拿走一个。
到第十天,地里只剩一个玉米。
求地里一共有多少玉米。
5.Curve
绘制一条滴定曲线,(已知0.1000mol/L的氢氧化钠滴定20.00mL同浓度的盐酸)。
曲线如图所示。
此题可以根据所给曲线大致形状,运用常规的编制图形的方法来绘制。
也可以根据下面的方程来绘制滴定曲线。
[H+]=CHCl(1-a)/2+[(1-a)CHCl2/4+Kt-1]
其中,[H+]为氢离子浓度,CHCl为盐酸浓度,Kt=1014.00,a为滴定分数(令a在0-2范围内取值,步长为0.001),a=Vb/20,Vb为氢氧化钠加入到盐酸中的瞬时浓度。
6.YearDay
已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历。
7.GoodBye!
这里除了输出一个信息外,还必须结束程序运行。
【三.系统分析】
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
本程序运用switch……case语句实现了七个菜单项的演示程序,并分别定义了几个功能函数分别为上述菜单配上相应的功能,通过主函数调用各个函数而实现趣味菜单程序。
(9)本大题的流程图大体如下:
运行时,如下图顺序:
【四.测试数据及伪代码】
#include"stdio.h"
#include"conio.h"
#include"math.h"
#include"Process.h"
#defineYES1
#defineNO0
intcount2=0;
voidfindnum();
voidfindroot(floatgen[],floatx1,floatx2);
voiddetective();
voidyearday(intyear);
intbear(intdays);
main()
{intch1,t1=1;
floatgen[100];
intyear;
while(t1)
{
system("cls");
printf("1.FindNum\n2.FindRoot\n3.Detective\n4.Bear\n5.Curve\n6.YearDay\n7.GoodBye!
\n");
printf("Pleaseinputanumberwhichisbetween1and7:
");
fflush(stdin);
scanf("%d",&ch1);
switch(ch1)
{
case1:
findnum();break;
case2:
findroot(gen,-8.0,8.0);printf("一共有%d个解:
x1=%fx2=%fx3=%f\nPressanykeytoreturn.\n",count2,gen[0],gen[1],gen[2]);getch();break;
case3:
detective();break;
case4:
printf("地里一共有%d个玉米\nPressanykeytoreturn.\n",(2*(bear(9)+1)));getch();break;
case6:
printf("\n输入年份:
");
fflush(stdin);scanf("%d",&year);yearday(year);printf("\nPressanykeytoreturn.\n");getch();break;
case5:
break;
case7:
printf("goodbye!
");t1=0;break;
default:
printf("Only1~7,please!
Pressanykeytoreturn.\n");getch();continue;
}
}
}
intpanduan(ints[10],intx)
{
intt;
for(t=0;t{
if(s[x]==s[t])return1;
}
return0;
}
voidfindnum()
{
inta[10],count=0;
longintji=1;
for(a[0]=1;a[0]<=9;a[0]++)
for(a[1]=0;a[1]<=9;a[1]++)
{if(panduan(a,1))continue;
for(a[2]=0;a[2]<=9;a[2]++)
{if(panduan(a,2))continue;
for(a[3]=0;a[3]<=9;a[3]++)
{if(panduan(a,3))continue;
for(a[4]=0;a[4]<=9;a[4]++)
{if(panduan(a,4))continue;
for(a[5]=0;a[5]<=9;a[5]++)
{if(panduan(a,5))continue;
for(a[6]=1;a[6]<=9;a[6]++)
{if(panduan(a,6))continue;
for(a[7]=0;a[7]<=9;a[7]++)
{if(panduan(a,7))continue;
for(a[8]=0;a[8]<=9;a[8]++)
{if(panduan(a,8))continue;
for(a[9]=0;a[9]<=9;a[9]++)
{
{if(panduan(a,9))continue;
if(100*a[0]+10*a[1]+a[2]+100*a[3]+10*a[4]+a[5]!
=1000*a[6]+100*a[7]+10*a[8]+a[9])continue;
printf("%d%d%d+%d%d%d=%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
count++;
}
}
}
}
}
}
}
}
}
}
printf("Thereare%ldpossibleanswersinall.\nPressanykeytoreturn.",count);
getch();
}
floathanshu(floatx)
{
floatjie;
jie=x*x*x-3*x-1;
returnjie;
}
floatqiudao(floatx)
{
floatdao;
dao=3*x*x-3;
returndao;
}
voidfindroot(floatgen[],floatx1,floatx2)
{
floatnear1,l=x1,h=x2,j,d;
intkey1=-1;
near1=(l+h)/2;
j=hanshu(near1);
while
(1)
{
d=qiudao(near1);
near1=near1-j/d;
j=hanshu(near1);
printf("x=%lf,y=%lf\n",near1,j);
if(near1>h||near1if(j<0.0001&&j>-0.0001){key1=1;gen[count2++]=near1;break;}
}
if(key1==1)
{
findroot(gen,near1,x2);
findroot(gen,x1,near1);
}
elsereturn;
}
voiddetective()
{
inttemp1,temp2;
intpai3,pai5;
for(pai3=0;pai3<=9;pai3++)
for(pai5=0;pai5<=9;pai5++)
{
temp1=1100*pai3+11*pai5;
temp2=(int)sqrt(temp1);
if(temp2*temp2==temp1)printf("车牌号为:
31%d%d%d%d\n",pai3,pai3,pai5,pai5);
elsecontinue;
}
printf("Pressanykeytoreturn.");
getch();
}
intbear(intdays)
{
if(days==1)return1;
elsereturn(2*(bear(days-1)+1));
}
intisleap(intyear)
{
intleap=NO;
if(year%4==0&&year%100!
=0||year%400==0)leap=YES;
returnleap;
}
intweek_of_newyears_day(intyear)
{
intn=year-2000,leaps_num;
if(year>2000)
{
leaps_num=1+(n-1)/4-(n-1)/100+(n-1)/400;
n=n+leaps_num-1;
n=n%7;
returnn;
}
if(year==2000)return6;
if(year<2000)
{
leaps_num=(n+1)/4-(n+1)/100+(n+1)/400;
n=n+leaps_num;
n=6+n%7;
returnn;
}
return0;
}
voidyearday(intyear)
{
intmonth,day,weekday,len_of_month,i;
weekday=week_of_newyears_day(year);
for(month=1;month<=12;month++)
{
printf("\n%d年%d月\n",year,month);
printf("---------------------------------\n");
printf("SUMMONTUEWEDTHUFRISAT\n");
printf("---------------------------------\n");
for(i=0;iif(month==4||month==6||month==9||month==11)len_of_month=30;
elseif(month==2)
{
if(isleap(year))
len_of_month=29;
else
len_of_month=28;
}
else
len_of_month=31;
for(day=1;day<=len_of_month;day++)
{
if(day>9)
printf("%2d",day);
else
printf("%1d",day);
weekday++;
if(weekday==7){weekday=0;printf("\n");}
}
printf("\n");
}
}
【五.运行结果】
1.FindNum
2.FindRoot
3.Detective
4.Bear
5.Curve
6.YearDay
7.GoodBye!
Pleaseinputanumberwhichisbetween1and7:
1
246+789=1035
249+786=1035
264+789=1053
269+784=1053
284+769=1053
286+749=1035
289+746=1035
289+764=1053
324+765=1089
325+764=1089
342+756=1098
346+752=1098
347+859=1206
349+857=1206
352+746=1098
356+742=1098
357+849=1206
359+847=1206
364+725=1089
365+724=1089
423+675=1098
425+673=1098
426+879=1305
429+876=1305
432+657=1089
437+589=1026
437+652=1089
439+587=1026
452+637=1089
457+632=1089
473+589=1062
473+625=1098
475+623=1098
476+829=1305
479+583=1062
479+826=1305
483+579=1062
487+539=1026
489+537=1026
489+573=1062
537+489=1026
539+487=1026
573+489=1062
579+483=1062
583+479=1062
587+439=1026
589+437=1026
589+473=1062
623+475=1098
624+879=1503
625+473=1098
629+874=1503
632+457=1089
637+452=1089
652+437=1089
657+432=1089
673+425=1098
674+829=1503
675+423=1098
679+824=1503
724+365=1089
725+364=1089
742+356=1098
743+859=1602
746+289=1035
746+352=1098
749+286=1035
749+853=1602
752+346=1098
753+849=1602
756+342=1098
759+843=1602
764+289=1053
764+325=1089
765+324=1089
769+284=1053
784+269=1053
786+249=1035
789+246=1035
789+264=1053
824+679=1503
826+479=1305
829+476=1305
829+674=1503
843+759=1602
847+359=1206
849+357=1206
849+753=1602
853+749=1602
857+349=1206
859+347=1206
859+743=1602
874+629=1503
876+429=1305
879+426=1305
879+624=1503
Thereare96possibleanswersinall.
Pressanykeytoreturn.
1.FindNum
2.FindRoot
3.Detective
4.Bear
5.Curve
6.YearDay
7.GoodBye!
Pleaseinputanumberwhichisbetween1and7:
2
x=-0.333333,y=-0.037037
x=-0.347222,y=-0.000196
x=-0.347296,y=0.000000
x=2.762340,y=11.791083
x=2.169573,y=2.703559
x=1.926472,y=0.370286
x=1.880948,y=0.011883
x=1.879387,y=0.000014
x=3.448102,y=29.651591
x=2.540444,y=7.774325
x=2.065286,y=1.613427
x=1.900587,y=0.163600
x=1.879711,y=0.002475
x=1.879385,y=0.000001
x=-1.532097,y=-0.000031
x=-2.931592,y=-17.399994
x=-2.167854,y=-4.684463
x=-1.745783,y=-1.083378
x=-1.569432,y=-0.157397
x=-1.533573,y=-0.006008
x=-1.532091,y=-0.000010
x=1.879442,y=0.000428
x=-3.308333,y=-27.284940
x=-2.393812,y=-7.535910
x=-1.862778,y=-1.875395
x=-1.609682,y=-0.341762
x=-1.538082,y=-0.024389
x=-1.532129,y=-0.000163
x=-1.532089,y=0.000000
一共有3个解:
x1=-0.347296x2=1.879387x3=-1.532091
Pressanykeytoreturn.
1.FindNum
2.FindRoot
3.Detective
4.Bear
5.Curve
6.YearDay
7.GoodBye!
Pleaseinputanumberwhichisbetween1and7:
3
车牌号为:
310000
车牌号为:
317744
Pressanykeytoreturn.
1.FindNum
2.FindRoot
3.Detective
4.Bear
5.Curve
6.YearDay
7.GoodBye!
Pleaseinputanumberwhichisbetween1and7:
4
地里一共有1534个玉米
Pressanykeytoreturn.
1.FindNum
2.FindRoot
3.Detective
4.Bear
5.Curve
6.YearDay
7.GoodBye!
Pleaseinputanumberwhichisbetween1and7:
6
输入年份:
2005
2005年1月
---------------------------------
SUMMONTUEWEDTHUFRISAT
---------------------------------
1
2345678
9101112131415
16171819202122
23242526272829
3031
2005年2月
---------------------------------
SUMMONTUEWEDTHUFRISAT
---------------------------------
12345
6789101112
13141516171819
20212223242526
2728
2005年3月
---------------------------------
SUMMONTUEWEDTHUFRISAT
---------------------------------
12345
6789101112
13141516171819
20212223242526
2728293031
2005年4月
---------------------------------
SUMMONTUEWEDTHUFRISAT
---------------------------------
12
3456789
10111213141516
17181920212223
24252627282930
2005年5月
---------------------------------
SUMMONTUEWEDTHUFRISAT
---------------------------------
1234567
891011121314
15161718192021
22232425262728
293031
2005年6月
---------------------------------
SUMMONTUEWEDTHUFRISAT
---------------------------------
1234
567891011
12131415161718
19202122232425
2627282930
2005年7月
---------------------------------
SUMMONTUE