好家伙,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. 拥抱 OpenAPI 3:springdoc-openapi 食用指南

    概述 使用 springdoc-openapi 可以快速为 springboot 项目生成规范的 API 文档,具体使用步骤如下: 依赖配置 在 pom.xml 加入内容,即可开始使用: <de ...

  2. JS:自增和自减

    自增自减是一元操作符运算 1.++: 前置++:先把取值,再把变量的值加1 后置++:先把变量的值加1,再取值 2.--: 前置--:先把取值,再把变量的值加1 后置--:先把变量的值加1,再取值 v ...

  3. 推荐一款M1芯片电脑快速搭建集群的虚拟机软件

    虚拟机软件太多了,出名的莫过于VMware,VirutlaBox以及Parallels Desktop. 我们使用虚拟机软件一般有两种用途: 安装不同于宿主机系统的拥有用户界面的操作系统,比如Wind ...

  4. 『现学现忘』Docker基础 — 38、COPY指令和ADD指令

    目录 1.COPY指令 (1)COPY指令说明 (2)COPY指令格式 (3)COPY指令使用 (4)其他 2.ADD指令 (1)ADD指令说明 (2)ADD指令格式 (3)ADD指令使用 (4)不推 ...

  5. SAP 文件操作类 CL_GUI_FRONTEND_SERVICES

    1 .文件下载. DATA: l_filename TYPE string, "file name l_path TYPE string, "file path l_fullpat ...

  6. ShardingSphere-proxy-5.0.0建立mysql读写分离的连接(六)

    一.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or ...

  7. 把excel的数据导入到SQLSERVER里面,excel的字符串时间在导入sql库显示datetime 数据类型的转换产生一个超出范围的值

    这是我Excel导入的数据,准备把这个varchar(50)时间导入我的userInfo表中的出生日期字段datatime,如果你的数据正常,是可以导入的, 但是有些日期可能超出datatime的最大 ...

  8. 解决方案:可以ping别人,但是别人不能ping我

    背景:我在写分布式爬虫项目时遇到了slave端无法ping通我的master,我的master可以ping通slave.我将master的防火墙关闭后slave可以ping了,但是这不是解决办法.于是 ...

  9. Tapdata Cloud 2.1.5来啦:新增支持Amazon RDS数据库,错误日志查询更便捷,Agent部署细节再优化

      需求持续更新,优化一刻不停--Tapdata Cloud 2.1.5 来啦!   最新发布的版本中,数据连接再上新,同时新增任务报错相关信息快速查询入口,开始支持 JVM 参数自定义设置.   更 ...

  10. pytorch 基础内容

    一些基础的操作: import torch as th a=th.rand(3,4) #随机数,维度为3,4的tensor b=th.rand(4)print(a)print(b) a+b tenso ...