任意长整数加法运算

任意长整数加法运算
任意长整数加法运算

课程名称: 《数据结构》课程设计

课程设计题目: 任意长整数加法运算

姓名: XXX

专业: 计算机科技2班年级: 13级学号: E11314XXX

指导老师:XXX

2015年9月17

目录

1.课程设计的目的 (1)

2.需求分析 (1)

3任意长整数加法的设计 (2)

3.1概要设计 (2)

3.2详细设计 (3)

3.3调试分析 (9)

3.4用户手册 (10)

3.5测试结果 (10)

4总结 (11)

5、程序清单:(见附录) (11)

7、程序运行结果 (11)

附录1 (13)

1.课程设计的目的

(1) 熟练使用 C 语言编写程序,解决实际问题;

(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2.需求分析

(1)设计一个实现任意长的整数加法运算演示程序。

(2)利用双向链表实现长整数的存储,每个结点含一个整型变量。

(3)输入输出形式按中国对长整数的表示习惯,每四位一组,用逗号隔开。

3任意长整数加法的设计

3.1概要设计

(1)主界面设计

图 1

图2

主界面,如图1所示,包含四个菜单项,输入数字选择对应菜单,进入子项。其中选项2包含子菜单,如图2所示。

(2)存储结构

本系统用结构体linlist存储数据,该结构体由数据data、下一节点指针next、上一节点指针prior组成。data是short型变量,存放每个结点的数据。本系统中data 一般不超过10000。用结构体linlist构建链表,头结点的data域符号代表长整数的符号,绝对值表示链表结点数目。

(3)系统功能设计

本系统主菜单包含四个选项,功能描述如下:

菜单1:输入两个任意长的整数。可按照标准四位一组中间用逗号隔开输入,也可直接输入,输入的数字保存在文件中,结束后自动返回主菜单。

菜单2:实现两个任意长整数的加法。可直接输入两个数也可读入一个文件,获取两个加数,相加结果可保存在文件中,也可不保存,结束后返回菜单2。

菜单3:输入文件名称,查询文件中的数字。文件中可能保存的是两个加数,也可能保存的是某次两个任意长整数相加的结果。

菜单4:退出系统。

3.2详细设计

(1)系统子程序及功能设计

本系统设置16个子程序,各程序的函数名及功能说明如下:

void append(LinList &L,Elemtype d);//以L为头结点,将d加入到链表L void Delete(LinList &L);//删除结点L

void display(LinList L);//按照输出标准,输出任意长整数

void add(LinList &L1,LinList L2);//将L1与L2相加

short StrToPosiNum(char * s);//将s转化为一个小于32767的正整数

void input(LinList &L);//输入一个很长的整数到L

void FREE(LinList &L1);//删除以L1为头结点的整个链表

void save(LinList L1,LinList L2);//把L1,L2写到文件

void load(LinList &L1,LinList &L2);//读文件到L1,L2

void inputdata();//调用input函数,实现两个任意长整数的输入

void welcome();//输出欢迎界面

void fileadd();//读入文件,调用add函数,实现两个任意长整数的相加void directadd();//直接输入数字相加

void calculayteadd();//实现两个任意长整数的相加

int maincourse();//菜单选择

void search();//查询文件中的数字

(2)数据类型定义

typedef struct linlist{

Elemtype data;

linlist * next;

linlist * prior;

} * LinList;

(3)系统主要子程序详细设计

本系统的各个函数之间的关系如下图:

图3

1)菜单1代码

void inputdata(){//调用input函数,实现两个任意长整数的输入system("cls");

LinList L1=NULL,L2=NULL;

printf("\t\t\t ------------------\n\t\t\t\t 输入数据\n\t\t\t ------------------\n");

printf("输入第一个长整数:");

input(L1); //调用input函数

printf("输入第二个长整数:");

input(L2);

printf("\n数据将存放于文件中...");

save(L1,L2); //调用save函数,存储L1L2

FREE(L1);

FREE(L2);//释放L1,L2

printf("写入完成!\n");

system("pause");

}

void input(LinList &L){//输入一个很长的整数到L

char s[1000],s2[5]={'0','0','0','0','\0'};

unsigned i=0,j;

int sign=1,num=0,flag=1;

Elemtype data;

while(flag){

flag=0;

s[0]=getchar();

if(s[0]=='-'){//若为负数

sign=-1;

i=i-1;

}

while(i==-1||s[i]!='\n'){//第一个输入负号或者输入数字

i=i+1;

s[i]=getchar();

if(s[i]==',')

i=i-1;

else if((s[i]>'9'||s[i]<'0')&&s[i]!='\n'){

printf("非法输入,请重新输入!\n");

flag=1;

continue;

}

}

}

s[i]=0;

append(L,(int)(sign*ceil((strlen(s))/4.0)));//第一个结点存放链表长度和数据的正负号

j=strlen(s)%4;

i=0;

if(j!=0){

for(;i

s2[i]=s[i];

s2[i]=0;

data=StrToPosiNum(s2);

append(L,data);//以L为头结点,添加结点

}

for(;i

for(j=0;j<4;j++)

s2[j]=s[i+j];

s2[j]=0;

data=StrToPosiNum(s2);

append(L,data);//以L为头结点,添加结点

}

}

2)菜单2代码

void calculayteadd(){//菜单2求和

while(1){

system("cls");

printf("\n\t\t --------------------------------\n\t\t\t\t 加法运算\n");

printf("\t\t --------------------------------\n");

printf("\t\t\t\t1. 直接输入求和\n\t\t\t\t2. 读入文件求和\n\t\t\t\t3. 返回主菜单\n");

printf("\t\t --------------------------------\n\n");

char s[100];

int flag=0;

do{

if(flag)

printf("\t 输入非法,请重新输入:");

else

printf("\t 输入数字1-3选择:");

flag=1;

scanf("%s",s);

}while(strlen(s)>1||s[0]-'0'<=0||s[0]-'0'>3);

getchar();

switch(s[0]-'0'){

case 1:

directadd();//直接输入数字求和

break;

case 2:

fileadd();//输入文件名称求和

break;

case 3:

return;

break;

}

}

void add(LinList &L1,LinList L2){//将L1与L2相加,结果放到L1

LinList p,q,r;

int cy=0;

int sign1=1,sign2=1;

if(!L1||L1->data==0)//若L1为空,相加结果为L2

L1=L2;

else if(!L2||L2->data==0)//若L2为空,相加结果为L1

return;

else{//否则

if(abs(L1->data)data)||L1->next->datanext->data){ q=L1; //L1总是存放绝对值较大的数字

L1=L2;

L2=q;

}

p=L1->prior;

q=L2->prior;

if(L1->data<0)

sign1=-1;

if(L2->data<0)

sign2=-1;

if(sign1*sign2>0){ //相加的为同号数字

while(p!=L1&&q!=L2){

p->data=q->data+p->data+cy;

if(p->data>9999){

cy=1;

p->data=abs(p->data)-10000;

}

else

cy=0;

p=p->prior;

q=q->prior;

}

while(p!=L1&&cy){

p->data=p->data+cy;

if(p->data>9999){

cy=1;

p->data=p->data-10000;

}

else

cy=0;

p=p->prior;

实用标准文档

}

p=p->next;

if(cy){

r=(LinList)malloc(sizeof(linlist));

p->prior->next=r;

r->prior=p->prior;

r->next=p;

p->prior=r;

r->data=cy;

L1->data=L1->data*sign1+1;

L1->data=L1->data*sign1;

}

}

else{//相加的为异号的数字

cy=0;

while(p!=L1&&q!=L2){

p->data=p->data-cy;

if(p->datadata){

p->data=p->data+10000;

cy=1;

}

p->data=p->data-q->data;

p=p->prior;

q=q->prior;

}

while(p!=L1&&cy){

if(p->data

cy=1;

p->data=p->data+10000;

}

p->data=p->data-cy;

p=p->prior;

}

}

}

while(L1->next->data==0&&L1->next->next!=L1){//结果为0的结点去掉p=L1->next;

p->next->prior=L1;

L1->next=p->next;

L1->data=L1->data*sign1-1;

L1->data=L1->data*sign1;

Delete(p);

}

}

3)菜单3代码

void search(){//查询文件中的数字

FILE * fp;

LinList L1=NULL,L2=NULL;

LinList p=L1;

int i,length;

char s[100];

system("cls");

printf("\t\t\t ------------------\n\t\t\t\t 文件查询

\n\t\t\t ------------------");

Elemtype t;

printf("\n文件的名称为:");//读取文件

scanf("%s",s);

fp=fopen(s,"rb");

fseek(fp,0,SEEK_SET);

fread(&t,sizeof(Elemtype),1,fp);

length=abs(t);//第一个数字的位数

append(L1,t);

for(i=0;i

fread(&t,sizeof(Elemtype),1,fp);

append(L1,t);

}

fread(&t,sizeof(Elemtype),1,fp);

if(!feof(fp)){//读入第二个数字

length=abs(t);

append(L2,t);

for(i=0;i

fread(&t,sizeof(Elemtype),1,fp);

append(L2,t);

}

printf("文件中有两个数字,分别为:\n");

display(L1);

putchar('\n');

display(L2);

putchar('\n');

}

else{

printf("文件中有一个数字:\n");

display(L1);

putchar('\n');

}

system("pause");

}

3.3调试分析

1.输入数据

在主菜单下输入1并回车,进入子项1,可输入两个任意长的整数,保存于文件中,运行结果如图4所示。

图4

2.加法运算

在主菜单下输入2并回车,可进入子菜单。选择子菜单1直接输入数字或者选择子菜单2,读取文件,计算文件中两个任意长整数的和,并可选择是否将结果保存在文件中,结果如图5所示。

图5

3.文件查询

在主菜单下输入3并回车,可进入子菜单,读取文件,查询文件中的数字,结果如图6。

图6

4.退出系统

在主菜单下输入4并回车,退出系统,结果如图7。

图7

3.4用户手册

1.本程序执行文件为“任意长整数加法.exe”。

2.用户进入系统后根据提示,输入数字进入相应的子菜单,实现相应功能。

3.本系统可实现任意长整数加法的运算。

3.5测试结果

图 8

图9

图10

图11

图12

图13

该部分给出了本系统的加法测试结果,如图8到13所示。 本系统主要函数的时间复杂度:

add 函数是将L1与L2相加,相加是从链表尾部加到链表头部,时间复杂度与链表长度相关。链表长度与数据位数有关。链表长度/4L n =。n 是数据的位数。所以时间复杂度为

()O n 。

Input 函数将数字作为字符逐个输入,时间复杂度与数字位数相关,所以时间复杂度为

()O n 。

save 和load 函数是将结点中data 逐个保存到文件或从文件读出,时间复杂度与链表长度有关,加上头结点,链表长度为/41L n =+,对应的时间复杂度为()O n 。

4总结

实验中,我在算法设计不太清晰时就敲代码,到后来发现有点混乱不得不重新改,浪费了很多时间,让我总结到了在完成代码部分之前要设计好算法才能更高效。这次实验相对于上次实验有所提高,代码的冗余相对上次代码有明显的减少,很多功能都封装在了函数里,比上次的代码易读点,但程序整体的设计还是有待提高,回过头再看看发现整体不是很规整。下次继续改进。 5、程序清单:(见附录) 7、程序运行结果 1 主界面

2输入数据,生成文件

3加法运算界面

4直接输入数据求和

5读入文件求和

6查询文件内容

7退出系统

附录1(系统主要子程序详细设计给出的代码不再详细给出)

程序清单

#include

#include

#include

#include

#define Elemtype short

typedef struct linlist{

Elemtype data;

linlist * next;

linlist * prior;

} * LinList;

void append(LinList &L,Elemtype d){//以L为头结点,添加结点LinList p,q;

if(!L){

L=(LinList)malloc(sizeof(linlist));

L->data=d;

L->next=L;

L->prior=L;

}

else{

p=L;

while(p->next!=L)

p=p->next;

q=(LinList)malloc(sizeof(linlist));

q->data=d;

q->next=p->next;

q->prior=p;

p->next=q;

q->next->prior=q;

}

}

void Delete(LinList &L){//删除结点L

if(!L)

return;

else if(L->next==L)

L=NULL;

else{

L->next->prior=L->prior;

L->prior->next=L->next;

free(L);

}

}

void display(LinList L){//按照输出标准,输出任意长整数

if(!L)

putchar('\n');

else if(L->next==L)

printf("\n");

else{

LinList q=L->next;

if(L->data<0&&q->data!=0)

printf("-");

printf("%d",q->data);

q=q->next;

while(q!=L){

putchar(',');

if(q->data<10)

printf("000");

else if(q->data<100)

printf("00");

else if(q->data<1000)

printf("0");

printf("%d",q->data);

q=q->next;

}

}

}

void add(LinList &L1,LinList L2);//将L1与L2相加,结果放到L1

short StrToPosiNum(char * s){ //将s转化为一个小于32767的正整数int length=1,i=0,flag;

double num1;

while(i!=length){

flag=1;

num1=0;

length=strlen(s);

for(i=0;i

if(s[i]-'0'>-1&&s[i]-'0'<10)

num1=num1*10+s[i]-'0';

else if(s[i]=='-')

flag=-1;

else{

printf("%c\n字符串到整型数字出错!",s[i]);

exit(0);

}

}

if(num1>32767){

printf("输入数字太大!,请重新输入:");

exit(0);

}

}

return flag*(short)num1;

}

void input(LinList &L);//输入一个很长的整数到L void FREE(LinList &L1){//删除以L1为头结点的整个链表LinList p;

if(!L1)

return;

else{

L1->prior->next=NULL;

while(L1){

p=L1;

L1=L1->next;

free(p);

}

}

}

void save(LinList L1,LinList L2){//把L1,L2写到文件FILE * fp;

LinList p=L1;

int i,length;

char s[100];

printf("\n文件的名称为:");//将生成的数保存于文件scanf("%s",s);

if(L1){

length=abs(L1->data);

fp=fopen(s,"wb+");

for(i=0;i

fwrite(&p->data,sizeof(Elemtype),1,fp);

p=p->next;

}

}

if(L2){

p=L2;

for(i=0;i

fwrite(&p->data,sizeof(Elemtype),1,fp);

p=p->next;

}

}

fclose(fp);

}

void load(LinList &L1,LinList &L2){//读文件到L1,L2

FILE * fp;

LinList p=L1;

int i,length;

char s[100];

Elemtype t;

printf("\n文件的名称为:");//将生成的数保存于文件

scanf("%s",s);

fp=fopen(s,"rb");

fseek(fp,0,SEEK_SET);

fread(&t,sizeof(Elemtype),1,fp);

length=abs(t);

append(L1,t);

for(i=0;i

fread(&t,sizeof(Elemtype),1,fp);

append(L1,t);

}

fread(&t,sizeof(Elemtype),1,fp);

length=abs(t);

append(L2,t);

for(i=0;i

fread(&t,sizeof(Elemtype),1,fp);

append(L2,t);

}

}

void inputdata();//调用input函数,实现两个任意长整数的输入

void welcome(){//输出欢迎界面

printf("\n\t ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");

printf("\t . .\n");

printf("\t . 任意长的整数加法运算器 .\n");

printf("\t . .\n");

printf("\t ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");

}

void fileadd(){//读入文件,调用add函数,实现两个任意长整数的相加

LinList L1=NULL,L2=NULL;

int flag;

char s[100];

system("cls");

printf("\t\t\t ------------------\n\t\t\t\t 读入文件求和\n\t\t\t ------------------\n");

printf("读入文件...");

load(L1,L2);//读入到L1L2

printf("(");

display(L1);

printf(")+");

printf("(");

display(L2);

printf(")=");

add(L1,L2);//调用add,计算L1+L2

display(L1);

putchar('\n');

flag=0;

do{//保存计算结果

if(flag)

printf("输入非法,请重新输入:");

else

printf("是否保存结果(输入Y/N)?");

flag=1;

scanf("%s",s);

}while(strlen(s)>1||s[0]-'y'!=0&&s[0]-'Y'!=0&&s[0]-'N'!=0&&s[0]-'n'!=0);

if(s[0]=='y'||s[0]=='Y'){

save(L1,NULL);

printf("保存完成!\n");

}

system("pause");

}

void directadd(){ //直接输入数字相加

LinList L1=NULL,L2=NULL;

int flag;

system("cls");

printf("\t\t\t ------------------\n\t\t\t\t 直接输入求和\n\t\t\t ------------------\n");

puts("输入第一个整数:");

input(L1);

puts("输入第二个整数:");

input(L2);

add(L1,L2);

printf("相加结果为:\n");

display(L1);

flag=0;

char s[100];

do{//保存计算结果

if(flag)

printf("\n输入非法,请重新输入:");

else

printf("\n是否保存结果(输入Y/N)?");

flag=1;

scanf("%s",s);

}while(strlen(s)>1||s[0]-'y'!=0&&s[0]-'Y'!=0&&s[0]-'N'!=0&&s[0]-'n'!=0);

if(s[0]=='y'||s[0]=='Y'){

save(L1,NULL);

printf("保存完成!\n");

}

system("pause");

printf("\n");

}

void calculayteadd();

int maincourse(){//菜单选择

printf("\n\t\t --------------------------------\n\t\t\t\t 功能菜单\n");

printf("\t\t --------------------------------\n");

printf("\t\t\t 1. 输入数据\t2. 加法运算\n\n\t\t\t 3. 文件查询\t4. 退出系统\n");

printf("\t\t --------------------------------\n\n");

int flag=0;

char s[100];

do{

if(flag)

printf("\t 输入非法,请重新输入:");

else

printf("\t 输入数字1-4选择:");

flag=1;

scanf("%s",s);

}while(strlen(s)>1||s[0]-'0'<=0||s[0]-'0'>4);

getchar();

return s[0]-'0';

}

void search();//查询文件中的数据

int main(){

system("color 2F");

LinList L1=NULL,L2=NULL;

while(1){

system("cls");

welcome();

switch(maincourse()){

case 1:

inputdata();

break;

case 2:

calculayteadd();

break;

case 3:

search();

break;

case 4:

return 0;

}

}

return 0;

}

两个任意长的整数的求和运算

两个任意长的整数的求和运算 进制的转换 2014 年6月 软件综合课程设计

目录 一、问题陈述 二、需求分析 三、概要设计 四、详细设计 五、程序代码 六、运行结果与测试 七、设计体会与总结

两个任意长的整数的求和运算 一、问题陈述 设计一个程序实现两个任意长的整数的求和运算。 利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。 二、需求分析 1、本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。 2、本演示程序中,集合的元素限定为数字字符[‘0’~’9’],输入字符可以任意长,输入形式以“#”为结束标志,串中字符顺序不限,且允许出现重复字符。 3、利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以#结束,每四位一组。 三、概要设计 在此说明数据结构设计和关键的算法设计思想 Add()函数是实现该问题的主要函数即相加。 typedef struct et 定义双循环链表的存储结构. void setin(dtp *a) 读入数据存储在双链表中的函数; void print1(dtp *w,int len) 原样输出输入的数,略去结束符"#"; void print2(dtp a,int len) 输出运算结果,以每四位一个","样式; 四、详细设计 程序流程图

五、程序代码 #include using namespace std; #define null 0 typedef struct et //自定义双循环链表的存储结构.

整数除法竖式计算题天天练 (25)

52 ) 4524 90 ) 2070 2541÷33= 3382÷89= 33 ) 2541 89 ) 3382 2272÷32= 6460÷85= 32 ) 2272 85 ) 6460 90÷6= 2204÷76= 6 ) 90 76 ) 2204

16 ) 1072 40 ) 2720 880÷10= 1665÷45= 10 ) 880 45 ) 1665 1152÷96= 880÷11= 96 ) 1152 11 ) 880 100÷5= 3078÷81= 5 ) 100 81 ) 3078

306÷9= 84÷4= 9 ) 306 4 ) 84 5304÷68= 2425÷97= 68 ) 5304 97 ) 2425 984÷24= 1590÷53= 24 ) 984 53 ) 1590 5963÷89= 8010÷90= 89 ) 5963 90 ) 8010

5548÷73= 2952÷41= 73 ) 5548 41 ) 2952 1120÷14= 2184÷84= 14 ) 1120 84 ) 2184 1634÷86= 2484÷46= 86 ) 1634 46 ) 2484 2400÷25= 6512÷88= 25 ) 2400 88 ) 6512

2520÷90= 156÷26= 90 ) 2520 26 ) 156 1780÷89= 2730÷35= 89 ) 1780 35 ) 2730 3519÷51= 30÷2= 51 ) 3519 2 ) 30 16÷16= 3588÷69= 16 ) 16 69 ) 3588

超长正整数的加法

超长正整数的加法 请设计一个算法来完成两个超长正整数的加法。 *问题分析与算法设计 首先要设计一种数据结构来表示一个超长的正整数,然后才能够设计算法。 首先我们采用一个带有表头结点的环形链来表示一个非负的超大整数,如果从低位开始为每个数字编号,则第一位到第四位、第五位到第八位...的每四位组成的数字,依次放在链表的第一个、第二个、...结点中,不足4位的最高位存放在链表的最后一个结点中,表头结点的值规定为-1。例如: 大整数“587890987654321”可用如下的带表头结点head的链表表示: 按照此数据结构,可以从两个表头结点开始,顺序依次对应相加,求出所需要的进位后代入下面的运算。 具体的实现算法请见程序中的注释。 *程序与程序注释 #include #include #define HUNTHOU 10000 typedef struct node{ int data; struct node *next; }NODE; /*定义链表结构*/ NODE *insert_after(NODE *u,int num); /*在u结点后插入一个新的NODE,其值为num*/ NODE *addint(NODE *p,NODE *q); /*完成加法操作返回指向*p+*q结果的指针*/ void printint(NODE *s); NODE *inputint(void); void main() { NODE *s1,*s2,*s; NODE *inputint(), *addint(), *insert_after(); printf("Enter S1= "); s1=inputint(); /*输入被加数*/ printf("Enter S2= "); s2=inputint(); /*输入加数*/ printf(" S1="); printint(s1); putchar('\n'); /*显示被加数*/ printf(" S2="); printint(s2); putchar('\n'); /*显示加数*/ s=addint(s1,s2); /*求和*/ printf("S1+S2="); printint(s); putchar('\n'); /*输出结果*/ } NODE *insert_after(NODE *u,int num) { NODE *v;

第3课时 整数加法运算定律推广到小数(导学案)

第3课时整数加法运算定律推广到小数课题整数加法运算定律推广到小数课型新授课 设计说明 小数的简便运算是在学生已经学习了整数的运算定律和小数加减混合运算的基础上学习的。为了使学生直观地感知加法运算定律在小数的运算中同样适用,进一步体会运用这些定律能使计算简便,教学中从以下几点进行了设计: 1.创设情境,对比概括。 设计情境,让学生进一步了解、经历用加法运算定律进行简算的过程,理解整数的运算定律在小数运算中同样适用。采用对比的方式呈现出两位学生不同的计算思路,通过对比,使学生直观感知加法运算定律在小数运算中同样适用,并进一步体会用加法运算定律进行计算既简便,又快捷,使学生在以后的小数运算中能自觉地应用运算定律进行简算。 2.自主探究,合作交流。 《数学课程标准》中提到:“动手实践、自主探究、合作交流是学生学习数学的重要方式。”本节课让学生分组合作学习,给学生提供交流和表达的机会,多给学生自主学习的时间和空间。先学习运算定律,再进行实践练习,最后验证整数的运算定律在小数运算中同样适用。 3.边学边练,学以致用。 依据本节课的重难点,分散练习、边学边练,及时调整教学的状况,通过不同层次的练习,调动学生学习的积极性,体验数学的价值,同时充分发展学生的个性。 学习目标 1.理解整数加法的运算定律在小数加法中同样适用。 2.会运用运算定律和运算性质进行简便计算。 学习重点理解整数的运算定律在小数运算中同样适用。 学习难点能运用运算定律和性质灵活地进行简便运算。 学前准备 教具准备:多媒体课件 学具准备:口算卡 课时安排1课时 教学环节导案学案达标检测 一、复习旧知,导入新课。(5分钟)1.计算。 0.25+0.45=0.68-0.24= 7.4-6.8=3-0.75= 2.在○里填上适当的符号。 32+5○5+32 1.独立完成,汇报结果。 2.填写符号,说说运用了 哪些定律。 3.明确本节课的学习内 容。 1.在下面的□里填上适当的数, 在○里填上“+”或“-”。 (1)285+327=□+285 (2)926+82+18=926+(□○

小学四年级小数乘除法计算题300道

185.44÷16 41.84÷7 21.7÷9 67.5÷105 230.4÷0.6 121.24÷36 0.736÷23 43.5×12 35.21÷7 39.6×24 6.21÷0.03 210÷1.4 51.3÷0.27 91.2×3.8 0.756÷0.18 0.66÷0.3 11.97×1.5 69.6÷2.9 38.4÷0.8 15÷0.06 15.6×2.9 3.77×1.8 0.02×96 5.22×0.3 9.99×0.02 4.67÷0.9 5×2.44 1.666÷6.1 9.432×0.002 5.6× 6.5 4.88÷2.9 0.61×4.3 8.9÷2.4 5.5×55 9.77×0.02 1.384÷5.1 8.78×83 1 2.6×61 0.059×0.2 4.268×1.7 5.7×5.7 9.46×2.85 17.8×6.4 1.5÷4.9 12.5×0.88 5.555×5.2 2.22×3.33 7.658×85 3 6.02÷0.3 56.78×8 (循环小数的用简便方法,除不尽保留2位小数): 8.2÷0.12 0.8÷0.9 76.4÷5.4 4.7÷3 1.25÷1.2 32÷42 14.36÷2.7 8.33÷6.2 1.7÷0.03 2.41÷0.7 0.396÷1.2= 0.756÷0.36= 15.6×1.3= 0.18×1.5= 0.025×1.4= 13.06×36= 0.04×0.12= 3.84×2.6≈ 5.76×3=17.15×22 90.75÷3.3 3.68×0.25 16.9÷0.13 1.55÷3.9 3.7÷0.016 13.76÷0.8= 5.2×0.6 18.4÷1.3 6.4×0.5 4.48×0.4 15.25×5 35.4×4.2 0.042×0.54 0.76÷0.32 0.25×0.046 2.52×3.4 1.08÷25 0.12×0.5×0.16= 4.8×0.25=0.125×1.4≈(保留两位小数) 2.5÷0.7= (保留三位小数)10.1÷ 3.3= (商用循环小数) 10.75÷12.5= (用乘法验算) 3.25×9.04= (用除法验算) 3能简算的要简算 2.5×7.1×4 16.12×99+16.12 5.2×0.9+0.9 7.28×99+7.28 4.3×50×0.2 64-2.64×0.5 26×15.7+15.7×24 (2.275 +0.625)×0.28 3.94+34.3×0.2 1.2×(9.6÷ 2.4)÷4.8 8.9×1.1×4.7 2.7×5.4× 3.9 3.6×9.85-5.46 8.05×3.4+7.6 6.58× 4.5×0.9 2.8×0.5+1.58 32+4.9-0.9 4.8-4.8×0.5 (1.25-0.125)×8 4.8×100.1 56.5×99+56.5 7.09×10.8-0.8×7.09 4.85 + 0.35 ÷ 1.4 8.7 × 17.4 - 8.7 × 7.4 12.5×0.4×2.5×8 0.87×3.16+4.64 9.5×101 0.68 ÷(5.2 -3.5)× 1.25 40.5 ÷ 0.81 × 0.18 4.8 ×(15 ÷ 2.4) 6.81+6.81×99 0.25×185×40 4.4×0.8-3.4×0.8 (9.37+9.37+9.37+9.37)× 2.5 2.37×6.3+2.37×3.7 2.5×1.25×0.32 3.8×10.1 2.5×(3.8×0.04) 7.69×101 3.8×10.1 0.25×39+0.25 0.125×72 46×0.33+54×0.33 (8×5.27) ×1.25 6.81+6.81×99 0.25×185×40 6.8×0.75÷0.5 3.75÷0.125–2.75 1.53+23.4÷ 7.2 9.5×99 13.5×0.98 12.5×8.8

长整数的加减运算系统说明文档11003601.

桂林电子科技大学综合设计说明书用纸 《数据结构与算法》 课程设计说明书 题目:长整数的加减运算 学院:计算机科学与工程学院 专业:信息安全 姓名:xxxxxxxx 学号:11003601xx 指导教师:张瑞霞老师

成绩评定标准及成绩 1、能按照格式进行写作,无抄袭现象(10分) 2、报告内容行文通畅,有条理性,无错别字,结构严谨。(10 分) 3、能够按照数据结构课设的格式要求、排版要求和字数要求 等,有需求分析,系统分析,详细设计,关键技术的介绍和参考文献。(10分) 4、在验收过程中,能合理的回答问题(20分) 5、软件能正常运行,实现所提出的功能(40分) 6、软件代码规范性较好(5分) 7、具有自己的创新或特色(5分) 总成绩:

目录 1、前言 (3) 2、需求分析 (4) 2.1.问题描述: (4) 2.2.基本要求: (4) 2.3.更高要求: (4) 2.4.测试数据: (4) 2.5.开发环境 Visual C++6.0(完整绿色版) (5) 3、系统概述 (5) 3.1.关键技术。 (5) 3.2.相关的函数接口 (6) 3.3.功能设计 (7) 4、系统分析 (7) 5、系统的调试与结果 (17) 5.1.调试过程出现的问题以及解决方法 (17) 5.2.成功的测试数据截图 (17) 6、课设小结 (20) 7、参考文献: (21)

1、前言 本系统主要内容是为数据结构长整数加法的实现,所以整个程序是为了实现长整数的加减法运算。设计一个实现任意长的整数间进行四则运算的程序,要求完成长整数的加运算和减运算。长整数的长度没有限制,可以是任意长,正确处理好运算之后的进位和借位。 每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数4位,即不超过9999的非负整数,整个链表视为万进制数。 可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。 由于在某些工程上进行加减运算时,有时候需要对很大的长整数进行计算,但是计算机本身提供的数据类型无法保证存在几百位甚至几千位的数字,所以需要设计专门的算法系统对数据进行相应的计算。因此本系统的设计主要任务是:设计一个程序能够实现任意长整数的加减运算的程序,而且能够对一些错误异常进行辨别调整,从而迅速计算出正确无误的结果。程序输入格式是字符串,包含元素的范围是数字,都好,负号以及分号,保存时需要用到双链表将字符串每四位保存在循环链表中的一个结点中,然后在计算出运行结果。 虽然程序有些复杂,但使用方法十分简单,只需按照相关提示进行操作即可,能够为用户的学习和工作带来快捷与方便。

整数除法竖式计算题天天练 (21)

3588÷46= 2400÷40= 46 ) 3588 40 ) 2400 2856÷68= 465÷31= 68 ) 2856 31 ) 465 2376÷36= 4845÷95= 36 ) 2376 95 ) 4845 660÷55= 4092÷62= 55 ) 660 62 ) 4092

24 ) 1704 39 ) 1404 2000÷50= 1596÷42= 50 ) 2000 42 ) 1596 1458÷81= 6164÷92= 81 ) 1458 92 ) 6164 544÷32= 1710÷45= 32 ) 544 45 ) 1710

21 ) 1092 30 ) 1020 1107÷27= 1653÷19= 27 ) 1107 19 ) 1653 612÷18= 960÷80= 18 ) 612 80 ) 960 5192÷59= 7332÷94= 59 ) 5192 94 ) 7332

37 ) 814 30 ) 2610 2240÷70= 396÷11= 70 ) 2240 11 ) 396 770÷70= 490÷7= 70 ) 770 7 ) 490 1600÷64= 5200÷65= 64 ) 1600 65 ) 5200

18 ) 234 88 ) 3608 4340÷62= 1595÷55= 62 ) 4340 55 ) 1595 2920÷73= 960÷96= 73 ) 2920 96 ) 960 6461÷71= 2134÷97= 71 ) 6461 97 ) 2134

4602÷59= 2688÷64= 59 ) 4602 64 ) 2688 440÷10= 860÷86= 10 ) 440 86 ) 860 2116÷46= 6776÷88= 46 ) 2116 88 ) 6776 4899÷69= 2115÷45= 69 ) 4899 45 ) 2115

数据结构课程设计长整数运算

一、需求分析 【问题描述】 设计一个程序实现两个任意长的整数求和运算。 【基本要求】 利用双向循环链表实现长整数的存储,每个结点含一个整型变量。 任何整型变量的范围是:-(215-1)~(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 【测试数据】 (1)0;0;应输出“0”。 (2)–2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3)–9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。(4)1,0001,0001;-1,0001,0001;应输出“0”。 (5)1,0001,0001;-1,0001,0000;应输出“1”。 二、设计 1. 设计思想 (1)存储结构:循环双向链表 (2)主要算法基本思想: 1、每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加 不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数4位,即不超过9999的非负整数,整个链表视为万进制数。 2、可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示 元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。 2. 设计表示 (1)函数调用关系图: (2)函数接口规格说明: 结构体: struct dl_node { int x; dl_node *pre; dl_node *next; };

初始化: void list_init(dl_node ** h) 插入元素: void list_insert(dl_node *h,int x) 输出链表: void prin(dl_node *h) 实现相加: void list_add(dl_node *h1,dl_node *h2) 实现相减: void list_sub(dl_node *h1,dl_node *h2) 3. 详细设计 (1)输入两个数,用链表来存储。链表的头结点的数据的值为1时,表示的是输入的数非负;为-1时表示输入的数是负数。 (2)在创建链表时,让高位在链表的尾部,低位在链表的头部。 (3)在做加法时,先判断两个数的符号是否相同,如果相同,在根据加数的符号,决定和数的符号,取两个数的绝对值做加法,但是的处理进位。 (4)如果异号,用一函数来判断和的符号,判断异号的两个数相加和的符号,当两个数的长度不相等时,取较长数的符号作为和的符号,否则比两个数的大小,再决定和的符号。 (5)异号的两个数想加时,先去两个数的绝对值,用较大的数减去较小的数,差作为和的绝对值。如果相应的位够减时,直接做减法,否则借位,但是要注意被借位的值是否为零,如果为零,则继续借位。 (6)输出最终结果,输出数时,要去掉大数最前面的零,直到数的首位不是零时为止。在输出地位的数时,有可能某些单元的数低于四位,必须要在四位数的高位补零,即四位一个单元输出。空缺处用零补齐。 三、调试分析 (1)经过不断的的DEBUG,不断的输出看结果调试,最终成功 (2)经验和体会: 通过这次学习,让我认识到自己在学习上的诸多不足。从刚拿到题目到完成整个编程,从理论到实践,虽然学到很多的的东西,但是也因为自己知识的不足,不能考虑周全,完全成功的完成此次课程设计。在认识自己的不足后,我便开始认真复习书本知识,同时与动手能力强的同学互相交流,让自己学到了很多平时

四年级数学下册整数加法运算定律推广到小数说课稿

整数加法运算定律推广到小数说课稿 一、说教材: 1、说课内容: 本节课的教学内容是人教版九年义务教育六年制数学第八册的内容。 2、说教材的作用及地位:这部分内容是学生在学完小数的加减法的意义和计算法则以及小数的连加、连减和加减混合运算的基础上进行学习的,它是提高学生计算能力、加强学生计算的正确性、烂熟性、灵敏性的一个严重方面。《数学课程标准》强调数学学习要“从学生已有的生活经验出发,让学生亲身经历将实际问题抽象成数学模型并进行解释与应用的过程,进而使学生获得对数学理解的同时,在思维能力、情感态度与价值观方面得到进步和发展。”因此,在本节课中,我大胆地改变教材的呈现方式,把小数加减法简易计算的呈现方式放到一个生活大背景中,让学生通过“商品大奉送”和“找朋友”两个游戏,亲身经历活动,亲自悟出道理,使他们从中很好地提炼了数学的模型。 3、说教学目标认知目标:使学生初步理解整数加法运算定律对小数加法同样适用,并会运用这些定律进行一些小数的简易运算。 能力目标:进一步培养学生分析、综合的能力和优良的计算习惯,训练计算的灵敏性。 情感目标:通过小组合作探究,培养学生团结合作意识;通过小组之间的比赛辩论,培养学生的竞争意识。同时渗透事物之间相互联系的观点。 4、教学重、难点:引导学生理解简易计算的依据,在理解的基础上掌握简易计算的方 法。: 二、说教法: 这节课我主要采用了游戏、创设情境;自主探究、讨论、发现的教学方法放手让学生在无限的时间和空间里,根据自己的学习体验,解放地、开放地去探究,去发现,去“再创造”新知识。 三、说学法: 课改的核心是改变学生的学习方式,也就是变这种“牵引式、接受式”的学习为

长整数的四则运算

课程名称: 《数据结构》课程设计课程设计题目: 长整数的四则运算 姓名: 院系: 计算机学院 专业:计算机科学与技术 年级: 学号: 指导教师: 2014 年月日

目录 1 课程设计的目的 (3) 2 需求分析 (3) 3 课程设计报告内容 (3) 3.1概要设计 (3) 3.2详细设计 (3) 3.3调试分析 (3) 3.4用户手册 (4) 3.5测试结果 (4) 3.6程序清单 (5) 4 小结 (x) 5 参考文献 (8)

1.课程设计的目的 (1) 熟练使用 C 语言编写程序,解决实际问题; (2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; (3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; (4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 2.需求分析 问题描述:设计一个实现任意长的整数进行加法运算的演示程序。基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -215 - 1 215 - 1。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。测试数据:(1)0;0;应输出?0?。 (2)-23456789;-76543211;应输出?-100000000?。(3)-99999999;1000000000000;应输出?999(4)100010001;-100010001;应输出?0?。(5)100010001;-100010000;应输出?1?。(6)-999999999999;-999999999999;应输出?1999999999998?。 (7)1000099999999;1;应输出?1000100000000?。 实现提示:(1)每个结点中可以存放的最大整数为 32767,才能保证两数相加不会溢出,但若这样存放,即相当于按 32768 进制存放,在十进制与 32768 进制数之间的转换十分不方便,故可以在每个结点中仅存十进制的 4 位,即不超过 9999 的非负整数,整个链表表示为万进制。(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。不能给长整数位数规定上限。 3.1概要设计 利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。 3.3调试分析 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

整数加法运算定律推到小数

《整数加法运算定律推广到小数》教学设计 祖山总校杜玉华 教材分析: 教材以学生喜爱的校园体育运动为背景,采用对比的方式呈现两位学生不同的计算思路,通过对比,使学生看出两种算法的结果是一样的,从而直观感知加法的运算定律在小数运算中同样适用,并进一步体会用加法运算定律进行计算确实能使计算更快捷方便,从而让学生在今后的小数加减法计算中能根据数据特点自觉地应用运算定律进行简算。 学情分析:本节知识是在学生掌握了小数加、减法混合运算及整数的运算定律和运算性质的基础上进行学习的。 教学目标: 1、知识目标:通过有限个例证让学生理解整数的运算定律在小数运算中同样适用;并能根据数据特点正确应用加法的运算定律进行简便计算。 2、能力目标:在解决问题的过程中能培养学生的合作意识和分析、综合、推理的能力。 3、情感目标:培养学生做事认真,讲求方法,注重实效的生活观念。 教学重点:理解整数运算定律对于小数同样适用,并会运用这些定律进行一些小数的简便计算。 教学难点:能根据数据特点,应用加法的运算定律合理、灵活地解决实际生活中的一些简单问题。 教学准备: 1.预习提纲;2.课件。 教法、学法:教师以指导学生预习,组织探究活动,设疑解难为主;学生以自主尝试、合作探究学习为主。(先试后导,先练后讲) 教学过程: 一、口算抢答,引入课题。 题组一: 0.52+0.48= 2.8+0.2+5= 0.48+0.52= 2.8+(0.2+5)=

问:刚才口算的两组题目有什么特点?(让学生感受到凑整,并联想到加数相同,加数的位置不同或计算顺序不同,但计算结果一样。) 题组二: 135+39+65+11= 134-66-34= 问:你是怎样算得那么快的?(引出应用运算律可以让计算简便) 刚才简算时运用了哪些运算定律?用字母如何表示?(学生齐说,老师板书。) 二、自主学习,探究新知。 (一)提出猜想,举例验证。 1、猜一猜。 师:在我们以前的学习中,这些字母都表示整数,现在大家猜一猜,这些字母可以表示小数吗?换句话说,整数加法运算定律在小数加法运算中也能用吗? 2、交流预习成果。 师:课前我们已有过预习,现在在小组内跟同学交流一下你的想法,并举例验证你的猜想。 (学生交流时师板书出:整数的运算定律在小数运算中同样适用吗?) 3、指名几个学生汇报,并到在黑板上写出自己的例证。全班交流,验证猜想。 4、教师也举一例验证加法交换律和结合律在小数运算中也适用。 (二)在实际问题中验证猜想,展示预习成果。 师:刚才我们都是用计算的形式验证加法运算律在小数运算中也适用。下面我们在实际问题中再来验证刚才的猜想是否正确。 出示例4图:新圩小学上一届秋季运动会的比赛场景,这一个项目是四年级组男子4×50米接力赛。 课前老师已布置了预习任务:(1)从图中你了解到哪些数学信息?(2)通过例图中两位学生的对话,你明白了什么?(3)你是怎样计算他们可能的总成绩的?有不同的计算方法吗?(4)还有什么疑问吗?

C语言 长整数加减乘

长整数加减乘 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define NULL 0 typedef int Status; //--链表定义-- typedef struct DuLNode{ Status data; //数据域 struct DuLNode *next,*prior; //指针域 }DuLNode,*DuLinkList; int i; char str[400]; Status turn(Status &data){ for(int j=0;i>=0;--i,j++) { if(str[i]=='-'&&i==0)break; if(j%4==0)data=str[i]-'0'; if(j%4==1)data+=10*(str[i]-'0'); if(j%4==2)data+=100*(str[i]-'0'); if(j%4==3){data+=1000*(str[i]-'0');--i; if(i==-1||str[i]=='-')return OK;return 0;} if(i==0)return OK; } return OK; } Status Input(Status &data){ return turn(data); } Status ListCreate_L(DuLinkList &L,DuLinkList &dl){ DuLNode *r,*q; //r指向尾结点,q指向新开辟结点 L=(DuLNode*)malloc(sizeof(DuLNode)); if(L==NULL)exit(-1); r=L;q=L; for(;;){

两个任意长的整数的求和运算

软件综合课程设计两个任意长的整数的求和运算 进制的转换 2014 年6月

目录 一、问题陈述 二、需求分析 三、概要设计 四、详细设计 五、程序代码 六、运行结果与测试 七、设计体会与总结

两个任意长的整数的求和运算 一、问题陈述 设计一个程序实现两个任意长的整数的求和运算。 利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。 二、需求分析 1、本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。 2、本演示程序中,集合的元素限定为数字字符[‘0’~’9’],输入字符可以任意长,输入形式以“#”为结束标志,串中字符顺序不限,且允许出现重复字符。 3、利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以#结束,每四位一组。 三、概要设计 在此说明数据结构设计和关键的算法设计思想 Add()函数是实现该问题的主要函数即相加。 typedef struct et 定义双循环链表的存储结构. void setin(dtp *a) 读入数据存储在双链表中的函数; void print1(dtp *w,int len) 原样输出输入的数,略去结束符"#"; void print2(dtp a,int len) 输出运算结果,以每四位一个","样式; 四、详细设计 程序流程图

五、程序代码 #include using namespace std; #define null 0 typedef struct et {

五年级上册小数除法计算题120道

五年级上册小数除法计算题120道 1.0.125÷5= 2.0.24÷0.2= 3.0.4÷0.01= 4.0.57÷19= 5.0.7÷0.01= 6.0.9÷0.01= 7.0.9÷0.15= 8.0.96÷0.03= 9.0.96÷0.3= 10.0.96÷3= 11.1.08÷0.4= 12.1.1÷0.5= 13.1.28÷3.2= 14.1.47÷0.7= 15.1.55÷3.9= 16.1.84÷0.2 17.1÷0.5= 18.10.1÷3.3= 19.10.75÷1.25= 20.10÷2.5= 21.10÷25= 22.100÷1.25= 23.12.3÷0.03= 24.12÷0.3= 25.120÷0.24= 26.123÷1.23= 27.128÷0.4= 28.13.95÷3.1= 29.13÷4= 30.133÷.0.7= 31.15.1÷0.05= 32.15.4÷0.4 33.15÷0.06= 34.15÷1.5= 35.16.2÷0.06= 36.16.9÷0.13= 37.16÷1.6= 38.18.63÷0.03= 39.18.72÷3.6= 40.19.6÷2= 41.19.6÷4= 42.19.76÷5.2=

43.2.17÷0.7= 44.2.2÷0.11= 45.2.4÷0.2= 46.2.4÷2= 47.2.5÷0.5= 48.2.5÷0.7= 49.2.7÷4 50.2.7÷7.5= 51.2.87÷0.7= 52.20.8÷0.2= 53.21÷1.4= 54.22.8÷3= 55.246.4÷13= 56.25.8÷6= 57.26÷0.13= 58.3.2÷0.04= 59.3.2÷1.6= 60.3.24÷0.24= 61.3.24÷2.4= 62.3.81÷7= 63.3.96÷1.2= 64.32÷0.4= 65.36÷0.18= 66.36÷0.6= 67.36÷3.6= 68.39÷0.003= 69.4.2÷0.1= 70.4.2÷3.5= 71.4.329÷6= 72.4.5÷0.05= 73.4.6÷0.023= 74.4.8÷0.6= 75.4.8÷6= 76.4÷0.8= 77.41.8÷0.2= 78.42÷0.3= 79.45÷0.5= 80.46÷0.23= 81.48÷0.6= 82.492÷0.4= 83.5.05÷0.5= 84.5.2÷0.5= 85.5.22÷0.29= 86.5.4÷6=

人教版数学五年级下册整数加法运算定律推广到分数教学设计

《整数加法运算定律推广到分数》教学设计内容分析:《整数加法运算定律推广到分数》是新课标人教版第十册第五单元第7课 时的内容。是在学习了分数加减混合运算、整数加法运算定律推广到小数的基础上进 一步学习的。 教学目标: 1理解整数加法的交换律、结合律对分数加法同样适用。 2、会运用加法交换律、结合律进行分数加法的简便计算。 3、激发主动探究的学习欲望,感受学习数学的乐趣。 教学重点:会进行分数加法的简便计算。。 教学难点:灵活运用加法交换律、结合律进行分数加法的简便计算。 教学过程: 一、复习引入,揭示课题 1. 用简便方法计算下面各题,并说出简算的依据。 53 + 36+ 47 1.5+ 3.8 + 6.2 2. 学生独立完成,集体交流。(说出加法运算定律的字母表示形式。) 3. 教师板书: 加法交换律:a+ b= b+ a 加法结合律:(a+ b) + c= a+(b+ c) 4. 追问:式中的字母可以表示什么数? (预设:整数、小数、分数) 5. 揭示课题:我们知道加法交换律和结合律适用于整数和小数,是否也适用于分 数呢?这节课我们就一起来研究。(板书课题) 二、猜想验证,探索规律 1. 下面每组算式的左右两边有什么样的关系? _3 +_^g_2 +_3 ( _2 + 卫+_3°_2 十A +3 7 5 5 7 344344

2. 大胆猜想一下O 里应该填什么符号? 3. 说说你这样填的理由。 (预设:第一个算式左右两边的数都一样, 就是交换了位置,很像整数中的 加法交换律;第二个算式只是改变了加的顺序,很像加法结合律。 ) 4. 验证规律。 (学生动手计算验证,然后汇报结果相等的结论。教师随即 在0中板书出“=”) 二、 猜想验证,探索规律 5. 观察这些算式,你发现了什么? (预设1:整数加法的运算定律也可以在分数中使用。 预设2:整数加法的运算定律在分数中同样适用。) 6. 仅通过计算这两组题就下结论,有点为时过早。请你再举几个 分数加法的例子来验证一下,看看我们得出的结论是否正确。 7. 学生举例验证。 (学生组内验证,教师巡视指导,然后学生汇报通过验证得 到的结论。) 8?小结:整数加法的交换律和结合律对分数加法同样适用。利 用运算定律可以使一些分数计算变得简便。 三、 应用规律,巩固深化 1. 在。里填上合适的运算符号,在()里填上合适的数。 2. 怎样简便就怎样计算 4=2 1 4 + 5 丄+-3 3 + 8 4 +△ +3 2 ( 7 C 7 -7 +」+5 12 (5 C )2 () 6 / 3 7 7 ()() +? ()()

长整数的加法运算-数据结构与算法课程设计

题目:长整数的加法运算 学院:计算机科学与工程学院 专业:信息安全 姓名:农锦文 学号:1200360220 指导教师:张瑞霞 2014年10月18日

目录 引言 (4) 1、系统概述 (4) 2、系统分析 (5) 2.1需求分析 (5) 2.2系统功能 (5) 2.3开发环境 (5) 3、详细设计 (5) 3.1功能结构框图 (6) 3.2 软件设计 (6) 3.2.1 定义链表与接收数据输入 (6) 3.2.2长整数的加法运算 (8) 3.2.3显示长整数相加结果 (10) 4、所遇到的问题和分析解决 (10) 5、系统特色及关键技术 (11) 6、结论 (11) 参考文献 (12)

引言 随着计算机技术的发展,人们利用计算机开发了许许多多方便的,实用的应用软件,在信息化的现代社会里,人们依赖着很多的应用软件,这些软件在推进社会发展的同时,也丰富了人们的生活,然而,在开发过程中,由于计算机系统的局限性,在需要某些功能时,总会遇到困难。例如在开发某些工程项目时,有时需要对很大的数进行计算。但是计算机本身无法计算某些较大的数,所以我们有必要设计专门的算法对一些较大的数进行相应的计算,通过简化运算之后,对其他程序功能的编写能起到良好的促进作用,大大的减轻了程序员的负担。此次设计的程序将用于长整数的加法运算,程序运行时,将提示用户输入两个长整数,然后将两个长整数相加的结果输出。 1、系统概述 在该长整数加法运算系统中,我将定义双向循环链表来表示长整数,按照中国对长整数的表示方法,如199999999表示为1,9999,9999。双向循环链表数据域存储的是长整数的每4位。双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。通过造双向循环链表,可以对长整数进行方便的存储,在对长整数进行数学运算时,也能通过方便的操作链表,从而对长整数进行需要的计算。 在实现该长整数加法运算的系统中,我将会编程实现以下功能。定义一个函数,用于接收长整数的输入,同时将长整数存储到双向循环链表当中,为了检验是否按预期要求进行存储,我还会编写一个函数,将双向循环链表中数据域的值打印出来。定义一个长整数相加的函数,实现两个长整数加法运算的功能,实际上是对双向循环链表进行操作,这里包括结点空间的申请,插入结点,修改指针所保存的值。 当两个长整数完成加法运算后,我会定义一个显示结果的函数,将它们相加的结果打印出来。一些较大的整数,在单纯的用计算机进行相加运算的时候可能会产生溢出现象,但该系统每次只对4位整数进行运算,避免了数据过大在计算时产生的溢出问题。

任意长整数的四则运算

1 题目介绍和功能要求 1.1 课程设计题目要求 【问题描述】: 设计一个实现任意长的整数进行加法运算的演示程序。 【题目容】: 利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的围是-(215- 1)~(215- 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 【基本要求】: (1)利用所学知识,设计相应的数据结构; (2)熟练运用开发环境; (3)完成软件的设计与编码; (4)熟练地掌握基本的调试方法。 1.2 题目分析 【需求分析】: (1)本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。 (2)本演示程序中,数字字符限定为[‘0’~‘9’]和字符‘,’,输入字符可以任意长,输入形式以“回车符”为结束标志,串中字符顺序不限,且允许出现重复字符。

(3)利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。 2 系统功能模块结构图 2.1 系统功能结构框图 图2.1 系统功能结构图 2.2主要模块的功能说明: (1)主调程序模块: void main() {

初始化; do{ 接受命令; 处理命令; }while(“命令”=”退出”) } (2)双向循环链表处理模块//cmplinklen.h //Creat.h //compare 说明:进行链表的存储和处理 (3)长整数运算模块//add.h // sub.h //imul.h //idiv.h 说明:对长整数进行四则运算 (4)界面模块//title.h //welcome.h 说明:控制系统运行操作界面 3 数据结构的设计及用法说明 3.1概要说明 为了实现上述功能,采取双向循环链表表示长整数,每个结点含一个整型变量,仅绝对值不超过9999的整数,整个链表用十进制数表示。利用头结点数据域的符号表示长整数的符号,相加过程不破坏两个操作数链表,对长整数位数不作上限。为此需要两个结构数据类型:双向循环链表和长整数。 3.2用法说明 3.2.1 双向循环链表的数据结构定义: typedef struct Node //双向循环链表结点

以整数除法为基础快速掌握整数除法计算的学法指导

以整数除法为基础快速掌握小数除法计算学法指导 班级: 姓名: 掌握小数除法的基础是必须掌握整数除法: 第一步:回忆整数除法计算法则: 1、先从被除数的高位除起,除数是几位数, 就看被除数的前几位; 2、如果不够除,就多看一位,除到被除数 的哪一位,商就写在哪一位的上面。 3、如果哪一位上不够商1,要补“0”占位。 4、每次除得的余数要小于除数。 算一算: 264 ÷ 22 = 1288÷56= 966 ÷ 6 = 第二步:掌握被除数是小数的除法: 计算法则:按整数除法的方法除,计算时商的小数点要和被除数的小数点对齐。 例如:22.4 ÷ 4 = 5.6 记忆关键词:对齐 你会算么?: 44.8÷ 8 = 9.6 ÷ 8= 25.2÷6= 34.5÷15= 20 2 4 2 4 0 商的小数点要和被除数的小数点对齐 ……24个十分之一

第三步:掌握被除数和除数都是整数,商是小数的除法: 例如:28 ÷ 16 = 1.75 计算法则:除数是整数的小数除法,按照整数除法法则去除,商的小数点要和被除数的小数点对齐;如果除到被除数的末尾仍有余数,就在余数后面添0继续除;如果整数部分不够除,商0点上小数点继续往下除。 记忆关键词:添0 算一算:56 ÷ 32 = 4.8 ÷ 12 = 14.21÷7 = 0.54 ÷ 9 = 最后一步:掌握除数是小数的除法: 计算法则:计算一个数除以小数,先移动除数的小数点,使它变成整数; 除数的小数点向右移动几位,被除数的小数点也向右移动几位(位数不够的,在末尾用 “0”补足); 然后按除数是整数的小数除法计算。 记忆关键字:移位 例如:12.6÷0.28 = 45 算一算: 2.19÷0.03 = 5.58÷ 3.1 = 25.6÷0.032= 4 5 1 2 .6 0 1 1 2 1 4 0 1 4 0 0 0.28 为了不改变原题数字的大小,同时又能体现转化后的数,所以转化产生新的数后要把原来数中多余的“0”和小数点用斜线作标记。

相关文档
最新文档