实验二 线性表的应用

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

实验二线性表的应用(2学时)

一、实验目的:掌握线性表的基本结构和操作方法,培养学生灵活使用结构解决实际问题的能力。

二、实验内容:

设计一个100位以内的长整数加减运算的程序。

三、实验要求:

1,输入输出要求:每四位一组,组间用逗号分隔;

2,加和减分别用不同的程序实现

3,程序应考虑输入数据的符号

四、参考程序

/*设计一个100位以内的长整数加减运算的程序。

实验要求:

1,输入输出要求:每四位一组,组间用逗号分隔;

2,程序应考虑输入数据的符号*/

#include

#include

#include

#include

#include

#define LEN sizeof(struct student)

struct student{

int score;

struct student *next;

};

int lenm,lenn,lensum;//m与n的长度

void main()

{

struct student *creat(int *d,int *len);

void print(struct student *head);

struct student *add(struct student *m,struct student *n);

struct student *sub(struct student *m,struct student *n);

int compare(struct student *m,struct student *n);

struct student *m,*n,*sum;

int s1,s2,s3,k;

char ch;

printf("输入第一个数:\n");

m=creat(&s1,&lenm);//输入第一个数放在链表m中,s1为其符号

printf("\n选择运算,输入+或-:");

scanf("%c",&ch);getchar();

printf("\n输入第二个数:\n");

n=creat(&s2,&lenn);//输入第一个数放在链表n中,s2为其符号

k=compare(m,n);//k=1则m>n,k=-1则m

if(ch=='+')//加法运算

{

if(s1*s2>0){s3=s1;sum=add(m,n);}

else {

if(s1>0&&k==1) {s3=1;sum=sub(m,n);}//m>0,n<0,m>|n|,m+n=m-|n|

if(s1>0&&k==-1){s3=-1;sum=sub(n,m);}//m>0,n<0,m<|n|,m+n=-(|n|-m)

if(s1<0&&k==1){s3=-1;sum=sub(m,n);}//m<0,n>0,|m|>|n|,m+n=-(|m|-n)

if(s1<0&&k==-1){s3=1;sum=sub(n,m);}//m<0,n>0,|m|<|n|,m+n=n-|m|

if(k==0) s3=0;

}

}//endif+

if(ch=='-')//减法运算

{

if(s1*s2<0) {s3=s1;sum=add(m,n);}

else{

if(s1>0&&k==1) {s3=1;sum=sub(m,n);}//m>0,n>0,m>n,m-n=m-n

if(s1>0&&k==-1){s3=-1;sum=sub(n,m);}//m>0,n>0,m

if(s1<0&&k==1){s3=-1;sum=sub(m,n);}//m<0,n<0,|m|>|n|,m-n=-(|m|-|n|)

if(s1<0&&k==-1){s3=1;sum=sub(n,m);}//m<0,n<0,|m|<|n|,m-n=|n|-|m|

if(k==0) s3=0;

}

}//endif-

if(s3>0) {printf("结果为:+");print(sum);}

if(s3<0) {printf("结果为:-");print(sum);}

if(s3==0) printf("结果为:0");

}//endmain

struct student *creat(int *sign,int *n)//输入数据并建立链表首结点存放最低4位数据{

void print(struct student *head);struct student *p1,*p2;

int i=0,j,k=0,len;

char s[5],c[130];

*sign=1;

gets(c);

if(c[0]=='-'){i=1;*sign=-1;}

p1=p2=(struct student *)malloc(LEN);//建立尾结点

p1->score=0;

p1->next=NULL;

len=strlen(c);

for(;i

{

j=0;

while(c[i]>='0'&&c[i]<='9')//取出逗号之间的每一组数存放到字符数组s中

{

相关文档
最新文档