C语言:多功能计算器程序说明书
阅读原文时间:2023年07月08日阅读:2

好家伙,3000字终于写完了

一、题目:多功能科学计算器

二、内容:

开发环境为Visual C++

目前已实现的功能:

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

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

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

缺点:其中阶乘运算功能只能算到16,由于使用工具Visual C++不支持ong long类型的编译

行数名称及其对应实现的功能

函数名称

对应功能

First

解二元一次方程

Second

解一元二次方程

Third

矩阵的相加

Fourth

矩阵的相减

Fifth

矩阵的相乘

Sixth

三角函数运算

seventh

阶乘的运算

程序流程:

2.解一元二次方程

2.解一元二次方程

3.矩阵的相加

4.矩阵的相减

5.矩阵的相乘

(6)三角函数的运算。

7)阶乘的运算

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

算法分析:

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

核心算法部分:

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

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

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

随后输出xy的值

测试样例:

输入:1 3 4 1 1 2

输出:x=1.0000 y=1.0000

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

核心算法部分:

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

首先判断: b*b-4*a*c是否大于等于0

若小于0,则输出该方程无解”,

若等于0,则使用求根公式x1=(-b+sqrt(b*b-4*a*c))/(2*a);

若大于零,用求根公式求出该方程的解,

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]);

}

}

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]);

}

}

在其中,a[][]对应第一个矩阵,b[][]对应第二个矩阵

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]);

}

}

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]);

}

}

在其中,a[][]对应第一个矩阵,b[][]对应第二个矩阵

4.2.矩阵相减:

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

{

for(f=0;f

{

for(h=0;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. (fifth)函数 矩阵的相乘

核心算法部分:

(按照公式计算出最终矩阵的值,其中d,e是第一个矩阵的行数和列数,j,k是第二个矩阵的行数和列数)

for(f=0;f

{

for(h=0;h

{

sum=0;

for(t=0;t

{

sum+=a[f][t]*b[t][h];

}

c[f][h]=sum;

}

算法分析:此处使用三个for循环,

第一层for循环控制第一个矩阵的行数(f),

第二层for循环控制控制第一个矩阵的列数和第二个矩阵的行数,(t)

第三个for循环控制第二个矩阵的列数,(h)

我们以矩阵(1  1   11 1  1)两个矩阵的相乘为例,

(1 1   1 2  2

1  1

第一个矩阵的行为d,列为e,2*3

第二个矩阵的行为j,列为k,3*2,

通过两个for循环将两个矩阵输入

for(f=0;f

{

for(h=0;h

{

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

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

}

}

printf("请输入第二个矩阵行数和列数.\n");

scanf("%d%d",&j,&k);

printf("请输入矩阵中的数字:\n");

for(f=0;f

{

for(h=0;h

{

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

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

}

}

随后,我们知道两个矩阵相乘的结果应该是一个2*2的矩阵,我们用c[0][0]表示其中的第一项,其余三项为c[0][1], c[1][0], c[1][1],

在第三层循环中,

for(t=0;t

{

sum+=a[f][t]*b[t][h];

}

k3,所以我们把这个循环跑三次,通过t++,我们得以实现,

第一次循环: sum=sum+a[0][0]*b[0][0];sum=0+1*1=1;

第二次循环: sum=sum+a[0][1]*b[1][0];sum=2+1*2=3;

第三次循环: sum=sum+a[0][2]*b[2][0];sum=3+11*1=14;

随后,跳出第三层循环,回到第二层循环,sum的值赋给c[0][0],c[0][0]的计算就结束了,

以此类推可以得出c[0][1], c[1][0], c[1][1]的值,分别为14,4,4

最后我们使用两个for循环将其输出

for(f=0;f

{

for(h=0;h

{

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

}

printf("\n");

}

结束,

测试样例:

输入:2 3\n 1\n 1\n 11\n 1\n 1\n 1\n

2 3\n 1\n 1\n 2\n 2\n 1\n 1\n

输出:14.00 14.00

4.00  4.00

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

优点:程序简洁,业务逻辑合理,能够完成基本的功能,

困难:在编辑“矩阵乘法”这一算法时遇到困难,后在CSDN社区中进行搜索相关内容,并进行学习,最后实现该功能。

总结: 经过这段时间的课程学习和大作业的完成,我对计算机科学与技术有了更多的了解,从一个小白到了一个入门者。之前我们也学过编程语言(C),但是当时课程要求深入的并不多,学的只是表面,所以对编程语言掌握的仅是皮毛。因此,这次我便去深入了解语言。这次大作业,我选择了四则运算器题目,刚开始我们也并没有清楚的思路。于是,我开始构思本次大作业的代码结构,思考要实现的功能以及界面的布局。

在这期间,我主要在编写矩阵相乘函数时遇上了困难,在这过程中出现了好多问题,代码一直报错,计算也总是错误,最终在有的电脑上还一直运行不了,最终考虑到该功能的必要性必须将该功能实现,最终在多次的搜索和学习下,多次修正代码。虽然在这过程遇到了很多的挫折,而且最终没有达到预期的成果,但是这也让我对编程语言有了更深的了解。我想,在以后的学习过程中,无论学习什么,一定要多实践,实践了才能发现更多的错误,这样才能一点点进步。

三、参考文献

写出自己编写该程序时阅读的书籍和出处

(1)      
C语言设计(第五版) 谭浩强 清华大学出版社。

(2)       CSDN社区博主L-阿烽

(1条消息) c语言矩阵的乘法_L-阿烽的博客-CSDN博客_c语言矩阵乘法

文章链接:https://blog.csdn.net/qq_46724903/article/details/105990859

(3) 百度一下以及百度百科

(4) 博客园社区

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器