📄 加减乘运算器3.c
字号:
{
q->prior->next=q->next;
q->next->prior=q->prior;
free(q);
break;
}
if(q->data=='0')
{
L->end->prior=q->prior;
q->prior->next=L->end;
q=q->prior;
}
else
break;
}
}//cut_zero
/**************************************************************************************/
int judge(list *L) /*判断L的数据是否是零的函数*/
{
lnode *p;
int a=0;
for(p=L->head->next;p!=L->end;p=p->next)
{
if(p->data!='0')
{
a=1;
break;
}
}
if(a)
return(1);
else
return(0);
}//judge
/****************************************************************************************/
void readdata(char filename[],list *L) /*从文件读取数据函数,并记录整数位,小数位个数*/
{
FILE *fp;
char c;
int n=0;
int m=1;
L->intlength=0;
L->floatlength=0;
fp=fopen(filename,"r");
while(!feof(fp))
{
c=fgetc(fp);
if(c>='0'&&c<='9'||c=='.'||c=='-') /*读完最后一位还要向下读取一位,故要舍去*/
{
if(c=='.') /*小数点不读取*/
{
m=0;
continue;
}
if(c=='-') /*遇到负号就插到表L前*/
{
head_insert(L,c);
continue;
}
if(m)
{
end_insert(L,c); /*将数的各个位上的字符从后插入到表L中*/
L->intlength++; /*表中数的整数位长度增加*/
}
if(!m) /*若遇到了小数点*/
{
end_insert(L,c);
L->floatlength++; /*小数位的长度增加*/
}
}
else
break;
}
fclose(fp);
}//readdata
/**********************************************************************************************/
int fabs(list *L) /*取数的绝对值的函数*/
{
lnode *p;
p=L->head->next;
if(p->data=='-') /*若表中数是个负数,则将带'-'号的结点删去*/
{
p=L->head->next;
L->head->next=p->next;
p->next->prior=L->head;
p->next=p;
p->prior=p;
free(p);
return(1);
}
else
return(0);
}//fabs
/**********************************************************************************************/
void writedata(char filename[],list *L) /*将结果写入文件的函数*/
{
FILE *fp;
char c;
lnode *p;
fp=fopen(filename,"w");
for(p=L->head->next;p!=L->end;p=p->next)
{
c=p->data;
fputc(c,fp);
}
fclose(fp);
}//writedata
/*********************************************************************************************/
void main()
{
list *L1,*L2,*L3;
int sign1=0,sign2=0;
int com;
char filename1[10],filename2[10]; /*定义存储两个运算数据的文件*/
char filename3[]="add.txt"; /*定义文件名*/
char filename4[]="sub.txt";
char filename5[]="mult.txt";
initlist(&L1); /*第一个数据在表1*/
initlist(&L2); /*第二个数据在表2*/
initlist(&L3); /*运算结果存储在表3*/
printf("input the first file's name\n");
gets(filename1);
printf("input the second file's name\n");
gets(filename2);
readdata(filename1,L1); /*将第一个数据保存在L1中*/
readdata(filename2,L2); /*将第二个数据保存在L2中*/
sign1=fabs(L1); /*取L1的绝对值,并判断正负*/
sign2=fabs(L2); /*取L2的绝对值,并判断正负*/
com=compare(L1,L2); /*比较表L1、表L2中数据的绝对值大小*/
if(sign1==0&&sign2==0)/*表L1、表L2中数都是正数时*/
{
if(judge(L1)&&judge(L2)) /*若运算的两个数据均不为零*/
{
mult(L1,L2,&L3); /*进行乘法运算*/
add_point(L3,(L1->floatlength+L2->floatlength)); /*所得运算结果的小数位长度是两个运算数据的小数位长度之和*/
cut_zero(L3); /*去掉运算结果中的多余的零*/
}
else /*若运算的两个数据中至少有一个为零*/
head_insert(L3,'0'); /*则所得的运算结果就是零*/
writedata(filename5,L3); /*将乘法运算的结果放到文件5中*/
clean(L3);
add_zero(L1,L2); /*补零,使运算的两个数的整数位和小数位长度相同*/
add(&L1,&L2,L3); /*对两个数进行加法运算,并将运算结果存储到表3中*/
add_point(L3,L1->floatlength); /*所得运算结果的小数位长度与进行运算的两个数的小数位长度相同*/
cut_zero(L3); /*去掉所得结果中多余的零*/
writedata(filename3,L3); /*将加法运算后的结果放到文件3中*/
clean(L3);
if(com!=2) /*若两个运算数的大小不相等*/
{
sub(L1,L2,L3); /*对两个数进行减法运算*/
if(com==3) /*若前一个数小于后一个数*/
head_insert(L3,'-'); /*由于在做减法运算的函数中保证大数减小数,所以此处要在结果前加负号*/
add_point(L3,L1->floatlength); /*所得运算结果的小数位长度与进行运算的两个数的小数位长度相同*/
cut_zero(L3); /*去掉所得结果中多余的零*/
}
else /*若两个运算数的大小相等*/
head_insert(L3,'0'); /*则做减法运算后结果就是零*/
writedata(filename4,L3); /*将减法运算后的结果放入文件4中*/
clean(L3);
}
if(sign1==1&&sign2==1)/*若表L1,表L2中的数都是负数*/
{
if(judge(L1)&&judge(L2)) /*若运算的两个数据均不为零*/
{
mult(L1,L2,&L3); /*进行乘法运算*/
add_point(L3,(L1->floatlength+L2->floatlength)); /*所得运算结果的小数位长度是两个运算数据的小数位长度之和*/
cut_zero(L3); /*去掉运算结果中的多余的零*/
}
else /*若运算的两个数据中至少有一个为零*/
head_insert(L3,'0'); /*则所得的运算结果就是零*/
writedata(filename5,L3); /*将乘法运算结果放到文件5中*/
clean(L3);
add_zero(L1,L2); /*补零,使运算的两个数的整数位和小数位长度相同*/
add(&L1,&L2,L3); /*对两个数进行加法运算,并将运算结果存储到表3中*/
add_point(L3,L1->floatlength); /*所得运算结果的小数位长度与进行运算的两个数的小数位长度相同*/
cut_zero(L3); /*去掉所得结果中多余的零*/
head_insert(L3,'-'); /*在运算结果前加一个负号*/
writedata(filename3,L3); /*将加法运算结果放入文件3*/
clean(L3);
if(com!=2) /*若两个运算数的大小不相等*/
{
sub(L1,L2,L3); /*对两个数进行减法运算*/
add_point(L3,(L1->floatlength,L2->floatlength));
cut_zero(L3); /*去掉所得结果中多余的零*/
if(com==1) /*去了负号后,若前一个数大于后一个数*/
head_insert(L3,'-'); /*在结果前加一个负号*/
}
else /*若两个运算数的大小相等*/
head_insert(L3,'0'); /*则减法运算后结果就是零*/
writedata(filename4,L3); /*将减法运算结果放入文件4*/
clean(L3);
}
if(sign1==0&&sign2==1)/*表L1中数为正,表L2中数为负*/
{
if(judge(L1)&&judge(L2)) /*若运算的两个数据均不为零*/
{
mult(L1,L2,&L3); /*进行乘法运算*/
add_point(L3,(L1->floatlength+L2->floatlength));
cut_zero(L3); /*去掉运算结果中多余的零*/
head_insert(L3,'-'); /*由于是除去符号进行的运算,所以运算后要将负号加上*/
}
else /*若运算的两个数据中至少有一个为零*/
head_insert(L3,'0'); /*则所得的运算结果就是零*/
writedata(filename5,L3); /*将乘法运算结果放入文件5*/
clean(L3);
add_zero(L1,L2); /*补零,使运算的两个数的整数位和小数位长度相同*/
if(com!=2) /*若两个运算数的大小不相等*/
{
sub(L1,L2,L3); /*对两个数进行减法运算*/
add_point(L3,L1->floatlength);
cut_zero(L3);
if(com==3) /*去掉负号后的前一个数小于后一个数*/
head_insert(L3,'-'); /*在结果前加负号*/
}
else /*若两个运算数的大小相等*/
head_insert(L3,'0'); /*则减法运算后结果就是零*/
writedata(filename4,L3); /*将减法运算结果放入文件4*/
clean(L3);
add(&L1,&L2,L3); /*对两个数进行加法运算,并将运算结果存储到表3中*/
add_point(L3,L1->floatlength);
cut_zero(L3); /*去掉所得结果中多余的零*/
writedata(filename3,L3); /*将加法运算结果放入文件3*/
clean(L3);
}
if(sign1==1&&sign2==0)/*表L1中数为负,表L2中数为正*/
{
if(judge(L1)&&judge(L2)) /*若运算的两个数据均不为零*/
{
mult(L1,L2,&L3); /*进行乘法运算*/
add_point(L3,(L1->floatlength+L2->floatlength));
cut_zero(L3); /*去掉运算结果中多余的零*/
head_insert(L3,'-');
}
else /*若运算的两个数据中至少有一个为零*/
head_insert(L3,'0'); /*则所得的运算结果就是零*/
writedata(filename5,L3); /*将乘法运算结果放入文件5*/
clean(L3);
add_zero(L1,L2); /*补零,使运算的两个数的整数位和小数位长度相同*/
if(com!=2) /*若两个运算数的大小不相等*/
{
sub(L1,L2,L3); /*对两个数进行减法运算*/
add_point(L3,L1->floatlength);
cut_zero(L3); /*去掉所得结果中多余的零*/
if(com==1) /*若前一个数大于后一个数*/
head_insert(L3,'-');
}
else /*若两个运算数的大小相等*/
head_insert(L3,'0'); /*则减法运算后结果就是零*/
writedata(filename4,L3); /*将减法运算结果放入文件4*/
clean(L3);
add(&L1,&L2,L3); /*对两个数进行加法运算,并将运算结果存储到表3中*/
add_point(L3,L1->floatlength);
cut_zero(L3);
head_insert(L3,'-');
writedata(filename3,L3); /*将加法运算结果放入文件3*/
clean(L3);
}
printf("The result of add is in the file of 'add.txt'\n");
printf("The result of sub is in the file of 'sub.txt'\n");
printf("The result of mult is in the file of 'mult.txt'\n");
}//main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -