C语言多功能模块设计.docx
《C语言多功能模块设计.docx》由会员分享,可在线阅读,更多相关《C语言多功能模块设计.docx(13页珍藏版)》请在冰豆网上搜索。
C语言多功能模块设计
算
法
应
用
1、
总模块设计
2、功能模块程序
总菜单:
#include<>
#include<>
externvoidmenu1();
externvoidmenu2();
externvoidmenu3();
voidmain()
{intchoice;
while
(1)
{
system("CLS");
printf("\n");printf("****************\n");
printf("菜单\n");
printf("--------------------\n");
printf("1.简单数据应用\n");
printf("2.递推应用\n");
printf("3.枚举应用\n");
printf("0.退出\n");
printf("****************\n");printf("请输入序号:
");
scanf("%d",&choice);
switch(choice)
{case1:
menu1();break;
case2:
menu2();break;
case3:
menu3();break;
case0:
return;
}}}
1.简单数据应用:
#include<>
#include<>
externvoidgcdn();
externvoidzhaoshu();
voidmenu1()
{
while
(1)
{
intchoice1;
system("CLS");
printf("\n");
printf("----------------------\n");
printf("简单数据应用\n");
printf("----------------------\n");
printf("1.最大公约数\n");
printf("2.排序找数\n");
printf("0.返回\n");
printf("----------------------\n");
printf("请输入序号:
");
scanf("%d",&choice1);
switch(choice1)
{case1:
gcdn();break;
case2:
zhaoshu();break;
case0:
return;}}}
2.递推应用:
#include<>
#include<>
externvoidgcdn();
externvoidzhaoshu();
voidmenu2()
{
intchoice2;
While
(1)
system("CLS");
printf("\n");
printf("----------------------\n");
printf("递推应用\n");
printf("----------------------\n");
printf("1.兔子繁殖\n");
printf("2.捕鱼问题\n");
printf("0.返回\n");
printf("----------------------\n");
printf("请输入序号:
");
scanf("%d",&choice1);
switch(choice1)
{case1:
tuzi();break;
case2:
buyu();break;
case0:
return;}}}
3.枚举应用:
#include<>
#include<>
externvoidgcdn();
externvoidzhaoshu();
voidmenu2()
{
intchoice3;
While
(1){
system("CLS");
printf("\n");
printf("----------------------\n");
printf("枚举应用\n");
printf("----------------------\n");
printf("1.兑币问题\n");
printf("2.八皇后问题\n");
printf("0.返回\n");
printf("----------------------\n");
printf("请输入序号:
");
scanf("%d",&choice1);
switch(choice1)
{case1:
duibi();break;
case2:
bahuanghon();break;
case0:
return;}}}
3、各子功能设计
a.最大公约数
#include<>
#include<>
intgcd(intn)
{inta,b,r,i;
printf("\nNumber1:
");
scanf("%d",&b);
for(i=1;i{printf("Number%d:
",i+1);
scanf("%d",&a);
r=a%b;
while(r!
=0)
{a=b;
b=r;
r=a%b;
}
}
return(b);
}
voidgcdn()
{intx,n1;
system("CLS");
printf("请输入数的个数:
\n");
scanf("%d",&n1);
x=gcd(n1);
printf("最大公约数:
%d\n",x);
system("PAUSE");
system("CLS");
return;
}
b.排序找数
#include<>
#include<>
#include<>
#defineN30
voiddeldit(char*s)
{intk;
k=1;
while(s[k]!
='\0'){if(s[k-1]>s[k])
break;
k++;
}
if(s[k]=='\0')
{s[k-1]='\0';
return;
}
k--;
do
{s[k]=s[k+1];
k++;
}
while(s[k]!
='\0');
return;
}
voidsortpro(char*s)
{inti,j,k,len;
charstmp;
len=strlen(s);
for(i=0;i{k=i;
for(j=i+1;jif(s[k]>s[j])k=j;
if(k!
=i)
{stmp=s[k];
s[k]=s[i];
s[i]=stmp;
}
}
}
voidzhaoshu(void)
{intd,s,len,i,k,m;
charstr[N+1],stmp;
system("CLS");
scanf("%d",&d);
while(d-->0)
{scanf("%s%d",str,&s);
for(i=0;i
deldit(str);
len=strlen(str);
k=len-1;
while(k>0)
{if(str[k]>str[k-1])
break;
k--;
}
if(k==0)
{printf("0\n");
return;
}
for(m=k,i=k+1;istr[k-1]&&str[i]m=i;
stmp=str[k-1];
str[k-1]=str[m];
str[m]=stmp;
sortpro(&str[k]);
printf("%s\n",str);
}
system("PAUSE");
}
c.兔子繁殖:
#include<>
intmain()
{inti,n,f[37];
scanf("%d",&n);
f[1]=1;
f[2]=2;
for(i=3;i<=n;i++)
f[i]=f[i-1]+f[i-2];
printf("第%d个月有%d对兔子\n",n,f[n]);
return0;}
d.捕鱼问题:
#include<>
intmain()
{inti,n,f[5],flag;
flag=1;
n=1;
while(flag!
=0)
{
f[0]=5*n+1;
flag=0;
for(i=1;i<5;i++)
{
if(f[i-1]%4!
=0)
{flag=1;break;}
f[i]=5*f[i-1]/4+1;
}
n++;
}
printf("5个人至少捕到%d条鱼\n",f[4]);
return0;
}
e.兑币问题:
整币兑换问题。
有1角、2角、5角、1元、5元共5种零币,现要将一张100元的整币换成零币,问共有多少种不同的兑换方案。
#include<>
voidmain()
{intp1,p2,p5,p10,p20,p50,n,m;
n=100;m=0;
for(p2=0;p2<=n/2;p2++)
for(p5=0;p5<=n/5;p5++)
for(p10=0;p10<=n/10;p10++)
for(p20=0;p20<=n/20;p20++)
for(p50=0;p50<=n/50;p50++)
{p1=n-(2*p2+5*p5+10*p10+20*p20+50*p50);
if(p1>=0)
m++;
}
printf("%d\n",m);
}
f.八皇后问题:
#include<>
#include<>
voidmain()
{intn=0;
longa;
for(a=;a<=;a++)
{if(chk18(a)==0)continue;
if(chkdia(a)==0)continue;
printf("%ld",a);
n++;
if(n%6==0)
printf("\n");}
printf("\n%d\n",n);}
intchk18(longm)
{intf[10],i,fg;
for(i=0;i<10;i++)
f[i]=0;
while(m!
=0)
{f[m%10]++;
m=m/10;}
for(fg=1,i=1;i<=8;i++)
if(f[i]!
=1)
{fg=0;break;}
return(fg);}
intchkdia(longm)
{intg[9],i,j,fg;
for(i=8;i>=1;i--)
{g[i]=m%10;
m=m/10;}
fg=1;
for(i=1;i<=7;i++)
for(j=i+1;j<=8;j++)
if(abs(g[j]-g[i])==j-i)
{fg=0;break;}
return(fg);}
心得体会:
这次的实验是以前曾经做过的,不过可能很久没有练习又忘记了,而且在以前的基础上增加了一些难度,经过同学的指导才把整个程序写出来,非常有成就感。