大整数计算器..

合集下载

请针对100以内正整数加法运算的计算器设计2条测试用例,要求采用通用用例写作格式

请针对100以内正整数加法运算的计算器设计2条测试用例,要求采用通用用例写作格式

请针对100以内正整数加法运算的计算器设计2条测试用例,要求采用通用用例写作格式标题:针对100以内正整数加法运算的计算器设计2条测试用例引言概述:计算器是我们日常生活中常用的工具之一,而针对100以内正整数加法运算的计算器则是一种常见的类型。

为了确保计算器的准确性和可靠性,设计测试用例是必不可少的环节。

本文将针对该类型的计算器设计两条测试用例,并按照通用用例写作格式进行阐述。

正文内容:1. 输入两个正整数进行加法运算1.1 输入两个小于100的正整数- 输入:num1 = 10, num2 = 20- 预期输出:30- 用例说明:测试计算器能够正确地计算两个小于100的正整数之和。

1.2 输入一个小于100的正整数和一个等于100的正整数- 输入:num1 = 80, num2 = 100- 预期输出:180- 用例说明:测试计算器能够正确地计算一个小于100的正整数和一个等于100的正整数之和。

2. 输入两个等于100的正整数进行加法运算2.1 输入两个等于100的正整数- 输入:num1 = 100, num2 = 100- 预期输出:200- 用例说明:测试计算器能够正确地计算两个等于100的正整数之和。

2.2 输入一个等于100的正整数和一个大于100的正整数- 输入:num1 = 100, num2 = 120- 预期输出:220- 用例说明:测试计算器能够正确地计算一个等于100的正整数和一个大于100的正整数之和。

3. 输入两个大于100的正整数进行加法运算3.1 输入两个大于100的正整数- 输入:num1 = 150, num2 = 200- 预期输出:350- 用例说明:测试计算器能够正确地计算两个大于100的正整数之和。

3.2 输入一个大于100的正整数和一个小于100的正整数- 输入:num1 = 150, num2 = 80- 预期输出:230- 用例说明:测试计算器能够正确地计算一个大于100的正整数和一个小于100的正整数之和。

计算器使用方法

计算器使用方法
度数
在十进制模式下将三角函数输入设置为度数。
DMS
是什么意思。
将显示数字转换为度
-

-
秒格式(假设显示数字是用度数表示的)
。若要将显示数字转换为用度
数表示的格式(假设显示数字是用度
-

-
秒格式表示的)
,请使用
“Inv”+“dms”

dms
只能用于
十进制数字系统。
F-E
是什么意思。打开或关闭科学计数法。大于
In
n
日志
l
Lsh
<
M+
Ctrl + P
MC
Ctrl+L
Mod
%
MR
Ctrl+R
MS
Ctrl + M
n!
!
Not
~
八进制
F7
OR
垂直条
(|)
pi
p
四字
F12
弧度
F3
s
Ctrl+D
sin
s
sqrt
@
Sta
Ctrl + S
Sum
Ctrl + T
tan
t

F3
Xor
^
x^2
@
x^3
#
x^y
y
sta
是什么意思。
计算显示数
字的正
切。若要
计算反正
切,请
使用
“Inv”+“tan”
。若
要计算双
曲正切
,请使用
“Hyp”+“tan”
。若要计算反双曲正切,请使用

计算器按键的使用说明

计算器按键的使用说明

计算器按键的使用说明.1、电源开关键:ON、OFF2、输入键:0—9、. +/—:正负转换键3、运算功能键:+ - * / (注意:加、减、乘、除键在计算时都可能代替等号键) √:开平方键,用来进行开平方运算。

先输入数字,再按下此键,不必按等号键即可得出结果。

4、等号键:=5、清除键:①C:清除键。

在数字输入期间,第一次按下此键将清除除存储器内容外的所有数值.如果是太阳能计算器,在计算器关闭状态下,按此键则开启电源,显示屏显示出“0”。

②AC或CA键:全部清除键,也叫总清除键,作用是将显示屏所显示的数字全部清除。

③→:右移键。

其功能是荧屏值向右位移,删除最右边的尾数。

④CE:部分清除键,也叫更正键。

其功能是清除当前输入的数字,而不是清除以前输入的数。

如刚输入的数字有误,立即按此键可清除,待输入正确的数字后,原运算继续进行。

如5+13,这时发现“13”输入错了,则按“CE”键就可以清除刚才的“13”,但还保留“5”这个数。

值得注意的是,在输入数字后,按“+”、“-”、“/”、“*”键的,再按“CE”键,数字不能清除。

⑤MC:累计清除键,也叫记忆式清除键。

其功能是清除储存数据,清除存储器内容,只清除存储器中的数字,内存数据清除,而不是清除显示器上的数字。

6、累计显示键:(1)M+:记忆加法键,也叫累加键。

是计算结果并加上已经储存的数;用作记忆功能,它可以连续追加,把目前显示的值放在存储器中(也就是将显示的数字与内存中已有的任何数字相加,结果存入存储器,但不显示这些数字的和)。

如去和小商贩买几种冰淇凌,买5筒五羊牌雪糕,每筒1.6元;买10筒绿色心情,每筒0.8元;买15筒蒙牛布丁,每筒0.4元。

共多少元?如先输入“5×1.6”→按“M+”键(把“5×1.6”的结果计算出来并储存起来)→然后输入“10×0.8”→按“M+”键(把“10×0.8”的结果计算出来并和前面储存的数相加)→接着输入“15×0.4”→按“M+”键(把“15×0.4”的结果计算出来并和前面储存的数相加)→最后按“MR”键(把储存的数全部取出来)→则出结果“22”(2)M-:记忆减法键,也叫累减键。

整数计算器已经调试

整数计算器已经调试

整数计算器已经调试.txt铁饭碗的真实含义不是在一个地方吃一辈子饭,而是一辈子到哪儿都有饭吃。

就算是一坨屎,也有遇见屎壳郎的那天。

所以你大可不必为今天的自己有太多担忧。

/*****现在这个CPU处理的数据的顺序与常用的不太一致:运算操作符是最后输入功能:只可对整数进行:+ - * /已经在Q7.0中通过,尽管有些警告****/module myCPU(clk,reset_n,DataIn,DataOut);parameter ADD=4'd10,MIN=4'd11,MUL=4'd12,DIV=4'd13,EQUAL=4'd14,Eorr=4'd15;input clk,reset_n;input [3:0] DataIn; //数据输入,0~9为相应数值,A~F为操作指令output [31:0] DataOut; //供显示用reg [31:0] DataOut;reg [31:0] DataNew;reg [31:0] DataOld;reg enData; //选择运算结果或者当前输入做为显示输出always @(posedge clk)beginif(!reset_n)beginDataOld = 32'd0;DataOut = 32'd0;DataNew = 16'd0;endelsebegincase(DataIn)ADD:begin DataOld =DataOld+DataNew; enData=1'b0;endMIN:begin DataOld =DataOld-DataNew; enData=1'b0;endMUL:begin DataOld =DataOld*DataNew; enData=1'b0;endDIV:begin DataOld =DataOld/DataNew; enData=1'b0;endEQUAL: enData=1'b0; //只是显示结果Eorr: enData=1'bz; /*数据无效*/defaultbeginDataNew =10*DataNew+DataIn; enData=1'b1;endendcaseif(enData)beginDataOut=DataNew;endelsebegin DataOut=DataOld; DataNew = 16'd0; endendendendmodule。

大数计算器c语言实训报告

大数计算器c语言实训报告

大数计算器c语言实训报告一、实训目的本实训主要目的是通过编写大数计算器的程序,提高学生对于C语言中计算器程序的实现能力和大数计算的理解。

二、实训内容1.需求分析大数计算器是一种可以计算非常大的数字的计算器。

因为计算机对于整数数据的处理有固定长度限制,如果需要计算更大的数字,就需要使用特殊的算法。

由于人们生活和工作中经常碰到大数字的计算,因此大数计算器的开发具有非常大的应用价值。

2.程序设计在C语言中,可以使用数组存储大数,每一位数字使用数组的一个元素。

因为数组的长度也有限制,所以一般需要使用指针动态分配内存来存储大数。

C语言中提供了类似于Java中的BigInteger类的库,例如GMP库等。

使用这些库可以方便地进行大数计算。

本次实训要求学生编写一个自己的大数计算器程序,通过手动编写实现大数加、减和乘法运算。

3.测试编写完程序后,需要测试程序是否正确运行。

可以使用各种情况下的数据进行测试。

例如,测试小数点和整数的运算、测试负数的计算、测试多位和一位数字的计算、测试大数的计算等。

三、实训总结通过本次实训,我学习了C语言中大数计算的实现方法和相关的概念。

在实现大数计算器的过程中,我加深了对于C语言中数组和指针的理解和应用,同时也提高了编写C语言程序的能力。

在测试程序时,我发现了几个容易出错的地方,在修改后成功完成了大数计算器的编写。

通过本次实训,我掌握了C语言中大数计算的思路和方法,提高了编写C语言程序的能力。

我相信这些知识和经验在将来的工作和学习中都会派上用场。

硬盘分区整数G计算公式及计算器

硬盘分区整数G计算公式及计算器

硬盘分区整数G计算公式及计算器1)我们知道,1GB=1024MB、1TB=1024GB、1PB=1024TB、1EB=1024PB。

如果你想在Windows的“我的电脑”或“计算机”里看到整数G的硬盘分区,就要在分区时进行计算。

2)对于FAT32格式的硬盘分区,由于每1024个字节都会用4个字节来存储磁盘结构和数据存储位置等信息,但分区中的第一GB并不占用额外的存储容量,因此FAT32格式磁盘分区的整数G计算公式为(X-1)*4+1024*X=Y,其中X为你想得到的整数G数(单位为GB),Y为应分配的M数(单位为MB)。

为方便记忆,硬盘整数G计算公式也可写成(G-1)*4+1024*G=M。

3)比如,你想分个100G的整数G分区(FAT32格式),你要在分区软件(比如WinPM)里输入(100G-1)*4+1024*100G=102,796 M才能得到。

因为,Windows 认为100G不等于100,000M,也不等于102,400M,100G=102796 M。

硬盘分区整数G速查表4)对于NTFS格式的硬盘分区,原理比较复杂。

NTFS分区的最小容量不能精确到1MB,而是柱面大小。

硬盘一般有255个磁头,63个扇区,故每个柱面的大小为:512bit*255*63=8,225,280bit=7.84423828125MB。

5)如果要分个10GB的NTFS分区,理应为10*1024MB=10240MB,实际需要的柱面数为10240÷7.84423828125=1305.4。

因柱面只能算整数,即1306个柱面,这样实际分配的M数为1306*7.84423828125=10244.575MB,不管小数点后面几位都进1,也就是10245MB,这样才会被Windows系统认成是10GB。

计算器有关按键说明大全

计算器有关按键说明大全

计算器有关按键说明大全一、基本按键ON 开机OFF 关机AC 总清,清除所有存储和显示数值(又:CA, All ClearC 清除所有显示和当前运算、归零(又:CLR、Esc,英文名Clear注:以上又有组成组合键的情况为ON/OFF、ON/AC、ON/CCE 清除输入,清除当前输入数据中最后一个不正确的输入数据并显示“0”,可重新更正输入(英文名Clear Error或Clear Entry⌫清除光标前一字符(又:←、Backspace、BS、DEL(delete) INS 改写模式,从当前位置插入(英文名insertREPLAY 指令状态移动方向,上下查记录,左右移动当前表达式中光标(一般此键上有成十字排列的方向标识:▲▼◄►SHIFT 转换,上档选择(又: 2ndF、2nd、2nd(第二功能选择,Second Function)、ALT,按键设定为与其同色的功能ALPHA 阿尔法,字母,按键设定为与其同色的功能MODE 方式、模式,用于模式切换(不同的计算器有所不同,常用的见下表:对于数值计数法有:Norm(normal)标准计数法Fix(fixed)固定小数点Eng(engineering)工程计数法Sci(scientific)科学计数法Inv 反、倒置,用于使用其它有关按键的相反功能,多用于电子计算器。

如ln键变为e x键,sin键变为sin-1键,lsh键变为rsh键等EXP 以科学记数法输入数字,即表示以10为底的方幂(又:EE,英文名Exponent说明:科学记数法:将一个数字表示成a×10的n次幂的形式,其中1≤|a|<10,n表示整数,这种记数方法叫科学记数法。

如:5EXP2即5×102,就是500F-E 科学记数法开关,显示方式转换作用:十进制浮点(Floating Point)与科学记数法(Exponent)显示转换S⇔D 数值在标准形式(Standard)和小数形式(Decimal fraction)之间转换作用:分数与小数显示转换Ran# 随机数(又:RAND、RND、Rnd#,英文名Random, : 分隔符,用于输入方程式之间、坐标数据之间分隔用∠角,用于标识极坐标数据的角度数据或复数的虚数二、基础运算0、00、1、2、3、4、5、6、7、8、9 数字A、B、C、D、E、F 十六进制数字或存储单元. 十进制小数点+-×(*)÷(/)四则运算符注:-有的作为负号=等号⁄、±(-)+/-正负转换,负号(又:+−()括号,(称为始括号或左括号,)称为末括号或右括号注:=前的)键操作可省略a b c⁄、d/c 分数输入或将计算结果在小数值和分数值之间变换注:一般结果为小数,如果其绝对值大于或等于1,按一次d/c 以假分数形式显示,再按一次d/c则以带分数形式显示;如果其绝对值小于1,则两次均以真分数形式显示% 百分号,关于百分比的计算方法见下表注:以上实物计算器不按等号,不同的计算器定义不同,按其实际运算规则。

简单介绍简易计算器的使用方法

简单介绍简易计算器的使用方法

简单介绍简易计算器的使用方法简易计算器使用方法计算器是我们日常生活中常见的小工具之一,它能够方便快捷地完成各种数学运算。

在本文中,我们将简单介绍一下简易计算器的使用方法,帮助大家更好地利用这个小工具。

一、开机与关闭使用简易计算器之前,首先需要开机。

通常,在计算器上会有一个电源开关,打开开关后,计算器便会自动启动。

要关闭计算器,只需要将电源开关关闭即可。

二、数字输入在简易计算器上,数字输入是最基本的操作。

计算器通常会有一个数字键盘,上面标有0到9的数字。

通过按下相应的数字键,可以输入需要计算的数值。

输入多位数时,只需按照正确的顺序依次按下每个数字键。

三、基本运算简易计算器能够完成四则运算,包括加法、减法、乘法和除法。

使用计算器进行基本运算时,需要按下特定的运算符键。

1. 加法:简易计算器上通常会有一个“+”键,按下该键后,计算器会把当前输入的数值记为被加数,再输入另一个数值,按下“=”键,计算器就会显示它们的和。

2. 减法:类似地,简易计算器上通常会有一个“-”键,按下该键后,计算器会把当前输入的数值记为被减数,再输入一个数值,按下“=”键,计算器就会显示它们的差。

3. 乘法:简易计算器上通常会有一个“×”键,按下该键后,计算器会把当前输入的数值记为被乘数,再输入一个数值,按下“=”键,计算器就会显示它们的积。

4. 除法:类似地,简易计算器上通常会有一个“÷”键,按下该键后,计算器会把当前输入的数值记为被除数,再输入一个数值,按下“=”键,计算器就会显示它们的商。

四、小数与分数计算除了整数运算,简易计算器还可以进行小数和分数的计算。

对于小数的输入,直接使用数字键盘即可,对于分数的输入,则需要使用特定的输入方式。

通常,在计算器上会有一个“分数”键或“1/x”键,按下该键后,计算器会进入分数输入模式,在屏幕上显示分子和分母的输入框,通过按下数字键来输入相应的分子和分母。

输入完毕后,按下“=”键,计算器就会进行分数的计算。

实验五 整数四则混合运算计算器

实验五  整数四则混合运算计算器

实验五整数四则混合运算计算器一、实验目的掌握具有一定实用功能的汇编程序开发思路。

二、实验原理和内容1、在数据段上开辟:1个叫OP的字数组,长度为10个字;1个叫OPERATOR 的字节数组,长度为10个字节;以及1个RESULT字数组,长度1个字。

如下图:OP OPERATOR RESULT共10 共10个字个字节2、在数据段定义一个字符串缓冲区。

编写程序,输入字符串(该字符串有多个操作数和运算符,例如:12+34*56)到缓冲区中,然后从缓冲区把所有操作数转换为补码并分别保存到OP数组中,把所有运算符保存到OPERATOR中。

3、编写四则混合运算程序,结果以补码方式存放在RESULT上。

并在屏幕上输出结果。

三、实验器材:Windous 7系统下的Masm 2009汇编软件四、实验步骤:1、先画框图(如下)输入字符是“=”小于28H 大于39H 小于30H 输入结束是否是是是否否否是符号,执行相应处理是数值,执行相应处理输入是数值结果作为新的原值保存减30H与原值的10倍相加输入是符号是“(”是“)”否配对标志加1配对标志减1是是保存符号否输入结束配对标志为0出错,退出进行计算是否1212*34+563456*+数值存储符号存储(a)1212*(34+56-8)3456*(数值存储符号存储(b)8+-)1212*21-((34+56-8)+1)2134*(数值存储符号存储(c)56+-)81-(+)21优先级2优先级332优先级55132、 编写程序:;----------------------------------------------------------------------------- ;----------------------------数据定义----------------------------------------- DSEG SEGMENTSIGN1 DW 0 ;判断数字是否输入完毕 SIGN2 DW 0 ;判断括号是否配对 NUMB DW 20H DUP (0) ;保存输入的数值 MARK DB 'A' ;保存输入的运算符 DB 10H DUP (0) ;ERROR DB ' YOUR INPUT ARE WRONG$' DSEG ENDS;----------------------------宏定义-----------------------------------------DISP MACRO M ;字符串输出LEA DX,M ;将M的偏移地址传送给DX寄存器MOV AH,9 ;其中09H是字符串输出INT 21H ;通过给AH寄存器赋值,再调用INT 21H指令,根据AH寄存器中的值执行相应的操作ENDMCHOICE MACRO ASC1,HAO1,HH ;宏定义,给运算符赋权值CMP AL,ASC1 ;比较键盘输入的运算符(运算符的ASC码存放在AL寄存器)与ASC1JNE OTHER&HAO1 ;若不等,则往下执行OTHER1,如此类推MOV CH,HH ;将运算符的权值(即优先级高低值)传送到CH 寄存器JMP OTHER7 ;执行后,返回ENDM;----------------------------------------------------------------------------CSEG SEGMENT;ASSUME CS:CSEG,DS:DSEGSTART: CALL CLEARMOV AX,DSEG ;MOV DS,AX ;LEA DI,NUMB ;将NUMB的偏移地址传送到DI,NUMB存储单元中存放输入的数值LEA SI,MARK ;将MARK的偏移地址传送到SI,MARK存储单元中存放输入的运算符MOV AX,0;数据寄存器清零MOV DX,0MOV BX,0MOV CX,0STA1 : CALL CR ;回车换行;--------------------------------初始化-------------------------------------INPUT:MOV AH,1 ;其中1H是键盘输入并回显,AL中有输入字符INT 21H ;通过给AH寄存器赋值,再调用INT 21H指令,根据AH寄存器中的值执行相应的操作;--------------------------------输入字符-----------------------------------CMP AL,'q'JE J_SHU;----------------------------若输入q,则返回dos状态--------------------------CMP AL,'=';JE PD ;判断配对标志位;--------------------是等号,进一步判断输入括号是否配对---------------------- CMP AL,28H ;JB BC ;JB为小于就跳转CMP AL,39H ;JA BC ;JA为大于就跳转;-------------------输入字符的ASC码小于28H或大于39H,则继续输入-------------- CMP AL,2FH ;判断是数字还是符号JBE JUD ;是符号转入响应操作;----------------------------------------------------------------------------INC WORD PTR SIGN1 ;将数字标志位加1SUB AL,30H ;将ASC码转16进制MOV AH,0 ;XCHG AX,[DI] ;互换两个操作数的存放位置,实现字交换MOV BX,10 ;MUL BX ;无符号数乘法指令XCHG AX,[DI] ;ADD [DI],AX ;JMP INPUT ;;-------------------------输入为数值时的操作----------------------------------PD: CMP WORD PTR SIGN2,0 ;判断配对标志位JE JUD ;跳到判断数值是否输入完毕JMP BC ;不配对则显示ERROR;----------------------------------------------------------------------------JUD: CMP WORD PTR SIGN1,0 ;判断数值是否输入完毕JE FUH1 ;跳到判断优先级ADD DI,2 ;DI向下移一个字MOV WORD PTR SIGN1,0;数值标志位清零;----------------------------------------------------------------------------FUH1: CALL ADV ANCE ;判定优先级CMP CH,5 ;判断输入的运算符中是否有左括号JNE PY ;不是,则判断输入的运算符中是否有右括号;----------------------------------------------------------------------------INC WORD PTR SIGN2 ;是左括号,括号标志位加1;----------------------------------------------------------------------------PY: CMP CH,1 ;判断输入的是否是右括号JNE AGAIN ;跳到判断运算存储区是否为空DEC WORD PTR SIGN2 ;是右括号,括号标志位减1;----------------------------------------------------------------------------AGAIN: CMP BYTE PTR[SI],'A';判断运算符存储区是否为空JE SA VE ;判断输入是否为=CMP CH,[SI] ;JA SA VE ;计算高优先级的SI指向运算符,每个运算符都有相应的权值CMP BYTE PTR[SI],'('JNE YIDO;寻找左括号DEC SI;是左括号,还是向上移,判断左括号前边是否还有运算符JMP INPUT;;----------------------------------------------------------------------------YIDO: DEC SI ;SI向上移MOV CL,[SI] ;将运算符传送给CLCALL MATCH ;判断是什么运算符并进行相应的计算JMP AGAIN ;判断运算符存储区是否为空;----------------------------------------------------------------------------SA VE: CMP CH,0 ;JE OVER ;=时,则输出结果CMP CH,1 ;JE INPUT ;“)”不保存,输入下一个数INC SI ;MOV [SI],AL ;INC SI ;CMP CH,5 ;JNE GO_ON ;MOV CH,2 ;改变(的权值GO_ON: MOV [SI],CH ;JMP INPUT ;;----------------------------------------------------------------------------BC: LEA DX,ERROR ;将ERROR的偏移地址给DXMOV AH,9 ;INT 21H ;CALL CRJMP J_SHU1 ;;----------------------------四则运算子程序---------------------------------- MATCH PROC ;子程序,进行相应的运算PUSH AX ;XOR AX,AX;异或XOR BX,BX;----------------------------乘法运算---------------------------------------CMP CL,2AH ;乘法运算JNE NEXT1SUB DI,2XCHG BX,[DI]SUB DI,2XCHG AX,[DI]IMUL BXMOV [DI],AXADD DI,2JMP FINISH;---------------------------------------------------------------------------;----------------------------除法运算--------------------------------------- NEXT1: CMP CL,2FH ;除法运算JNE NEXT2SUB DI,2XCHG BX,[DI]SUB DI,2XCHG AX,[DI]CWDIDIV BXMOV [DI],AXADD DI,2JMP FINISH;---------------------------------------------------------------------------;----------------------------加法运算--------------------------------------- NEXT2: CMP CL,2BH ;加法运算JNE NEXT3SUB DI,2XCHG BX,[DI]SUB DI,2ADD [DI],BXADD DI,2JMP FINISH;---------------------------------------------------------------------------;----------------------------减法运算--------------------------------------- NEXT3: CMP CL,2DH ;减法运算JNE FINISHSUB DI,2XCHG BX,[DI]SUB DI,2SUB [DI],BXADD DI,2FINISH: POP AXRETMATCH ENDP;----------------------------------------------------------------------------;----------------------------定义优先级-------------------------------------- ADV ANCE PROCCHOICE 28H,1,5 ;( 28H为( 的ASCII码OTHER1: CHOICE 29H,2,1 ;)OTHER2: CHOICE 2AH,3,4 ;*OTHER3: CHOICE 2FH,4,4 ;/OTHER4: CHOICE 2BH,5,3 ;+OTHER5: CHOICE 2DH,6,3 ;-OTHER6: CHOICE 3DH,7,0 ;=OTHER7: RETADV ANCE ENDP;----------------------------------------------------------------------------;----------------------------***清屏***-------------------------------------- Clear PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV AH,06HMOV AL,00HMOV CH,0MOV CL,0MOV BH,0FHMOV DH,18HMOV DL,4FHINT 10HMOV BH,0MOV DX,0MOV AH,02HINT 10HPOP DXPOP CXPOP BXPOP AXRETClear ENDP;----------------------------------------------------------------------------;----------------------------****回车换行****-------------------------------- CR PROCPUSH AXPUSH DXMOV AH,2MOV DL,13;回车INT 21HMOV AH,2MOV DL,10;换行INT 21HPOP DXPOP AXRETCR ENDP;----------------------------------------------------------------------------OVER:SUB DI,2CMP WORD PTR[DI],0JGE W1NEG WORD PTR[DI]MOV DL,'-'MOV AH,2INT 21H;---------------------------------------------------------------------------- W1: MOV BX,10000MOV CX,5MOV SI,0;---------------------------------------------------------------------------- W2: MOV AX,[DI]MOV DX,0DIV BXMOV [DI],DXCMP AL,0JNE W3CMP SI,0JNE W3CMP CX,1JE W3JMP W4;---------------------------------------------------------------------------- W3: MOV DL,ALADD DL,30HMOV AH,2INT 21HMOV SI,1;---------------------------------------------------------------------------- W4: MOV AX,BXMOV DX,0MOV BX,10DIV BXMOV BX,AXLOOP W2;---------------------------------------------------------------------------- J_SHU1: MOV WORD PTR[DI],0CALL CRMOV NUMB,0MOV SIGN1,0LEA DI,NUMB ;LEA SI,MARKJMP STA1;----------------------------****返回DOS状态****-----------------------------J_SHU: MOV AH,4CH;返回DOS状态INT 21H;----------------------------------------------------------------------------CSEG ENDSEND START3、显示结果五、实验总结:在本次的课程设计中,我遇到了很多难题,在通过翻看书本和上网找资料后,我渐渐的接触到一点眉目,开始进行尝试的编程,在不断的尝试、失败和修改中,我慢慢的懂得汇编一个计算器的基本原理和所需要的一些细节问题。

有符号大整数计算器

有符号大整数计算器

齐鲁工业大学面向对象程序设计课程设计报告学号:************姓名:***班级:计科12-1班课程设计题目:有符号大整数计算器成绩:一:设计目的与要求对数值很大、精度很高的数进行高精度大整数计算是一类十分常见的问题。

但由于C++语言中数据长度和范围受数据类型的限制,普通数学计算很难实现此类问题,为尝试解决这个问题,专门设计一个C++语言程序用于有符号大整数的计算。

二:设计内容分析1.功能分析:2.函数设计:A.运算辅助函数(1)检测用户输入运算符函数:Check_Oper()函数原型:char Check_Oper(string &str,string &num_1,string &num_2);功能:检测用户输入的运算符,并将char类型的运算符作为函数的返回值,若用户输入有误则提示用户。

(2)反转字符串函数:Reverse_String()函数原型:string Reverse_String(string &str);功能:传入string类型对象的引用,将其中保存的字符串全部反转后作为函数的返回值返回。

(3)字符串ASCII码减48位函数:SUB_ASC()函数原型:string SUB_ASC(string &str);功能:将string类型对象中字符串的所有元素的ASCII码减48。

(4)字符串ASCII码加48位函数:ADD_ASC()功能:将string类型对象中字符串的所有元素的ASCII码加48。

(5)获取最大数函数:GET_MAX()函数原型:string GET_MAX(string &num1,string &num2);功能:将两个以string类型存放的大整数传入函数,返回值最大的整数的string对象。

B.数据运算(1)加法运算:addition()函数原型:string addition(string &num1,string &num2);实现步骤:依次将两个字符串的每一位元素的ASCII码进行加法运算并存入结果中,对满十的结果进行进位,然后对该位进行对十取余存入当前元素中。

大整数加减乘除

大整数加减乘除

大整数加减乘除在数学中,我们经常需要对整数进行加减乘除运算。

通常情况下,我们可以直接使用计算器或者编程语言提供的函数来完成这些运算。

但是,当涉及到大整数时,这些方法可能会遇到一些限制。

本文将介绍大整数加减乘除的算法,并给出相应的实现示例。

一、大整数加法大整数加法是指对两个或多个大整数进行相加的运算。

由于整数的位数很大,不能直接使用普通的加法运算。

下面是一种常用的大整数加法算法:1. 将两个大整数对齐,即使它们的位数不相等。

2. 从个位开始,逐位相加,并将结果保存在一个新的整数中。

3. 如果相加的结果大于等于 10,需要进位,将进位的值加到下一位的相加结果中。

4. 重复上述步骤,直到所有位都相加完毕。

下面是一个示例,演示了如何使用上述算法来实现大整数加法:```pythondef big_int_addition(num1, num2):result = []carry = 0i = len(num1) - 1j = len(num2) - 1while i >= 0 or j >= 0:digit1 = int(num1[i]) if i >= 0 else 0digit2 = int(num2[j]) if j >= 0 else 0carry, digit_sum = divmod(digit1 + digit2 + carry, 10)result.append(str(digit_sum))i -= 1j -= 1if carry:result.append(str(carry))result.reverse()return ''.join(result)```二、大整数减法对于大整数减法,我们可以利用大整数加法的算法,结合负数的概念,将减法转化为加法运算。

具体步骤如下:1. 如果被减数大于减数,则直接进行大整数加法运算;2. 如果被减数小于减数,则将被减数和减数互换位置,并标记结果为负数;3. 利用大整数加法算法,对互换位置后的两个整数进行相加运算,并将结果标记为负数。

岁数 计算器

岁数 计算器

岁数计算器
如果您想知道您的年龄,一个年龄计算器可以帮助您快速计算。


龄计算器是一种简单的在线计算器,只需输入您的出生日期,它就可
以计算出您的当前年龄。

传统的计算器只能算出整数形式,但大多数
年龄计算器都可以计算到半岁和四分之一岁,甚至到天、小时和分钟。

该计算器工作原理非常简单,只需输入您的出生日期,计算器就有能
力自动计算出您的当前年龄,而无需您进行任何其他计算。

此外,通
过使用此类计算器,您还能够查看许多其他有用的数据,如出生的年份、星期、月份,以及您的完整生日日期,这样就可以更清楚地了解
自己的出生日期和年龄。

计算您的年龄的Checkyourage的年龄计算器是确定您的实际年龄的最
快方法。

只需仔细阅读提示,输入您正确的出生日期,就可以快速有
效地计算出您的年龄。

除了您的年龄以外,您还可以查看包括星期,
月份,年份等多种相关数据,从而更进一步了解自己的出生日期。

随着技术的发展,使用年龄计算器来计算年龄已经变得十分方便快捷。

在Checkyourage网站上,您可以免费得到一款权威的年龄计算器,从
而获得准确的结果。

这款年龄计算器可以帮助您提高工作效率,减少
错误,省时又省力,并且操作简单快捷,您甚至不用注册就可以使用,甚至还可以共享给他人,供他们判断其他人的年龄。

简易计算器 带小数点

简易计算器 带小数点

简易计算器(带小数点)一.主要实现功能1.能完成五位数以内的加减乘除运算(其中整数部分最多为3位,小数部分最多为2位,多余的输入无效)。

2.运算结果数码管显示。

3.在进行减法运算时,如果差是负数,数码管能够显示负数。

4.能及时显示输入的值和运算的结果二.操作方法(类似普通的计算器)显示板上的1--9数字键作为运算是数字的输入,上档键作为加法键,下档键作为减法键,左键作为乘法键,右键作为除法键,Esc键是取消键,用来取消上一次的操作或是返回上一状态。

Enter键在数字输入时作为小数点的键入键,当完成第二个的数输入后,Enter键则作为计算器中的“=”键,得出运算的结果,并且在数码管上显示,其余的操作步骤与方法与普通的计算器类似。

三.程序流程图1.思想从计算器的操作步骤来看,可以把计算器的输入过程分解由四个状态来实现,如下图所示第一个数的输入加减乘除键的输入Enter键得结果第二个数的输入与整数计算器不同的是,带小数的计算器要完成小数点的键入,须记录小数点后面的位数,所以我们又可以把数字的输入分为两个状态,一个是整数部分的键入,另一个是小数部分的键入。

如下所示:数字的输入整数的输入小数的输入程序流程图由程序流程图可以画出程序流程图0 1 2 3以上只是从整体把握计算器程序,也就是程序是通过几个模块实现的。

各个模块之间互不影响的。

各个模块实现的算法可以不同,加减乘除和等号的输入比较简单在这就不描述了,下面对数字的输入和显示做简要的描述,如下图所示:0 1 0 1 2开始 初始化 第一位数加减乘除的输入 第二位数等号键的输入 Num =?显示结束数字的输入Num1=? 整数的输入 小数的输入数字的显示F=?显示第一位 数显示第二位 数显示结果四.算法数字的输入与显示1>.如何从键盘上读出键入的值并且如实的表示出来?例如按顺序输入12.12,则在数码管上显示12.12,我们可设一变量th,从键盘上所读出来的值key ,th=th*10+key,如果按顺序输入1 2 .1 2 ,则th的值为1212。

卡西欧函数 计算器

卡西欧函数 计算器

卡西欧函数计算器卡西欧函数计算器是一款功能强大的计算器,可执行各种数学运算和函数计算。

具有易于使用、高度准确和多功能的特点。

无论您是一位学生、工程师还是数学爱好者,卡西欧函数计算器都能帮助您解决各种数学难题。

1. 基本计算功能卡西欧函数计算器拥有基本的加减乘除运算功能,可以执行简单的算术运算。

您只需要输入相应的数字和运算符,计算器就能够给出准确的结果。

同时,计算器还具有括号功能,可以进行复杂的运算。

例如,输入表达式3 + 4 * (2 - 1),计算器会首先计算括号内的运算,然后进行乘法和加法运算,最后给出结果7。

2. 科学计数法卡西欧函数计算器支持科学计数法,可以通过输入E来表示10的幂。

这在处理非常大或非常小的数字时非常实用。

比如,您可以输入1.23E-4来表示0.000123。

3. 四舍五入和取整卡西欧函数计算器具有四舍五入和取整功能。

您可以使用这些功能来控制计算结果的精度。

如果您需要一个整数结果,只需按下取整键。

如果需要一个小数结果并进行四舍五入,可以使用相应的功能键。

4. 函数计算卡西欧函数计算器具有广泛的函数计算能力。

它支持常见的数学函数,如三角函数、对数函数和指数函数等。

您只需输入函数名称和相应的参数,计算器将返回函数的结果。

例如,输入sin(30),计算器将返回0.5,这是正弦函数在角度为30度时的值。

5. 统计功能卡西欧函数计算器还拥有强大的统计功能。

它可以计算数据集的平均值、方差和标准差等统计指标。

您只需输入数据集,计算器将自动给出相关的统计结果。

6. 矩阵计算卡西欧函数计算器支持矩阵计算。

您可以输入矩阵,并进行加法、减法、乘法和转置等操作。

计算器还可以计算矩阵的行列式、逆矩阵和特征值等。

7. 绘图功能卡西欧函数计算器还具有绘图功能。

它可以绘制各种数学函数的图像,帮助您更好地理解和分析函数关系。

您可以输入函数表达式,并选择绘图范围,计算器将绘制相应的图像。

8. 方程求解卡西欧函数计算器可以帮助您求解各种数学方程。

计算器的使用技巧知识点

计算器的使用技巧知识点

计算器的使用技巧知识点计算器是我们日常生活和学习中常见的工具,它能够快速准确地完成各种数学计算。

然而,并不是每个人都能充分利用计算器的功能。

在本文中,将介绍一些计算器的使用技巧知识点,帮助读者更好地使用计算器。

一、基本操作技巧1. 开机与关机:通常计算器都有一个开关键,按下开关键即可开机。

关机时,可以再次按下开关键或者等待计算器自动关机。

2. 数字输入:计算器上有数字键,可以直接按下数字键输入相应的数字。

一些计算器还提供小数点、正负号等功能键。

3. 运算符输入:计算器上通常配备了基本的运算符,如加减乘除。

通过按下相应的运算符键,可以输入运算符。

4. 删除错误输入:计算器一般都有一个删除键,可以用来删除输入的错误字符或运算符。

二、基本运算技巧1. 四则运算:计算器可以进行简单的四则运算,即加减乘除。

在输入数字后,按下相应的运算符键,再输入另一个数字,最后按下等号键即可得到结果。

2. 括号运算:计算器支持括号运算,可以使用括号来改变运算顺序。

在输入表达式时,将需要优先计算的部分用括号括起来,计算器会根据括号的优先级进行计算。

3. 百分数计算:计算器通常都有一个百分比键,可用于计算百分数。

输入一个数字,按下百分比键,计算器会自动将其转化为相应的百分数。

4. 平方和开方运算:一些计算器上有平方和开方键,可以用来进行平方和开方运算。

输入一个数字,按下平方键,则计算器会给出该数字的平方值;按下开方键,则计算器会给出该数字的平方根。

三、科学计数法与大数运算1. 科学计数法:计算器通常都支持科学计数法,可以用来处理非常大或非常小的数字。

在计算器上,科学计数法通常用E表示,例如1E6表示1000000,1E-6表示0.000001。

2. 大数运算:有些计算器具备大数运算的能力,可以处理超过普通整数或小数范围的数字。

这些计算器通常会提供相应的功能键或设置选项,具体使用方法可以参考计算器的说明书。

四、其他实用功能1. 记忆功能:计算器一般都配备有记忆功能,可以将结果保存在内存中,以便后续使用。

大整数计算器范文

大整数计算器范文

大整数计算器范文大整数计算器是一款用于进行大整数运算的工具。

在计算机科学和数学领域,大整数是指位数超过计算机基本数据类型能够表示的范围的整数。

我们常常需要进行大整数运算,例如在密码学、数据加密、矩阵操作等领域。

然而,常规的计算机无法直接处理大整数运算,因此需要使用大整数计算器来进行计算。

在本文中,我们将介绍大整数计算器的基本原理、实现方法以及示例应用。

大整数计算器的基本原理是使用字符串储存大整数,每位数字用字符表示。

通过对字符串中的字符进行操作,实现大整数的加法、减法、乘法、除法等运算。

大整数计算器的实现方法有多种,下面我们将介绍其中的两种常见方法:基于数组和基于链表。

基于数组的大整数计算器是使用数组来储存大整数的每一位数字。

具体实现时,可以使用一个动态数组来存储大整数的每一位数字。

同时,为了方便计算,可以将大整数按低位到高位的顺序存储,即个位存储在数组的第一个元素,十位存储在数组的第二个元素,以此类推。

通过遍历数组中的每一位数字,可以实现大整数的各种运算。

基于链表的大整数计算器是使用链表来储存大整数的每一位数字。

具体实现时,可以定义一个节点结构体,包含一个整数存储位数,和两个指针prev和next。

通过将每一个节点连接起来,即可形成一条链表,链表中的每个节点表示大整数的一位数字。

通过遍历链表中的每一个节点,可以实现大整数的各种运算。

以下是大整数计算器的一些示例应用:1.大整数加法:将两个大整数相加,得到结果。

2.大整数减法:将两个大整数相减,得到结果。

3.大整数乘法:将两个大整数相乘,得到结果。

4.大整数除法:将两个大整数相除,得到商和余数。

5.大整数比较:比较两个大整数的大小,判断它们的关系(相等、大于、小于)。

6.大整数取模:求大整数除以一个整数的余数。

7.大整数求幂:将一个大整数乘以自己若干次,得到结果。

总结起来,大整数计算器是一款实用且重要的工具,能够处理常规计算机无法处理的大整数运算。

整数加减乘除计算器-C51单片机

整数加减乘除计算器-C51单片机

C51单片机-整数加减乘除计算器本程序是基于技能大赛设备,所使用的模块为显示模块、主机模块和指令模块。

此计算器适合10位以内的加减乘除运算,除法没有小数位,只取整数位。

此程序仅供参考,可以相互学习使用。

/* ---简易整数计算器--- */#include<reg52.h> //包含AT89s52头文件#define uchar unsigned char#define uint unsigned int#define ulong unsigned long/* ---1602液晶控制引脚--- */sbit rs=P2^0;sbit rw=P2^1;sbit e=P2^2;#define port P0 //1602数据端口#define port3 P3 //矩阵键盘uchar code tab[]="0123456789+-*/=c";ulong a1,a2,aa; //没有小数点的长整型变量uchar jsf; //运算符/* ---微秒延时--- */void delay(uint i){while(i--);}/* ---1602液晶各子函数--- */ void busy1602(){port=0xff;rs=0;rw=1;e=1;e=1;while(port&0x80);e=0;}void writecom(uchar com){busy1602();rs=0;rw=0;port=com;e=1;e=0;}void writedat(uchar dat){busy1602();rs=1;rw=0;port=dat;e=1;e=0;}void showstr(bit row,uchar col,uchar *s) //显示字符串{uchar i;writecom(0x80+row*0x40+col);for(i=0;s[i]!=0;i++){writedat(s[i]);}}void shownum(bit row,uchar col,ulong num) //显示数字{writecom(0x04);writecom(0x80+row*0x40+col);if(num>=0)writedat(num%10+'0');if(num>9)writedat(num/10%10+'0');if(num>99)writedat(num/100%10+'0');if(num>999)writedat(num/1000%10+'0');if(num>9999)writedat(num/10000%10+'0');if(num>99999)writedat(num/100000%10+'0');if(num>999999)writedat(num/1000000%10+'0');if(num>9999999)writedat(num/10000000%10+'0');if(num>99999999)writedat(num/100000000%10+'0');if(num>999999999)writedat(num/1000000000%10+'0');if(num>4294967294)showstr(0,4,"rorrE");}void init1602() //1602 初始化{writecom(0x38);writecom(0x0c);writecom(0x06);writecom(0x01);/* ---按键扫描程序--- */uchar keyscan(){uchar key=16,i;for(i=0;i<4;i++){port3=0xfe<<i|0xfe>>(8-i); //循环左移switch(port3&0xf0){case 0xe0:key=4*i;break;case 0xd0:key=4*i+1;break;case 0xb0:key=4*i+2;break;case 0x70:key=4*i+3;break;}}return key;}/* ---运算--- */void js()switch(jsf){case '+':aa=a1+a2;break;case '-':if(a1>=a2)aa=a1-a2;else if(a1<a2)aa=a2-a1;break;case '*':aa=a1*a2;break;case '/':if(a2==0)aa=' ';else aa=a1/a2; break;}}void main(){uchar k;bit b=0,a;init1602();showstr(0,3,"jisuanqi");while(1){if(keyscan()!=16&&b==0){delay(200);if(keyscan()!=16){b=1;k=keyscan();if(k==0||k==1||k==2||k==3||k==4||k==5||k==6||k==7||k==8||k= =9) //数字键{if(a==0){a1=a1*10+k;writecom(0x01);shownum(1,15,a1);}else{a2=a2*10+k;writecom(0x01);shownum(1,15,a2);}}else if(k==10||k==11||k==12||k==13) //+-*/键{a=1;writecom(0x01);switch(k){case 10:jsf='+';showstr(1,15,"+");break;case 11:jsf='-';showstr(1,15,"-");break;case 12:jsf='*';showstr(1,15,"*");break;case 13:jsf='/';showstr(1,15,"/");break;}}else if(k==14) //等号键{a=0;js();writecom(0x01);if(aa==' ')showstr(0,0,"Error"); //被除数为零不显示,第一行显示错误else shownum(1,15,aa);if(jsf=='-'&&a1<a2)showstr(1,0,"-"); // aa是负数,前边添加负号else showstr(1,0," ");}else if(k==15) //清零键{a=0;a1=a2=aa=0;jsf=0;writecom(0x01);shownum(1,15,0);}}}else if(keyscan()==16)b=0;}}。

calc计算器说明

calc计算器说明

Calc 计算器说明“计算器”概述使用“计算器”可以完成任意的通常借助手持计算器来完成的标准运算。

“计算器”可用于基本的算术运算,比如加减运算等。

同时它还具有科学计算器的功能,比如对数运算和阶乘运算等。

执行简单的计算键入计算的第一个数字。

单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。

键入计算的下一个数字。

输入所有剩余的运算符和数字。

单击“=”。

注意通过按 NUM LOCK 键,数字键盘也可以用来输入数字和运算符。

执行科学计算单击“查看”菜单中的“科学型”。

单击某一数制。

单击要使用的显示大小,然后继续计算。

注意对于十六进制、八进制及二进制来说,有四种可用的显示类型:四字(64 位表示法)、双字(32 位表示法)、单字(16 位表示法)和字节(8 位表示法)。

对于十进制来说,有三种可用的显示类型:角度、弧度和梯度。

通过按 NUM LOCK 键,数字键盘也可以用来输入数字和运算符。

执行统计计算单击“查看”菜单中的“科学型”。

键入首段数据,然后单击“Sta”打开“统计框”。

单击“返回(R)”返回到“计算器”,再单击“Dat”保存该数值。

键入其余的数据,每次输入之后单击“Dat”。

单击“Ave”、“Sum”或“s”。

注意通过按 NUM LOCK 键,数字键盘也可以用来输入数字和运算符。

“Ave”计算保存在“统计框”中值的平均数,“Sum”计算值的总和,而“s”计算标准误差。

当所有的数据录入完成后,单击“Sta”可以看到数据列表。

“统计框”可以记录您在对话框底部保存的数值个数。

要从列表中删除某个数值,请单击“清零(c)”。

如果要删除所有数值,请单击“全清(A)”。

单击“加载(L)”可将计算器显示区的数字改为在“统计框”内选定的数字。

在标准型和科学型间转换数据单击“MS”存储显示的数字。

在“查看”菜单上,单击所需的视图。

单击“MR”再次调用存储的数字。

注意在标准型和科学型视图之间切换时,“计算器”将清除它所显示的内容。

四年级数学上册计算器教程

四年级数学上册计算器教程

四年级数学上册计算器教程一、认识计算器。

1. 外观结构。

- 一般的计算器有显示屏,用于显示计算的结果和输入的数字、符号等。

- 数字键:0 - 9这些数字键,用于输入数字。

例如,要输入123,就依次按1、2、3。

- 运算符号键:“+”(加法)、“ - ”(减法)、“×”(乘法)、“÷”(除法)等。

如果要计算3+5,先按3,再按“+”键,然后按5。

- 其他功能键:- “AC”或“ON/C”键:这是全清键或开机/清除键。

按这个键可以清除计算器之前的所有计算结果和输入内容,在开机时也按这个键。

- “CE”键:清除输入键。

如果输入数字时输错了,按“CE”键可以清除刚刚输入的错误数字,而不影响之前的计算内容。

比如计算12 + 34,输入12后,误输入5,按“CE”键可清除5,再输入34进行计算。

二、使用计算器进行简单计算。

1. 整数的四则运算。

- 加法运算。

- 例如计算123+456。

先在计算器上依次按1、2、3,然后按“+”键,再按4、5、6,最后按“=”键,显示屏上就会显示出结果579。

- 减法运算。

- 计算789 - 321。

按7、8、9,接着按“ - ”键,再按3、2、1,最后按“=”键,得到结果468。

- 乘法运算。

- 计算12×13。

按1、2,然后按“×”键,再按1、3,最后按“=”键,结果是156。

- 除法运算。

- 计算56÷7。

按5、6,按“÷”键,再按7,按“=”键,结果为8。

2. 混合运算。

- 如果计算包含多种运算符号的式子,如12+3×4。

按照数学运算顺序,先算乘法再算加法。

在计算器上先按3、“×”、4、“=”,得到12,然后按“AC”或“ON/C”键清除之前的结果(这里主要是为了重新开始按顺序计算,也可以利用计算器的记忆功能,不同计算器操作可能不同),再按1、2、“+”、1、2(刚才乘法得到的结果)、“=”,得到结果24。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录一.问题的概述、分析及研究意义;二.流程图三.算法设计四.调试过程五.源程序一.问题的概述、分析及研究意义;设计一个计算器实现两个任意长得整数的加、减、乘、除。

对数值很大,精度很高的数进行高精度大整数计算是一类十分常见的问题,但由于C语言中数据长度和范围受数据类型的限制,普通数学计算很难实现此问题,为尝试解决这个问题,专门设计一个C语言程序用于大整数的计算。

为了实现上述功能,采取双向循环链表表示长整数,每个结点含一个整型变量,仅绝对值不超过9999的整数,整个链表用十进制数表示。

利用头结点数据域的符号表示长整数的符号,相加过程不破坏两个操作数链表,对长整数位数不作上限。

为此需要两个结构数据类型:双向循环链表和长整数。

本程序实现计算任意长的整数的四则运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。

本演示程序中,数字字符限定为[‘0’~‘9’]和字符‘,’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。

利用双向循环链表现实长整数的存储,每个结点含一个整形变量。

输入的形式以回车结束,可以直接输入正数或负数,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。

二.流程图三.算法设计1.定义全局变量#define LEN sizeof(struct Node)#define MAX 1000#define OK 1#define ERROR 0#define OVERFLOW -1#define TRUE 1#define FALSE 0typedef int Status;2,主要函数(1)主程序模块://int main()(2)双向循环链表处理模块://Status conversion(char str[],NodeList &oprh);//int cmplinklen(NodeList opr1,NodeList opr2);//Status Creat(NodeList &oprr,int len);//int compare(NodeList opr1,NodeList opr2);(3)长整数四则运算模块://Status add_bas(NodeList opr1,NodeList opr2,NodeList &oprr);//Status sub_bas(NodeList opr1,NodeList opr2,NodeList &oprr);//Status imul(NodeList opr1,NodeList opr2,NodeList &oprr);//Status idiv(NodeList opr1,NodeList opr2,NodeList &quti,NodeList &remand);(4)界面模块://void title();//void welcome();3,编写函数(1)函数:Status conversion(char str[],NodeList &oprh) 功能:将字符串形式的操作数转换成所需的类型(2)函数:Status input(NodeList &opr1,NodeList &opr2,char str[])功能:输入需要的操作数(3)函数:Status output(NodeList oprr,char str[])功能:输出需要的操作数以及判断其正确性(4)函数:Status initbuf(char str[])功能:为数据对象或变量赋初值(5)函数:int cmplinklen(NodeList opr1,NodeList opr2) 功能:比较两个输入数的大小,长返回1,短返回-1,否则返回0(6)函数:int length(NodeList oprr)功能:求出链表长度(7)函数:Status Creat(NodeList &oprr,int len)功能:生成一个指定链表(8)函数:int compare(NodeList opr1,NodeList opr2) 功能:比较两个数的绝对值的大小(9)函数:Status add_bas(NodeList opr1,NodeList opr2,NodeList &oprr)功能:实现两个数相加(10)函数:Status sub_bas(NodeList opr1,NodeList opr2,NodeList &oprr)功能:实现两个数的相减(11)函数:Status imul(NodeList opr1,NodeList opr2,NodeList &oprr)功能:实现两个数的相乘(12)函数:Status idiv(NodeList opr1,NodeList opr2,NodeList &quti,NodeList &remand)功能:实现两个数的除法四.调试过程运行平台:Microsoft Visual C++ 6.0 1,欢迎界面2,选择操作3,加法运算4,减法运算5,乘法运算6,除法运算8,结束运行五.源程序#include<string.h>#include<stdlib.h>#include<stdio.h>#define LEN sizeof(struct Node)#define MAX 1000#define OK 1#define ERROR 0#define OVERFLOW -1#define TRUE 1#define FALSE 0typedef int Status;//自定义一个变量typedef struct Node{int data;struct Node *prior,*next;}Node,*NodeList;//定义双向循环链表结构体//===============输入模块=============== //求指数函数值int axp(int a,int k){int r=1;if(k==0)return 1;for(;k>0;k--)r=r*a;return r;}//输入转换函数Status conversion(char str[],NodeList &oprh){//将字符串形式的操作数转换成所需的类型NodeList p;int i,k,buffer;k=buffer=0;oprh=(NodeList)malloc(LEN);oprh->next=oprh;oprh->prior=oprh;for(i=strlen(str)-1;i>=0;i--){//若输入的数不合法就返回重新输入if((i!=0 || (str[0]!='-' && str[0]!='+'))&&(str[i]>'9' || str[i]<'0')) return ERROR;if(str[0]=='0' && str[1]!='\0')return ERROR;if((str[0]=='-' || str[0]=='+') && str[1]=='0')return ERROR;if(str[i]!='-' && str[i]!='+'){buffer=buffer+(str[i]-'0')*axp(10,k);k++;if(k==4 || str[i-1]=='-' || str[i-1]=='+' || i==0){//将新建结点插入到头结点之后p=(NodeList)malloc(LEN);oprh->next->prior=p;p->prior=oprh;p->next=oprh->next;oprh->next=p;p->data=buffer;buffer=k=0;}}}if(str[0]=='-')oprh->data='-';elseoprh->data='+';return OK;}//输入函数Status input(NodeList &opr1,NodeList &opr2,char str[]){int flag=OK,i,n=0,l;char b[MAX];printf("\n请输入第一个操作数:\n");scanf("%s",b);getchar();l=strlen(b);for(i=0;i<l;i++)if(b[i]!=',')str[n++]=b[i];str[n]='\0';flag=conversion(str,opr1);while(!flag){printf("ERROR!Input again:\n");scanf("%s",str);getchar();flag=conversion(str,opr1);}printf("\n请输入第二个操作数:\n");scanf("%s",b);getchar();n=0;l=strlen(b);for(i=0;i<l;i++)if(b[i]!=',')str[n++]=b[i];str[n]='\0';flag=conversion(str,opr2);while(!flag){printf("ERROR!Input again:\n");scanf("%s",str);getchar();flag=conversion(str,opr2);}return OK;}//==================输出模块====================== //输出函数Status output(NodeList oprr,char str[]){Status initbuf(char str[]);NodeList p;int i,j,num[4];if(!oprr)return ERROR;p=oprr;i=j=0;initbuf(str);if(oprr->data=='-')str[i++]='-';p=p->next;if(p->next==oprr && p->data==0)//若要输出的数为0则执行str[i++]='0';elsewhile(p!=oprr){num[0]=p->data/1000;num[1]=(p->data-num[0]*1000)/100;num[2]=(p->data-num[0]*1000-num[1]*100)/10;num[3]=p->data-num[0]*1000-num[1]*100-num[2]*10;while(j<4){if(num[j]!=0 || (str[0]=='-' && str[1]!='\0')||(str[0]!='-' && str[0]!='\0'))//此判断语句是为了避免输出诸如:00123…的情况str[i++]=num[j]+'0';j++;}p=p->next;j=0;str[i++]=',';}if(str[--i]==',')str[i]='\0';printf("%s",str);printf("\n");return OK;}//================预处理及杂项操作模块====================//缓冲区部分初始化函数Status initbuf(char str[]){int i;for(i=0;i<=10;i++)str[i]='\0';return OK;}//比较链表长度函数int cmplinklen(NodeList opr1,NodeList opr2){//opr1链比opr2链长则返回1,短则返回-1,否则返回0NodeList p1,p2;p1=opr1->prior;p2=opr2->prior;while(p1->prior!=opr1 && p2->prior!=opr2){p1=p1->prior;p2=p2->prior;}if(p1->prior!=opr1)return 1;if(p2->prior!=opr2)return -1;return 0;}//求链表长度int length(NodeList oprr){int count=0;NodeList p=oprr->next;while(p!=oprr){count++;p=p->next;}return count;}//生成指定长度链表Status Creat(NodeList &oprr,int len){NodeList p;oprr=(NodeList)malloc(LEN);p=oprr;while(len>0){p->next=(NodeList)malloc(LEN);p->next->data='?';p->next->prior=p;p=p->next;len--;}p->next=oprr;oprr->prior=p;return OK;}//比较opr1、opr2绝对值的大小int compare(NodeList opr1,NodeList opr2){NodeList p1,p2;p1=opr1->next;p2=opr2->next;if(cmplinklen(opr1,opr2)==1)//opr1比较长return 1;else if(cmplinklen(opr1,opr2)==-1)//opr2比较长return -1;else{while(p1->data==p2->data && p1->next!=opr1)//注意p1->next!=opr1这条件{p1=p1->next;p2=p2->next;}if(p1->data>p2->data)return 1;else if(p1->data<p2->data)return -1;elsereturn 0;}}//=====================加减法模块==========================//加法基本操作Status add_bas(NodeList opr1,NodeList opr2,NodeList &oprr){//本算法实现A,B相加的操作。

相关文档
最新文档