c,,实验报告总结_第1页
c,,实验报告总结_第2页
c,,实验报告总结_第3页
c,,实验报告总结_第4页
c,,实验报告总结_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 / 35 c,实验报告总结 C 程序设计 1 实 验 报 告 学 号 姓 名 班 级 指导教师 储岳中 安徽工业大学计算机学院 2016年 1月 9 日 C 程序设计实验报告 实验一:熟悉 C语言的运行环境 1、实验目的 (1)了解 Turbo C和 WinTC 的调试环境; 2 / 35 (2)掌握调试 C程序的四个步骤:编辑、编译、连接和运行; 2、实验内容 (1)首先调试下列程序,并将其以文件名保存。 #include int main(void) printf(This is a C program.n); getch(); (2)将 另存为,并改为如下程序后调试。 #include int main(void) printf( Welcome!n ); printf(Welcome!n ); printf(Welcome!n ); printf(Welcome!n ); getch(); 3 / 35 (3)对前两题的运行结果进行分析,然后总结调试 C 程序的基本步骤及观察结果的方法。 3、实验报告要求 (1) 总结调试 C 程序的基本步骤与技巧; (2)各题程序运行结果及分析;实验总结。 实验二:运行一个 C 程序的方法 1、实验目的 (1)掌握 C 程序中定义主函数的方法; (2)掌握 C 程序中书写注释的方法; (3)了解 printf 函数的基本功能。 2、实验内容 * (1)编写程序输出以下图案: * #include * int 4 / 35 main(void) printf( *n); printf( *n); printf( *n); printf(*n); getch(); (2) 编写程序输出下列字符 - Your name: - Your password: #include int main(void) * printf(_n); printf(Your name:n); printf(_n); printf(Your password:n); 5 / 35 getch(); (3) 编写程序输出你的姓名、学号、所在学院、专业和 Email地址,并对你的程序添加注释 #include int main(void) printf(xingming:zhou wenn); printf(xuehao:099074173n); printf(suozaixueyuan:jisuanjixueyuann); printf(zhuanye;ruanjiangongchengn); printf(Email dizhi:ZHOUWENJSn); getch(); (4) 运行教材 Page13中的程序,并观察结果 #include int main(void) int i,s=0; for(i=1;i printf(%d,s); getch(); return 6 / 35 0; (5) 修改上题程序,求 1100中能被 6整除的所有整数的和,并观察结果。 #include int main(void) int i,sum=0; for(i=1;i printf(%d,sum); getch(); return 0; 3、实验报告要求 (1) 各题程序、运行结果及分析; (2) printf 函数输出字符串的方法; 工程学院 实 验 报 告 课 程 名 称 : C 程序设计 课 程 代 码 : 8234510 学院 (直属系 ): 年级 /专业 /班 : 2016级汽电 1班 学 生 姓 名 : 学 号 : 31201608030 实验总成绩 : 7 / 35 任 课 教 师 : 开 课 学 院 : 工程学院 实验中心名称 : 交通实验中心 西华大学实验报告 开课学院及实验室:汽车学院机房 实验时间: 年 月 日 1、实验目的 2、实验设备、仪器及材料 3、实验内容 一般实验: 实验方案设计与选择 实验原理及实验步骤 实验记录 注解:理工科 实验需记录实验过程中的数据、图表、计算、现象观察等,实验过程中出现的问题; 其它如在计算机上进行的编程、仿真性或模拟性实验需记录程序核心代码以及程序在调式过程中出现的问题及解决方法;记录程序执行的结果。 8 / 35 上机实验: 上机实验的内容及要求 算法设计思想与算法实现步骤 程序核心代码,程序调试过程中出现的问题及解决方法 程序运行的结果 4、实验总结 实验结果分析及问题讨论 实验总结心得体会 注解:实验总结的内容根据不同学科和类型实验要求不一样,一般理工科类的实验需要对实验结果进行分析,并且对实验过程中问题进行讨论;在计算机上进行的编程、仿真性或模拟性实验需要对上机实践结果进行分析,上机的心得体会及改进意见。其它实验应总结实验过程写出心得体会及改进意见。 1、实验目的 (1) 熟悉 C语言的集成环境,了解菜单的使用方法。 9 / 35 (2) 掌握 C语言程序上机的编辑、编译、连接、运行的基本步骤。 (3) 了解 C语 言程序的结构。 2、实验设备、仪器及材料 (1) 硬件环境 微型计算机一台 (2) 软件环境 Windows98/2000/XP 操作系统 集成开发环境 3、实验内容 上机实验的内容及要求 (1) 熟悉 VC中常用菜单项及对应快捷键的使用方法。 (2) 熟悉 C语言程序上机的编辑、编译、连接、运行的基本步骤。 (3) 编程实现一个字符串的输出。 (4) 编程输出两个数的最大值。 (5) 计算由键 盘输入的任意两个整数的积。 10 / 35 算法设计思想与算法实现步骤 (1)编程实现一个字符串的输出为程序一,编程中,定义一个空函数后,直接由利用 printf输出字符串。 (2)编程输出两个数的最大值为程序二,编程中,用 scanf函数输入两个数,再用选择函数判定两数大小,最后用printf 函数输出最大值。 计算由键盘输入的任意两个整数的积为程序三,编程中,用scanf函数输入两数,再由乘积函数进行求积运算。 程序核心代码,程序调试过程中出现的问题及解决方法 程序核心代码 程序一: #include void main() 11 / 35 printf (this is a c program,一定能学好! .n); 程序二: #include void main() float a,b,m; printf(请输入两个数 a 和 bn); scanf(%f,%f,&a,&b); /*scanf 函数直接输入修饰符 */ if (ab) m=a; else m=b; printf(最大数为 %n,m); /*printf 可以加 a=; */ 程序三: #include void main() int a,b,c; printf( 请 输 入 两 个 整 数 a 和 bn); scanf(%d,%d,&a,&b); c=a*b; 12 / 35 printf(c=%dn,c); 程序调试过程中出现的问题及解决方法 程序二丢失 “ ; ” 程序三丢失 “ ) ” 当分别添加上丢失的符号后,问题解决,程序编辑成功。 程序运行的结果 程序一运行结果: 程序二运行结果: 程序三运行结果: 4、实验总结 程序运行结果分析及思考题讨论 根据程序运行结果和编程之前的预期结果一致,说明编程成13 / 35 功。 对于程序的结构应该熟记在心,而且在集成开发环境中不需要用户去进行连接的操作,这一步的操作电脑会自动完成。 实验总结心得体会 对第一次 C语言编程上机实验,对编程还有很多不是很熟悉的地方,需要在接下来的学习中进一步熟 练掌握操作。而且在以后的编程中对于 printf, csanf函数的运用将会更多。在编程中还必须小心翼翼,如果出现编译错误,可参看界面下 方的错误提示,这对于编程成功很有帮助。 1、实验目的 实验心得体会 在做测试技术的实验前 ,我以为不会难做 ,就像以前做物理实验一样 ,做完实验 ,然后两下子就将实验报告做完 .直到做完测试实验时 ,我才知道其实并不容易做 ,但学到的知识与14 / 35 难度成正比 ,使我受益匪浅 . 在做实验前 ,一定要将课本上的知识吃透 ,因为这是做实验的基础 ,否则 ,在老师讲解时就会听不懂 ,这将使你在做实验时的难度加大 ,浪费做实验的宝贵时间 .比如做光伏的实验 ,你要清楚光伏的各种接法 ,如果你不清 楚 ,在做实验时才去摸索 ,这将使你极大地浪费时间 ,使你事倍功半 .做实验时 ,一定要亲力亲为 ,务必要将每个步骤 ,每个细节弄清楚 ,弄明白 ,实验后 ,还要复习 ,思考 ,这样 ,你的印象才深刻 ,记得才牢固 ,否则 ,过后不久你就会忘得一干二净 ,这还不如不做 .做实验时 ,老师还会根据自己的亲身体会 ,将一些课本上没有的知识教给我们 ,拓宽我们的眼界 ,使我们认识到这门课程在生活中的应用是那么的广泛 . 通过这次测试技术的实验 ,使 我学到了不少实用的知识 ,更重要的是 ,做实验的过程 ,思考问题的方法 ,这与做其他的实验是通用的 ,真正使我们受益匪浅 . 实验心得体会 这个学期我们学习了测试技术这门课程,它是一门综合应用相关课程的知识和内容来解决科研、生产、国防建设乃至人15 / 35 类生活所面临的测试问题的课程。测试技术是测量和实验的技术,涉及到测试方法的分类和选择,传感器的选择、标定、安装及信号获取,信号调理、变换、信号分析和特征识别、诊断等,涉及到测试系统静动态性能、测试动力学方面的考虑和自动化程度的提高,涉及到计算机技术基础和基于LabVIEW的虚拟测试技术的运用等。 课程知识的实用性很强,因此实验就显得非常重要,我们做了金属箔式应变片:单臂、半桥、全桥比较 , 回转机构振动测量及谱分析 , 悬臂梁一阶固有频率及阻尼系数测试三个实验。刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了 “ 双赢 ” 的效果。 实验中我学会了单臂单桥、半桥、全桥的性能的验证;用振动测试的方法,识别一小阻尼结构的一阶固有频率和阻尼系数;掌握压电加速度传感器的性能与使用方法;了解并掌握机械振动信号测量的基本方法;掌握测试信号的频率域分析方法;还有了解虚拟仪器的使用方法等等。实验过程中培养了我在实践中研究问题,分析问题和解决问 16 / 35 题的能力以及培养了良好的工程素质和科学道德,例如团队精神、交流能力、独立思考、测试前沿信息的捕获能力等;提高了自己动手能力,培养理论联系实际的作风,增强创新意识。 实验体会 这次的实验一共做了三个,包括:金属箔式应变片:单臂、半桥、全桥比较;回转机构振动测量及谱分析;悬臂梁一阶固有频率及阻尼系数测试。各有特点。 通过这次实验,我大开眼界,因为这次实验特别是回转机构振动测量及谱分析和悬臂梁一阶固有频率及阻尼系数测试,需要用软件编程,并且用电脑显示输出。可以说是半自动化。因此在实验过程中我受易非浅:它让我深刻体 会到实验前的理论知识准备,也就是要事前了解将要做的实验的有关质料,如:实验要求,实验内容,实验步骤,最重要的是要记录什么数据和怎样做数据处理,等等。虽然做实验时,指导老师会讲解一下实验步骤和怎样记录数据,但是如果自己没有一些基础知识,那时是很难作得下去的,惟有胡乱按老师指使做,其实自己也不知道做什么。 17 / 35 在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。例如:数据处理时,遇到要进行数据获取,这就要求懂得 labview 软件一些基本操作;还有画图时,也要用软件画图,这也要求懂得 excel 软件的插入图表命令。并且在做回转机构振动测量及谱分析实验,获取数据时,注意读取波形要改变采样频率,等等。当然不只学到了这些,这里我就不多说了。 还有动手这次实验,使测试技术这门课的一些理论知识与实践相结合,更加深刻了我对测试技术这门课的认识,巩固了我的理论知识。 不过这次实验虽好,但是我认为它安排的时间不是很好,还有测试技术考试时间,因为这些时间安排与我们的课程设计时间有冲突,使我不能专心于任一项,结果不能保证每一个项目质量,所以如果有什么出错请指出! 实验体会与感想 18 / 35 经过这次的测试技术实验 ,我个人得到了不少的收获 ,一方面加深了我对课本理论的认识 ,另一方面也提高了实验 操作能力。现在我总结了以下的体会和经验。 这次的实验跟我们以前做的实验不同,因为我觉得这次我是真真正正的自己亲自去完成。所以是我觉得这次实验最宝贵,最深刻的。就是实验的过 程全是我们学生自己动手来完成的,这样,我们就必须要弄懂实验的原理。在这里我深深体会到哲学上 理论对实践的指导作用:弄懂实验原理,而且体会到了实验的操作能力是靠自己亲自动手,亲自开动脑筋,亲自去请教别人才能得到提高的。 我们做实验绝对不能人云亦云,要有自己的看法,这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。实验总是与课本知识相关的,比如回转机构实验,是利用频率特性分析振动的,就必须回顾课本的知识,知道实验时将要测量什么物理量,写报告时怎么处理这些物理量。 在实验过程中,我们应该尽量减少操作的盲目性提高实验效19 / 35 率的保证,有的人一开始就赶着做,结果却越做越忙,主要就是这个原因。我也曾经犯过这样的错误。在做电桥实验时,开始没有认真吃透电路图,仪器面板的布置及各键的功能,瞎着接线,结果显示不到数据,等到显示到了又不正确,最后只好找同学帮忙。 我们 做实验不要一成不变和墨守成规,应该有改良创新的精神。实际上,在弄懂了实验原理的基础上,我们的时间 C 语言上机实验心得 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而 C 语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我 们一定要学好 C语言,这对我们以后的发展是十分重要的。 说到这,上机实验当然就是一个必不可少的环节了, C 语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。为了更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们必须实际上机、编写程序。 通过实验我也发现了自己不少的问 题,这都是只看书上的程20 / 35 序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了 C语言那就大错特错了。 我主要存在以下的这些缺点: 1、 学习耐心与细心不足,如 scanf(“%d”,&n) ;中的 “&”有时候会忘了。而在最后 输出时又错写成 printf(“%d”,&n); 从而错误得输出了地址而不是我原来想要的答案。 2、 编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解 题了。 3、 4、 基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。 知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够 21 / 35 深刻。 5、 6、 有时候不够精简,有一点用处不大或者说没有也可以的文字存在。 英语水平较差,对错误的地方虽然电脑有说,但由于是英文,理解上还是存在 一点问题。 为了能更好地学好 C 语言,在今后学习中我要更多的动脑,综合运用所学,多看相关东西,多上机练习,提高电脑水平,增强自学能力,把已会的东西掌握好。 实验中我深刻意识到完成程序的编写,决不意味着万事大吉。认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期 中想要的。因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。所以程序的调试是一个技巧性很22 / 35 强的工作,它可能比编一个程序耗时更 多。由此可看出上机实践的重要性。 通过本次 C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。编程的时候有因为顺利编出程序而开心过、有因为做得比人家慢而郁闷过、有因为不知从何入手而无奈过、有因为不知错出在哪而彷徨过 ?但随着练习的增多,我对 C 语言比以前熟了很多,不再只是纸上谈兵,我都有能力独立做出一些程序,可能对于一些 “ 高手来说这不算什么,或者他们早就会了,但我依然觉得很开心,因为我跟我自己比是进步了。 当然,我还得感谢老师的指导与帮助,如果没有老师和其他同学的指点,我可能对 C 语言还是一筹莫展,在实验中遇到的大大少少的问题与所犯过的错误将是我以后的要加以注意的地方与认真审查的部分,为我奠定坚固的基石。伴随着学习的深入,我发现高深的东西还有很多很多,不懂不熟的知识还有很多,所以我不能停步,对 C语言,我以后会更加努力学习的。 实验十三 数据库 23 / 35 实验目的和要求 对于大量数据处理,采用数据库更为安全简便。例如,对于学生信息管理系统,常常需要处理学生的基本信息、课程成绩以及课程信息等,这些信息用数据库表的 形式来描述更为清晰。本实验将在列表视图的显示视图中显示学生的基本信息内容。 用 Microsoft Access XX 创建一个数据库,含有 4个数据表:学生基本信息表 student、课程信息表 course、课程成绩表score和专业数据表 special,并建立 ODBC 联接。 创 建学生课 程 成 绩表 score 的 CRecordSet 派 生类CScoreSet。 在主菜单中添加 “ 课程成绩 ” 顶层菜单,在该菜单添加 “ 添加 ” 、 “ 删除 ” 和 “ 修改 ” 子菜单。 选择 “ 添加 ” 菜单命令,弹出 “ 学生课程成绩 ” 对话框,单击 “ 添加 ” 按钮,在 score表中添加一条记录,并自动更新列表视图显示的内容。如图 所示。 24 / 35 图 学生课程信息输入及显示 图 学生课程信息修改及显示 当选定列表视图中的某个列表项后,选择 “ 删除 ” 菜单命令,弹出消息对话框,询问是否确认删除,单击 “ 确定 ” 后,当前选择的列表项所在的数据表记录被删除,并自动更新列表视图显示的内容。 当选定列表视图中的某个列表项后,选择 “ 修改 ” 菜单命令,弹出 “ 学生课程成绩 ” 对话框,对话框的内容就是当前选择的列表项中的内容,修改后,单击“ 修改 ” 按钮,当前选择的列表项所在的数据表记录被修改,并自动更新列表视图显示的内容。如图所示。 实验准备和说明 具备知识: MFC的 ODBC常用编程。 创建本次实验工作文件夹 “ Visual C+程序 实验 实验9” 。 创建数据库所在的文件夹 “ Visual C+程序 实验实习 ” 。 25 / 35 实验内容和步骤 1创建数据库和数据表 这里以 Microsoft Access XX 为例说明数据库和数据表的创建过程。 ? 启动 Microsoft Access XX。 选择 “ 文件 ”“ 新建 ” 菜单,在右边任务窗格中单击“ 空数据库 ” ,弹出一个对话框,将文件路径指定到“ Visual C+程序 实验 实习 ” ,指定数据库名。单击“ 创建 ” 按钮,出现如图所示的数据库设计窗口。 图 数据库设计窗口 图 表设计界面 双击 “ 使用设计器创建表 ” ,出现如图所示的表设计界面。其中,单击数据类型框的下拉按钮,可在弹出的列表中选择适当的数据类型。在下方的常规页面中可 以设置字段大小、格式等内容。 按表添加字段名和数据类型,关闭表设计界面,弹出一个消息对话框,询问是否保存刚才设计的数据表,单击 “ 是 ” 按钮,出现如图所示的对话框,在表名称中输入 score,单击 “ 确定 ” 按钮。此时出现一个消息26 / 35 对话框,用来询问是否要为表创建主关键词,单击 否 ” 按钮。注意:若单击 “ 是 ” 按钮,则系统会自动为表添加另一个字段 ID。 表 学生课程成绩表 (score)结构 在数据库设计窗口中,双击 score 表,就可向数据表输入记录数据。如图是记录输入的结果。 图 保存数据表 图 在 score表中添加的记录 按照上面的过程,添加学生基本信息表 student、课程信息表 course和专业数据表 special,并输入如图所示的记录。 图 各数据表添加的记录 关闭 Microsoft Access XX。 2创建 ODBC数据源 运行 ODBC组件,进入 ODBC 数据源管理器。 单击 “ 添加 ” 按钮,弹出有一驱动程序列表的 “ 创建新数据源 ” 对话框,在该对话框中选择 Microsoft Access Driver。 27 / 35 单击 “ 完成 ” 按钮,进入指定驱动程序的安装对话框,数据源名称设为 “ 学生信息管理系统 ” ,单击 “ 选择 ” 按钮将本实验中的数据库。 单击 “ 确定 ” 按钮,刚 才创建的用户数据源被添加在“ODBC 数据源管理器 ” 的 “ 用户数据源 ” 列表中。 3启动 Visual C+ 启动 Visual C+ 系统。 4创建单文档应用程序 Ex_Student 用 MFC AppWizard创建一个单文档应用程序 Ex_Student,在向导的第六步将 CEx_StudentView 的基类由 CView 改为CListView。 在 CEx_StudentView:PreCreateWindow函数添加下列代码,用来设置列表视图内嵌列表控件的风格: BOOL CEx_StudentView:PreCreateWindow(CREATESTRUCT& cs) 28 / 35 |= LVS_REPORT; / 报表风格 return CListView:PreCreateWindow(cs); 5为数据表创建 CRecordSet 用户派生类 在 Ex_Student 中添加学生基本信息表 student、课程信息表 course、课程成绩表 score 和专业数据表 special 的CRecordSet 派生类 CStudentSet、 CCourseSet、 CScoreSet和 CSpecialSet。 在文件中添加 CRecordSet 头文件包含 #include 。 6复制 “ 学生课程成绩 ” 对话框和 CScoreDlg类 复制对话框资源 IDD_SCORE。 复制对话框类文件和,并添加到工程中。 将文件前面的头文件包含 #include Ex_修改为#include Ex_。 7实现添加、删除和修改功能 29 / 35 打开菜单资源 IDR_MAINFRAME,添加 “ 课程成绩 ” 顶层菜单,在该菜单添加 “ 添加 ” 、 “ 删除 ” 和 “ 修改 ” 子菜单。 在 CEx_StudentView 类添加成员函数 DeleteAllColumn,用来删除列表视图的标题头,以便能再创建标题头显示不同的信息。 void CEx_StudentView:DeleteAllColumn() CListCtrl& m_ListCtrl = GetListCtrl(); int nCount = 0; CHeaderCtrl* pHeaderCtrl = m_(); if ( pHeaderCtrl!= NULL) nCount = pHeaderCtrl-GetItemCount(); for (int i=0;i m_(0); 在 CEx_StudentView 类添加成员函数 DispScoreInfo,用来显示课程成绩信息。 void CEx_StudentView:DispScoreInfo(CString strFilter) 30 / 35 DeleteAllColumn(); / 删除表头 CListCtrl& m_ListCtrl = GetListCtrl(); CString strHeader=学号 , 课程号 ,成绩 ,学分 ; for (int nCol=0; nCol _strFilter = strFilter; _strSort = studentno,course; (); int nItem = 0; CString str; while (!() m_( nItem, _studentno); / 插入学号 m_( nItem, 1, _course); (%, _score); m_( nItem, 2, str); (%, _credit); m_( nItem, 3, str); nItem+; (); 31 / 35 (); 在 Ex_前面添加 CScoreSet 类和 CScoreDlg 的头文件包含: #include Ex_ #include Ex_ #include #include 为 CEx_StudentView 类添加一个成员变量 m_strFilter,类型为 CString。 用 MFC ClassWizard 在 CEx_StudentView 类中映射菜单ID_SCORE_ADD 的 COMMAND消息,并添加下列代码: void CEx_StudentView:OnScoreAdd() CScoreDlg dlg; if ()!= IDOK) return; CScoreSet sSet; (); (); _course

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论