好家伙,3000字终于写完了

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

二、内容:

(1)概述或引言

开发环境为Visual C++

目前已实现的功能:

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

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

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

 

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

(2)程序概要设计

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

函数名称

对应功能

First

解二元一次方程

Second

解一元二次方程

Third

矩阵的相加

Fourth

矩阵的相减

Fifth

矩阵的相乘

Sixth

三角函数运算

seventh

阶乘的运算

 

程序流程:

2.解一元二次方程

2.解一元二次方程

3.矩阵的相加

4.矩阵的相减

5.矩阵的相乘

(6)三角函数的运算。

7)阶乘的运算

(3)程序详细设计

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<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. (fifth)函数 矩阵的相乘

核心算法部分:

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

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

                   {

                  

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

                            {

                                     sum=0;

                                     for(t=0;t<k;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<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]);

                   }

         }

 

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

在第三层循环中,

for(t=0;t<k;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<d;f++)

                   {

 

                            for(h=0;h<k;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

 

(5)总结

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

 

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

 

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

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

三、参考文献

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

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

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

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

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

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

(4) 博客园社区

 

 

C语言:多功能计算器程序说明书的更多相关文章

  1. C语言:多功能计算器

    好家伙,这个东西有点折磨 这是一个多功能计算器 #include<stdio.h> #include<math.h> #include<windows.h> voi ...

  2. 李洪强漫谈iOS开发[C语言-042]-简单计算器

    李洪强漫谈iOS开发[C语言-042]-简单计算器

  3. iOS应用内语言切换功能

    当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有 ...

  4. Android学习–Android app 语言切换功能

    功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...

  5. C语言实现简易计算器(可作加减乘除)

    C语言实现简易计算器(加减乘除) 计算器作为课设项目,已完成答辩,先将代码和思路(注释中)上传一篇博客 已增添.修改.整理至无错且可正常运行 虽使用了栈,但初学者可在初步了解栈和结构语法后理解代码 # ...

  6. C语言:多功能计算器 (矩阵相乘)

    好家伙,实现矩阵相乘功能 代码如下: void fifth()//矩阵的相乘// { int a[100][100],b[100][100]; int d,e,f,h,j,k,t; double su ...

  7. C语言实现简单计算器小项目

    昨天刚安装上devc++,半夜想着练练C语言吧 于是就看到实验楼有一个计算器的项目 之前做过一次,这次写的主要是思路 首先我们先从原理思考jia,实现简单的计算器就要具备加减乘除这些,看普通的计算器也 ...

  8. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

  9. C语言,简单计算器【上】

    由于工作需要最近在研究PHP扩展,无可避免的涉及到了C语言.从出了学校以后C语言在实际工作中还没有用到过,所以必须要先进行一点复习工作.个人认为对于熟悉一样东西说最好的方法是上手实践.于是便想起了当时 ...

随机推荐

  1. Typora图片与阿里云OSS图床的结合之旅

    图床? 专门用于存放图片,并允许用户通过独一的外链进行特定图片资源的访问 为什么是阿里云OSS(Object Storage Service) 码云开源需要审核,已经不能作为免费的图床使用(2022年 ...

  2. 25.MYsql数据库管理

    MYsql数据库管理 目录 MYsql数据库管理 数据库基本操作 库和表 常用的数据类型 查看数据表结构 查看当前服务器的数据库 查看数据库中包含的表 查看表的结构 SQL语句 创建及删除数据库和表 ...

  3. numpy学习笔记 01

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...

  4. 几种常见的DoS攻击

    DoS为Denial of Service的简称,意思是拒绝服务.DoS攻击是一种使被攻击者无法正常提供服务的攻击.常见的攻击方式有以下几种类型:   LAND Local Area Network ...

  5. Leetcode----<Diving Board LCCI>

    题解如下: public class DivingBoardLCCI { /** * 暴力解法,遍历每一种可能性 时间复杂度:O(2*N) * @param shorter * @param long ...

  6. ASP.NET MVC之model传值view

    控制器中,我们有时会在知道用户名的情况下,再获取相关数据 例如: public ActionResult Index()        {            UserInfo Entity_Tem ...

  7. UiPath参数介绍和使用

    一.参数介绍 用于将数据从一个项目传递到另一个项目.在全局意义上,它们类似于变量,因为它们动态地存储数据并传递给它.变量在活动之间传递数据,而参数在自动化之间传递数据.因此,它们使你能够一次又一次地重 ...

  8. Nacos开机自启

    1.添加nacos.service文件 vi /lib/systemd/system/nacos.service 2.将以下内容写到nacos.service文件中 ps:我的nacos路径是/usr ...

  9. Ansible Playbook概览

    Ansible playbook 执行需要三步路执行: 1.编写playbook 2.定义主机清单文件 3.设置运行环境,写入配置文件 1.编写playbook Playbook使用YAML语法格式进 ...

  10. Tapdata 等40余家行业知名企业,应邀参与共建 NextArch Foundation

      日前,Linux 基金会执行董事 Jim Zemlin 于 Linux 基金会会员峰会(The Linux Foundation Member Summit)上宣布,Linux 基金会正式成立 N ...