第1章--高精度计算(C++版)
2024年新华师大版数学七年级上册 第1章综合素质评价 (含答案)

第1章综合素质评价一、选择题(每题3分,共30分)1.下列各数中,负数是()A.-1 B.0 C.2 D.3 2.[母题教材P14例1]3的相反数是()A.13B.-13C.3 D.-33.[2024·天津和平区期中]有理数3,1,-2,4中,小于0的数是() A.3 B.1 C.-2 D.44.如图,小丽从原点O出发,第一次向东(右)走30米,第二次向西(左)走50米到达数轴上表示数a的点上,则a的值为()(第4题)A.50 B.30 C.20 D.-205.下列计算中,正确的是()A.-2-1=-1 B.3÷(-13)×3=-3C.(-3)2÷(-2)2=32D.0-7-2×5=-176.[情境题航空航天]2024年4月25日20时59分,神舟十八号载人飞船在酒泉卫星发射中心发射升空,约23 400秒后,神舟十八号载人飞船与空间站组合体完成自主快速交会对接.将23 400用科学记数法表示为() A.0.234×105 B.2.34×104 C.23.4×103 D.2.34×105 7.[2023·山东实验中学模拟]有理数a,b,c在数轴上对应点的位置如图所示.如果a+b=0,那么下列结论正确的是()(第7题)A.|a|>|c|B.a+c<0 C.abc<0 D.ab=18.下列说法中,正确的是()A.一个有理数不是正数就是负数B.|a|一定是正数C.如果两个数的和是正数,那么这两个数中至少有一个正数D.两个数的差一定小于被减数9.已知|a+3|=5,b=-3,则a+b的值为()A.1或11 B.-1或-11 C.-1或11 D.1或-11 10.[新考向数学文化]小时候大家喜欢玩的幻方游戏,老师稍加创新改成了“幻圆”游戏,现在将-1,2,-3,4,-5,6,-7,8分别填入图中的圆圈内,使横、竖以及内外两圈上的4个数字之和都相等,老师已经帮助同学们完成了部分填空,则图中a+b的值为()A.-6或-3B.-8或1C.-1或-4D.1或-1二、填空题(每题3分,共24分)11.[新趋势跨学科]等高线指的是地形图上高度相等的相邻各点所连成的闭合曲线,在等高线上标注的数字为该等高线的海拔.吐鲁番盆地的等高线标注为-155 m,表示此处的高度海平面155 m(填“高于”或“低于”).12.[2024·杭州公益中学月考]如果|x-3|+(2+y)2=0,那么2x+y的值等于.13.[母题教材P65例1]近似数2.30精确到位.14.绝对值不大于3.14的所有有理数之和等于;不小于-4而不大于3的所有整数之和等于.15.在数轴上与表示-1的点相距2个单位长度的点表示的数是.16.[母题教材P28例3]有5袋苹果,每袋以50千克为标准,超过的千克数记为正数,不足的千克数记为负数.若称重的记录如下(单位:千克):+4,-5,+3,-2,-6,则这5袋苹果的总质量是.17.[2024·清华附中月考]一滴墨水洒在一个数轴上,根据图中标出的数值,判断墨迹遮盖住的整数个数是.18.[2023·随州]某天老师给同学们出了一道趣味数学题:设有编号为1-100的100盏灯,分别对应着编号为1-100的100个开关,灯分为“亮”和“不亮”两种状态,每按一次开关改变一次相对应编号的灯的状态,所有灯的初始状态为“不亮”.现有100个人,第1个人把所有编号是1的整数倍的开关按一次,第2个人把所有编号是2的整数倍的开关按一次,第3个人把所有编号是3的整数倍的开关按一次……第100个人把所有编号是100的整数倍的开关按一次.问最终状态为“亮”的灯共有多少盏?几名同学对该问题展开了讨论:甲:应分析每个开关被按的次数找出规律;乙:1号开关只被第1个人按了1次,2号开关被第1个人和第2个人共按了2次,3号开关被第1个人和第3个人共按了2次……丙:只有按了奇数次的开关所对应的灯最终是“亮”的状态.根据以上同学的讨论过程,可以得出最终状态为“亮”的灯共有盏.三、解答题(21题6分,19,22,23题每题8分,其余每题12分,共66分) 19.[2024·河南周口阶段练习]给出下面六个数:2.5,1,-2,-2.5,0,-32.(1)先画出数轴,再把表示上面各数的点在数轴上表示出来;(2)用“<”号将上面的各数连接起来.20.[母题教材P78复习题T16]计算:(1)-(-1)+32÷(1-4)×2;(2)(-1)1 000-2.45×8+2.55×(-8).21.已知m,n互为相反数,且m≠n,p,q互为倒数.(1)求m+nm +2pq-mn的值.(2)爱思考的璐璐发现其中的条件m≠n是多余的,你认为璐璐的想法对吗?为什么?22.[新视角新定义题]若“ⓧ”表示一种新运算,规定aⓧb=a×b+a+b,请计算下列各式的值..(1)-6ⓧ2;(2)[(-4)ⓧ(-2)]ⓧ1223.在数轴上表示a,0,1,b四个数的点如图所示,已知OA=OB,求|a+|+|a+1|的值.b|+|ab24.[情境题生活应用]体育课上全班女生进行了一分钟仰卧起坐测验,达标成绩为35个.下面是第一组8名女生的成绩记录,其中“+”号表示超过达标成绩的个数,“-”号表示不足达标成绩的个数.-5,0,+7,+12,-9,-1,+6,+14.(1)第一组8名女生中最好成绩与最差成绩相差个.(2)求第一组8名女生的平均成绩为多少?(3)规定:一分钟仰卧起坐次数为达标成绩,不得分;超过达标成绩,每多做1个得2分;未达到达标成绩,每少做1个扣1分.若一分钟仰卧起坐总积分超过60分,便可得到优秀体育小组称号,请通过计算说明第一组8名女生能否获得该称号.25.如图,将一根木棒放在数轴(单位长度为1 cm)上,木棒左端与数轴上的点A重合,右端与数轴上的点B重合.(1)若将木棒沿数轴向右水平移动,则当它的左端移动到点B时,它的右端在数轴上所对应的数为30;若将木棒沿数轴向左水平移动,则当它的右端移动到点A时,它的左端在数轴上所对应的数为6,由此可得这根木棒的长为cm.(2)图中点A所表示的数是,点B所表示的数是.(3)一天,妙妙问奶奶的年龄,奶奶说:“我若是你现在这么大,你还要37年才出生;你若是我现在这么大,我就119岁啦!”请问奶奶现在多少岁了?参考答案一、1. A2. D3. C4. D)×3=3×(-3)×3=-27,5. D 【点拨】-2-1=-3,A错误;3÷(-13,C错误;0-7-2×5=0-7-10=B错误;(-3)2÷(-2)2=9÷4=94-17,D正确.故选D.6. B7. C8. C 【点拨】0是有理数,但0既不是正数也不是负数,故A错误;|a|不一定是正数,也可能为0,故B错误;若a+b>0,a≤b,则a≤0,b>0或a>0,b>0,故C正确;2-(-1)=3>2,故D错误.故选C.9. B 【点拨】|a+3|=5,则a+3=±5,解得a=-8或a=2,则a+b=-8+(-3)=-11或a+b=2+(-3)=-1,故选B.10. A 【点拨】如图,设内圈上的数为c,外圈上的数为d.因为(-1)+2+(-3)+4+(-5)+6+(-7)+8=4,横、竖以及内外两圈上的4个数字之和都相等,所以内外两圈的和都是2,横、竖的和也都是2.由-7+6+b+8=2,得b=-5;由6+4+b+c=2,得c=-3;由a+c+4+d=2,得a+d=1.由题意可知,a和d代表的数字为-1和2.当a=-1时,d=2,则a+b=-1+(-5)=-6;当a=2时,d=-1,则a+b=2+(-5)=-3.故选A.二、11.低于12.4 【点拨】根据绝对值以及偶次幂非负得出x-3=0,2+y=0,进而求出x=3,y=-2,问题随之得解.13.百分14.0;-4 【点拨】设|a|≤3.14,其中正有理数有a1,a2,a3…则负有理数有-a1,-a2,-a3...还有0,则a1+a2+a3+...+0+(-a1)+(-a2)+(-a3)+ 0不小于-4而不大于3的整数有-4,-3,-2,-1,0,1,2,3,则所有整数加起来为-4.15.-3或1 【点拨】设这个数为a,当a<-1时,-1-a=2,解得a=-3;当a>-1时,a-(-1)=2,解得a=1.16.244千克【点拨】+4+(-5)+(+3)+(-2)+(-6)=-6(千克),所以这5袋苹果的总质量为50×5-6=244(千克).17.120 【点拨】因为墨迹最左端的数是-109.2,最右端的数是10.5.根据数在数轴上的排列特点,可得墨迹遮盖部分最左侧的整数是-109,最右侧的整数是10.所以遮盖住的整数共有120个.18.10 【点拨】因为1号开关被按了1次,2号开关被按了2次,3号开关被按了2次,4号开关被按了3次,5号开关被按了2次,6号开关被按了4次,7号开关被按了2次,8号开关被按了4次,9号开关被按了3次…所以n号开关被按的次数等于n的约数的个数.因为约数个数是奇数,所以n 一定是平方数.因为100=102,所以100以内共有10个平方数,所以最终状态为“亮”的灯共有10盏.三、19.【解】(1)数轴表示如图所示.(2)由(1)得-2.5<-2<-32<0<1<2.5.20.【解】(1)原式=1+9÷(-3)×2=1+(-3)×2=1-6=-5.(2)原式=1+(-2.45-2.55)×8=-39.21.【解】(1)由m,n互为相反数且m≠n,得m+n=0,mn=-1,由p,q互为倒数得pq=1,所以原式=0m+2×1-(-1)=3.(2)璐璐的想法不对,因为当m=n时,定有m=n=0,则式子m+nm 与mn都没有意义,所以m≠n这个条件不是多余的.22.【解】(1)-6ⓧ2=-6×2+(-6)+2=-16.(2)[(-4)ⓧ(-2)]ⓧ12=[-4×(-2)+(-4)+(-2)]ⓧ12=2ⓧ12=2×12+2+12=312.23.【解】因为OA =OB ,a <0<b ,所以a +b =0,a =-b .由数轴知b >1,所以a <-1,所以a +1<0.所以原式=0+1-a -1=-a .24.【解】(1)23(2)(-5)+0+7+12+(-9)+(-1)+6+14=-15+39=24(个),24÷8=3(个),35+3=38(个).答:第一组8名女生的平均成绩为38个.(3)(-5)×1+7×2+12×2+(-9)×1+(-1)×1+6×2+14×2=-5+14+24-9-1+12+28=63(分),因为63>60,所以第一组能得到优秀体育小组称号.25.【解】(1)8(2)14;22(3)由题意知奶奶与妙妙的年龄差为[119-(-37)]÷3=52(岁),所以奶奶现在的年龄为119-52=67(岁).。
计算机 第一章多项选择

第二章多项选择题1文化严格意义上应具有的基本属性是( )。
A. 广泛性B. 传递性C. 教育性D. 深刻性E. 统一性42在信息化社会中,以信息的( )为主要经济形式的信息经济在国民经济中占据主导地位。
A. 加工B. 收集C. 传播D. 转变E. 删除33( )是文化的核心部分。
A. 价值B. 观念C. 道德D. 行为E. 规范24所谓计算机文化,就是以计算机为核心,集( )为一体的文化。
A. 网络文化B. 信息文化C. 多媒体文化D. 大众文化E. 艺术文化35机器数11110111转化成真值为( )。
A. -247B. -1110111C. +247D. +1110111E. 24726根据编码规则是按照读音还是字形,汉字输入码可分为( )。
A. 流水码B. 音码C. 形码D. 音形结合码E. 自然码48下列属于汉字交换码的是( )。
A. GB2312-80B. GBK18030C. JN1872D. JN4783E. SCK292829下列属于计算机内汉字编码的是( )。
A. 交换码B. 输入码C. 机内码D. 字形码E. 机器码410关于输入码,下列说法中正确的是( )。
A. 将汉字通过键盘输入到计算机中采用的代码称为汉字输入码,也称为汉字外部码B. 形码重码较少,单字输入速度较快,但学习和掌握较困难C. 五笔字型属于形码D. 汉字输入码的编码原则是应该易于接受、学习、记忆和掌握,重码少,码长尽可能短E. 流水码没有重码511标志人类文化发展的里程碑有( )。
A. 语言的产生B. 文字的使用C. 印刷术的发明D. 计算机的发明E. 网络的应用412下列属于音码的汉字输入法有( )。
A. 谷歌拼音B. 搜狗拼音C. 微软拼音D. 智能ABCE. 自然码413下列说法中,正确的是( )。
A. 计算机的运算部件能同时处理的二进制数据的位数称为字长B. 一个字通常由一个字节或若干个字节组成C. 计算机处理的对象可以分为数值数据和非数值数据D. 计算机内部的数据不一定都是以二进制形式表示和存储的E. 常见的微处理器字长有8位、16位、30位和64位等314下列说法中,正确的是( )。
数据结构(C语言版)第1章 绪论

(C语言版 语言版) 语言版
主讲教师: 吴让仲 主讲教师:
Instructor: WU, RANGZHONG E-mail: wurangzhong@
1/68
教材 (Text Book) 数据结构(C语言版 数据结构 语言版) 语言版
17/68
逻辑结构的分类
数据的逻辑结构是本质,可以分为: 数据的逻辑结构是本质,可以分为: 线性结构和 线性结构和非线性结构 也可以分为 集合 结构中的数据元素除了同属于一种类型外,别无 结构中的数据元素除了同属于一种类型外, 其它关系. 其它关系. 线性结构 结构中的数据元素之间存在一对一的关系. 结构中的数据元素之间存在一对一的关系. 树型结构 结构中的数据元素之间存在一对多的关系. 结构中的数据元素之间存在一对多的关系. 图状结构或网状结构 结构中的数据元素之间存在多对 多的关系. 多的关系.
数据结构发展简史
作为独立课程国外1968年开始设立. 作为独立课程国外1968年开始设立. 1968年开始设立 1968年美国KNUTH教授开创了数据结构的最初 1968年美国KNUTH教授开创了数据结构的最初 年美国KNUTH 体系. 体系. 计算机专业的专业基础课. 计算机专业的专业基础课. 非计算机专业的主要选修课. 非计算机专业的主要选修课.
25/68
数据结构课程的内容
数据结构是介于数学,计算机硬件和计算机软 数据结构是介于数学,计算机硬件和 数学 件之间的一门计算机科学与技术专业的核心课 是编译原理,操作系统,数据库, 程,是编译原理,操作系统,数据库,人工智 能等课程的基础.同时,数据结构技术也广泛 能等课程的基础.同时, 应用于信息科学,系统工程, 应用于信息科学,系统工程,应用数学以及各 信息科学 种工程技术领域. 种工程技术领域. 数据结构课程的先修课程有高级语言程序设计 和离散数学. 和离散数学
《C程序设计》作业参考答案(1-4章)

第1章C语言概述习题(P13):1.3 写出一个C程序的构成。
答:C程序由一个main函数和0个或多个自定义函数构成,每个函数的构成如下:函数类型函数名(函数参数列表){说明部分执行部分}1.4 C语言以函数为程序的基本单位,有什么好处?答:一个函数实现一个相对独立的功能,便于实现程序的模块化。
1.5 请参照本章例题,编写一个C程序,输出以下信息:*************************************************Very good!*************************************************答:参照例1.1编程如下# include <stdio.h>void main(){printf("********************************************\n");printf(" Very good!\n");printf("********************************************\n");}1.6 编写一个C程序,输入a、b、c 3个值,输出其中最大者。
答:参照例1.3编程如下法一:修改例1.3的主函数,自定义max函数不变。
# include <stdio.h>void main(){int max(int x,int y); /*函数声明*/int a,b,c,m; /*定义4个变量,m用于存放最大值*/scanf("%d%d%d",&a,&b,&c);/*从键盘上输入3个整数*/m=max(a,b); /*第一次调用max函数求出前两个数的最大值放在m中*/m=max(m,c); /*再调max函数求出m和第三个数的最大数*/printf("max is %d\n",m); /*输出结果*/}int max(int x,int y) /*定义求两个数的最大数的函数max */{int z;if(x>y) z=x;else z=y;return(z);}法二:修改例1.3的主函数和max函数,将max函数改为求3个数的最大数。
《数控技术及应用》课件第1章

第1章 绪 论 2. 输入装置
输入装置的作用是将程序载体上的数控代码传递并存入数 控系统内。编好的数控程序,可通过光电阅读机、磁带机等输 入装置存储到载体上。目前,随着CAD/CAM、CIMS技术的发展, 越来越多地采用串行通信方式进行程序的传输。
为了便于加工程序的编辑修改、模拟显示,数控系统通过 显示器为操作人员提供必要的信息界面。较简单的显示器只有 若干个数码管,只能显示字符;较高级的系统一般配有CRT显 示器或液晶显示器, 可以显示图形。
第1章 绪 论
在数控机床上除了上述轨迹控制和点位控制外,还有许多 动作,如主轴的启停、刀具的更换、 冷却液的开关、电磁铁 的吸合、电磁阀的启闭、离合器的开合、各种运动的互锁和连 锁;运动行程的限位、急停、报警、进给保持、循环启动、 程序停止、 复位等等。 这些都属于开关量控制,一般由可编 程控制器(Programmable Controller, 简称为PC,也称为可 编程逻辑控制器PLC, 又称为可编程机床控制器PMC)来完成, 开关量仅有“0”和“1”两种状态, 显然可以很方便地融入机 床控制系统中, 实现对机床各种运动的数字控制。
第1章 绪 论
1.2 数控机床的组成与工作原理
1.2.1 数控机床的组成 数控机床一般由输入/输出装置、 数控装置、 伺服驱动
装置、 辅助控制装置和机床(或称裸机)等五部分组成, 如 图1-1所示。
-
第1章 绪 论
图 1 1 数 控 机 床 的 组 成
第1章 绪 论
1. 程序编制及程序载体
数控程序是数控机床自动加工零件的工作指令。在对加工 零件进行工艺分析的基础上,确定零件坐标系在机床坐标系上 的相对位置,即零件在机床上的安装位置,刀具与零件相对运 动的尺寸参数,零件加工的工艺路线、切割加工的工艺参数以 及辅助装置的动作等。得到零件的所有运动、尺寸、工艺参数 等加工信息后,用有文字、数字和符号组成的标准数控代码, 按规定的方法和格式,编制零件加工的数控程序。 编制程序 的工作可由人工进行。对于形状复杂的零件,则要在专用的编 程机或通用计算机上使用CAD/CAM软件进行自动编程。
计算机应用基础本科第1章单选题及答案

网考资料1.3例题与解析[例1-1] 第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名是____。
A.ENIAC B.EDVAC C.EDSAC D.MARK[答案与解析]本题正确答案为A。
本题考查有关电子数字计算机的起源与历史沿革方面的知识。
一般认为,世界上第一台电子数字计算机于1946年在美国宾夕法尼亚大学研制成功。
该计算机的名称为ENIAC。
[例1-2] 关于计算机的分类方法有多种,下列选项中不属于按计算机处理数据的方式进行分类的是____。
A.电子数字计算机B.通用计算机C.电子模拟计算机D.数模混合计算机[答案与解析] 本题正确答案为B。
本题考查有关计算机分类的知识。
按计算机处理数据的方式进行分类有电子数字计算机、电子模拟计算机和数模混合计算机。
[例1-3] 为了实现自动控制处理,需要计算机具有的基础条件是____。
A.存储程序B.高速度与高精度C.可靠性与可用性D.连网能力[答案与解析] 本题正确答案为A本题考查有关计算机自动控制能力这一特点的相关知识。
计算机具有自动控制处理能力。
存储程序是计算机工作的一个重要原则,这是计算机能自动控制处理的基础。
[例1-4] 当前计算机已应用于各种行业、各种领域,而计算机最早的设计是应用于____。
A.数据处B.科学计算C.辅助设计D.过程控制[答案与解析] 本题正确答案是B。
本题考查有关计算机应用方面的知识。
计算机已普及到各行各业、各种领域,已经无所不在。
但早期的电子数字计算机的设计目的是用于快速计算,着重用于军事。
而随着计算机技术的发展与应用需求的增加,计算机从主要用于科学和工程计算发展到从事数据处理、辅助设计和过程控制以及人工智能等,[例1-5] 在计算机领域,信息是经过转化而成为计算机能够处理的一九数据B.符号C.图形D.数字[答案与解析] 本题正确答案为A。
本题考查有关信息基本概念的知识信息是人们由客观事物得到的。
在计算机领域,信息是经过转化而成为计算机能够处理的数据,同时也是经过计算机处理后作为问题解答而输出的数据。
高质量程序设计指南C++ C语言(经典第1版)林锐

2001
Page 3 of 101
高质量 C++/C 编程指南,v 1.0
2001年7月24日高质量cc编程指南v10版本历史版本状态作者参与者起止日期备注v09林锐200171至林锐起草草稿文件2001718v10林锐2001718至朱洪海审查v09正式文件2001724林锐修正草稿中的错误2001page2of101高质量cc编程指南v10目录目录前言6第1章文件结构1111版权和版本的声明1112头文件的结构1213定义文件的结构1314头文件的作用1315目录结构14第2章程序的版式1521空行1522代码行1623代码行内的空格1724对齐1825长行拆分1926修饰符的位置1927注释2028类的版式21第3章命名规则2231共性规则2232简单的windows应用程序命名规则2333简单的unix应用程序命名规则25第4章表达式和基本语句2641运算符的优先级2642复合表达式2743if语句2744循环语句的效率2945for语句的循环控制变量3046switch语句3047goto语句31第5章常量3351为什么需要常量3352const与define的比较3353常量定义规则3354类中的常量34第6章函数设计362001page3of101高质量cc编程指南v1061参数的规则3662返回值的规则3763函数内部实现的规则3964其它建议4065使用断言4166引用与指针的比较42第7章内存管理4471内存分配方式4472常见的内存错误及其对策4473指针与数组的对比4574指针参数是如何01-7-1 至 2001-7-18 2001-7-18 至 2001-7-24
C程序设计(第五版)-第1章程序设计和C语言课后习题答案

C程序设计(第五版)-第1章程序设计和C语⾔课后习题答案1.什么是程序?什么是程序设计?程序:⼀组计算机能识别和执⾏的指令。
程序设计:给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。
程序设计往往以某种程序设计语⾔为⼯具,给出这种语⾔下的程序。
程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段2.为什么需要计算机语⾔?⾼级语⾔有哪些特点?⼈和计算机交流信息也要解决语⾔问题。
⾼级语⾔特点:1.不依赖于具体机器2.数据结构更加丰富3.更接近⾃然语⾔(算法语⾔)更容易掌握4.编写的程序要经过编译或解释计算机才能执⾏3.正确理解以下名词及其含义:源程序:源程序,是指未经编译的,按照⼀定的程序设计语⾔规范书写的,⼈类可读的⽂本⽂件。
通常由⾼级语⾔编写。
⽬标程序:为源程序经编译可直接被计算机运⾏的机器码集合可执⾏程序:所有编译后得到的⽬标模块连接装配起来,再与函数库相连接成⼀个整体,⽣成⼀个可供计算机执⾏的⽬标程序,称为可执⾏程序。
程序编辑:在计算机上编辑源程序。
程序编译:先预处理,再对源程序进⾏检查,判定它有⽆语⾔⽅⾯的错误,如有则发出错误信息提⽰程序员修复,没有错误后,将源程序转换为⼆进制形式的⽬标程序。
程序连接:把所有编译后得到的⽬标模块连接装配起来,再与函数库相连接成⼀个整体。
程序:⼀组计算机能识别和执⾏的指令。
程序模块:程序模块即可由汇编程序、编译程序、装⼊程序或翻译程序作为⼀个整体来处理的⼀级独⽴的、可识别的程序指令。
程序⽂件:描述程序的⽂件称为程序⽂件。
函数:函数中的代码执⾏后可以实现你某种⽬的,或者得到想要的数据.主函数:是程序执⾏的起点。
被调⽤函数:调⽤其它的函数。
库函数:C语⾔库函数是把⾃定义函数放到库⾥,是别⼈把⼀些常⽤到的函数编完放到⼀个⽂件⾥,供程序员使⽤。
程序员⽤的时候把它所在的⽂件名⽤#include<>加到⾥⾯就可以了(尖括号内填写⽂件名),例如#include<math.h>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//按位相除
//删除前导0
实质上,在做两个高精度数运算时候,存储高精度数的 数组元素可以不仅仅只保留一个数字,而采取保留多位数 (例如一个整型或长整型数据等),这样,在做运算(特别 是乘法运算)时,可以减少很多操作次数。例如图5就是采用 4位保存的除法运算,其他运算也类似。具体程序可以修改上 述例题予以解决,程序请读者完成。 示例:123456789 ÷45 = 1’ 2345’ 6789 ÷ 45 = 274’ 3484 ∵ 1 / 45 = 0 , 1%45=1 ∴ 取12345 / 45 = 274 ∵ 12345 % 45 = 15 ∴ 取156789/45 = 3484 ∴ 答案为2743484, 余数为156789%45 = 9 图5
【例1】高精度加法。输入两个正整数,求它们的和。
【分析】 输入两个数到两个变量中,然后用赋值语句求它们的和,输出。但 是,我们知道,在C++语言中任何数据类型都有一定的表示范围。而当 两个被加数很大时,上述算法显然不能求出精确解,因此我们需要寻求 另外一种方法。在读小学时,我们做加法都采用竖式方法,如图1。 这 样,我们方便写出两个整数相加的算法。
【例2】高精度减法。输入两个正整数,求它们的差。
【算法分析】 类似加法,可以用竖式求减法。在做减法运算时,需要注意的是:被减数必 须比减数大,同时需要处理借位。高精度减法的参考程序: #include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int a[256],b[256],c[256],lena,lenb,lenc,i; char n[256],n1[256],n2[256]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c));
i=1; while (i<=lena||i<=lenb) { if (a[i]<b[i]) { a[i]+=10; //不够减,那么向高位借1当10 a[i+1]--; } c[i]=a[i]-b[i]; //对应位相减 i++; } lenc=i; while ((c[lenc]==0)&&(lenc>1)) lenc--; //最高位的0不输出 for (i=lenc;i>=1;i--) cout<<c[i]; //输出结果 cout<<endl; return 0;
通常,读入的两个整数用可用字符串来存储,程序设计如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { char a1[100],b1[100]; int a[100],b[100],c[100],lena,lenb,lenc,i,x; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(a1); gets(b1); //输入加数与被加数 lena=strlen(a1); lenb=strlen(b1); for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; //加数放入a数组 for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; //加数放入b数组 lenc =1; x=0;
856 + 255 1113 B2 B1 C4 C3 C2 C1 图2
如果我们用数组A、B分别存储加数和被加数,用数组C存储结果。 则上例有A[1]=6,A[2]=5, A[3]=8,B[1]=5,B[2]=5,B[3]=2,C[4]=1, C[3]=1,C[2]=1,C[1]=1,两数相加如图2所示。
printf("Input minuend:"); gets(n1); //输入被减数 printf("Input subtrahend:"); gets(n2); //输入减数 if (strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)) //strcmp()为字符串比较函数,当n1==n2, 返回0; //n1>n2时,返回正整数;n1<n2时,返回负整数 { //处理被减数和减数,交换被减数和减数 strcpy(n,n1); //将n1数组的值完全赋值给n数组 strcpy(n1,n2); strcpy(n2,n); cout<<"-"; //交换了减数和被减数,结果为负数 } lena=strlen(n1); lenb=strlen(n2); for (i=0;i<=lena-1;i++) a[lena-i]=int(n1[i]-'0'); //被减数放入a数组 for (i=0;i<=lenb-1;i++) b[lenb-i]=int(n2[i]-'0'); //减数放入b数组
for (i=1;i<=lena;i++) { c[i]=(x*10+a[i])/b; x=(x*10+a[i])%b; } lenc=1; while (c[lenc]==0&&lenc<lena) lenc++; for (i=lenc;i<=lena;i++) cout<<c[i]; cout<<endl; return 0; }
高精度乘法的参考程序: #include<iostream> #include<cstring> #include<cstdio> using namespace std; int main() { char a1[100],b1[100]; int a[100],b[100],c[100],lena,lenb,lenc,i,j,x; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(a1);gets(b1); lena=strlen(a1);lenb=strlen(b1); for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;
for (i=1;i<=lena;i++) { x=0; //用于存放进位 for (j=1;j<=lenb;j++) //对乘数的每一位进行处理 { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; //当前乘积+上次乘积进位+原数 x=c[i+j-1]/10; c[i+j-1] %= 10; } c[i+lenb]=x; //进位 } lenc=lena+lenb; while (c[lenc]==0&&lenc>1) //删除前导0 lenc--; for (i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }
【例4】高精度除法。输入两个正整数,求它们的商 (做整除)。
【算法分析】 做除法时,每一次上商的值都在0~9,每次求得的余 数连接以后的若干位得到新的被除数,继续做除法。因此, 在做高精度除法时,要涉及到乘法运算和减法运算,还有移 位处理。当然,为了程序简洁,可以避免高精度除法,用0~ 9次循环减法取代得到商的值。这里,我们讨论一下高精度数 除以单精度数的结果,采取的方法是按位相除法。
【例5】高精除以高精,求它们的商和余数。 【算法分析】 高精除以低精是对被除数的每一位(这里 的“一位”包含前面的余数,以下都是如此) 都除以除数,而高精除以高精则是用减法模 拟除法,对被除数的每一位都减去除数,一 直减到当前位置的数字(包含前面的余数) 小于除数(由于每一位的数字小于10,所以 对于每一位最多进行10次计算)具体实现程 序如下:
因此,算法描述如下: int c[100]; void add(int a[],int b[]) //a,b,c都为数组,分别存储被加数、加数、结果 { int i=1,x=0; //x是进位 while ((i<=a数组长度)||(i<=b数组的长度)) { c[i]=a[i]+b[i]+x; //第i位相加并加上次的进位 x=c[i]/10; //向高位进位 c[i]%=10; //存储第i位的值 i++; //位置下标变量 } }
while (lenc <=lena||lenc <=lenb) { c[lenc]=a[lenc]+b[lenc]+x; //两数相加 x=c[lenc]/10; c[lenc]%=10; lenc++; } c[lenc]=x; if (c[lenc]==0) lenc--; //处理最高进位 for (i=lenc;i>=1;i--) cout<<c[i]; //输出结果 cout<<endl; return 0; }
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main() { char a1[100],c1[100]; int a[100],c[100],lena,i,x=0,lenc,b; memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); gets(a1); cin>>b; lena=strlen(a1); for (i=0;i<=lena-1;i++) a[i+1]=a1[i]-48;