好家伙,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. 【Redis】哨兵初始化和主观下线

    在的redis启动函数main(server.c文件)中,对哨兵模式进行了检查,如果是哨兵模式,将调用initSentinelConfig和initSentinel进行初始化,initServer函数 ...

  2. CVPR2022 | 弱监督多标签分类中的损失问题

    前言 本文提出了一种新的弱监督多标签分类(WSML)方法,该方法拒绝或纠正大损失样本,以防止模型记忆有噪声的标签.由于没有繁重和复杂的组件,提出的方法在几个部分标签设置(包括Pascal VOC 20 ...

  3. Qt项目开发实例 (含源码)

    源码传送门: 啊渊 / QT博客案例 · GitCode 目前QT的研发都是基于windows操作系统的,本文分享在国产操作系统中学QT的路线图,其实学习路线差不多,为了全面的回顾自己的学习知识,打算 ...

  4. python做小游戏——做个马里奥分分钟解决

    一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...

  5. OWL页面创建Copy功能,把选择内容复制到QC

  6. NC202492 仓库选址

    NC202492 仓库选址 题目 题目描述 牛能在某小城有了固定的需求,为了节省送货的费用,他决定在小城里建一个仓库,但是他不知道选在哪里,可以使得花费最小. 给出一个 \(m \times n\) ...

  7. 利用噪声构建美妙的 CSS 图形

    在平时,我非常喜欢利用 CSS 去构建一些有意思的图形. 我们首先来看一个简单的例子.首先,假设我们实现一个 10x10 的格子: 此时,我们可以利用一些随机效果,优化这个图案.譬如,我们给它随机添加 ...

  8. Mac平台下git命令自动补全

    一.安装bash-completion 安装Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com ...

  9. 什么是好的 API 设计?【eolink翻译】

    对于试图完善其 API 策略的团队来说,良好的 API 设计是一个经常出现的话题. API 设计的重要性相信不需要赘述,精心设计的 API 的好处包括:更好开发人员体验.更快的文档编制以及更高的 AP ...

  10. JavaScript数组方法总结及手写

    目录 手写数组衍生方法 1.检测是否为数组 2.类数组转化为数组 3.数组扁平化 4.数组去重 5.数组使用Math.max 手写数组内置方法 1. Array.prototype.filter 2. ...