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,正在修复。