c语言编程心得(精选12篇)
一、活动背景
二、活动目的及意
通过本次活动,希望同学对C语言编程有一个重温二深刻的认识,并且认识到是“从问题到编程”的思考和工作过程,这里既要求掌握严格的科学方法,又要求谨慎灵活的工程能力。要很好地完成程序设计工作,编程者需要充分发挥聪明才智,还要有细致认真、一丝不苟的工作态度。即使将来不从事程序工作,这一课程中的锻炼也可能很重要,尤其对于理科学生,可能弥补其工程方面训练的不足。前些年的程序设计课常用PASCAL、FORTRAN 或BASIC 等语言,目前已转向C 或其
他类C 语言(如C++)。从作为入门课教学语言的角度看,没有一种语具有无可比拟的天然优势,选择时都应考虑其有利方面,也需要克服这种选择带来的不利因素。
三、承办单位
主承办单位:湖南商学院计电学院
承办单位:电信1102班
四.、嘉宾及评委:
计电学院电信班导师曹东波教授、胡松义教授、倪祖旭学长、王思金
学姐等
五、活动时间:2012年月日
六、活动地点
F202多媒体教室
七、活动形式
1主持人引出问题陈述同学所面临的困惑
2班级进行自由发言,交流在编程中的体会与技巧 3曹教授和胡教授进行解答
6赠送礼物
八、Ⅰ活动前的准备
1申请使用教室
2邀请评委及嘉宾,发请帖
3为每位老师准备笔、纸和水。
Ⅱ活动进行
1发放笔、纸和水
2拍摄人员到位
3主持人进行嘉宾介绍
Ⅲ活动后期
1活动拍照留念
2赠送礼物
3打扫卫生
九、活动负责人及策划时间
1 C语言
1.1 C语言特点
C语言在计算机语言编程中应用最流行、最广泛, 在学习中应对C语言有一点了解, 在使用过程中, C语言具有以下的特点: (1) C语言比较紧凑、操作灵活、操作方便, 没有非常严格的语法限制, 比较自由的书写程序过程, C语言有效结合了低级语言的实用性及高级语言的结构性, 功能非常强大。 (2) C语言应用范围广泛。C语言是学习其他语言程序的基础, 可植性比较强, 在多种操作系统中, 皆适用C语言, 可以灵活使用运算符, 实现编程的高效性。 (3) C语言的语法中数据结构多种多样, 简单复杂皆有, 图形处理能力甚强。 (4) C语言可以使用数据和代码分割, 具有结构式的语言特点, 程序层次清晰, 便于维护、使用及调式进行。C语言能够对物理地址进行直接访问以及各种操作。因此, C语言是学生学习计算机课程并不可少的一门知识, 但要学好C语言, 盲目的学习是不对的。
1.2 C语言的产生背景
1970年美国的Ken Thompson, 以BCPL语言作为基础, 然后设计出简单且接近硬件的B语言, 但是B语言功能比较有限, 过于简单。1972年~1973年, 美国D·M在B语言基础之上设计出C语言, C语言的出现给程序的编写带来不少便利, 而且编写程序比较自由, 吸引许多软件使用它。C语言语法里的运算和程序非常丰富, 编写程序的运算方法很多, 拥有可以实现一些高级程序都无法实现的功能, 且C语言用起来比较灵活, 在运算各种数据结构时, 不管事简单还是复杂, 都可以简单实现。C语言不仅在运算和程序编写上更加便利, 且可以直接访问地址, 并进行操作, 较快较容易的对程序进行编译以及控制。
2 学习
虽然许多学生选择计算机专业, 努力学习C语言, 但是学生仍然很难对C语言产生兴趣。C语言是计算机专业学习的基础课程, 且功能强大, 用途广泛。随着经济迅速发展, 第三产业越发越重要, 计算机相关的产业所占比重越来越大, C语言功能强大, 在计算机中越来越受到重视。
针对C语言的学习, 仅仅是课堂的理论传授远远不够, C语言理论比较丰富, 集合众多语言特点, 通过直接的感官方式教授给学生, 学生难以完全理解。如果教师能够把内容通过直观的方式展示出来, 比如让学生上机操作, 让理论与实践相结合, 提高学生对C语言的学习兴趣。
C语言中包含比较复杂的结构和算法, 许多学生难以理解, 只能简单的记忆, 但是学习效果比较低, 且学生觉得枯燥, 没有较高的学习兴趣, 在学生学习理论的同时, 应该多上机操作, 更加容易的掌握C语言的规律和方法。教师要注意自己的教学方法, 不能简单的进行实践教学与理论教学, 要关注学生, 加强学生与教师的沟通, 帮助学生理解课堂课外的C语言相关知识, 在教授知识之外, 教师要突出C语言在计算机学习中的重要性, 让学生更容易、深入的理解及分析C语言, 增加学习兴趣。
3 C语言编程的技巧
学生觉得C语言抽象、难以理解, 归根结底是没有找到学习的技巧, 对于刚入门者说, 学习C语言比较吃力, 学习任何一项技能都需要一个过程, 关键在于掌握其精髓, 掌握其中精髓再学习这门课程就容易许多。对于C语言, 编程技巧非常重要。 (1) 指针的掌握。掌握指针是C语言中比较重要的技巧, 指针虽有消耗内存的缺点, 但指针在运算中速度加快, 编程语句也更加容易, 指针的耗内存虽大, 但对整个编程而言却是微不足道。学生在学习指针这一章节时, 需加强学习能力, 除学习课堂知识之外, 可以多在网上查询资料, 进行补充, 掌握好指针这一技巧。 (2) 掌握数学知识。在学习计算机过程中, 数学知识的重要性不容小觑, 能够解决C语言运算中的许多问题, IT界有一句话叫“数学是计算机之母”, 可见数学对计算机的重要性。在C语言学习中, 逻辑思维较好的同学可以较容易的学习C语言, 进行编程前会分析, 选择更加简单的运算方法, 因此, 数学知识对学习C语言起很大作用。 (3) 掌握位运算。位运算的使用可以方便简洁代码, 提高运算效率, 较快解决问题。在计算机程序中, 位是最小数据单位, 是所有操作和运算的基础单位, 位运算是所有操作的基础运算程序。当然具体问题需要具体分析, 提高学生兴趣和编程效率, 让C语言的应用更加广泛最为重要。
4 结语
在学习C语言的过程中, 学生应准确了解C语言的特点, 学习并掌握C语言的编程技巧, 提高学生的学习兴趣, 学习更加具有目的性, 提高C语言的学习效率以及学习质量。培养学生的编程能力, 能够更好的服务社会。
摘要:随着时代的发展, 信息技术发展迅速, 计算机人才被社会所大量需求。因此大学中大都设立计算机专业, 为社会培养所需人才, C语言是计算机专业的重要课程之一, 是大一课程学习中比较基础的一门课程, C语言功能强大, 对于学生以后专业基础起到很大的作用, 但是学生学习效果并不是很好, 即使努力学习也没有得到预期的效果。笔者对C语言编程技巧在C语言学习进行研究, 并且提出解决措施。
关键词:C语言,学习编程,语言特点
参考文献
一、选题
在讲解C语言第三章C程序的流程设计—算法—伪代码与逐步细化的程序设计方法这个部分时,笔者选择了百鸡百钱问题这个例子,这是我国古代数学家张丘建在《算经》中提出的问题:公鸡一只五钱,母鸡一只三钱,小鸡三只一钱,问用百钱买百只鸡,公鸡、母鸡、小鸡各能买几只?选择这个例子是因为这是一个C语言中非常典型的算法,而这个问题的复杂性超出了大脑直接思考和处理问题的能力范围,需要我们把其中的问题细化,逐步分析。用Flash把其中的过程制作成课件,并以动画的形式直接演示出来,学生会更容易接受一些。
二、分析
从整个问题来看,我们可以把问题列一个方程:公鸡数+母鸡数+小鸡数=100只;5元×公鸡数+3元×母鸡数+小鸡数÷3元=100元。显然,其解是不定的,但从实际情况分析,公鸡、母鸡和小鸡都应为整数,所以实际是求不定方程组的整数解。只有对公、母鸡、小鸡的可能只数逐一进行测试,直到全部可能只数都测试完毕为止。从问题中给出的条件,可以得出三个变量的取值范围:公鸡,0-19中的整数;母鸡,0-33中的整数;小鸡,0-100中的整数。这样,公鸡、母鸡、小鸡可能的组合方式有20×34×101=68680种,对每一种组合方式,再测试是否符合“百钱、百鸡”这两个条件,若符合则该组合就是问题的一个解。可以用循环程序设计中把复杂问题的求解过程转换为单一操作的多次重复。
三、设计
这一部分非常重要,要把课件分成具体的几部分,并对每一部分进行细化设计。具体可分为:片头—提出问题—分析问题—解决问题—片尾。片头部分:用flash制作一些效果,把本节课的课题演示出来。从提出问题到解决问题我们使用一个小故事来表现,这样可以更加吸引学生的注意力。提出问题:可以编成是老婆给老公拿百钱,让他去市场买百只鸡。到了市场,卖鸡的人告诉他公鸡五元一只、母鸡三元一只、小鸡一元三只,问他怎么买?通过两人对话把问题提出来。分析问题:在此部分中讲述老公不知道怎么买,来了一个有学问的人来帮他分析这个问题的故事,其中的分析过程,可以用公鸡、母鸡、小鸡分别爬三个有刻度的杆来解释其中的逻辑关系,每只鸡所对应杆上的刻度,就是相应的取值范围。用小鸡爬杆有趣的动作,不但可以降低了课堂内容的难度,还增加了趣味性。解决问题:在这一部分有学问的人给出了答案1:公鸡=0,母鸡=25,小鸡=75;2:公鸡=4,母鸡=18,小鸡=78;3:公鸡=8,母鸡=11,小鸡=81;4:公鸡=12,母鸡=4,小鸡=84。片尾:买鸡的人得到答案高兴地把鸡买回家去了,再用一些文字注明作者。
四、制作
1.准备制作课件所需要的素材
用画图工具画出故事中需要的人和物,如古代的两个人(一男一女,老公和老婆)、卖鸡的人、有学问的人、公鸡、母鸡和小鸡,把其中的人和物制作成元件,以方便在Flash中多次使用。还可以上网下载一些图片、背景音乐等。
2.分场景
根据前面的设计,在Flash中设置五个场景,在每个场景中制作相关的内容,在其中可以综合运用Flash中的形状补间动画、动作补间动画、引导动画、遮罩动画等。
3.设置按钮
在每个场景上制作向上、向下和返回主页的按钮,并在每个按钮上编写相应的程序,使按钮具有相应的功能。在分析问题的场景中,要制作一个“重播”按钮,在讲解的时候让分析问题的过程可以重复播放。
4.配音乐
为篇头篇尾加上背景音乐,背景音乐要舒缓,否则会喧宾夺主;为故事中的人物配音,可以用Windows中的录音机来录制。
讲课时,应用Flash课件以图文并茂、声像并行、动静结合的表现形式大大缩短了学生的思维领域中对抽象事物理解的距离。用大屏幕的演示详细讲解一下整个过程,并且尽量把问题的提出、分析、解决等内容都编成一段小故事,在轻松愉快的气氛中,在不增加学生负担的情况下,让学生更快、更清楚地掌握课堂内容,提高学生学习的积极性,也起到了优化教学过程、提高课堂效率的作用。
在科技高度发展的今天,计算机在人们生活、学习和工作中的作用越来越突出。我们都知道C语言是一种计算机语言,而作为计算机专业的我们学习它,就更有助于我们更好的了解计算机,与计算机进行交流,因此,C语言的学习对我们尤其重要。
说实话这个学期刚开始学C语言的时候,很感觉迷茫,对里面的好多东西很陌生,在操作运用的时候感到很棘手,毕竟,万事开头难嘛。在此之前从没有接触过C语言,有点摸不着头脑。可是在上机过后,我觉得编程是很有趣的一件事,哪怕你编出的只是一个很简单的程序都会让你很有成就感。我知道要学好C语言不容易,可是我决定完成这件不容易的事。
在课堂上老师从最基本的跟我们讲起,要学好C语言就必须要先懂得最基本的语法知识,看课本是必需的。我觉得看不懂也没关系,尽力去理解就好了,在对知识有了一个大致的了解过后,就要上机实践。学习C语言一定要动手,只看不做,眼高手低是不行的。
最开始我们打书上的例题,熟悉程序,慢慢的开始试着编程。老师说过在编程时要理清自己的思路,然后再转换成C语言中的语言,这个时候就更要动手了,只有通过上机操作才能验证自己程序的正确性。执行程序,不要害怕错误,其实,我觉得错误是好的,知道了自己所学知识的不足,并根据提示改正程序中发生的错误,一种成就感油然而生,觉得自己的付出都是值得的。
我觉得良好的编程习惯是学好C语言的重要因素,只有勤动手,多动脑才能学好C语言,光说不练是不行的。在学习的时候,不会的一定要问明白,可以求助于老师,同学,不要自己一个人钻牛角尖,既浪费时间又学不到东西。
上课的时候也一定要认真听,老师讲的肯定是最重要的,错过了就是一大笔损失,认真听讲才可以提高学习效率嘛。另外我觉得在编程之前,要把自己的想法写在纸上,如果是简单一点的程序不需要这样,如果程序比较复杂,就写下来,这样可以让思路更加清晰。输入程序时一定要认真,不要把“,”与“;”混淆,用scanf的时候不要忘记“&”,用“switch”要记得“break”,用if,while的时候注意不要加“;”,“{}”“()”一定要配对,不要多也不要少一半,“=”与“==”的区别要清楚,要勤查优先级,要记住一些基本的,例如两个值之间的调换怎么写等等。
C语言实践心得体会范文在科技高度发展的今天,计算机在人们当中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交换,因此,c语言的学习对我们特别重要。在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在应用起来的时候还是感到很辣手,究竟,万事开头难嘛。由于时间的关系,我们的这次实践课程老师并没有给我们具体的先容,只是给我们简单的先容了几个比较重要的实际操纵。包括了程序模块处理。简单界面程序。高级界面程序。程序的添加修改。用程序做一元线性回回处理和用c语言程序来画粒度散布图等这几样比较重要的时间操纵。上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正把握它。对程序设计语言的学习目的,可以概括为学习语法规定、把握程序设计方法、进步程序开发能力,这些都必须通过充分的实际上机操纵才能完成。学习c程序设计语言除课堂讲授之外,必须保证有很多于课堂讲授学时的上机时间。由于学时所限,课程不能安排过量的同一上机实验,所以希看学生有效地利用课程上机实验的机会,尽快把握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。课程上机实验的目的,不单单是验证教材和讲课的内容、检查自己所编的程序是否是正确,课程安排的上机实验的目的可以概括为以下几个方面: 1.加深对课堂讲授内容的理解课堂上要讲授很多关于c语言的语法规则,听起来十分枯燥无味,也不轻易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际题目,又必须把握它。通过屡次上机练习,对语法知识有了感性的熟悉,加深对它的理解,在理解的基础上就会自然而然地把握c语言的语法规定。对一些内容自己以为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部份学生是初次接触程序设计,缺少程序设计的实践而至。学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际题目。即把c语言作为工具,描写解决实际题目的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否是把握c语言、自己编写的程序是否是能够正确地解题。通过上机实验来验证自己编制的程序是否是正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。由于在这类思想支配下,可能你会想办法往掩盖程序中的错误,而不是尽可能多地发现程序中存在的题目。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些题目,可以逐渐进步自己对c语言的理解和程序开发能力。
“; fori1;i10;i {printf“a[d]“,i; scanf“d“, } printf“
“; printf“原数据为
“; fori1;i10;i printf“5d“,a[i]; printf“
“; fori1;i9;i {mini; forji1;ja[j] minj; sa[i]; a[i]a[min]; a[min]s; }printf“排好序的数组为
“; fori1;i10;i printf“5d“,a[i]; printf“
关键词:C语言,scanf函数,格式输入
C语言本身不提供输入语句, 输入操作是由函数实现的。scanf函数就是最常用的一个, 它是C语言函数库中的“格式输入”函数。
C语言中格式输入的规定比较繁琐, 用得不对就得不到预期的结果, 而输入又是最基本的操作, 几乎每一个程序都包含它。在这几年的教学实践中, 我发现不少学生由于掌握不好这个知识点而浪费了大量调试程序的时间, 也为进一步学习造成了障碍, 因此, 这个知识点就成了教学的重点和难点。不过根据这几年的教学经验, 我觉得只要遵循规律, 精讲多练, 学生完全能够掌握这个知识点。下面我将这方面的体会进行一些归纳和总结。
首先, 要准确讲解scanf函数的一般格式, 这是教学的前提和基础:
scanf函数一般格式是:scanf (格式控制, 地址表列) ;
“格式控制”是用双引号括起来的字符串, 它包括两种信息:
a.格式说明, 由“%”和“格式字符”组成, 它的作用是将输入的数据转换成指定的格式。
b.普通字符, 即需要原样输入的字符。
“地址表列”是由若干个地址组成的表列, 可以是变量的地址, 或字符串的首地址。
如输入dog坻
则‘d’送给a, ‘’送给b, ‘o’送给c, 因为%c只要求读入一个字符, 后面不需要用空格作为两个字符的间隔, 因此‘’作为下一个字符送给b。
d.在输入数据时, 遇到以下情况时该数据认为结束。
(1) 遇空格, 或按“回车”或“跳格” (Tab) 键。
(2) 按指定的宽度结束, 如“%3d”, 只取3列。
(3) 遇非法输入。
e.可以指定输入数据所占列数, 系统自动按它截取所需数据, 如:
系统自动将123赋给a, 将456赋给
b, 此方法也可用于字符型:
如果从键盘连续输入3个字符abc, 由于ch只能容纳一个字符, 系统就把第一个字符'a赋给ch。
f.输入数据时不能规定精度, 例如:
这是不合法的, 不能企图用这样的scanf函数输入以下数据而使a的值为12345.67.
最后, 还要补充的一点就是在使用C语言库函数时, 要用预编译命令“#include”将有关的“头文件”包括到用户源文件中, 在头文件中包含了与用到的函数有关的信息。但考虑到scanf函数使用频繁, 系统允许在使用此函数时可不加#include命令。
【摘要】本系统主要研究C语言编程题目中“编译运行结果对比”、“编译错误原因恢复与评阅”、“得分点分割正则动态测试”三种手段,将研究内容运用到自动阅卷系统中,实现对编程题目的自动评分,并实现基于J2EE技术的具有在线考试、自动评分等功能的C语言编程题目自动阅卷考试系统,提高阅卷的准确度的同时能够节省大量的人力物力财力。
【关键词】C语言;编程题;自动评分
随着计算机技术的发展以及互联网的普及,办公自动化已无处不在。作为一门基础课程,C语言考试应用系统也给批阅试卷的工作人员带来了很大的工作量,自上世纪六十年代起,国内外就陆续出现了许多关于语言类课程考试的软件系统,虽然很多已具有基本的随机答卷、上机考试及自动评阅等功能,但只针对客观题,因自然语言的刻画、人工智能、模式识别等核心技术发展缓慢,制约了编程题目阅卷系统研究发展。所以,本系统针对C语言编程题目进行整体规划,致力于做出更精确的C语言编程题自动阅卷的方法,填补自动阅卷软件开发空白,减少人工操作的资源浪费。
1.系统运行环境
智能C语言考试系统、自动评分系统的运行环境是根据我校现有的教学机房的硬件环境(每个机房有70台学生机和一台教师机)规划的,教师端和学生端都采用window 7操作系统,每个机房都采用校园公共网络提供的局域网,运用Myeclipse开发环境、MySQL数据库建立一套具有在线考试、自动评分等功能的C语言编程题目自动阅卷系统,并辅以AJAX技术,确定了用FreeMarker表现层技术增强用户与系统间的交互,加快系统运行效率,同时,尽可能细化评分点,增加准确性。
2.系统运行模式的选择
系统采用B/S三层架构模式,系统的用户可通过Internet网络,客户端不需要手动安装软件,只要有浏览器就可以对系统进行访问和一般操作,本次对阅卷系统主要分析了的C语言编程题目评分功能,充分考虑到系统对灵活性和准确性的要求,并保证安全性的前提下,本系统采用B/S结构以达到轻客户端需求。
3.系统研究内容
通过研究C语言程序结构,从编译原理角度设计评价模型,通过内部运行编译器对比动态运行结果,并且本课题创造性提出利用关键字对比、控制结构判断和正则表达式匹配三种静态测试技术作为结果比对方案的补充,既保证了程序判断的正确性,又确保了相对公正性。
编译结果对比要实现程序内部对C语言编译器的动态调用技术,通过比对测试结果和标准答案进行评分,对于不能编译部分,研究关键字库建立、控制结构规范化和正则表达式建立的具体方案。
其中重点研究C语言编程题目评分标准的两个方面:一是如何检验运行结果的正确性,二是如何评价程序代码包含的分点。
为突出本系统对主观题的评分机制,在试题主观题程序可运行以及不可运行的情况下分别给出了相应的评分策略,以此来一步步细化评分机制。
4.评分核心模块设计
详细设计自动阅卷系统中的关键技术——程序题评分。系统首先采用动态测试技术,编译运行待评价程序,和标准答案进行对比给出分数;需要数值型输入参数的程序,通过均匀分布随机数给出随机输入;需要字符型输入参数的程序,首先在数据库中保存预选文字段,然后随机选取其中的一部分给出随机输入。对于编译运行报错的程序代码,课题会采取错误恢复技术,通过编译信息给出的错误位置尝试以标准答案修复代码,从而给出扣分点。最后对于不能编译运行的代码片段,系统提出关键字对比、控制结构标准化和提取、正则表达式规则匹配相结合的静态测试方法,加入权重处理,分析得分点给出更全面客观的评分结果。
通过对软件模式的对比和分层架构模型的研究,系统拟采用B/S结构,方便用户在线答题和管理操作;在具体实现技术方面,拟采用J2EE技术和SSH开源框架——利用Java语言提供的公开接口开发调用C语言编译器模块和正则表达式匹配模块,利用MySQL数据库完成题库和答案库的建立和开发工作,利用Ajax技术提高系统的整体响应速率,利用FreeMarker表现层技术增强用户与系统之间的交互。
建立计算机矫正机制和完善的评价方案,并对试题多次进行人工阅卷与机器阅卷的对比测试。
5.数据库设计
因需要评测本系统自动阅卷功能和人工阅卷的准确度,给出测评结果,并对仍存在的问题和不足提出进一步改进方案;特别是对系统不能正常评分的特殊题目,建立特例题库,以便在今后的工作进行研究并从中提出新的解决方案。
考生提交试卷首先由c语言编译器自动编译后生成可执行文件并运行输出结果,进行评阅步骤校验结果时,通过试题编号(id)调用试题表数据,对比答案进行准确性校对,调用纠错参考库数据,比对出错原因并根据错因扣除相应分数,通过模糊匹配替代出错关键字,迭代匹配错因至无错,若迭代五次还未改正视为崩溃性错误,不可弥补,判定本段分数为零崩溃性错误,不可弥补,判定本段分数为零,通过题目编号获取相应评分关键点库,通过正则表达式匹配得分点,通过得分点数量给出相应分数,完成试卷评阅。
当程序不能正常编译运行时,系统判定进入系统纠错,系统自动运行修复性算法,代码中个别关键字错误,为此我们把c语言中所有的关键字整理出来,建立关键字库,对错误的关键字进行模糊匹配,通过字符的顺序、相同字符的数量、键盘键位的keycode尽可能的匹配出相似度最高的的关键字替换错误的关键字。
纠错主要是语句拼写错误,我们分了下面三种情况:
1)测试用例由测试输入数据和与之对应的预期输出结果组成,人们常用白盒法和黑盒法设计测试用例,其中白盒法主要是为了检查是否有数据结构或外部数据库访问错误等,对比通过单元测试的模块或组件、编程规范、集成测试来检查测试的准确性。
通过正误判断匹配正误判断表进行结果判定,判定结果是否符合题目,若是则给分,否则进行结果范围判断及结果属性判断,比对结果是否适用本题范围,并进行分数评估。
2)本表主要有三个主要信息id、name、keyword。分别用来存储错误的id、错误的名称、题目中的关键字。Id的数据类型为int(整型),name的数据类型为varchar(字符型),keyword的数据类型为varchar(字符型),id需要主键非空自增,name与keyword非空。通过建立本数据库表可以实现对错误信息的收集归类,同时可以实现判断系统中出现的错误的功能。
定位捕捉错误点,抛出错误原因并与数据库进行比对,并根据错因给予相应分数,运用模糊匹配寻找替代关键词,进行替代继续检查错误,若连续替代五次后仍然不能进行下一步骤视为程序崩溃行错误,不可弥补,判定本段分数为零。
3)正则表达式,又称正规表示法、常规表示法(英语:RegularExpression,在代码中常简写为regex、regexp或RE),正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,在本字段里,正则表达式通常被用来检索、替换那些符合模式的程序段,进行分步得分。
本数据库包含关键字类库,通过正则表达式匹配关键词多寡,大概率的确定了答题者的思路范围及答题思路的正确与否,给以步骤分,极大的提高了批卷的人性化,拉近了机器阅卷与人工阅卷的阅卷水平,更有说明行的体现了机器阅卷更好的使用性。
C语言考试系统已普遍在各高校使用,对于客观题方面,有了相对完善公平的系统,但是在自动评分方面,还有很多不足之处,有待改善,本系统就是针对这一空白区域,设计公平而相对更准确的算法,主要对C语言考试系统中的编程题部分进行得分点分割,对考生的程序一步步细致分析,做到该得分的地方给考生相应的分数,这样避免了某一点小错误导致的大幅度扣分的不公平性,同时,将系统应用到学生的日常学习中后,能够更好地检验教师的教学成果,查找教学过程中需要注意的地方,对于学生,也能够更好地发现自己的错误,及时改正,这样,在学习的过程中,在保证公平的前提下,培养学生注意细节的习惯,最重要的是,应用到高校的二级C语言考试后,能够更好的给考生更公平更合理的考试成绩,同时也使得阅卷更加节约、方便、快捷,这也顺应了如今社会计算机行业的飞速发展,提高办公自动化的程度及效率。
参考文献
[1]K.A.Redish,W.F.Smyth.Pragram style analysis:a natural by-product of prograrn compilation[J].Cornnnunications of the ACM,1986.(3):126-133.
[2]Yasuhiro Ajiro,KazunoriUeda.Kima:An Automated Error Correction System for Concurrent Logic Progrrams.Automated Software Engineering 2002.9(2):67-94.
[3]王甜甜,基于语义相似度的编程题自动评分方法的研究,哈尔滨工业大学硕士论文,2001;1-52.
[4]李永浩,居于程序理解的编程题自动评分系统愤愤研究与应用,哈尔滨工业大学硕士论文,2001:1-60
[5]王华东.刘国柱.基于局域网下C语言考试系统的设计与实现[J].计算机与信息技术,2006.
c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流。其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,Unix,Linux,Mac,os/2,无一例外,哪一个不是C语言写的?很多新型的语言如,C++,Java,C#,J#,perl...都是衍生自C语言。掌握了C语言,可以说你就掌握了很多门语言。因此,c语言的学习对我们尤其重要。
在这之前,我已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,而且由于时间间隔的关系,对里面的好多东西还是很陌生的,在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习C程序这门课一个月了,在大学里C语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。所以对于我这个现在专攻软件专业的学生来说当然十分重要,老师在第一见面时说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个月的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。
在学习一月C语言的过程中,我也在慢慢探索怎样才能学好C语言,并总结了一点经验:
要了解C语言就要从语法基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。在C语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以我们在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。这些都是语法基础也是C语言的基础如果把它们都了解很好了,那么你编起程序来就很得心应手了。比如说IF ELSE 和 SWITCH CASE 这两种条件语句都是用来判断执行功能的,那我要什么时侯用IF 什么时侯用 SWITCH呢?如果你很好地了解它们的结构和作用的话那么就知道:若它的条件分支是多个而且条件的值是整数或是一个字符值时就会选SWITCH而不会选IF。因为如果条件分支太多时要用IF语句,这样一定会出现IF的嵌套,如果IF的嵌套越多时程序的开销就会随着增大,这样对整个程序的运行效率就大在降底。而SWITCH就不同,它只要比较一次就可以找出条件的结果比起嵌套IF它的效率就大大的提高了很多。不过SWITCH也有它的约束条件,就是它的条件值一定要是一个整型数或是一个字符值,所以碰到它不能解决的问题时我们也会通常使用IF语句,毕竟IF语句它使用起来也比较方便用的范围也比较广。所以说了解语法规则是很重要的,如果没有一个良好的语法基础是很难编出一个好的程序!学习好基础后我们就可以开始来编程了。
后期的重点要转移到掌握编程的思路和基本算法上来。多做习题,找一些经典例子尝试自己编写,写程序切忌半途而费,想到一个思路,就要按自己思路把它写完,就算错了,也可以让自己了解为什么这样做会错?错在哪里?会出什么结果?以后自己也很难在这个地方犯同样的错误。当学到一个新的知识点,就试着把它运用到以前做的习题上,不但巩固了以前学的内容,也更加能加强新知识的理解。
下面是对C语言中有许多重要知识的总结:
1、一些基本的函数和基本数据类型的应用。其中,基本数据类型分为整型、浮点型、字符型、枚举类型。基本函数包括输入输出函数。
2、把运算符的优先顺序排列清楚,要分清楚哪个先运算,哪个后运算。
3、在编程之前要考虑好程序的算法,写出流程图,这样才能更加快速的、有效的编程。
4、要分清楚各个变量的生存期和作用域,不能发生混淆,以致发生错误。
5、数组和指针是c语言的经典之处,可以通用,并且互相转换,具有非常强大的功能,但是使用不当的话,会造成程序出错,打乱原有程序的规律,使可读性明显变差。
6、结构体也是常用的一种数据类型,它的功能也比较强大,相对于指针而言,结构体掌握起来比较容易理解和使用。
7、对于文件的操作是非常关键的,把输入的数据保存起来,下次还能够使用,这才是关键问题。所以对文件操作是否成功,使程序是否编制成功的重要因素。
这次学习中,我的收获还有就是学会了用流程图来表达自己的想法,并根据流程图来逐步实现程序的功能。开始的时候,我画流程图很是困难,需要一个多小时才能清楚的根据自己的想法画出图来,后来画多了,就更加了解它的功能,十分得心应手,能够比较快而准确的画出来。
想学好C语言,交流是必须的,很多细节的错误或者算法上的小瑕疵往往是当局者迷旁观者清,这时候果断与身边人进行交流是明智的选择。而且在学习的过程中,几位学员之间相互交流学习心得可以快速学习,事半功倍。
学习C语言就是要经过上机上机再上机,交流交流再交流。才能前后融会贯通,积累所应该掌握的知识。C语言是这样,其他语言也是这样,从基本抓起,多动手,多动脑,不懂就问,注意平时积累。
8.1 在定义的时候,*ap中的‘*’是指针类型说明符;
在进行指针预算时,x = *ap 中的‘*’是指针运算符。8.2 如果在已定义好的指针变量,并引用,即
int *ap, int a;ap = &a;则在进行指针运算的时候:
(1)*ap与a是等价的,即 *ap就是a;
(2)&*ap:由于*ap与a等价,则&*ap与&a等价(地址);
(3)*&a:由于&a = ap,则*&a与*ap等价,即*&a与a等价(变量);(4)*ap++相当于a++。
8.3 指向数组的指针变量的定义,应用,赋值:
int a[10];int *app;则有两种方法:app = &a[0];或 app = &a;(1)app+I 或a+i就是数组元素a[i]的地址;(2)*(app+i)或 *(a+i)就是元素a[i]中的内容;
(3)指针变量也可以带下表,即app[i]与*(app+i)等价。8.4 数组和指针可以互换,但在代码执行的效率上却大不相同。用数组找元素必须每次计算元素的地址,效率不高;而用指针则直接指向某个元素,不必每次计算地址,可以大大的提高运算效率。8.5 关于指针的运算:
(1)p++(或p+=1):使指针p指向下一个数组元素,地址加1;
(2)*p++:先得到p指向的变量值,再执行p加1,指向下一个数组元素;(3)*++p:先使p加1,指向下一个数组元素,再去p指向的变量值;(4)(*p)++:表示p指向的变量值加1;
(5)若p指向当前数组中的第i个元素,则:
(p--)与a[i--] 等价:先执行*p,然后p自减;(++p)与a[++i] 等价:先执行p自加,再执行*p;(--p)与a[--p] 等价:先执行p自减,再执行*p。
8.6 指向多维数组:
定义一个二维数组:a[3][4];定义一个指针变量:(*p)[4];(注意:列数相同(第二维相同))使指针变量指向数组:p = a;此时: p与a等价:指向数组a[3][4]的第0行首地址;
p+1与a+1等价:指向数组a[3][4]的第1行首地址; p+2与a+2等价:指向数组a[3][4]的第2行首地址;
而:
*(p+1)+3与& a[1][3]等价,指向a[1][3]的地址;
*(*(p+1)+3)与a[1][3]等价,表示a[1][3]的值; 一般的:对于数组a[i][j]来讲,有
*(p+i)+j相当于&a[i][j],表示第i行第j列元素的地址; *(*(p+i)+j)相当于a[i][j],表示第i行第j列元素的值。
8.7 指向结构体:
如果指针p指向结构体数组msg1[0]的首地址,则:
(1)(*p).flg与p->flg和msg1[0].flg三者完全等价,即(*p).成员名 与p->成员名 以及 结构体数组元素成员名三种形式是等价的;
(2)p+1:使指针指向结构数组msg1[0]的下一个元素msg1[1]的首地址;(3)由于指向运算符->的优先级高于自加运算符++,则:
(++p)->flg:先使p自加1指向msg1[1]的地址,再指向msg1[1]的flg成员值;(p++)->flg:先得到msg1[0].flg的值,再使p自加1指向msg1[1]的首地址;
关键词:C语言;C语言学习;C语言技巧
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)12-21713-03
Shallowly Discusses the C Language Learning Skills
CHEN Wu
(Electronic Information Institute of Yangtze University, Jingzhou 434023, China)
Abstract:C language as a broad international popular computer language, Over the years we have been like to learn but difficult to learn. This article is Based on a brief introduction to the C language, combined with years C language learning experience of the author, analysis of the skill of learning C language and participation computer rank test.
Key words:C language; C language studies; the C language skill; C program
1 学习C语言的意义
一提起C语言,大家就有说不出的忧与喜,为什么呢?很多人都认为它难学,但如果学进去了,就会觉得其乐无穷。
在学习C语言之前,我们先了解一下C语言的发展史。C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的DEC PDP-11计算机上使用。它由早期的编程语言BCPL(Basic Combind Programming Language)发展演变而来。在1970年,AT&T贝尔实验室的 Ken Thompson根据BCPL语言设计出较先进的并取名为B的语言,最后导致C语言的问世。随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。
C语言是国际上广泛流行的计算机语言,既可以用来写系统软件,也可以用来写应用软件。许多著名的软件,如DBASEⅢ PLUS、DBASEⅣ 都是由C 语言编写的。学好C语言,可以为以后学习其他语言打下一个良好的基础,比如网络编程语言PHP的绝大部分内容与C语言相同,如果学过C语言,那么再学PHP就会非常轻松。
2 TC2.0的使用方法
TC2.0是TURBO C2.0的简称。Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司在1987年首次推出Turbo C 1.0产品,1988年,Borland公司又推出Turbo C1.5版本,增加了图形库和文本窗口函数库等,而Turbo C 2.0则是该公司1989年出版的。TC2.0下载好后,要安装在C盘的根目录下,也就是地址C:TC下。安装好后,打开TC的应用程序,将出现以下界面:
其中顶上一行为Turbo C 2.0主菜单,中间窗口为编辑区,接下来是信息窗口,最底下一行为参考行。这四个窗口构成了Turbo C 2.0的主屏幕,以后的编程、编译、调试以及运行都将在这个主屏幕中进行。其实,上面这么多的菜单栏,只要掌握几个功能就行了。首先,按F10键,进入主菜单,用键盘上的“←”和“→”键可以选择菜单中所需要的菜单项,被选中的项以“反相”形式显示(如菜单中的各项原来是以白底黒字显示,选中后就会改为黒底白字显示)。此时按回车键或者“↓”键,就会出现一个下拉菜单。开始选择File的下拉菜单中的new选项,创建一个新的文件,当把源程序编写好后,按F9键,完成编译和连接,这时屏幕上会显示编译或连接时有无错误的信息框,按任意键,信息框消失,光标停留在出错之处。修改完毕后,再按F9,再次进行编译与连接,直到不再显示出错为止,再按Ctrl+F9组合键,系统就会执行程序,如果需要输入数据,则应从键盘输入数据,按回车键后,再按Alt+F5查看结果。最后选择File下拉菜单下的Save或者Save as保存,Save是保存在默认目录下,Save as是自己选择目录保存。最后按Alt+X关闭窗口。在使用TC时一定要习惯使用键盘,虽说有些版本的TC可以使用鼠标进行操作,但在计算机二级考试中的TC可不能用鼠标。再提一点,就是TC2.0与TC3.0的区别,最明显的是在TC2.0中有很多头文件不用加上去,但用TC3.0编写程序时,在每个程序的开头,都要加上#include(stdio.h),如果要进行算术运算,就要加上#include(math.h),而这些在TC2.0中都不需要加。
3 C语言内容概述
C语言的内容大致可以分为这么几块:(1)C语言的运算符与运算顺序;(2)C语言的三种基本程序结构,顺序,选择,循环;(3)数组;(4)函数;(5)指针;(6)结构体与共用体;(7)文件。本文针对这些内容,每一块简要介绍几句,也许对大家的C语言学习有些许帮助。
3.1 C语言的运算符与运算顺序
学好C语言的运算符和运算顺序,这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些運算也就不困难了,有些运算符在理解后就会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用时再记不迟。
3.2 C语言的三种基本结构
C语言的三种基本结构是构成程序的最基本的框架,顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如选择结构中的复合语句、循环结构中的循环体等。在学习选择结构时,要注意它的嵌套使用,也就是一个if语句中又有一个if语句,在if的判断语句中要注意一个问题,就是=与==的区别,比如if(b=1)与if(b==1),在执行完if(b=1)后,b的值为1,而执行完if(b==1)后,b的不变。在循环语句中,要注意break与continue的用法与区别,break语句是使程序从循环体中退出,从而结束循环;而continue语句是结束本次循环,进入下一个循环。
3.3 数组
数组就是一个同类元素的集合,也就是说,一个数组中的元素必须是同类型的,数组主要有一维数组与二维数组,而二维数组的本质就是一维数组,说通俗一点,二维数组就是把一维数组拆成了几行。要注意对二维数组的几种定义与初始化的方法:
(1)可以只对部分元素赋初值,未赋初值的元素自动取0值。
例如:int a[3][3]={{1},{2},{3}}; 是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值为:1 0 0 2 0 0 3 0 0。int a [3][3]={{0,1},{0,0,2},{3}}; 赋值后的元素值分别为 0 1 0 0 0 2 3 0 0。
(2)如对全部元素赋初值,则第一维的长度可以不给出。
例如:int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为:int a[][3]={1,2,3,4,5,6,7,8,9}。
C语言中,只能单个引用数组元素,而不能一次引用整个数组元素,在对数组进行引用与赋值时,要学会使用循环语句。还有一点就是要注意把字符串赋给数组的几种方法。
3.4 函数
函数是C源程序的基本模块。从函数定义的角度看,函数可分为库函数和用户定义函数两种。C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。函数定义的一般格式:
[数据类型] 函数名([形式参数])
{类型说明;
语句;}
函数一般都有返回值,用return语句返回返回值。要学会函数的递归调用与嵌套调用,注意函数的值传递与地址传递。
3.5 指针
有人说,指针是C语言的灵魂,它C语言中广泛使用的一种数据类型,学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要做到这些,指针也是不难掌握的。假定P是指针,那么P就是指针变量,它的内容是地址量,*P是指针的目标变量,它的内容是数据,&P是指针变量占用的存储区域地址。把整型变量a 的地址赋予p可以有以下两种方式:
(1)指针变量初始化的方法
int a;int *p=&a;
(2)赋值语句的方法
int a;int *p;p=&a;
不允许把一个数赋予指针变量,故下面的赋值是错误的:int *p;p=1000; 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。指针与数组的联系也是十分密切的。有如下例子:
int *p,s[10];
P=s;
可以用&s[i],s+i,p+i来表示s[i]的地址。
int *p,s[10][10];
p=s;
可以用&s[i][j]和p+i*10+j来表示s[i][j]的地址。
把字符串的首地址赋予指向字符类型的指针变量。例如:char *pc;pc="c language"; 或用初始化赋值的方法写为:char *pc="C Language"; 这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量,要特别注意指针作为函数参数时,可以在调用一个函数时得到多个由被调函数修改的值,还有返回指针的问题,许多库函数都是返回指针值,在调用时一般都要设立相应的指针来接受返回值。
3.6 结构体与共用体
结构和联合是两种构造类型数据,是用户定义新数据类型的重要手段。要学会结构体与共用体类型数据的定义方法和引用方法与用指针和结构体构成链表,链表的建立、输出,这些是以后编写一个大型程序必不可少的。
3.7 文件
C系统把文件当作一个“流”,按字节进行处理。C文件按编码方式分为二进制文件和ASCII文件。C语言中,用文件指针标识文件,当一个文件被 打开时,可取得该文件指针。文件在读写之前必须打开,读写结束必须关闭。文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。
4 C语言的学习技巧
有人说,C语言的学习就是一个体力活,也就是说,要勤上机。对此,笔者深有感触,可以说学习C语言的过程就是上机的过程。在学习C语言的第一个星期,笔者花了三个小时看书,十五个小时上机。那时,刚接触C语言,不知道从何下手,但笔者悟出了一个道理,就是学习任何一种语言,都要从软件方面着手。到网上查阅资料后,找到了TC2.0,下载安装好后,就照着书本操练起来。当时,笔者对C语言的语法一窍不通,就是照着书一个字母、一个字母的往上敲,边敲边看书上对这个程序的解释,敲完后,就运行程序,但界面上显示在程序中还有几处错误,又照着书一个一个字地对,发现不是这儿少了一个分号,就是那个单词打错了,改过来再次运行就成功了。有时,一个程序调试了半天就是找不到错误所在,就有点泄气了,但是,万事开头难,只要度过了这个难关就好了。就这样,不停的敲程序,不停的改,逐渐有了些感觉。学习就是要有兴趣,有兴趣了就可以学好任何东西。在对C语言地一些基本的语法有所了解后,就尝试着对书上的程序进行一些改动或者自己编写一些小程序,看看改了某个地方后程序会发生什么变化,如果发生了变化,就考虑为什么会发生这些变化,如何消除这些变化,就这样对这些程序进行剖析,对C语言有了更进一步的了解;有时,当脑海中有了某些想法时,就在计算机上进行模拟,当然这些想法有时会成功,有时会失败,每当成功了,就有一种成就感,失败了也不气馁,这样对C语言的兴趣逐渐浓厚起来了,有时一下课笔者就往机房跑,把自己又有的想法与疑惑到电脑上进行试验。学习C语言时,不要怕看长程序,自己多分析几个长的程序后,再去看那些短的程序时,一眼就可以看出程序的目的。
下面再来谈一谈计算机二级考试。全国计算机二级考试每年四月份与九月份各举行一次,由笔试与机试两部分组成,笔试120分钟,机试60分钟,笔试部分又有两部分组成,公共基础知识与C语言程序设计知识,只有选择题与填空题。机试只有三道题,填空,改错与程序设计。笔试只要把历年的考试题做完就可以了,而机试是从一百套题中抽出来的,那一百套题的題库是公开的,考试前把那一百套题做一遍就应该没问题了。在进行机试时,一定要注意这几个问题:做填空题时,一定要把空的下划线去掉,做填空与改错时不要增行删行,因为机试是电脑评卷,电脑在改这两题是是逐行逐行的扫描,一旦发现哪一行与标准答案有不相符的地方就会判为错误,哪怕写对了。做机试题目时,一定要有输出结果,不然就会没分,还有如果题目中这样说:请设计一个程序,将一个数的奇位输出,比如输入7654321,那么就要输出7531。当你把程序修改完或设计好后,一定要输入7654321,而不要输入其它数,电脑评卷时是要看你的结果的,如果结果不是7531,而是其它,可能会判你错。最后做完题一定要保存,最好选择save,而不选save as。
参考文献:
[1]谭浩强. C语言程序设计[M]. 第二版.北京:清华大学出版社,2005.
[2]全国计算机等级考试全真笔试+上机考题解答与训练[M]. 电子科技大学出版社,2005.
[3]全国计算机等级考试二级教程——C语言程序设计[M]. 高等教育出版社,2002.
[4]全国计算机等级考试考试大纲.2006.
汇编语言是一种面向机器的语言, 其优点是运行速度快, 占用存储空间小, 可直接对硬件进行控制。缺点是编写、调试困难、移植性差。C语言简洁、灵活、库函数丰富、调试方便、移植性好, 目前已被广泛地应用于系统软件和应用软件的开发中, 为了发挥各自优势, 取长补短, 采用混合编程。大部分程序, 如界面、人机接口 (外壳程序) 、数据处理等用C语言编写, 以提高程序的开发效率。而某些程序, 如需要缩短程序的运行时间, 或需要对硬件进行直接操作, 或需要利用操作系统的某些功能模块, 或频繁使用的程序、或需要占用内存空间少的程序 (内核程序) , 则用汇编编写, 以提高程序的运行效率。
1 嵌入式汇编
嵌入式汇编也称行内汇编, 源程序中直接插入汇编语句。汇编语句可直接访问C程序中定义的常量、变量、函数。不必考虑二者之间的接口, 方便编程。
1.1 嵌入式汇编语句的格式
格式:asm操作码操作数[;或换行]
其中:操作数可以是汇编语句中的立即数、寄存器、表达式等还可以是C中的常量、变量、标号等。分号;是汇编语句结束符, 并非注解, 要用注解, 用C的注解。如下例所示。
1.2 汇编语句访问C的数据
嵌入的汇编语句可以访问C语言程序中的任何标识符, 包括变量、常量、标号、函数名、寄存器变量、函数参数等。如下例所示。
1.3 汇编语言与C语言接口规则
(1) C语句访问寄存器, 必须在寄存器名前加一个下划线。如例2中的return_AX;
(2) asm、C语句均可以有标号, 但不能用asm语句定义标号。
(3) 汇编语句的数据定义放在函数外面, 指令放在函数里面。
所有在函数外的的汇编语句都作为数据声明处理, 即在编译器编译时会将它放在数据段中, 也就是说不可以在函数外面写汇编命令语句, 把指令当数据。
所有在函数内的汇编语句必须是指令性语句, 在编译后都放在代码段中。也就是说不可以在函数内使用汇编数据定义语句, 把数据当指令。
(4) 不要在以asm开头的语句中使用C语言的关键字, 这会导致编译错误
1.4 编译过程
命令行键入命令:TCC-B-Iinclude-Llib文件名.c即可.TCC会自动调用TASM.EXE和TLINK.EXE, 并且TLINK.EXE能正确的找到需要的.obj和.lib文件, 要保证TC目录下存在TASM.EXE文件。如果单步编译, 可能会碰到很多的问题, 主要是TLINK.EXE不会自己去找.obj和.lib文件。该命令的功能是:.C→编译TCC→.ASM→汇编TASM→.OBJ→连接TLINK→.EXE。
2 Turbo C模块连接方式
C、汇编程序各自编程, 各自编译, 然后连接在一起。
2.1 汇编语言与C语言接口规则
(1) 命名约定:汇编的名字前加一个下划线, C的名字前不加下划线 (编译后内部自动加) , 以确保两个模块内部名字一致。
运行结果是:456B123
但是, 如果汇编程序设置采用C语言类型, 则标识符前不加下划线, (汇编后内部自动加) , 以确保两个模块内部名字一致。
(2) 声明约定:汇编、C模块对自己未定义但要用的别的模块的名字要声明。
C模块声明格式:函数声明格式:extern类型函数名 (形参表) ;如例5 z1.c。
变声明格式:Extern类型变量;
汇编模块声明格式:函数声明格式:extern函数名:属性 (near, far) 。
变声明格式:Extern变量名:属性 (byte, word, dword等)
自己定义的可供别的模块引用的也必须声明。
汇编模块声明格式:PUBLIC名字 (变量名或函数名) 如例6 z2.asm。
C模块声明格式:全局变量, 函数名前不加static即可。
(3) 寄存器要保护:C调汇编程序时, 汇编子程序中用到的寄存器最好全部保护, 退出时恢复, 以免影响主程序C的执行。
(4) C、汇编程序存贮模式要一致。
2.2 编译连接
(1) TASM文件名, 把汇编程序翻译成目标程序。TCC C文件名, 把C程序翻译成目标程序, C只编译不连接。 (2) TLINK把若干个目标程序连接成一个EXE程序。 (3) 运行。
3 结语
混合编程, 主要涉及接口, 汇编调C的函数、全局变量。C调汇编的函数、变量。本文对此做了浅述。
参考文献
[1]谭浩强.C语言程序设计[M].清华大学出版社, 2004.
[2]丁爱萍.C语言程序设计实例教程[M].西安电子科技大学出版社, 2006.
【c语言编程心得】推荐阅读:
大一c语言期末编程题10-07
C语言编程期末试题答案10-08
中国石油大学(华东)-C语言学习心得09-27
c语言总结07-15
c语言概念题09-22
C语言教学建议10-25
c语言递归程序11-06
c语言设计程序11-11
c语言排序算法总结06-25
C语言实验报告模版07-10