计算机学院特色标题,特色项目

Anyview系统

吴伟民教授自1998年调入广东工业大学计算机学院至今,在学校学院各级部门的大力支持下,领导课程组积累了大量的课程资源,如投入40余万元自主研发的AnyviewC可视化编程调试平台已成功运行近20年并成功推广到几十所高校,课程组还研发并在教学中使用了“数据结构自主学习网络平台”。该平台承载课前预习、课堂教学、在线学习、在线测验、效果评价和师生互动等一系列课程教学活动,使学生不受时间和地域限制,实现了“全天候”和“跨时空”在线自主学习。随着这些课程平台资源在多所高校、多个学院的成功运行,数据结构课程在1999年成功申报广东省高校重点课程,2012年成功申报广东省精品资源共享课程,并于2014年成功申报广东省精品资源共享课。

AnyviewC实验平台可支持“C程序设计”、“离散数学”和“数据结构”3门课程的实验教学工作。平台配有相应的编程作业题库,包括C程序作业题库(共397道题目)、离散数学作业题库(共33道题目)和数据结构作业题库(共104道题目)。2012年以来,平台在“数据结构”课程累计上机总人数约4900人,高峰时期同时在线人数超过500人,总实验机时约153600小时;在“C程序设计”课程的累计上机总人数约3200人,高峰时期同时在线人数超过400人,总实验机时约114800机时。在“离散数学”课程累计上机总人数约3200人,高峰时期同时在线人数超过200人。

随着AnyviewC实验平台在多所高校、多个学院的成功运行,数据结构课程在1999年成功申报了广东省高校重点课程,2012年成功申报了广东省精品资源共享课程。2014年2项也获得2项省级教改项目立项,分别是精品资源共享课“C语言与数据结构类课程群”和MOOC示范课“数据结构”。

2009年起,程序设计可视化实验平台AnyviewC面向数据结构和C程序设计等课程开放,已提供省内外多所高校试用,在广东工业大学校内有通信工程学院、自动化学院和物理学院等。自2012年以来,AnyviewC平台在数据结构课程的累计上机总人数约4900人,高峰时期同时在线人数超过500人;总实验机时约153600小时;AnyviewC平台在C程序设计课程的累计上机总人数约3200人,高峰时期同时在线人数超过400人;总实验机时约114800机时。

(1)2012年12月,吴伟民教授应邀在广州举办的全国第八届“大学计算机课程报告论坛”作“基于程序可视化运行调试网络平台的数据结构精品资源共享课建设”专题报告。

(2)2013年5月,主办“C程序设计与数据结构教学交流会”,吴伟民教授全程主持会议,并作“数据结构和C程序设计的编程作业可视化平台与资源”专题报告。

(3)2016年4月,课程组成员李小妹老师应邀参加在北京举办的“面向计算机类MOOC的大规模在线学习支撑工具研讨会”,并在会上作题为“AnyviewC程序设计可视化集成开环境和平台”的专题报告。

Anyview系统使用说明

广东工业大学计算机学院网上作业系统学生端用于学生编程类作业题目的完成以及提交。

题库中共有约40道题目,请注意各章题目的要求完成时间。超出完成时间的题目将被锁定,不能继续答题。

学生端软件包中有个5fe7559e022b94d34e07e779d7ff420b.pngCHM文件,是学生端的使用帮助文件,在使用学生端前请先阅读。

1、登录

请使用最新版学生端,当发现当前版本学生端不能登录时,请及时更新最新版学生端。

打开学生端后,如图所示:

.

b4fa728878c3ce2419101c4503dcbeca.png

请输入学号和密码,每个同学的初始密码为空,请第一次登录后及时修改。如果已经使用过C语言学生端的同学,则其密码可能是自行修改过的密码。

学号的组成规则如下:

班级简称+年级(2位)+班别(2位)+个人学号后四位

例如,假设软件工程12级01班某同学的学号后四位是6789,则需要输入的学号为“软12016789”。

其它配置在一般情况下无需更改。

如果已经在C语言课程中登录过,则沿用当时的账号和密码。如果某同学无账号密码,或者忘记了密码,请及时联系老师。

2、打开题目

登录后,做题界面如图所示。

3c9b1bef0eac2d072dc29fdcfac18bf2.png

在右边9eceb3910223e6c05a37e51f01dd6835.png工具栏中,点击题目目录按钮7225ff52bf14da072434fadf9a1950c3.png,则可以打开当前可做的所有题目。

88d09db9ae65d2d3d42104fc37deeef2.png

双击某道题目,例如“CH01”的“EX00”题目,则可以打开该题目,如图所示。

4278d6be7b289bfe44c3604c69d26a66.png

对于按下9eceb3910223e6c05a37e51f01dd6835.png的“题目文档按钮d45bae644b350e704f4394a079c6642a.png”,则可打开“CH01”的“EX00”题目具体要求。

717547bef2bd162e7d49ae0ab9b187fb.png

3、做题流程

做题流程与其它C语言编程环境类似,首先进行程序编写,然后可以进行编译、运行;必要时可以进行手工单步或者定时单步调试等。

3.1程序编写

Anyview右边的文本编辑框用于输入程序代码。

f4e98aaa6dce9dde47a551b48354c2ea.png

3.2程序编译与运行

01b3f5708ec01832844be3dee3b16c89.png:编译按钮。

b08fd6a98d19ed9766fda8ce4fd50101.png:编译然后运行按钮。

当编译出现语法错误时,会出现出错提示:

f21d1f78724bea0a50fa0e7685bf482b.png

fec5d6c85b463ca5557cb2146f911416.png:定时运行,该按钮与e120f5b458b14fc52062abbf02ac0d3c.png控件联合使用,可以控制程序在一定速率下自动运行。

8e5371b7d88fc093b600b9d913bf8249.png:直接运行程序。

8c95c4b52b38a4042290ffbb61456dfa.png:停止运行程序。

99a395501972a8937a9dbef38bdba139.png:暂停运行程序。

3.3程序调试

当程序编译通过后,则最起码在语法上是正确的。而当程序运行过程中发现功能上的问题时,则需要进行调试。

1、设置断点

使用鼠标直接在行号上点击鼠标左键,则可将在该行上设置断点。

73abe20bfe83cb3f0505efba64de99f2.png

如果要取消断点,则使用鼠标点击上图中的红色原点8dfd31f0fc41163be9eea2cf19d77b14.png即可。

2、调试运行方式

fe565cae6229bd5ca91f184113e01b11.png:单行运行(不进入函数)。每按下一次该按钮,则执行一整行代码。如果遇到函数调用,则不进入被调用函数的内部执行。

44cd598241dffe72b3263ec1a70fb6c5.png:单行运行(进入函数)。每按下一次该按钮,则执行一整行代码。如果遇到函数调用,则进入被调用函数的内部执行。

b5b3fd22da8bf2063ea260ac86949d36.png:单步运行。即单指令运行。经过编译后,每一行代码可能会生成多条指令。该按钮可以令程序逐条指令执行,而不是按行执行。

ca7de58cc15c504c098063f2e48098c2.png:运行测试。在Anyview中,测试数据由系统自动生成,并且将测试数据以函数参数的形式传递给被测试函数(即学生编写的函数)。测试数据一般会有多批,该按钮每次只会运行一批测试数据,相当于被测试函数被运行一次。

测试数据在程序编辑框下方的输入输出窗口中显示:

afa70a8fc8245437618252f74a7e1548.pngf590cd429bb7c948e60f91d8b2f19fcd.png

当系统运算结果与学生程序运行结果相同,则会显示Right,否则显示Wrong

b4542fe8533088f093157c4dad42f072.png

7519a1b6eadd29e89589b3a8ea1c2e77.png

b6b9ab686fbd8082625a485cedd2f846.png

3、变量的表示

在程序调试中,往往需要关注参数、局部变量等的表示。

下图给出了函数参数在Anyview系统中的表示方式。

ff08bbb1dd799d889b840bcf32b411d3.pngb212181efd87defd75fd56b2cd14c55c.pngf25aa88f913dce819b8d208e5c9d0926.png2a09d77a4c5b1ab1078277a441fb5aa4.png334169ccc21173a39216bb00087e1b81.png1248b1dc07da8515a24b6825c2807190.png0f33cb28c8b255f8747c67116f490245.png4dd77711586e6518307b5553eff74dcc.png1fc95d226fe6fe6bb1c8205bae6a8a87.pnge13e740726546dce661e81252cdcda27.pngac38bab15422d07744cbaf97a652b3e8.pngac38bab15422d07744cbaf97a652b3e8.png8c79601bf9675f9ca18e168d527899b4.png60958157811d29755cf2e229165d4a6f.png8aae3adf97e8b454422408a9fea278d5.png775e7834ded5f2b9fa61338329f670e3.png3c0dcb98b7edc9f37cf73099bca4da7b.png

局部变量的表示方式与函数参数类似。

3.4程序完成

如果学生程序每次运算结果与Anyview作业系统的运算结果相同,则本题通过,程序正确。在信息窗口会出现“Error:0    Right:XX”的提示。“XX”即在次测试中学生程序运算正确的次数。

a7ea02f7bbb70658e134b90a4eddfc90.png

4、结果浏览

当某一题完成后,在“题目目录”对话框中可以看到相关信息。

10e50af855e8846c1163294749a55ebe.png

5、设置

(1)内存设置

当Anyview出现以下提示:

Error:Stack Limit

Error:Heap Limit

有可能是Anyview系统设置的可用内存已经用尽,可以调整:

a.选择菜单栏中的“工具”à“配置(C)”

3b574a60b19c01029906c1e903f55aaa.png

b.在弹出的对话框中,内存最大值改为65535。该数值是Anyview系统可用的最大值。

0e27b95d7a1732e42592b42be3f5d495.png

如果将该内存最大值改为65535之后,仍然出现“Error:Stack Limit”、“Error:HeapLimit”,则必然是学生程序的算法有误,反复申请内存导致内存耗尽。

5、特别提示

(1)在做题前,务必认真阅读题目文档,正确使用题目文档提供的函数和数据处理方法。

(2)在做题时,请耐心、认真观察系统的输出结果,熟练灵活运用单步调试等手段来调试程序。在编写程序时,可以采取逐步完善的方式,每编写了处理某种情况的一小段程序就进行调试,那样比一下子写完整个程序再调试容易得多。

(3)“编译有错”“运行有错”“错误次数”等数值不作为评价作业题结果优劣的主要指标,仅作为做题过程中的客观记录。在做题过程中,请勿刻意追求该三项数值的高低。

(4)评价作业结果的标准主要有:

①、程序风格。程序风格的好坏,可以直观反映出程序员的编程功底。具体程序风格的内容包括程序排版、变量命名规范性、语句复杂度、注释等。

②、思路清晰度。作业结果思路越清晰越佳。具体包括步骤划分是否合理(每步包含的内容联系是否紧密、内容量是否合适)、各步骤的接口是否明确等。

③、程序健壮性。对于各种边界条件的处理是否完全、准确。

鼓励在作业通过后,继续参照上述指标完善程序。

(5)请勿抄袭。如果老师发现后核定哪些同学抄袭,无论是抄袭者还是被抄袭者,都会受到严肃处理,以致影响平时成绩。

自主研发“数字逻辑及系统设计实验箱”介绍

为适应《数字逻辑与EDA设计》课程教学改革,计算机学院成立了以丁磊老师为带头人的课程组,以计算机学院实验中心为依托,自主研发由学校设备处立项的“数字逻辑及系统设计实验箱”,该实验箱于2011年研制成功并投入实验教学,该实验箱申请并获授权实用新型专利授权(CN 201120262287.7)。该实验箱由箱体、主板及2块扩展板组成,涵盖了经典的门电路、组合逻辑电路、时序逻辑电路实验,以及基于FPGA的数字电路设计实验,将FPGA器件及EDA技术引入实验课程,内容丰富,可扩展性强,使学生通过实验,掌握现代数字电路的设计、综合及验证方法。目前,该实验箱每学年使用人时数为19200人时/年,使用效果良好。

此外,项目组在开发及制作实验箱的基础上,还编写了《数字逻辑与EDA设计》、《数字逻辑与EDA设计实验指导书》教材;组织部分学生开展进阶学习、指导学生申请并完成创业创新实践项目,使学生收获学业成果的同时为课程积累了大量的实际应用的资源。

883187a20afb571bcc37fc3aad826dd6.png

dd5ea2216b975a7d3c7a86dc130b4944.png

3573c4a50f88a81887f366759863b4f9.png

7efaab3940f924c57c01f62a6a62b814.png

930b6d8a73b4f53ad70f80a230a61cbc.png

9bf68073a5a6db9a8fbd4891cd819c0f.png

实验箱验收结论

ebb236c6e65d7c8ade02c87da03c9962.png

学校固定资产验收报告

0fed91cd12c3e1d22e35b7ddf798358f.png

数字逻辑及系统设计实验箱

417e9c706873a62486d7d97fd0af2259.png

数字逻辑及系统设计实验箱内部

计算机组成原理或数字逻辑实验竞赛介绍

自2007年以来,计算机学院实验中心已连续10年成功承办了广东工业大学学生实验综合技能竞赛计算机组成原理或数字逻辑项目比赛,不仅在校内得到很好开展,还辐射到其他高校,从2008年开始增设了广州大学城校际学生实验综合技术能邀请赛,先后分别邀请了广州大学、仲恺农业工程学院、广东药科大学等高校来计算机学院实验中心参赛,辐射面得以扩大,影响得以提升。

10年来,计算机学院实验中心承办的竞赛遵循“源于实验,高于实验”的竞赛理念,不断改革创新,优化竞赛内容,不断提升学生实验综合竞赛的水平和层次,着力培养学生的综合实践能力和创新能力,对激发学生实验兴趣,提高学生实践能力,促进实验教学改革以及共享优质实验教学资源上起到重要作用。

经过10年的努力,计算机学院实验中心承办的竞赛已成为全校乃至广州大学城范围内具有较大影响力的品牌,曾荣获广东工业大学学生实验综合技能竞赛学院奖金奖。

018004292dd43bca284006bfef63869f.png31c92255636d483086ff8301c91f0711.png

6c09f3e70dc99cd3529136f7d8c3d634.png

G4比赛

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
9.25实现下列函数: int Search(SSTable s, KeyType k); /* Index the element which key is k */ /* in StaticSearchTable s. */ /* Return 0 if x is not found. */ 静态查找表的类型SSTable定义如下: typedef struct { KeyType key; ... ... // 其他数据域 } ElemType; typedef struct { ElemType *elem; int length; } SSTable; int Search(SSTable a, KeyType k) /* Index the element which key is k */ /* in StaticSearchTable s. */ /* Return 0 if x is not found. */ { int i; if(a.length==0) return ERROR; //先判断a是否为空 a.elem[a.length+1].key=k; for(i=1;a.elem[i].key>k;i++) if(i>=a.length||a.elem[i].key<k) //不能忽略i=a.length这种情况 return ERROR; return i; } /* { int i; a.elem[a.length+1].key=k; for(i=1;a.elem[i].key>k;i++) if(i>a.length||a.elem[i].key<k) return ERROR; return i; } */ 9.26② 试将折半查找算法改写成递归算法。 实现下列函数: int BinSearch(SSTable s, int low, int high, KeyType k); /* Index the element which key is k */ /* in StaticSearchTable s. */ /* Return 0 if x is not found. */ 静态查找表的类型SSTable定义如下: typedef struct { KeyType key; ... ... // 其他数据域 } ElemType; typedef struct { ElemType *elem; int length; } SSTable; int BinSearch(SSTable s, int low, int high, KeyType k) /* Index the element which key is k */ /* in StaticSearchTable s. */ /* Return 0 if x is not found. */ { int mid; if(low<=high) { mid=(low+high)/2; if(s.elem[mid].key==k) return mid; if(s.elem[mid].key<k) return BinSearch(s,mid+1,high,k); if(s.elem[mid].key>k) return BinSearch(s,low,high-1,k); } return 0; } /* { int mid; if(low<=high) { mid=(low+high)/2; if(s.elem[mid].key<k) return BinSearch(s,mid+1,high,k); else return BinSearch(s,low,high-1,k); } return 0; } */ 9.31④ 试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构。且树中结点的关键字均不同。 实现下列函数: Status IsBSTree(BiTree t); /* 判别给定二叉树t是否为二叉排序树。*/ /* 若是,则返回TRUE,否则FALSE */ 二叉树的类型BiTree定义如下: typedef struct { KeyType key; ... ... // 其他数据域 } ElemType; typedef struct BiTNode { ElemType data; BiTNode *lchild,*rchild; }BiTNode, *BiTree; KeyType predt=-32767; Status IsBSTree(BiTree t) /* 判别给定二叉树t是否为二叉排序树。*/ /* 若是,则返回TRUE,否则FALSE */ { if( t )//&& ! ( t->lchild || t->rchild ) )//空树和叶子不用判断 { if( t->lchild && ( t->data.key < t->lchild->data.key ) )//左孩子不空,左孩子的key比本身的大 return FALSE; else if( t->rchild && ( t->data.key > t->rchild->data.key ) )//右孩子不空,右孩子的key比本身的大 return FALSE; else if( !IsBSTree( t->lchild ) )//判断左子树 return FALSE; else if( !IsBSTree( t->rchild ) )//判断右子树 return FALSE; } return TRUE; } /* { if(!t) return OK; if(t&&!t->lchild&&!t->rchild) return OK; else { if(t->lchild->data.key<t->data.key) IsBSTree(t->lchild); if(t->lchild->data.key>=t->data.key) return ERROR; if(t->rchild->data.key>t->data.key) IsBSTree(t->rchild); else return ERROR; return OK; } } */ 9.33③ 编写递归算法,从大到小输出给定二叉排序树中所有关键字不小于x的数据元素。要求你的算法的时间复杂度为O(log2n+m),其中n为排序树中所含结点数,m为输出的关键字个数。 实现下列函数: void OrderOut(BiTree t, KeyType x, void(*visit)(TElemType)); /* Output is to use visit(t->data); */ 二叉树的类型BiTree定义如下: typedef struct { KeyType key; ... ... // 其他数据域 } ElemType; typedef struct BiTNode { ElemType data; BiTNode *lchild,*rchild; }BiTNode, *BiTree; void OrderOut(BiTree t, KeyType x, void(*visit)(TElemType)) /* Output is to use visit(t->data); */ { if(t->rchild) OrderOut(t->rchild,x,visit); if(t->data.key>=x) visit(t->data); if(t->lchild)OrderOut(t->lchild,x,visit); } /* { if(t->rchild) OrderOut(t->rchild,x); if(t->data<x) exit(); visit(x); if(t->lchild)OrderOut(t->lchild,x); } */ 9.44④ 已知某哈希表的装载因子小于1,哈希函数 H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。试编写一个按第一个字母的顺序输出哈希表中所有关键字的算法。 实现下列函数: void PrintKeys(HashTable ht, void(*print)(StrKeyType)); /* 依题意用print输出关键字 */ 哈希表的类型HashTable定义如下: #define SUCCESS 1 #define UNSUCCESS 0 #define DUPLICATE -1 typedef char StrKeyType[4]; typedef struct { StrKeyType key; void *any; } HElemType; int hashsize[] = { 7,11,17,23,29,37,47 }; typedef struct { HElemType elem[MAXLEN]; int count; int sizeindex; } HashTable; int H(char *s)//求Hash函数 { if( s[0] ) return s[0]-'A'+1; //求关键字第一个字母的字母序号(小写) else return 0; } void PrintKeys(HashTable ht, void(*print)(StrKeyType)) /* 依题意用print输出关键字 */ { int i,j; for( i = 1; i <= 26; i++ ) { for( j = (i-1)%hashsize[ht.sizeindex]; ht.elem[j].key[0]; ) { if( H ( ht.elem[j].key ) == i ) print(ht.elem[j].key); j = (j+1)%hashsize[ht.sizeindex]; } } } /* void PrintKeys(HashTable ht, void(*print)(StrKeyType)) /* 依题意用print输出关键字 { int i,j; for(i=1;i<=26;i++) for(j=i;ht.elem[j].key;j=(j+1)%MAXLEN) if(H(ht.elem[j].key)==i) print(ht); } int H(char *s) { if(s) return s[0]-96; else return 0; } */ 9.45③ 假设哈希表长为m,哈希函数为H(x),用链地址法处理冲突。试编写输入一组关键字并建造哈希表的算法。 实现下列函数: int BuildHashTab(ChainHashTab &H, int n, HKeyType es[]) /* 直接调用下列函数 */ /* 哈希函数: */ /* int Hash(ChainHashTab H, HKeyType k); */ /* 冲突处理函数: */ /* int Collision(ChainHashTab H, HLink &p); */ { int i = 0,l,flag; HLink p,node; while( es[i] ) { l = Hash( H, es[i] ); node = ( HLink )malloc( sizeof( HNode ) ); node->data = es[i]; node->next = NULL; i++; if( !H.elem[l] ) H.elem[l] = node; else { flag = 0; p = H.elem[l]; if( p->data == node->data ) flag = 1; while( Collision( H, p ) ) if( p->data == node->data ) { flag = 1; break; } if( !flag ) { p = H.elem[l]; node->next = p; H.elem[l] = node; } } } } "+userLink+""; $('miniAd').show(); } }, onFailure: function(){} }}); } showMiniAd();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值