好家伙,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. [二进制漏洞]栈(Stack)溢出漏洞 Linux篇

    目录 [二进制漏洞]栈(Stack)溢出漏洞 Linux篇 前言 堆栈 堆栈(Stack)概念 堆栈数据存储方式 函数调用 函数调用C语言代码 函数调用过程GDB调试 函数Call返回原理 函数栈帧 ...

  2. 皮尔逊(Pearson)系数矩阵——numpy

    一.原理 注意 专有名词.(例如:极高相关) 二.代码 import numpy as np f = open('../file/Pearson.csv', encoding='utf-8') dat ...

  3. squareline搭档OneOS图形组件之可视化GUI开发

    LVGL+OneOS! LVGL,一款很火的GUI开发库,一个高度可裁剪.低资源占用.界面美观且易用的嵌入式系统图形库.本身并不依赖特定的硬件平台,任何满足LVGL硬件配置要求的微控制器均可运行LVG ...

  4. 简记清空C语言输入残留内容

    为了在命令行程序中实现和用户的交互,我们编写的程序的运行过程中往往涉及到对标准输入/输出流的多次读写. 在C语言中接受用户输入这一块,有着一个老生常谈的问题:"怎么样及时清空输入流中的数据? ...

  5. 如何在Excel/WPS表格中批量查询快递信息?

    如何在Excel/WPS表格中批量查询快递信息? 干电商的小伙伴们还在为如何批量查询快递物流信息发愁吗?别着急,这篇文章或许能够帮助到您. 首先给大家看一下查询的具体成果: 第一步:安装Excel网络 ...

  6. net core 3.1使用identityServer登录时signin-oidc报Correlation failed的解决方法

    此问题全网找了很久,也困扰了我很久,始终没有找到解决方法.今天结合网上其他问题的帖子,自己研究的半天,终于找到了这个解决方法,经亲自测试可行.欢迎大牛指导指正. 有时客户收藏的系统地址是认证端的,然后 ...

  7. jdbc 10:jdbc事务

    jdbc连接mysql,涉及到的事务问题 package com.examples.jdbc.o10_jdbc事务; import java.sql.Connection; import java.s ...

  8. 华为交换机设置ntp时间同步

    操作交换机型号:Huawei S5720 查看时间发现时间不对 [HUAWEI]display clock 2021-04-01 21:41:35 Thursday Time Zone(Default ...

  9. 【Azure 应用服务】本地创建Azure Function Kafka Trigger 函数和Kafka output的HTTP Trigger函数实验

    问题描述 在上一篇博文(https://www.cnblogs.com/lulight/p/16525902.html)中,我们成功的以VM作为Kafka服务器运行,并且验证了从其他机器中远程访问.在 ...

  10. Windows环境安装Hadoop环境

    1,下载Hadoop,解压 2,配置Hadoop环境变量 右键此电脑--属性 高级系统设置 环境变量 新建一个HADOOP_HOME 添加到path 3,cmd窗口查看安装情况:hadoop vers ...