本人的一个简单的作品(学校作业),第一次发文,由于本人水平不足,所以未加过多注释,好多地方也达不到最好请大家多多指正。
简易计算器,可以进行简单的加减乘除运算,也可以进行矩阵的复杂运算(如矩阵和差,求逆矩阵等)和三角函数的计算等。
源代码如下:
#define M 20
#define N 20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
void jianyimenu();
void juzhenmenu();
void sanjiaohanshumenu();
void twodimesionalarray();
void nijuzhen();
void shuchengjuzhen();
void zhuanzhijuzhen();
void shangsanjiaohua();
void sinhanshu();
void coshanshu();
void tanhanshu();
int main()
{
while(1)
{
int xuanxiang;
printf("--------------------------------\n");
printf("* 欢迎使用科学计算器 *\n");
printf("--------------------------------\n");
printf("* 请选择你想使用的功能: *\n");
printf("* 1 简易功能计算器 *\n");
printf("* 2 矩阵计算器 *\n");
printf("* 3 三角函数计算器 *\n");
printf("* 4 退出程序 *\n");
printf("--------------------------------\n");
printf("请输入选项:");
scanf("%d",&xuanxiang);
switch(xuanxiang)
{
case 1:
{
jianyimenu();
break;
}
case 2:
{
juzhenmenu();
break;
}
case 3:
{
sanjiaohanshumenu();
break;
}
case 4:
printf("----------感谢您使用本系统----------");
exit(0);
default:
printf("\n-----选择错误,请重试-------\n");
break;
}
}
}
void jianyimenu()
{
int select;
printf("--------------------------------\n");
printf("* 欢迎使用简易计算器 *\n");
printf("--------------------------------\n");
printf("* 请选择你想使用的功能: *\n");
printf("* 1 加法 *\n");
printf("* 2 减法 *\n");
printf("* 3 乘法 *\n");
printf("* 4 除法 *\n");
printf("* 5 取模 *\n");
printf("* 6 返回主菜单 *\n");
printf("--------------------------------\n");
printf("输入菜单项:\n");
scanf("%d",&select);
switch (select)
{
case 1:
{
float num1,num2;
printf("做加法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%.2f+%.2f=%.2f\n",num1,num2,num1+num2);
break;
}
case 2:
{
float num1,num2;
printf("做减法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%.2f-%.2f=%.2f\n",num1,num2,num1-num2);
break;
}
case 3:
{
float num1,num2;
printf("做乘法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%.2f*%.2f=%.2f\n",num1,num2,num1*num2);
break;
}
case 4:
{
float num1,num2;
printf("做除法。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%.2f/%.2f=%.2f\n",num1,num2,num1/num2);
break;
}
case 5:
{
float num1,num2;
printf("取模运算。\n");
printf("输入两个数,逗号分隔。\n");
scanf("%f,%f",&num1,&num2);
printf("%.2f%%%.2f=%.2f\n",num1,num2,fmod(num1,num2));
break;
}
case 6:
{
break;
}
}
return 0;
}
void juzhenmenu()
{
int select;
printf("--------------------------------\n");
printf("* 欢迎使用矩阵计算器 *\n");
printf("--------------------------------\n");
printf("* 请选择你想使用的功能: *\n");
printf("* 1 求逆矩阵 *\n");
printf("* 2 二维矩阵的和差计算 *\n");
printf("* 3 矩阵的上三角化 *\n");
printf("* 4 数乘矩阵 *\n");
printf("* 5 转置矩阵 *\n");
printf("* 6 返回主菜单 *\n");
printf("--------------------------------\n");
printf("输入菜单项:\n");
scanf("%d",&select);
switch (select)
{
case 1:
{
nijuzhen();
break;
}
case 2:
{
twodimesionalarray();
break;
}
case 3:
{
shangsanjiaohua();
break;
}
case 4:
{
shuchengjuzhen();
break;
}
case 5:
{
zhuanzhijuzhen();
break;
}
case 6:
{
break;
}
}
return 0;
}
void nijuzhen()
{
float A[M][N];
float B[M][N];
float C[M][N];
int i,j,m,n,p,q;
float y=1.0;
float a[M][2*M];
float b[N][2*N];
float t,x;
int k,T;
printf("输入方阵的维数:\n"); //请输入方阵,即行和列相等的矩阵。
scanf("%d",&T);
printf("请输入矩阵:\n");
for(i=0;i<T;i++)
for (j=0;j<T;j++)
{
printf("第%d行第%d个数为: ",i+1,j+1);
scanf("%f",&b[i][j]);
}
printf("原矩阵为:\n");
for (i=0;i<T;i++)
{
for (j=0;j<T;j++)
printf("%10.3f",b[i][j]);
printf("\n");
}
for(i=0;i<T;i++)
for(j=0;j<(2*T);j++)
{
if (j<T)
a[i][j]=b[i][j];
else if (j==T+i)
a[i][j]=1.0;
else
a[i][j]=0.0;
}
for(i=0;i<T;i++)
{
for(k=0;k<T;k++)
{
if(k!=i)
{
t=a[k][i]/a[i][i];
for(j=0;j<(2*T);j++)
{
x=a[i][j]*t;
a[k][j]=a[k][j]-x;
}
}
}
}
for(i=0;i<T;i++)
{
t=a[i][i];
for(j=0;j<(2*T);j++)
a[i][j]=a[i][j]/t;
}
for(i=0;i<T;i++)
y=y*a[i][i];
if(y==0)
printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。\n");
else
{
for(i=0;i<T;i++)
for(j=0;j<T;j++)
b[i][j]=a[i][j+T];
printf("逆矩阵为:\n");
for (i=0;i<T;i++)
{
for (j=0;j<T;j++)
printf("%10.3f",b[i][j]);
printf("\n");
}
}
}
void twodimesionalarray()
{
int i,j,k,P,Q;
printf("\t\t矩阵的加减法运算\n");
printf("请输入矩阵的行数");
scanf("%d",&Q);
printf("\n请输入矩阵的列数");
scanf("%d",&P);
system("cls");
printf("\n请你输入矩阵A(%d行%d列)\n",P,Q);
int A_1[P][Q],B_1[P][Q];
for(i=0;i<P;i++)
{
for(j=0;j<Q;j++)
{
printf("第%d行第%d个数为:",i+1,j+1);
scanf("%d",&A_1[i][j]);
}
}
printf("\n请你输入矩阵B(%d行%d列)\n",P,Q);
for(i=0;i<P;i++)
{
for(j=0;j<Q;j++)
{
printf("第%d行第%d个数为:",i+1,j+1);
scanf("%d",&B_1[i][j]);
}
}
printf("\n计算矩阵之和还是差(和:1/差:2)\n");
scanf("%d",&k);
while (k!=1&&k!=2)
{
system("cls");
printf("输入有误\n请输入(和:1/差:2)\n");
scanf("%d",&k);
}
switch(k)
{
case 1 :
printf("矩阵A和矩阵B之和为:\n");
for(i=0;i<P;i++)
{
for(j=0;j<Q;j++)
{
A_1[i][j]+=B_1[i][j];
printf("% d\t",A_1[i][j]);
}
printf("\n");
}return 0;
case 2:
printf("矩阵A和矩阵B之差为:\n");
for(i=0;i<P;i++)
{
for(j=0;j<Q;j++)
{
A_1[i][j]-=B_1[i][j];
printf("% d\t",A_1[i][j]);
}
printf("\n");
} return 0;
}
}
void shangsanjiaohua()
{
float A[M][N];
float B[M][N];
float C[M][N];
int i,j,n,p,q;
float y=1.0;
int k,v,hang,lie;
double a[50][50], m;
double b[50][50]; //定义可中途放置的地址
double c[50][50] = { 0 }; //定义检查层的中途存放地址
int num1, num2, num3, num4 ;//输入部分
printf("请输入你想计算的行的个数:");
scanf("%d", &hang);
printf("请输入你想计算的列的个数:");
scanf("%d", &lie);
for (i = 0; i < hang; ++i)
{
printf("请输入第%d行元素:", i + 1);
for (j = 0; j < lie; ++j)
scanf("%lf", &a[i][j]);
}
//对角化部分
for (k = 0; k < hang - 1; ++k)
{
for (i = k; i < hang - 1; ++i)
{
for (j = 0; j < lie; ++j)
{
//数组行交换
if (a[k][k] == 0)
{
for (num1 = k; num1 == k; ++num1)
{
for (num2 = 0; num2 < lie; ++num2)
{
c[num1][num2] = a[num1][num2];
a[num1][num2] = a[num1 + 1][num2];
a[num1 + 1][num2] = c[num1][num2];
for (v = 0; v < lie; ++v)
b[k][v] = a[k][v];
}
}
}
//矩阵换行结束
m = a[i + 1][k] / (1.0*a[k][k]);
b[i + 1][j] = a[i + 1][j] - (m)*a[k][j];
}
}
//将寄存在b中的数据转到a中
for (num3 = 1; num3 <= hang; ++num3)
for (num4 = 0; num4 < lie; ++num4)
{
a[num3][num4] = b[num3][num4];
}
}
//矩阵输出
for (i = 0; i < hang; ++i)
{
{
for (j = 0; j < lie; ++j)
printf("%.2lf ", a[i][j]);
}
printf("\n");
}
}
void shuchengjuzhen()
{
float A[M][N];
float B[M][N];
float C[M][N];
int i,j,m,n,p,q;
float y=1.0;
float k;
printf("请输入矩阵A的行数和列数(用空格隔开):");
scanf("%d %d",&i,&j);
printf("请输入矩阵A\n");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
scanf("%f",&A[p][q]);
printf("输出矩阵A\n");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
{
printf("%10.2f",A[p][q]);
if((q+1)%j==0)
printf("\n");
}
printf("请输入一个实数:\n");
scanf("%f",&k);
for(p=0;p<i;p++) //数乘矩阵
for(q=0;q<j;q++)
B[p][q]=k*A[p][q];
printf("输出k乘矩阵A的结果\n");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
{
printf("%10.2f",B[p][q]);
if((q+1)%j==0)
printf("\n");
}
}
void zhuanzhijuzhen()
{
float A[M][N];
float B[M][N];
float C[M][N];
int i,j,m,n,p,q;
float y=1.0;
printf("请输入矩阵A的行数和列数(用空格隔开):");
scanf("%d %d",&i,&j);
printf("请输入矩阵A:\n");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
scanf("%f",&A[p][q]);
printf("输出矩阵A\n");
for(p=0;p<i;p++)
for(q=0;q<j;q++)
{
printf("%10.2f",A[p][q]);
if((q+1)%j==0)
printf("\n");
}
for(p=0;p<i;p++) //转置
for(q=0;q<j;q++)
B[q][p]=A[p][q];
printf("输出矩阵A的转置矩阵:\n");
for(p=0;p<j;p++)
for(q=0;q<i;q++)
{
printf("%10.2f",B[p][q]);
if((q+1)%i==0)
printf("\n");
}
}
void sanjiaohanshumenu()
{
int select;
printf("--------------------------------\n");
printf("* 欢迎使用三角函数计算器 *\n");
printf("--------------------------------\n");
printf("* 请选择你想使用的功能: *\n");
printf("* 1 求sin值 *\n");
printf("* 2 求cos值 *\n");
printf("* 3 求tan值 *\n");
printf("* 4 返回主菜单 *\n");
printf("--------------------------------\n");
printf("输入菜单项:\n");
scanf("%d",&select);
switch(select)
{
case 1:
{
sinhanshu();
break;
}
case 2:
{
coshanshu();
break;
}
case 3:
{
tanhanshu();
break;
}
case 4:
{
break;
}
}
}
void sinhanshu()
{
const double Pi=3.14;
double a,b;
printf("请输入需要计算的角度:");
scanf("%lf",&a);
b=sin(a*(Pi/180));
printf("所求的正弦值是:%lf\n",b);
}
void coshanshu()
{
const double Pi=3.14;
double a,b;
printf("请输入需要计算的角度:");
scanf("%lf",&a);
b=cos(a*(Pi/180));
printf("所求的余弦值是:%lf\n",b);
}
void tanhanshu()
{
const double Pi=3.14;
double a,b;
printf("请输入需要计算的角度:");
scanf("%lf",&a);
b=tan(a*(Pi/180));
printf("所求的正切值是:%lf\n",b);
}
感谢阅读,让我们一起加油~
860

被折叠的 条评论
为什么被折叠?



