C语言:多功能计算器

好家伙,这个东西有点折磨

 

 

这是一个多功能计算器

 

#include<stdio.h>
#include<math.h>
#include<windows.h>
void first();/*二元一次方程*/
void second();//一元二次方程//
void third();//矩阵的相加//
void fourth();//矩阵的相减//
void fifth();//矩阵的相乘//
void sixth();//三角函数运算//
void seventh();//阶乘的运算// 

int main()
{    

    while(1)
    {
        int a;
        printf("\n");
        printf("********多功能科学计算器*********\n");
        printf("*\t1.二元一次方程求解\t*\n");
        printf("*\t2.一元二次方程求解\t*\n");
        printf("*\t3.矩阵的相加\t\t*\n");
        printf("*\t4.矩阵的相减\t\t*\n");
        printf("*\t5.矩阵的相乘\t\t*\n");
        printf("*\t6.三角函数运算\t\t*\n");
        printf("*\t7.阶乘的运算\t\t*\n");
        printf("*\t0.重启程序\t\t*\n");
        printf("****输入对应数字实现对应功能*****\n\n");
        printf("请输入:");
        scanf("%d",&a);
    
        if(a==0)
        {
            break;
        }
        switch(a)
        {
        case 1: 
            first();
            break;
        
        case 2:
            second();
            break;
        case 3:
            third();
            break;
        case 4:
            fourth();
            break;
        case 5:
            fifth();
            break;
        case 6:
            sixth();
            break;
        case 7:
            seventh();
            break;
        }
        system("pause");
        system("cls");
    } 

    return 0;
}
void first()/*二元一次方程*/
{
    double a,b,c,d,n,m,x,y;
    printf("公式为ax+by=m cx+dy=n\n");
    printf("请依次输入a,b,m,c,d,n\n");
    scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&m,&c,&d,&n);
    if(a*d-b*c==0)
    {
        printf("该方程无解\n");
    }
    else
    {
        x=(d*m-n*b)/(a*d-b*c);
        y=(a*n-c*m)/(a*d-b*c);
        printf("x=%f,y=%f",x,y);
    }
}

void second()//一元二次方程//
{
    double a,b,c,x1,x2 ;
    printf("公式为ax*x+bx+c=0\n");
    printf("请依次输入a,b,c\n");
    scanf("%lf%lf%lf",&a,&b,&c);
    if(b*b-4*a*c>=0)
    {
        x1=(-b+sqrt(b*b-4*a*c))/(2*a);
        x2=(-b-sqrt(b*b-4*a*c))/(2*a);
        if(x1==x2){
            printf("该方程仅有一解x=%f\n",x1);
        }
        else
        printf("x1=%f,x2=%f\n",x1,x2);
    }
    else
    {
        printf("该方程无解\n");
    }
}

void third()//矩阵的相加
{
    int a[100][100],b[100][100],c[100][100];
    int d,e,f,h,j,k;
    printf("请输入第一个矩阵行数和列数;\n");
    scanf("%d%d",&d,&e);
    printf("请输入矩阵中的数字:\n");
    for(f=1;f<=d;f++)
    {
        for(h=1;h<=e;h++)
        {
            printf("请输入第%d行第%d列的数字",f,h);
            scanf("%d",&a[f][h]);
            
        }
    }
    printf("请输入第二个矩阵行数和列数.\n");
    scanf("%d%d",&j,&k);
    printf("请输入矩阵中的数字:\n");
    for(f=1;f<=j;f++)
    {
        for(h=1;h<=k;h++)
        {
            printf("请输入第%d行第%d列的数字",f,h);


            scanf("%d",&b[f][h]);
        }
    }
    if(d==j&&e==k)//矩阵中只有行数于列数相同时候才能运算
    {
        for(f=1;f<=d;f++)
        {
            for(h=1;h<=e;h++)
            {
                c[f][h]=a[f][h]+b[f][h];
                printf("%4d",c[f][h]);
            }
            printf("\n");
        }
    }
    else
    {
        printf("该输入的矩阵无法相加,因为输入矩阵的行数与列数不同。\n");
    }
}

void fourth()//矩阵的相减//
{
    int a[100][100],b[100][100],c[100][100];
    int d,e,f,h,j,k;
    printf("请输入第一个矩阵行数和列数;\n");
    scanf("%d%d",&d,&e);
    printf("请输入矩阵中的数字:\n");
    for(f=1;f<=d;f++)
    {
        for(h=1;h<=e;h++)
        {
            printf("请输入第%d行第%d列的数字",f,h);
            scanf("%d",&a[f][h]);
        }
    }
    printf("请输入第二个矩阵行数和列数.\n");
    scanf("%d%d",&j,&k);
    printf("请输入矩阵中的数字:\n");
    for(f=1;f<=j;f++)
    {
        for(h=1;h<=k;h++)
        {
            printf("请输入第%d行第%d列的数字",f,h);


            scanf("%d",&b[f][h]);
        }
    }
    if(d==j&&e==k)//矩阵中只有行数于列数相同时候才能运算
    {
        for(f=0;f<d;f++)
        {
            for(h=0;h<e;h++)
            {
                c[f][h]=a[f][h]-b[f][h];
                printf("%4d",c[f][h]);
            }
        printf("\n");
        }
    }
    else
    {
        printf("该输入的矩阵无法相减,因为输入矩阵的行数与列数不同。\n");
    }

}

void fifth()//矩阵的相乘//
{
    int a[100][100],b[100][100];
    int d,e,f,h,j,k,t;
    double sum;
    double     c[100][100];
    printf("请输入第一个矩阵行数和列数;\n");
    scanf("%d%d",&d,&e);
    printf("请输入矩阵中的数字:\n");
    for(f=0;f<d;f++)
    {
        for(h=0;h<e;h++)
        {
            printf("请输入第%d行第%d列的数字",f,h);
            scanf("%d",&a[f][h]);
        }
    }
    printf("请输入第二个矩阵行数和列数.\n");
    scanf("%d%d",&j,&k);
    printf("请输入矩阵中的数字:\n");
    for(f=0;f<j;f++)
    {
        for(h=0;h<k;h++)
        {
            printf("请输入第%d行第%d列的数字",f,h);
            scanf("%d",&b[f][h]);
        }
    }
    if(e==j)//矩阵相乘只有在左边矩阵的列数等于右边矩阵的行数时才能相乘
    {
        for(f=0;f<d;f++)
        {
        
            for(h=0;h<k;h++)
            {
                sum=0;
                for(t=0;t<e;t++)
                {
                    sum+=a[f][t]*b[t][h];
                }
                c[f][h]=sum;
            }
        printf("\n");
        }
        for(f=0;f<d;f++)
        {

            for(h=0;h<e;h++)
            {
                printf("%f",c[f][h]);
            }
        printf("\n");
        }
    }
    else
    {
        printf("该输入的矩阵无法相乘,因为输入左边的矩阵的列数不等于右边矩阵的行数。\n");
    }


}
        
void sixth()    //三角函数的运算
{
    double n,s,c,t,pi=3.1415926;
    printf("输入数n\n");
    scanf("%lf",&n);
    if(n==90)
    {
    s=sin(n*pi/180);
    c=cos(n*pi/180);
    t=tan(n*pi/180);
    printf("sin%.f=%.2f\n",n,s);
    printf("cos%.f=%.2f\n",n,c);
    printf("tan%.f 不存在\n",n,t);
    }
    else
    {
    s=sin(n*pi/180);
    c=cos(n*pi/180);
    t=tan(n*pi/180);
    printf("sin%.f=%.2f\n",n,s);
    printf("cos%.f=%.2f\n",n,c);
    printf("tan%.f=%.2f\n",n,t);
    }
}

void seventh()//阶乘的运算//
{
    int a,b;
//    unsigned long long sum=1;
     long sum;
    sum=1;
    printf("请输入需要计算的阶乘:\n");
    scanf("%d",&b);
    for(a=1;a<=b;a++)
    {
        sum*=a;
    }
    printf("计算的结果为:%lld",sum);
}

 

1)概述或引言

开发环境为Visual C++

目前已实现的功能:

 

(1)解二元一次方程、一元二次方程

(2)进行矩阵相加、相减、相乘运算

(3)进行三角函数、阶乘运算

 

 

2)程序概要设计

程序流程:

 

其中包括的函数以及对应的功能:

函数名称

对应功能

first

解二元一次方程

second

解一元二次方程

third

矩阵的相加

fourth

矩阵的相减

fifth

矩阵的相乘

sixth

三角函数运算

seventh

阶乘的运算

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.(first)函数解二元一次方程

 开始时,按照” ax+by=m cx+dy=n”的格式依次输入:a,b,n,c,d,n;

核心算法部分:

(按照公式计算出x,y的值)

 

x=(d*m-n*b)/(a*d-b*c);

                   y=(a*n-c*m)/(a*d-b*c);

 

测试样例:

         输入:1 3 4 1 1 2

         输出:x=1.0000 y=1.0000

 

 

 

 

 

2.(second)函数 解一元二次方程

核心算法部分:

(按照公式计算出两解的值)

首先判断: b*b-4*a*c

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

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

 

测试样例:

         输入:1 4 4

         输出: 该方程仅有一解x=-2.000

如图:

 

 

 

 

 

3. (third)函数

解一元二次方程

核心算法部分:

(按照公式计算出矩阵的值)

3.1.矩阵输入

         for(f=1;f<=d;f++)

         {

                   for(h=1;h<=e;h++)

                   {

                            printf("请输入第%d行第%d列的数字",f,h);

                            scanf("%d",&a[f][h]);

                           

                   }

         }

 

3.2.矩阵相加:

         if(d==j&&e==k)//矩阵中只有行数于列数相同时候才能运算

         {

                   for(f=1;f<=d;f++)

                   {

                            for(h=1;h<=e;h++)

                            {

                                     c[f][h]=a[f][h]+b[f][h];

                                     printf("%4d",c[f][h]);

                            }

                            printf("\n");

                   }

         }

测试样例:

         输入:2 2\n2\n2\n2\n2\n2 2\n 2\n2\n2\n2\n

         输出:     4   4

                      4   4

                 

 

4. (fourth)函数 解一元二次方程

核心算法部分:

(按照公式计算出矩阵的值)

4.1.矩阵输入:

for(f=1;f<=d;f++)

         {

                   for(h=1;h<=e;h++)

                   {

                            printf("请输入第%d行第%d列的数字",f,h);

                            scanf("%d",&a[f][h]);

                   }

         }

 

4.2.矩阵相减:

if(d==j&&e==k)//矩阵中只有行数于列数相同时候才能运算

         {

                   for(f=0;f<d;f++)

                   {

                            for(h=0;h<e;h++)

                            {

                                     c[f][h]=a[f][h]-b[f][h];

                                     printf("%4d",c[f][h]);

                            }

                   printf("\n");

                   }

         }

测试样例:

         输入:2 2\n2\n2\n2\n2\n2 2\n 2\n2\n2\n2\n

         输出:    0   0

                0   0

 

 

 

 

5. (second)函数 矩阵的相乘

(有bug,在修复)

 

 

6. (sixth)函数 三角函数运算

核心算法部分:

(按照公式计算出  的值)

6.1.计算sin,cos,tan(输入值n为角度(如:90)):

         s=sin(n*pi/180);

         c=cos(n*pi/180);

         t=tan(n*pi/180);

 

测试样例:

         输入:90

         输出:   sin90=1.00

      cos90=0.00

      tan90 不存在

 

 

 

 

 

 

7. (seventh)函数 阶乘的运算

核心算法部分:

(按照公式计算出  的值)

7.1.阶乘计算(输入值为b):

 

for(a=1;a<=b;a++)

         {

                   sum*=a;

         }

 

测试样例:

         输入:10

         输出: 计算的结果为:3628800

 

 

 

 

 

 

矩阵相乘暂时还有bug,正在修复。

posted @ 2022-03-23 23:50  养肥胖虎  阅读(582)  评论(0编辑  收藏  举报