计算机课程设计安全过河.docx
《计算机课程设计安全过河.docx》由会员分享,可在线阅读,更多相关《计算机课程设计安全过河.docx(10页珍藏版)》请在冰豆网上搜索。
计算机课程设计安全过河
计算机技术基础课程设计
C语言
设计报告
题目:
安全过河
学院:
工商管理学院
专业:
信息管理与信息系统
班级:
050507班
姓名:
指导教师:
张守伟
设计日期:
2011年12月03日
题目:
安全过河问题
一、选题背景:
该游戏是我由一个数学建模题——“安全过河问题”而构思的。
有三个商人带者三个随从和货物过河。
二、设计思路:
船每次最多只能载两个人,要求保证在过河期间商人的人数要大于或等于随从的人数,否则随从杀人抢劫构思:
三:
设计分析:
应用技术点及主要解决问题阐述
用两个数组来表示两岸的商人和随从,其中'A'表示商人,'B'表示随从,数组a表示此岸,数组b表示彼岸;通过输入过河的人数,来改变两个数组中的'A'和'B'的个数,在用文本输出两岸的情况.游戏规则是这样似的:
技术关键
1)输入过河的人数;
2)非法输入按按了退出处理(如:
每次输入的人数不得多于两个;不得输入负数,字母等).
四:
程序流程图
五:
程序清单
#include
#include
#include
voidhelpf()
{
clrscr();
gotoxy(6,3);
printf("该游戏是由一个数学建模题——安全过河问题而构思的。
\n\n有三个商人带者三个随从和货物过河,船每次最多只能载两个人,要求保证在过河期间\n\n商人的人数要大于或等于随从的人数,否则随从杀人抢货。
\n\n游戏规则是这样似的:
\n\n1)输入过河的人数;\n\n2)非法输入按按了退出处理");
printf("祝君好运!
\n");
printf("\t\t\t作者:
纪影\n");
printf(“\t\t\t作的不好请多多指教“);
}
chara[6];
charb[6];
voidprintcase(chara[],charb[])
{inti,j,xa,xb,x0,ya,yb,y0;
xa=xb=x0=ya=yb=y0=0;
gotoxy(1,4);
printf("此岸\t\t 彼岸\n");
for(i=0;i<6;i++){
if(a[i]=='A')
xa++;
elseif(a[i]=='B')
xb++;
elseif(a[i]=='0')
x0++;
}
for(i=1;i<=xa;i++)
printf("商人 ");
printf("\n");
for(i=1;i<=xb;i++)
printf("随从 ");
printf("\n");
for(i=1;i<=x0;i++)
printf(" ");
printf("\n");
for(j=0;j<6;j++){
if(b[j]=='A')
ya++;
elseif(b[j]=='B')
yb++;
elseif(b[j]=='0')
y0++;
}
gotoxy(25,5);
for(j=1;j<=ya;j++)
printf("商人");
gotoxy(25,6);
for(j=1;j<=yb;j++)
printf("随从");
gotoxy(25,7);
for(j=1;j<=y0;j++)
printf(" ");
if(xa==0&&xb==0&&ya==3&&yb==3) {
printf("\n\n你已成功帮助商人安全过河!
");
exit(0);
}
}
voidmain()
{
inti,x,y,key,ca,cb,j,aA,aB,bA,bB;
helpf();
getch();
clrscr();
window(1,1,25,80);
textbackground
(1);
textcolor(14);
clrscr();
for(i=0;i<3;i++)
a[i]='A';
for(i=3;i<6;i++)
a[i]='B';
for(i=0;i<6;i++)
b[i]='0';
printcase(a,b);
while
(1){
gotoxy(20,10);
printf("输入去此岸商人的人数:
");
scanf("%d",&x);
gotoxy(22,10);
printf("输入去此岸随从的人数:
");
scanf("%d",&y);
for(ca=0,cb=0,i=0;i<6;i++){
if(a[i]=='A')
ca++;
elseif(a[i]=='B')
cb++;
}
if(x<0||x>ca||y<0||y>cb||x+y<1||x+y>2){
printf("输入有误!
!
");
exit(0);
}
for(i=1;i<=x;i++){
for(j=0;j<6;j++)
if(a[j]=='A'){
a[j]='0';
break;
}
}
for(i=1;i<=x;i++){
for(j=0;j<6;j++)
if(b[j]=='0'){
b[j]='A';
break;
}
}
for(i=1;i<=y;i++){
for(j=0;j<6;j++)
if(a[j]=='B'){
a[j]='0';
break;
}
}
for(i=1;i<=y;i++){
for(j=0;j<6;j++)
if(b[j]=='0'){
b[j]='B';
break;
}
}
for(aA=0,aB=0,i=0;i<6;i++){
if(a[i]=='A')
aA++;
elseif(a[i]=='B')
aB++;
}
for(bA=0,bB=0,i=0;i<6;i++){
if(b[i]=='A')
bA++;
elseif(b[i]=='B')
bB++;
}
if((aA==3)||(bA==3)||(aA==aB)||(bA==bB)) {
clrscr();
printcase(a,b);
}
else{
clrscr();
printf("商人被杀,再来一次吧!
!
!
!
\n\n\n\n");
printcase(a,b);
getch();
for(i=0;i<3;i++)
a[i]='A';
for(i=3;i<6;i++)
a[i]='B';
for(i=0;i<6;i++)
b[i]='0';
clrscr();
printcase(a,b);
continue;
}
gotoxy(20,10);
printf("输入回此岸商人的人数:
");
scanf("%d",&x);
gotoxy(22,10);
printf("输入回此岸随从的人数:
");
scanf("%d",&y);
for(ca=0,cb=0,i=0;i<6;i++){
if(b[i]=='A')
ca++;
elseif(b[i]=='B')
cb++;
}
if(x<0||x>ca||y<0||y>cb||x+y<1||x+y>2){
printf("输入有误!
!
");
exit(0);
}
for(i=1;i<=x;i++){
for(j=0;j<6;j++)
if(b[j]=='A'){
b[j]='0';
break;
}
}
for(i=1;i<=x;i++){
for(j=0;j<6;j++)
if(a[j]=='0'){
a[j]='A';
break;
}
}
for(i=1;i<=y;i++){
for(j=0;j<6;j++)
if(b[j]=='B'){
b[j]='0';
break;
}
}
for(i=1;i<=y;i++){
for(j=0;j<6;j++)
if(a[j]=='0'){
a[j]='B';
break;
}
}
for(aA=0,aB=0,i=0;i<6;i++){
if(a[i]=='A')
aA++;
elseif(a[i]=='B')
aB++;
}
for(bA=0,bB=0,i=0;i<6;i++){
if(b[i]=='A')
bA++;
elseif(b[i]=='B')
bB++;
}
if((aA==3)||(bA==3)||(aA==aB)||(bA==bB)){
clrscr();
printcase(a,b);
}
else{
clrscr();
printf("商人被杀,再来一次吧!
!
!
!
\n\n\n\n");
printcase(a,b);
getch();
for(i=0;i<3;i++)
a[i]='A';
for(i=3;i<6;i++)
a[i]='B';
for(i=0;i<6;i++)
b[i]='0';
clrscr();
printcase(a,b);
continue;
}
}
}
六、设计自评
设计优点:
本程序运用了所学的条件语句、使得程序模块化,简明而易懂。
给人一种层次感。
那个模化想互独立又相互嵌套。
如发现错误可以很快的改正。
有利于程序的扩充。
设计不足:
没有运用到数组等方面的知识。
由于能力的限制,功能还不够全面,有待于进一步提高。
同时内聚性不高。