电子科技大学软件技术基础顺序表.docx

上传人:b****5 文档编号:7923604 上传时间:2023-01-27 格式:DOCX 页数:14 大小:79.05KB
下载 相关 举报
电子科技大学软件技术基础顺序表.docx_第1页
第1页 / 共14页
电子科技大学软件技术基础顺序表.docx_第2页
第2页 / 共14页
电子科技大学软件技术基础顺序表.docx_第3页
第3页 / 共14页
电子科技大学软件技术基础顺序表.docx_第4页
第4页 / 共14页
电子科技大学软件技术基础顺序表.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

电子科技大学软件技术基础顺序表.docx

《电子科技大学软件技术基础顺序表.docx》由会员分享,可在线阅读,更多相关《电子科技大学软件技术基础顺序表.docx(14页珍藏版)》请在冰豆网上搜索。

电子科技大学软件技术基础顺序表.docx

电子科技大学软件技术基础顺序表

软件技术基础上机实验报告

罗子建2016010902012

上机实验一

1.1

一、程序流程说明——有条理的文字或流程图*

二、程序代码

#include

#include

#include"stdafx.h"

#defineMAXNUM20

#definetrue1

#definefalse0

typedefstruct

{

intdata[MAXNUM];

intlength;

}list_type;

/*createalist:

inputdatafromkeyboard,endby-1*/

voidcreatelist(list_type*lp)

{

inti,elem;

lp->length=0;

printf("\npleaseinputdatasofthelist\n");

for(i=0;i

{

scanf_s("%d",&elem);

if(elem==-1)break;

lp->data[i]=elem;

lp->length++;

}

}

voidshowlist(list_type*lp)

{

inti;

printf("\nThese%drecordsare:

\n",lp->length);

if(lp->length<=0)

{

printf("Nodata!

\n");

return;

}

for(i=0;ilength;i++)

printf("%d",lp->data[i]);

printf("\nlengthofthelistis:

%d",lp->length);

}

intinsertlist(list_type*lp,intnew_elem,inti)

{

intj;

if(lp->length>=MAXNUM)

{

printf("thelistisfull,cannotinsert.");

return(false);

}

if(i<1||i>lp->length+1)

{

printf("\n%disinvalidvalue",i);

return(false);

}

for(j=lp->length;j>=i-1;j--)

{

lp->data[j]=lp->data[j-1];

}

lp->data[i-1]=new_elem;//放入新元素;

lp->length++;//表长度增加;

return(true);

}

intdeletelist(list_type*lp,inti)

{

intj;

if(i<1||i>lp->length)

{

printf("elemnotexist");

return(false);

}

for(j=i;jlength;j++)

{

lp->data[j-1]=lp->data[j];

}

lp->length--;//表长度减少;

return(true);

}

list_typedelete_negative(list_type*lp)

{

inti;

intj=lp->length;

while(j>0)

{

if(lp->data[j]<0)

{

for(i=j;ilength;i++)

{

lp->data[i]=lp->data[i+1];

}

lp->length--;

}

j--;

}

return*lp;

}

voidmain()

{

list_typelist;

inti,new_elem;

createlist(&list);

showlist(&list);

printf("\ninsert:

Enterdataandi:

\n");

scanf_s("%d%d",&new_elem,&i);

insertlist(&list,new_elem,i);

printf("\nlistafterinsert:

\n");

showlist(&list);

printf("\ndelete:

Enteri:

\n");

scanf_s("%d",&i);

deletelist(&list,i);

printf("\nlistafterdelete:

\n");

showlist(&list);

delete_negative(&list);

printf("\nlistafterdeleteallnegative:

\n");

showlist(&list);

}

 

三、测试数据

pleaseinputdatasofthelist

87654321-5-4-3-2-1

These12recordsare:

87654321-5-4-3-2

lengthofthelistis:

12

insert:

Enterdataandi:

55

listafterinsert:

These13recordsare:

876554321-5-4-3-2

lengthofthelistis:

13

delete:

Enteri:

1

listafterdelete:

These12recordsare:

76554321-5-4-3-2

lengthofthelistis:

12

listafterdeleteallnegative:

These7recordsare:

7655432

lengthofthelistis:

7请按任意键继续...

四、上机时遇到的问题(可分为编译问题和逻辑问题)

编译问题:

对于顺序表的length定义仍不清楚,对于我们之前申明的顺序表内存依旧存在,但是length会做相应的变化。

解决:

对于showlist函数的调用,对于delete的使用没有影响,要回顾顺序表知识点,做到对于基本函数的调用运用熟练。

逻辑问题:

顺序表的添加删减运算,经常处理不好尾值得定义。

解决:

多使用调试的工具,直接接触内存,回到最本质。

五、实际运行结果:

六、小结体会:

对于顺序表的操作,确实需要深刻理解末位元素的增删操作,以及要好好利用length这一个变量。

通过深入学习调试的手段,对于内存的变化,我对于编程的感觉似乎来了,感觉好好弥补了大一上的c语言的坑,感觉基础得到了很大的巩固。

 

1.2

一程序流程说明——有条理的文字或流程图*

二程序代码

#include

#include

#include"stdafx.h"

#definetrue1

#definefalse0

#defineMAXNUM50

typedefstruct

{

intdata[MAXNUM];

intlength;

}list_type;

list_typecreate_list(list_type*lp)

{

inti;

intelenum;

intm;

lp->length=0;

printf("请输入n个数\n");

printf("n:

");

scanf_s("%d",&elenum);

printf("请依次输入");

for(i=0;i

{

scanf_s("%d",&m);

lp->data[i]=m;

lp->length++;

}

return*lp;

}

list_typeinsertlist(list_type*lp,intx)

{

intm=lp->length;

inti=lp->length;

intj;

while(m>0)

{

if(lp->data[m]>x)

{

i--;

}

m--;

}

for(j=lp->length;j>i;j--)

{

lp->data[j]=lp->data[j-1];

}

lp->data[j]=x;

lp->length++;

return*lp;

}

list_typedelete_negative(list_type*lp)

{

inti;

intm;

inta=0;

for(i=0;ilength;i++)

{

if(lp->data[i]<0)

a++;

}

for(m=0;m

{

lp->data[m]=lp->data[m+a];

}

for(i=0;i

{

lp->length--;

}

return*lp;

}

voidshowlist(list_type*lp)

{

inti;

printf("\nThese%drecordsare:

\n",lp->length);

if(lp->length<=0)

{

printf("Nodata!

\n");

return;

}

for(i=0;ilength;i++)

printf("%d",lp->data[i]);

printf("\nlengthofthelistis:

%d",lp->length);

}

 

intmain()

{

intx;

list_typelist;

list=create_list(&list);

printf("建立的顺序表如下");

showlist(&list);

printf("\n输入的x的值:

");

scanf_s("%d",&x);

insertlist(&list,x);

printf("新增元素的顺序表如下");

showlist(&list);

delete_negative(&list);

printf("删去负数的顺序表如下");

showlist(&list);

}

三测试数据

请输入n个数

n:

5

请依次输入-5-1247

建立的顺序表如下

These5recordsare:

-5-1247

lengthofthelistis:

5

输入的x的值:

0

新增元素的顺序表如下

These6recordsare:

-5-10247

lengthofthelistis:

6删去负数的顺序表如下

These4recordsare:

0247

lengthofthelistis:

4请按任意键继续...

 

四、上机时遇到的问题(可分为编译问题和逻辑问题)

编译问题:

申请了很多的变量。

解决:

应该要做到算法的优化设计。

逻辑问题:

对于删减顺序表中负数元素,如何做到优化,我当时的蛮力就是多次调用delete函数。

解决:

实际上该顺序表属于递增有序的,我们只要找到多少个负数元素就好,然后对于顺序表数据元素直接搬移多少个单位就好。

 

五、实际运行结果:

六、小结体会:

本次编写,较上次编写速度提升较快,说明多去练习调试对于编程语句的理解很有帮助,长期坚持下去,一定能够把编程能力训练扎实。

 

1.3

一程序流程说明——有条理的文字或流程图*

二程序代码

#include

#include

#include"stdafx.h"

#defineMAXNUM50

#definetrue1

#definefalse0

typedefstruct

{

intdata[MAXNUM];

intlength;

}list_type;

list_typecreate_list(list_type*lp)

{

inti;

intelenum;

intm;

lp->length=0;

printf("请输入n个数\n");

printf("n:

");

scanf_s("%d",&elenum);

printf("请依次输入");

for(i=0;i

{

scanf_s("%d",&m);

lp->data[i]=m;

lp->length++;

}

return*lp;

}

voidshowlist(list_type*lp)

{

inti;

printf("\nThese%drecordsare:

\n",lp->length);

if(lp->length<=0)

{

printf("Nodata!

\n");

return;

}

for(i=0;ilength;i++)

printf("%d",lp->data[i]);

printf("\nlengthofthelistis:

%d",lp->length);

}

list_typerebuild(list_type*lp)

{

intj;

inttemp;

for(j=0;j<(lp->length/2);j++)

{

temp=lp->data[j];

lp->data[j]=lp->data[lp->length-j-1];

lp->data[lp->length-j-1]=temp;

}

return*lp;

}

intmain()

{

list_typelist;

create_list(&list);

showlist(&list);

rebuild(&list);

printf("\nlistafterrebuild:

\n");

showlist(&list);

}

三、测试数据

请输入n个数

n:

10

请依次输入87654321851314212

These10recordsare:

87654321851314212

lengthofthelistis:

10

listafterrebuild:

These10recordsare:

21314218512435678

lengthofthelistis:

10请按任意键继续...

四、上机时遇到的问题(可分为编译问题和逻辑问题)

编译问题:

调用temp变量,对于末变量的尾值还不能有所把握

解决:

末变量属于lp->length-i-1,很容易忘掉这个1.

逻辑问题:

第一次尝试编写的过程,居然想到的是在新的顺序表上填写数据,这对于最优化的原则是很不好的。

解决:

常见的数据交换函数,swap啥的啊,还要提前声明好一个temp变量,有助于后续编写。

五、实际运行结果:

六、小结体会:

掌握最基本的数据交换原则,还有运用指针来真正意义上的交换数据元素的地址,而不是改变它的元素值。

总之,在本个单元的编写过程中,我加强了自己对于调试和深入到内存观察的能力,确实感觉自己的能力有所增加。

感觉段老师就是人生导师啊,拯救了我的c语言。

我的编程功底确实是很差的,感觉现在有很大的进步啊。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1