返回列表 回复 发帖

趣味菜单实在很无趣············(求高人指点)

遇到 如下的所谓C语言趣味菜单的代码,如何才能简化它到极致·······(太长了,那打的就不是代码啦·······)还请个路高手指点·······························

#nclude<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>

void FindNum();
void FindRoot();
void Detective();
void Bear();
void Diamond();
int menu_select();

void main()
{

for(; ; ) {

switch(menu_select()){

case1:

FindNum();

break;

case2:

FindRoot();

break;

case3:


Detective();

break;

case4:

Bear();

break;

case5:

Diamond();

break;

case6:

printf("Goodbye!\n");

exit(0);

}

}
}
int menu_select()
{

chars;

intcn;

printf("1.FindNum\n");

printf("2.Findroot\n");

printf("3.Detective\n");

printf("4.Bear\n");

printf("5.Diamond\n");

printf("6.Goodbye\n");

printf("Input1-6:");

do{

s=getchar();

cn=(int)s-48;

}while(cn<0||cn>6);

returncn;
}
void FindNum()
{

charbegin;

inti;

printf("要使下面的等式成立,应在_中填上哪个相同的数字?\n");

printf("
3_x6237=_3x3564\n");

printf("求解结果为:\n");

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

if((30+i)*6237==(10*i+3)*3564)

{

printf("number=%d\n",i);

break;

}
}
void FindRoot()
{

floata,b,c;

doublex1,x2,d,p=0,q=0;

printf("这是一个求方程ax2+bx+c=0的根的程序。\n");

printf("把变量设为double,使用库函数math进行计算。\n");

printf("输入方程系数啊a,b,c:\n");

scanf("%f,%f,%f",&a,&b,&c);

d=b*b-4*a*c;

printf("方程的解是:\n");

if(d>0)

{

x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("x1=%5.2f+%5.2fi\tx2=%5.2fi\n",p,q,p,q);

}
}
void Detective()
{

inti,j,k,c;

printf("一辆汽车撞人后逃跑.4个目击者提供如下线索:\n");

printf("甲:牌照三、四位相同;\n");

printf("乙:牌号为31xxxx;\n");

printf(": 牌照五、六位相同;\n");

printf(":三、六位是一个整数的平方。\n");

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

for(j=0;j<=9;j++)

if(i!=j)

{

k=i*1000+i*100+j*10+j;

for(c=31;c*c<k;c++);

if(c*c==k)

printf("牌照号码是:%ld.\n",310000+k);

}
}
void Bear()
{

intday,x1,x2;

printf("狗熊到玉米地吃包谷.\n");

printf("第一天吃了一半又拿走一个回去喂小熊.\n");

printf("第二天又去吃了剩下的一半,走时仍然带一个回去.\n");

printf("以后每天都吃前一天剩下的一半,拿走一个.\n");

printf("到第十天时,地里只剩下一个包谷.求地里一共有多少包谷.\n");

day=10;

x2=1;
while(day>0)
{

x1=(x2+1)*2;

x2=x1;

day--;
}
printf("包谷总数=%d\n",x1);
}
void Diamond()
{

inti,j,k;

printf("打印菱形图案.\n");

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

{

for(j=1;j<=16-i;j++)

printf("");

for(k=1;k<=(2*i-1);k++)

printf("*");

printf("\n");

}

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

{

for(j=1;j<=i+12;j++)

printf("");

for(k=1;k<=(7-2*i);k++)

printf("*");

printf("\n");

}
}



还有第二个············
//s4.h


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
extern const int SIZE;
double *init(int);
void readin(double *);
void product(double *,double *,int n);
void sort(x,a,SIZE);


#include"s4.h"
double *init(int n)
{
    return(double*)malloc(n*sizeof(double));
}


#include"s4.h"
void product(double *addr,double *result,int n)
{
    for(n--,*result=*(addr+n);--n>=0;*result*=*(addr+n));
}

#include"s4.h"
void readin(double *a)
{
    int i;
    printf("Please enter %d value:\n",SIZE);
    for(i=0;i<SIZE;i++)
        scanf("%lf,a+i");
}

#include"s4.h"
const int SIZE=10;
int main()
{
    double *x,*y,res,a[10]={0.0};
    int i;
    if((x=init(SIZE))==NULL)
        return 0;
    readin(x);
    product(x,&res,SIZE);
    printf("Their product is: %10.2f\n",res);
    printf("\tx:\n");
    for(i=0;i<SIZE;i++)
    {
        if(i==5)printf("\n");
        printf("%10.2f",*(x+i));
    }
    printf("\n\ta:\n");
    sort(x,a,SIZE);
    for(i=0;i<SIZE;i++)
    {
        if(i==5)printf("\n");
        printf("%10.2f",*(a+i));
    }
    printf("\n\ty:\n");
    if((y=init(SIZE))==NULL)
        return 0;
    for(i=0;i<SIZE;i++,y++)
        *y=a*SIZE;
    for(--y,i=SIZE;i>0;i--,y--)
    {
        if(i==5)printf("\n");
        printf("%10.2f",*y);
    }
    ++y;
    free(y);
    free(x);
return 0;
}

#include"s4.h"
void swap(double *,double *);
void sort(double *x,double a[],int n)
{
    int i,j,pick;
    for(i=0;i<n;i++)
        a=*(x+i);
    for(i=0;i<(n-1);++i)
    {
        pick=i;
        for(j=i+1;j<n;j=j+1)
        {
            if(a[j]<a[pick])
                pick=j;
        }
        swap(&a[pick],&a);
    }
}
void swap(double *p1,double *p2)
{
    double temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}
返回列表