C语言实验指导_第1页
C语言实验指导_第2页
C语言实验指导_第3页
C语言实验指导_第4页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

C语言实验指导一、课程性质和任务课程是高职高专计算机类各专业的必修专业基础课,是程序设计入门课程。本课程的主要任务:通过对该课程的学习,使学生掌握C语言程序设计的基本知识,程序结构,基本算法及程序设计思想,并培养使用C语言进行程序设计基本能力。本课程的目的:使学生掌握程序设计的基本方法及逐步形成正确的程序设计思想,能够熟练地使用C语言进行程序设计并具备调试程序的能力,为后继课程及其他程序设计课程的学习和应用打下基础。二、课程教学目标1、掌握C语言的基本词法,熟练掌握C语言程序的基本结构。2、掌握常量和变量的存储类型及应用;运算符和表达式的应用3、掌握C语言的五种基本语句:形成正确的程序设计思想,对顺序结构程序要重点掌握,熟练掌握输入输出函数。4、掌握关系、逻辑表达式的形式和应用;熟练掌握选择结构的思想;掌握圧语句的各种形式和应用;掌握SWITCH语句和BREAK语句的使用,选择结构的嵌套语句。5、掌握循环结构的思想、流程和执行过程;掌握While循环、D〇…While、FOR循环及其应用;掌握循环嵌套的使用;掌握BREAK、CONTINUE及使用。6,掌握ー维数组的定义、引用和应用;掌握二维数组的定义、引用和应用;掌握字符数组及其应用。7、掌握函数的定义、参数、类型、返回值及参数传递;掌握变量的作用域(局部变量和全局变量)、存储类型;了解内部函数和外部函数及主函数和命令行参数。8,掌握宏定义的形式(带参数的宏定义、不带参数的宏定义);掌握文件包含的形式和应用;了解条件编译的定义形式和应用。9、掌握直接存取和间接存取;掌握指针变量的概念和应用;掌握数组与指针、函数与指针之间的关系;了解指向指针的指针。10、掌握结构体、共用体的概念、存储特点,及应用;了解结构体数组的使用;掌握结构体与数组、指针、函数之间的操作;掌握链表的概念和基本操作。了解共用体、自定义类型、枚举类型的概念和应用。11、掌握位运算的基本概念;掌握简单的位运算符及应用12、掌握文件的基本操作;掌握有关文件操作的函数及其它读写函数。实验基本要求上机实验主要是培养、训练和提高学生的程序设计能力和程序调试能力。在c语言程序设计的每个实验中,除了对程序设计提出要求之外,对程序的调试方法也提出具体的要求,这样就可以逐步培养学生的静态调试和动态调试能力,以及根据错误信息分析、判断、改正错误的能力。通过上机,还可以加深对课堂讲授内容的理解、熟悉程序的开发环境、学习计算机系统的操作方法等。上机实验一般经历上机前的准备(编程)、上机调试运行和实验后的总结三个步骤。.上机前的准备根据问题,进行分析,选择适当算法并编写程序。上机前一定要仔细检查程序(称为静态检查)直到找不到错误(包括语法和逻辑错误)。分析可能遇到的问题及解决的对策。准备几组测试程序的数据和预期的正确结果,以便发现程序中可能存在的错误。上机前没有充分的准备,到上机时临时拼凑ー个错误百出的程序,宝贵的上机时间白白浪费了;如果抄写或复制ー个别人编写的程序,到头来自己一无所获。.上机输入和编辑程序,并调试运行程序首先调用C语言集成开发环境,输入并编辑事先准备好的源程序;然后调用编译程序对源程序进行编译,查找语法错误,若存在语法错误,重新进入编辑环境,改正后再进行编译,直到通过编译,得到冃标程序(扩展名为OBJ)。下ー步是调用连接程序,产生可执行程序(扩展名为EXE)。使用预先准备的测试数据运行程序,观察是否得到预期的正确结果。若有问题,则仔细调试,排除各种错误,直到得到正确结果。在调试过程中,要充分利用C语言集成开发环境提供的调试手段和工具,例如单步跟踪、设置断点、监视变量值的变化等。整个过程应自己独立完成。不要一点小问题就找老师,学会独立思考,勤于分析,通过自己实践得到的经验用起来更加得心应手。3.整理上机实验结果,写出实验报告实验结束后,要整理实验结果并认真分析和总结,根据教师耍求写出实验报告。书写报告是整个实验过程的一个重耍环节。通过写报告,"以对整个实验做ー个总结,不断积累经验,提高程序设计和调试的能力,同时还可以提高写作能力。C语言程序设计实验报告主要包含以下内容:实验目的:实验的目的就是深入理解和掌握课程教学中的有关基本概念,应用基本技术解决实际问题,从而进ー步提高分析问题和解决问题的能力。因此,在着手做实验之前,必须明确实验的目的,以保证达到课程的基本要求。实验内容:每个实验都安排了几个实验题目,如果事先作好准备,则每个实验大约两小时能作完。在每个实验题目中都提出了具体要求。算法、流程图及主要符号说明:本书中的实验的安排是由易到难,对ー些有难度的题目给出了算法说明,有的还给出了参考流程图。在写实验报告时,对于书中未给出算法和流程图的题目,自己要给出算法和流程图,以及主要符号的说明。完整的程序清单:要提供完整、清晰的程序。输入数据及运行结果:对于同一个题目,输入不同的测试数据会有不同的运行结果,因此,在实验报告中,除了要写明程序运行结果外,还要在输出结果前写明输入的测试数据。分析与思考调试过程及调试中遇到的问题及解决办法:调试程序的心得与体会:其他算法的存在与实践等。若最终未完成调试,要认真找出错误并分析原因等。程序调试的方法对程序设计者来说,不仅要会编写程序,还要上机调试通过。初学者的程序往往不是一次就能顺利通过,即使ー个有经验的程序员也常会出现某些疏忽。上机的目的不仅是验证程序的正确性,还要掌握程序调试的技术,提高动手能力。程序的调试具有很强的技术性和经验性,其效率高低在很大的程度上依赖于程序设计者的经验。有经验的人很快就能发现错误,而有的人在计算机显示出错误信息并告诉他哪一行有错之后还找不出错误所在。所以初学者调通一个程序往往比编写程序花的时间还多。调试程序的经验固然可以借鉴他人的,但更重要的是靠实践来积累。调试程序是程序设计课程的ー个重要环节。上机之前要做好程序调试的准备工作。程序调试的准备工作包括熟悉程序的运行环境和各个程序设计阶段为程序调试所做的准备。上机前要先熟悉程序运行的环境ー个C语言源程序总是在一定的硬件和软件环境支持下进行编辑、编译、连接和运行的,而这其中的每一步都直接影响程序调试的效率。所以初学者必须了解所使用的计算机系统的基本操作方法,学会使用该系统,了解在该系统上如何编辑、编译、连接和运行一个C语言程序。上机时需要输入和修改程序,不同的操作系统提供的编辑程序是不同的。DOS操作系统提供了全屏幕编辑程序Edit,UNIX操作系统提供了屏幕编辑程序Vi,还有一些集成环境提供了编辑功能,如果对编辑程序的基本功能和操作不熟悉,就很难使用好这个工具,那么在输入和修改程序中就会遇到很多困难,往往越该越乱,甚至因为不存盘的误操作而使修改、调试的工作前功尽弃。更有甚者,由于初学者对操作系统或编辑程序的操作命令不熟悉而误删了一个正在调试或已经调试好的程序,就不得不重新输入、调试,浪费了许多时间。所以在上机调试之前,必须认真了解程序运行的环境,了解常用的ー些操作命令,这样上机调试程序时效率就会大大提高。程序设计过程中要为程序调试做好准备.采用模块化、结构化方法设计程序。所谓模块化就是将一个大任务分解成若干个较小的部分,每一部分承担一定的功能,称为“功能模块”。各个模块可以由不同的人编写程序,分别进行编译和调试,这样可以在相对较小的范围内确定出错误,较快的改正错误并对其重新编译。不要将全部语句都写在main函数中,而要多利用函数,用ー个函数完成一个单ー的功能。这样既便于阅读,也便于调试。反之,如果用ー个函数写出来,不仅增加了程序的复杂度,而且在调试时很难确定错误所在,即使找到了错误,改正起来也很麻烦,有时为改正一个错误有可能引起新的错误。.编程时要为调试程序提供足够的灵活性。程序设计是针对具体问题的,但同时应充分考虑程序调试时可能出现的的各种情况,在编写程序时要为调试中临时修改、选择输入数据的形式、个数和改变输出形式等情况提供尽可能的灵活性。要做到这一点必须使程序具有通用性。一方面,在选择和设计算法时要使其具有灵活性,另一方面数据的输入要灵活,可以采用交互式输入数据。例如排序算法、求和、求积分算法的数据个数都可以通过应答程序的提问来确定,从而为程序的调试带来了方便。.根据程序调试的需要,可以通过设置“分段隔离”、“设置断点”、“跟踪打印”来调试程序。对于复杂的程序可以在适当的地方设置必要的断点,这样调试程序查找问题迅速、容易。为了判断程序是否正常执行,观察程序执行路径和中间结果的变化情况,可以在适当的地方打印出必要的中间结果,通过这些中间结果可以观察程序的执行情况。调试结束后再将断点、打印中间结果的语句删掉。.要精心地准备调试程序所用的数据。这些数据包括程序调试时要输入的具有典型性和代表性的数据及相应的预期结果。例如,选取适当的数据保证程序中毎条可能的路径都至少执行ー次并使得每个判定表达式中条件的各种可能组合都至少出现一次。要选择“边界值”,即选取刚好等于、稍小于、稍大于边界值的数据,经验表明,处理边界情况时程序最容易发生错误,例如许多程序错误出现在下标、数据结构和循环等等的边界附近。通过这些数据的验证,可以看到程序在各种可能条件下的运行情况,暴露程序错误的可能性更大,从而提高程序的可靠性。调试程序的方法与技巧程序调试主要有两种方法,即静态调试和动态调试。程序的静态调试就是在程序编写完以后,由人工“代替”或“模拟”计算机,对程序进行仔细检查,主要检查程序中的语法规则和逻辑结构的正确性。实践表明,有很大一部分错误可以通过静态检查来发现。通过静态调试,可以大大缩短上机调试的时间,提高上机的效率。程序的动态调试就是实际上机调试,它贯穿在编译、连接和运行的整个过程中。根据程序编译、连接和运行时计算机给出的错误信息进行程序调试,这是程序调试中最常用的方法,也是最初步的动态调试。在此基础上,通过“分段隔离”、“设置断点”、“跟踪打印”进行程序的调试。实践表明,对于查找某些类型的错误来说,静态调试比动态调试更有效,对于其他类型的错误来说刚好相反。因此静态调试和动态调试是互相补充、相辅相成的,缺少其中任何ー种方法都会使查找错误的效率降低。ー、静态调试.对程序语法规则进行检查(1)语句正确性检查。保证程序中每个语句的正确性是编写程序时的基本要求。由于程序中包含大量的语句,书写过程中由于疏忽或笔误,语句写错再所难免。对程序语句的检查应注意以下几点:检查毎个语句的书写是否有字符遗漏,包括必要的空格符是否都有。检查形体相近的字符是否书写正确.例如字母。和数字〇,书写时耍有明显的分别。检查函数调用时形参和实参的类型、个数是否相同。(2)语法正确性检查。每种计算机语言都有"自己的语法规则,书写程序时必须遵守一定的语法规则,否则编译时程序将给出错误信息。语句的配对检查:许多语句都是配対出现的,不能只写半个语句。另外,语句有多重括号时,每个括号也都应成对出现,不能缺左少右的。注意检查语句顺序:有些语句不仅句法本身要正确,而且语句在程序中的位置也必须正确。例如,变量定义要放在所有可执行语句之前,.检查程序的逻辑结构(1)检查程序中各变量的初值和初值的位置是否正确。我们经常遇到的是“累加”、“累乘”,其初值和位置都非常重要。用于累加的变量应取〇初值或给定的初值,用于累乘的变量应赋初值为或给定的值。因为累加或累乘都是通过循环结构来实现的,因此这些变量赋初值语句应在循环体之外。对于多重循环结构,内循环体中的变量赋初值语句应在内循环之外;外循环体中的变量赋初值语句应在外循环之外。如果赋初值的位置放错了,那么将得不到预想的结果。(2)检查程序中分枝结构是否正确。程序中的分枝结构都是根据给定的条件来决定执行不同的路径的,因此在设置各条路径的条件时一定要谨慎,在设置“大于”、“小于”这些条件时,一定要仔细考虑是否应该包括“等于”这个条件,更不能把条件写反。尤其要注意的是,实型数据在运算过程中会产生误差,如果用“等于”或“不等于”对实数的运算结果进行比较,则会因为误差而产生误判断,路径选择也就错了。因此在遇到要判断实数a与b相等与否作为条件来选择路径时,应该把条件写成:if(fabs(a-b)<=le-6),而不应该写成if(a==b)。要特别注意条件语句嵌套时,if和else的配对关系。(3)检查程序中循环结构的循环次数和循环嵌套的正确性。C语言中可用for循环、while循环、do-while循环。在给定循环条件时,不仅要考虑循环变量的初始条件,还要考虑循环变量的变化规律、循环变量变化的时间,任何一条变化都会引起循环次数的变化。(4)检查表达式的合理与否。程序中不仅要保证表达式的正确性,而且还要保证表达式的合理性。尤其要注意表达式运算中的溢出问题,运算数值可能超出整数范围就不应该采用整型运算,否则必然导致运算结果的错误。两个相近的数不能相减,以免产生“下溢”。更要避免在ー个分式的分母运算中发生“下溢”,因为编译系统常把下溢做零处理。因此分母中出现下溢时要产生“被零除”的错误。由于表达式不合理而引起的程序运行错误往往很难査找,会增加程序调试的难度。因此,认真检查表达式的合理性,是减少程序运行错误,提高程序动态调试效率的重要方面。程序的静态调试是程序调试非常里要的ー步。初学者应培养自己静态检查的良好习惯,在上机前认真做好程序的静态检査工作,从而节省上机时间,使有限的机时充分发挥作用。二、动态调试在静态调试中可以发现和改正很多错误,但由于静态调试的特点,有一些比较隐蔽的错误还不能检查出来。只有上机进行动态调试,才能够找到这些错误并改正它们。.编译过程中的调试编译过程除了将源程序翻译成目标程序外,还要对源程序进行语法检查。如果发现源程序行语法错误,系统将显示错误信息。用户可以根据这些提示信息查找出错误性质,并在程序中出错之处进行相应的修改。冇时我们会发现编译时有几行的错误信息都是ー样的,检查这些行本身没有发现错误,这时要仔细检查与这些行有关的名字、表达式是否有问题。例如,因为程序中数组说明语句有错,这时,那些与该数组有关的程序行都会被编译系统检查出错。这种情况下,用户只要仔细分析一下,修改了数组说明语句的错误,许多错误就会同时没有了。对于编译阶段的调试,要充分利用屏幕给出的错误信息,对它们进行仔细分析判断。只要注意总结经验,使程序通过编译是不难做到的。.连接过程的调试编译通过后要进行连接。连接的过程也有查错的功能,它将指出外部调用、函数之间的联系及存储区设置等方面的错误。如果连接时有这类错误,编译系统也会给出错误信息,用户要对这些信息仔细判断,从而找出程序中的问题并改正之。连接时较常见的错误有以下几类:(1)某个外部调用有错,通常系统明确提示了外部调用的名字,只要仔细检查各模块中与该名有关的语句,就不难发现错误。(2)找不到某个库函数或某个库文件,这类错误是由于库函数名写错、疏忽了某个库文件的连接等。(3)某些模块的参数超过系统的限制。如,模块的大小、库文件文件的个数超出要求等。引起连接错误的原因很多,而且很隐蔽,给出的错误信息也不如编译时给出的直接、具体。因此,连接时的错误要比编译错误更难查找,需要仔细分析判断,而且对系统的限制和要求要有所了解。3.运行过程中的调试运行过程中的调试是动态调试的最后ー个阶段。这ー阶段的错误大体可分为两类:(1)运行程序时给出出错信息。运行时出错多与数据的输入、输出格式有关,与文件的操作有关。如果给出数据格式有错,这时要为要有关的输入输出数据格式进行检査,一般容易发现错误。如果程序中的输入输出函数较多,则可以在中间插入调试语句,采取分段隔离的方法,很快就可以确定错误的位置了。如果是文件操作有误,也“J"以针对程序中的有关文件的操作采取类似的方法进行检查。(2)运行结果不正常或不正确程序常见错误分析本节就一些常见的编译错误进行分析,使是初学者尽快掌握分析错误的方法,提高上机调试程序的能力。Undefinedsymbol\xxxxx'检查:w程序中使用的标识符是否进行了定义。C语言规定程序中所有用到的变量必须在本函数中先定义后使用(除非已定义为外部变量)。w标识符定义或引用处是否有拼写错误Possibleuseof'xxxxxx'beforedefinition检查:w变量引用前是否已经赋值W是否输入时忘记使用地址符在其它语言中输入时只需写出变量名即可,而C语言中要求指明向哪个地址标识的单元送值,因此要在输入的变量前加上符号"&"。Possibleincorrectassignmentw检查是否把赋值号当等号使用了在if、while,do-while语句语句的条件表达式中,经常遇到关系运算符"等于",应该用"=="表示,如果使用if(a=b)…,则编译程序将(a=b)作为赋值表达式处理,即将b的值赋给a,然后a判断的值是否为〇,如果不为〇,则作为"真";若为〇,则作为"假"。这时会发生本警告。Statementmissing;检查:w语句是否缺少";"分号是C语句不可缺少的一部分,表达式语句后应有分号,如果语句后没有分号,则把下一行也作为上一行的语句的一部分,这就岀现语法错误。有时编译系统指岀某行有错,但在该行上未发现错误,此时应该检查上一行是否漏掉分号。复合语句的最后ー个语句也必须有分号。Misplacedelse检查:welse语句是否缺少与之匹配if的语句w前面if语句是否出现语法错误w是否在不该加分号的地方加了分号例如:if(a==b);printf("%d”,a);elseprintf(H%dn,b);本意为当a==b时输出a,否则输出b。但由于在if(a==b)后加了分号,因此if语句到此结束,则else语句找不到与之配对的if语句。w是否漏写了大括号例如:if(a>b)t=a;a=b;b=t;elseIf(While、Do-while)statementmissing(If(While,Do-while)statementmissing)检查;w括号不配对Functiondefinitionoutofplace检查;w函数定义位置是否有错函数定义不能出现在另ー函数内。W函数内的说明是否有类似「带有一个参数表的函数开始例如,在函数中定义数组时误用了圆括号,就会被误认为是ー个函数定义。Sizeofstructureorarraynotknown检查;w表达式中是否出现未定义的结构或数组w定义结构或数组的语句有错如;数组的定义耍求用方括号,如果是二维数组或多维数组在定义和引用时必须将每ー维的数据分别用方括号括起来,即定义二维数组a[3,5]是错误的,而应用a[3][5]。Lvaluerequired检查:w赋值号左边是否是ー个地址表达式赋值号左边必须是ー个地址表达式,包括数值变量、指针变量、结构引用域、间接指针和数组分量。如:main(){charstr[6];str="china";…}在编译时出错。因为str是数组名,代表数组首地址。在编译时对数组str分配了一段内存单元,因此在程序运行期间str是ー个常量,不能再赋值。应该把charstr⑹改为char*str。Constantexpressionrequired检查:w#define常量是否拼写错w数组的大小是否是常量Typemismatchinredeclarationof"xxxxxx"检查:w原文件中是否把一个已经说明的变量重新说明为另ー类型。Wー个函数被调用后是否有被说明为非整型main()(floata,b,c;/・定义三个整型变量・/scanf("%f%f",a,b);/・输入两个整数・/c=max(a,b);/・调用max函数,把函数值赋给c*/printf("%f”,max);/・输岀c的值・/)floatmax(x,y)/・定义函数max*/floatx,y;/・说明形参x,y为整型・/(floatz;/・函数内说明语句,定义T*1if(x>y)/・当x>y时把x赋给z,否则把y赋给7*1z=x;elsez=y;retum(z);/・返回z值・/)上面的程序在编译时产生出错信息,因为max函数是实型的,而且是在main函数后オ定义。改正的方法一是在main函数中增加一个对max函数的说明,二是将max函数的定义位置调到main函数之前。实验ーC语言运行环境ー、实验目的了解TC环境的组成。学习TC环境的使用方法。了解C语言程序从编辑、编译、连接到运行并得到运行结果的过程。二、实验内容.了解TC环境的组成。开机后进入WINDOWS系统的”资源管理器”,找到TC环境所在的文件夹。一般情况下,TC环境都安装在名为ラC”的子冃录下,具体存于硬盘的哪个分区请询问实验室管 理员»查看在TC目录下的以字母TC开头的文件,是否包括了TC.EXE,TCC.EXE,TLINK.EXE、TCCONFIGTC等文件;查看!NCLUDE、LIB两个子目录下的文件。え习这些文件的作用。.进入、退出和定制TC环境。运行TC目录下的TC.EXE文件,就可进入TC环境。在WINDOWS环境下运行文件的方法是用鼠标双击耍运行的文件名,或在桌面上双击快捷图械在DOS环境下进入到TC子冃录,用命令方式运行TC.EXE程序。进入TC环境后屏幕上显示出TC环境的主画面。退出TC环境,可在“FILE”菜单下选择“QIUT”菜单项,或用热键<Alt+X>,计算机返回到操作系统的控制下。在程序开发的过程中,有时需要返回到操作系统界面下观察程序的运行情况,但是又要保留运行的TC环境,操作方法是:选择”File”菜单下的”OSshell”菜单项返到DOS操作系统界面,用”EXIT”命令可重新进入TC环境;用<Alt>+<空格〉键返到WINDOWS界面,TC环境缩小为屏幕下方任务条上的ー图标,用鼠标单击该图标重新进入TC环境。注意此时是返到操作系统,TC环境没有真正退出,如果此时再次运行TC.EXE文件,刚オ是返到WINDOWS环境时,会重新打开ー个TC窗口,返到DOS环境时会给出ー个错误提示 :”Programtoobigtofitinmemory”,这是因为DOS操作系统只管理640K的内存,放不下两个TC环境WINDOWS操作系统对TC环境是作为一个窗u进行管理的,因此WINDOWS窗口的ー些属性也是有效的。从TC环境返回WINDOWS系统时会出现ー个快捷菜单(在任务条的TC图标上单击鼠标右键也可以出现快捷菜单),选择”属性”菜单项,屏幕出现一个名为”TC属性”的窗口,在该窗口里选择”屏幕”ー页,在”用法"ー项里选中”屏幕”单选钮,单击"应 用”按钮,关闭”TC属性”的窗ロ,TC环境以WINDOWS窗口形式出现。在窗口上方出现工具条,可以对窗口进行定制,注意”全屏幕”和”中文”两个工具钮的作用。TC环境下的”Options”菜单下可对TC环境进行设置,初学者要了解”Directories”的作用,一般不要改变系统的其它设置。关于”Directories”各项的作用和设置参阅本书关于 TC环境的介绍,学会改变输出文件的冃录。.运行演示程序在TC目录下有一个名为”BGIDEMO.C”的源程序,这本是为TC图形函数提供的演示程序,运行这个演示程序。在”File”菜单下选”Load”项,在屏幕出现的”LoadFileName”窗口里输入”BGIDEMO.C”,该程序被装入编辑窗口,按<Alt+R>键,程序被编译、连接并运行。注意运行此程序需要图形库文件,一般被装在TC目录下,没有这个图形库文件就不能运行图形演示程序。.编写自己的第一个程序按键盘<Alt+E>键,激活编辑窗口,录入如下C源程序:main(){printf("ThisisaCProgram\n")printf("lamastudent\n");按<Alt+R>键,编译、连接、运行程序。屏幕出现错误提示:statementmissing;infunctionmain通过提示,可以知道上面程序第二行的最后漏敲ー个分号,改正后程序运行。按<Alt>+<F5>键观察输出结果。按<F2>键,程序存入硬盘,文件名自定(如:testDo通过资源管理器观察当前目录下名为testl的几个文件,它们的扩展名分别是什么。改变“Options”菜单下"Directories”项下的输出文件目录,用せ2>键把程序再存一次并运行。在新设定的输出目录下观察名为testl的文件的存储情况。用”File”菜单下的”Writet。”项,把文件存在新设定的输出目录处,文件名仍为testk录入如下程序:main(){printf("ThisisanotherCProgram\n");)按<F2>键并用testl文件名保存,然后运行这个程序。按<Alt>+<F3>键,屏幕出现刚オ操作过的几个文件的名字,将刚オ设定目录下的testl.c装入编辑器后运行它,我们观察到输出的仍是后来键入的程序的内容。这是因为TC编译系统在接收”RUN"命令后,对testl.c、testl.obj、testl.exe三个文件的建立时间进行比较,如果扩展名为.c的文件建立时间晩丁.exe文件,它就认为源文件进行了修改,所以对源文件重新进行编译连接,如果.exe文件的时间晚于源文件的建立时间,就直接运行这个文件,不再重新编译连接。因为我们两次输入的程序名称都是testl,新设定目录中存放的是第一个程序的testl.c和第二个程序的testl.exe,就出现了现在的情况。.分别编译、连接、运行程序”Run”命令是将编译、连接、运行一次完成,实际完成了三件工作,下面分别进行编译、连接和运行。用<ALT+C>命令打开”Compile”菜单,并选择”Compiletoobject”命令编译该源程序文件,然后选择”Compile”菜单的”LinkEXEfile”命令调用连接程序连接成可执行文件,最后用”Run”菜单的”Run"命令运行程序,用“Run"菜单的"Userscreen命令"查看运行结果。由于编译、连接、运行是分别进行的,所以编译系统不再对相关三个文件的建立时间进行比较,我们看到的就是编辑器里当前的程序输出结果。.编写程序,实现求整数10、20和35的平均值。三、实验要求.学习TC的基本操作,编写程序。.运行程序并记录运行结果。.将源程序、目标文件、可执行文件和实验报告存在软盘上。C语言实验指导实验ーc语言的运行环境和运行过程【目的与要求】了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。了解在该系统上如何编辑、编译、连接和运行一个C程序。通过运行简单的C程序,初步了解C源程序的特点。【上机内容】【基础知识】通过课堂上学习,我们对C语言已有了初步了解,对C语言源程序结构有了总体的认识,那么如何在机器上运行C语言源程序呢?任何高级语言源程序都要“翻译”成机器语言,才能在机器上运行。,,翻译”的方式有两种,ー种是解释方式,即对源程序解释一句执行ー句:另ー种是编译方式,即先把源程序“翻译”成目标程序(用机器代码组成的程序),再经过连接装配后生成可执行文件,最后执行可执行文件而得到结果。C语言是ー种编译型的程序设计语言,它采用编译的方式将源程序翻译成冃的程序(机器代码)。运行一个C程序,从输入源程序开始,要经过编辑源程序文件(C)、编译生成目标文件(・obj)、连接生成可执行文件(.exe)和执行四个步骤。下面主要介绍TurboC下运行C语言源程序。TurboC是美国Borland公司推出的IBMPC系列机的C语言编译程序。它具有"方便、直观、易用的界面和丰富的库函数。它向用户提供了集成环境,把程序的编辑、编译、连接和运行等操作全部集中在ー个界面上进行,使用十分方便。1TurboC工作环境介绍ー个C语言程序的实施是从进入TurboC的集成环境开始的,而进入C语言的环境,一般有两种途径:从DOS环境进入和从Windows环境进入。(1)从DOS环境进入:在DOS命令行上键入:C>CD\TC/(指定当前冃录为TC子目录)C>TC/(进入TurboC环境)这时进入TurboC集成环境的主菜单窗口,屏幕显示如下图所示。(2)从Windows环境进入:在Windows95/98环境中,如果本机中已安装了TurboC,可以在桌面上建立一个快捷方式,双击该快捷图标即可进入C语言环境。或者从开始菜单中找到“运行’‘,在运行对话框中键入“C:\TC\TC”,“确定”即可。需要说明的是,以上两种方式有一个共同的前提,即TurboC的安装路径为C:\TC,如果你的计算机中TurboC的安装路径不同的话,在上述方式中改变相应路径即リ。刚进入TC环境时,光带覆盖在“File”上,整个屏幕由四部分组成,依次为:主菜单、编辑窗口、信息窗口和功能提示行(或称快速参考行)。<![endif]>①主菜单显示屏的顶部是主菜单条,它提供了8个选择项:File处理文件(装入、存盘、选择、建立、换名存盘、写盘),目录操作(列表、改变工作目录),退出TurboC,返回DOS状态。Edit建立、编辑源文件。Run自动编辑、连接并运行程序。Compile编辑、生成目标文件组合成工作文件。Project将多个源文件和冃标文件组合成工作文件。〇ption提供集成环境下的多种选择和设置(如设置存储模式、选择编参数、诊断及连接任选项)以及定义宏;也可记录!nclude、Output及Library文件目录,保存编译任选项和从配置文件加载任选项。Debug检查、改变变量的值、查找函数,程序运行时查看调用栈。选择程序编译时是否在执行代码中插入调试信息。Break/Watch增加、删除、编辑监视表达式,及设置、清除、执行至断点。在主菜单中,Edit选项仅仅是一条进入编辑器的命令。其他选项均为下拉式菜单,包含许多命令选项,使用方向键移动光带来选择某个选项时,按回车键,表示执行该命令,若屏幕上弹出ー个下拉菜单,以提供进ー步选择。②编辑窗口编辑窗口是在主菜单下,信息窗口之上的区域,其顶行中间有“Edit”标志。在此窗口屮可以建立、编辑ー个源文件。功能键F5可以扩大编辑窗口到整个屏幕,或恢复分屏式环境。进入编辑窗口的方式有两种:(A)按F10功能键,激活主菜单,然后用光标移动键将光带移到“Edit”上,按冋车键,或者在激活主菜单后直接按字母键E,均可进入编辑窗口:(B)按Alt+E无条件的进入编辑窗口。进入编辑窗口后,编辑窗口的名字是高亮度的,表示它是活动窗口。窗口的顶部第一行是状态行,给出有关正在被编辑文件的信息,如当前光标所在的行、歹リ;编辑模式(插入/改写):正在编辑文件的文件名等等,当需要编辑修改时,在编辑窗口中灵活地使用光标移动键以及编辑命令即可达到预期的效果.常用的编辑命令见下表:命令功能HomeEndInsDelPgUpPgDn< ►uCtrl+YCtrl+TCtrl+UBackspacCtrl+KBCtrl+KKCtrl+KVCtrl+KCCtrl+KYCtrl+KH将光标移到行首将光标移到行尾插入/改写两种状态的切换删除光标所在的字符向上翻页正文向下翻页正文光标左右移动删除光标所在的行删除光标所指的ー个单词放弃操作删除光标左边字符设置(开始)块头标志设置(结尾)块尾标志块搬动到光标处块拷贝到光标处块删除取消块定义在插入模式下(用Ins键转换)向编辑窗口内输入代码,按回车键结束一行(TC编辑器不能自动换行)。一行最多为248个字符,窗口宽77歹リ,当一行内字符多于77列时,窗口随着字符的输入而左右移动,若发现有错误,可移动光标到出错处更正之:再按一次Ins键,屏幕转换成为替换模式,输入的字符将替换光标所在位置的字符。③信息窗口编译和调试源程序时,信息窗口髭示诊断信息、警告、出错信息、错误在源程序中的位置。功能键F5可以扩大和恢复信息窗口,按F6或Alt+E,光标从信息窗口跳到编辑窗口。④功能键提示行屏幕低行是功能键提示行,显示当前状态下功能键(俗称Tu山oC热键)的作用,见下表。应当注意,在不同状态下功能键的作用是不同的。正确使用功能键可以简化操作。热键简单说明F1F2F3F5F6F7F8F9F10Help,以分页的形式显示帮助信息保存当前正在编辑窗口中的文件装入一个文件。按F3,屏幕上弹出ー个输入框,输入要装入的文件名Zoom,缩放活动窗口Switch,活动窗口开关,按F6键,光标从编辑窗口跳到信息窗口,或从信息窗口跳到编辑窗口Trace,跟踪到函数中Step,单步跟踪,但不进入函数内部Make,对当前文档进行编辑、连接Menu,激活主菜单,光标跳到主菜单2TurboC环境中运行C语言源程序的步骤(1)编辑源文件在主菜单下,直接按Alt+F键,或按F10后将光带移至リ“File”选项上,按回车键,在“File”下面出现ー个下拉菜单,菜单中有以下选项:LoadF3表示加载或装入ー个文件PickAlt+F3从指定的文件列表中选择文件装入编辑器。New表示新文件,缺省文件名为NONAME.C。SaveF2将正在编辑的文件存盘。Writeto将正在编辑的文件写入指定的文件中,若文件名已存在,则重写。Directory表示文件目录。ChangeDir改变驱动器及目录OSshell进入TurboC命令行模式,命令EXIT可返回集成环境QuitAh+x退出TurboC,返回DOS状态。建立一个新文件,可用光标移动键将“File”菜单中的光带移到“New”处,按回车键,即・打开编辑窗口。此时,编辑窗口是空白的,光标位于编辑窗口的左上角,屏幕自动处于插入模式,可以输入源程序。屏幕右上角显示缺省文件名为NONAME.C,编辑完成之后,可用F?或选择“Save”或“Writeto”进行存盘操作,此时系统将提示用户将文件名修改成为所需要的文件名。(2)源程序的编译、连接直接按F9键,或将菜单“Compile”中的光带移到“MakeEXEfile”项11,按回车键,就nJ・实现对源程序的编译、连接。若有错误,则在信息窗口显示出相应的信息或警告,按任意键返回编辑窗口,光标停在出错位置上,可立即进行编辑修改。修改后,再按F9键进行编辑、连接。如此反复,直到没有错误为止,即可生成可执行文件。注意:C程序的连接是在编译后自动完成的。(3)执行程序直接按Ctrl+F9键,即可执行.EXE文件;或在主菜单中(按F10进入主菜单)将光带移到“Run”选项,按回车键,弹出ー个菜单,选择“Run”选项,回车。这时并不能直接看到输出结果。输出结果是显示在用户屏幕上,在TC屏幕上看不到,直接按复合键AH+F5,或选择“Run”菜单屮的“UserScreen”选项,即可出现用户屏幕,查看输出结果。按任意键返回TC集成环境。另外,选择“Run”菜单下的“Run”项,或直接按Ctrl+F9键,リ将C程序的编译、连接、运行一次性完成,即第3步中包含有第2步的工作。如果程序需要输入数据,则在运行程序后,光标停留在用户屏幕上,要求在用户输入数据,数据输入完成后程序继续运行,直至输出结果。如果运行结果不正确或其他原因需要重新修改源程序,则需重新进入编辑状态。修改源程序,重复以上步骤,直到结果正确为止。(4)退出TurboC集成环境退出TurboC环境,返回操作系统状态。可在主菜单选择“File”菜单的“Quit”选项,或者直接按Alt+Xo在执行退出TurboC环境时,系统将检查一下当前编辑窗口的程序是否已经存盘,若未存盘,系统将弹出ー个提示窗口,提示是否将文件存盘,若按“Y”则将当前窗口内的文件存盘后退出;若按“N”则不存盘退出。【一般示例】【例1】编程实现在屏幕上显示如下.三行文字Hello,world!WolcometotheClanguageworld!Everyonehasbeenwaitingfor.在TurboC的集成环境下,键入如下源文件。敲Alt+F组合键打开File菜单,File菜单中Writeto选项可将默认noname.c文件名改为任意文件名。程序example.c如下:main()(printf("Hello,World!\n");printf(,^WolcometotheClanguageworld!\n,^);printf("Everyonehasbeenwaitingfor.\nM);)然后用Ctrl+F9编辑执行example©用Alt+F5査看结果,即在屏幕上显示题冃要求的三行文字。按回车键重新返回TurboC的编辑环境。注意,在运行程序之前最好先存盘。【例2】输入并运行程序,写出运行结果。main(){inta,b,sum;a=123;b=456;sum=a+b;printfC4sumis%d\n,,,sum);运行方法同上,最后结果为:sumis579。【例3】输入并运行程序,写出运行结果。main()(inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf(umax=%d,\c);)intmax(intx,inty)(intz;if(x>y)z=x;elsez=y;return(z);)这个程序的功能是对于任意输入的两个整数,输出较大的那个数。所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出“max=5"。【作业】.输入并运行例题中程序,熟悉调试C程序的的方法与步骤。.写出ー个C程序的构成。.参照例题,编写ー个C程序,输出以下信息:Hello,World!.编写ー个C程序,输入a、b、c三个数,输出其中最大者。试想,如果求四个数中的最大者,则程序该如何编写。实验二C语言的基础知识【目的与要求】.掌握C语言数据类型,熟悉如何定义ー个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(-)运算符的使用。.进ー步熟悉C程序的编辑、编译、连接和运行的过程。【上机内容】【一般示例】【例1】输入并运行下程序,写出运行结果。mian()chard,c2;c1=97;c2=98;printf(tt%c%cM,c1,c2);)在此基础上1)加一个printf语句,并运行之。printf(u%d,%d",c1,c2);2)再将第二行改为:intd,c2;再使之运行。3)再将第三行改为:Cl=300;c2=400;再使之运行,分析其运行结果。在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。【例2】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。main(){chard='a',c2='b',c3='c;c4='\101',c5=printf(ua%cb%c\tabc\n",c1,c2,c3);printf(u\t\b%c%c",c4,c5);在该程序中,主要考查对转义字符的掌握情况。【例3】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。main()(inti,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d",i,j,m,n);)分别作以下改动之后,先分析再运行:1)将第四行改为:m=i++;n=++j;2)程序改为:main(){inti.j;i=8;j=10;printf("%d,%d”,i++,j++);)3)在2)的基础上,将printf语句改为:printf("%d,%d”,++i,++j);4)再将printf语句改为:printf(u%d,%d,%d,%d",i,j.i++,j++);5)程序改为:main()(inti,j,m=O,n=O;i=8;j=10;m+=i++;n-=-j;printf(ui=%d,j=%d,m=%d,n=%d",i,j,m,n);}此程序主要考查自加、自减运算符以及复合运算符的用法。【作业】.要讲“China”译成密码,密码规律是:用原来的字母后面第5个字母代替原来的字母。例如,字母“A”后面第5个是“F,用"F代替“A’。因此,“China”应译为“Hmnsf”。请编ー程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为C、‘h’、’i‘、‘イ、,a',经过运算,使其分别变为H、‘m’、’n’、’s‘、’3并输出。.求下面算术表达式的值。x+a%3*(x+y)%2/4设x=2.5,a=7,y=4.7(float)(a+b)12+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5先自己分析,再试着用程序求解,看得到的结果是否一致。3.写出下面表达式运算后a的值,设原来a=10。设a和n已定义成整型变量。(1)a+=a(2)a-=2a*=2+3(4)a/=a+aa%=(n%=2),n的值等于5(6)a+=a-=a*=a先自己分析,再试着用程序求解,看得到的结果是否一致。实验三简单的C程序设计【目的与要求】.理解C语言程序的顺序结构.掌握常用的C语言语句,熟练应用赋值、输入、输出语句。【上机内容】【一般实例】【例1】按格式要求输入Z输出数据#include"stdio.h"main(){inta,b;flostx,y;chard,c2;scant(tta=%d,b=%dn,&a,&b);scanf("%f,%e”,&x,&y);scanf("&c&c”,&c1,&c2);printf(Ma=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2);运行该程序,必须按如下方式在键盘上输入数据a=3,b=7/8.5,71.82/aAZ请同学们写出输出结果【例2】输入三角形三边长,求三角形面积。#includeHmath.hwmain(){floata,b,c,s,area;scanf("%f,%f,%ド,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(Harea=%fM,area);}【例3】已知圆半径,圆柱高,求圆周长,圆柱体积。main()(floatr,h,l,v,pi;pi=3.1415926;scanf(M%f,%f,,,&r,&h);l=2*pi*r;v=pi*r*r*h;printf("圆周长为:%6.2f\n",l);printf("%圆柱体积为:6.2f”,v);)【例4】输入一个摄氏温度,要求输出华氏温度。公式为f=5/9*c+32.main(){floatc.f;scanf(**%f",&c);f=5.0/9*c+32;printf(u%5.2f\n",c);)【作业】.已知圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。.输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32).实验四选择结构程序设计【目的与要求】.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);.学会正确使用逻辑运算符和逻辑表达式;.熟练掌握if语句和switch语句。【I:机内容】【一般示例】【例1】已知三个数a,b,c»找出最大值放于max中。分析:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中计else形式。第二次比较max和c,把最大数存入max中,用if语句的第ー种形式if形式。Max即为a,b,c中的最大值。#include"stdio.hHmain(){inta,b,c,max;/・定义四个整型变量义scant(ua=%d,b=%d,c=%dM,&a,&b,&c);if(a>=b)max=a;/*a>=b*/elsemax=b;/*a<b*/if(c>max)max=c;/*c是最大值・/printf(Mmax=%dM,max);}若输入下列数据,分析程序的执行顺序并写出运行结果a=1,b=2,c=3a=2,b=1,c=3a=3,b=2,c=1a=3,b=1,c=2a=3,b=3,c=2a=2,b=1,c=2【例2】输入某学生的成绩,经处理后给出学生的等级,等级分类如下:90分以上(包括90):A80至90分(包括80):B70至80分(包括70):C60至70分(包括60):D60分以下:E方法一:(用if嵌套、)分析:由题意知如果某学生成绩在90分以上,等级为A:否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C:否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在。〜100之间。#include"stdio.h"main(){intscore;chargrade;printf("\npleaseinputastudentscore:");scanf("%f",&score);if(score>100||score<0)printf("\ninputerror!");else{if(score>=90)grade='A,;else{if(score>=80)grade='B,;else{if(score〉=70)grade='C;else{if(score>=60)grade='D*;elsegrade='E;printf(H\nthestudentgrade:%cM,grade);))输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,〇分以及小于〇和大于100的数据。方法二:用switch语句分析:switch语句是用于处理多分支的语句。注意,case后的表达式必须是ー个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。#include"stdio.h”main(){intg,s;charch;printf("\ninputastudentgrade:");scanf("%d",&g);s=g/10;if(s<0||s>10)printf("\ninputerror!");else{switch(s){easel0:case9:ch='A';break;case8:ch='B';break;case7:ch='C;break;case6:ch='D';break;default:ch=*E;printf(H\nthestudentscort:%cH,ch);输入测试数据,同方法ーー样调试程序并写出结果。[例3]有一函数:y=xx<12x-11=<x<103x-11x>=10用scant函数输入x的值(分别为x<1,1-10,>=10三种情况),求y值。分析:y是ー个分段表达式。要根据x的不同区间来计算y的值。所以应使用If语句。main(){intx,y;printf("pleaseinputx:");scanf("%d”,&x);if(x<1)(y=x;printf(tty=%d\nw,y);elseif(x<10)y=2*x-1;printf(ay=%d\nM,y);)else(y=3*x-11;printf(My=%d\n,,,y);}【作业】.c语言如何表示“真”与“假”?系统如何判断ー个量的“真”与“假”?.写出下面各逻辑表达式的值。设a=3,b=4,c=5⑴a+b>c&&b==c(2)a||b+c&&b-c(3)!(a>b)&&!c||1(4)!(x=a)&&(y=b)&&0(5)!(a+b)+c-1&&b+d2.有3个整数a、b、c,由键盘输入,输出其中最大的数。4,有一函数:y=xx<12x-11=<x<103x-11x>=10写ー程序,输入x,输出y。.给出ー百分制成绩,要求输出成绩等级A、B、CD、E。90分以上为A,8〇〜89为B,7〇〜79分为C,60〜69分为D,60分以下为E。.给ー个不多于5位的正整数,要求:a.求出它是几位数;b.分别打出每一位数字:C.按逆序打出各位数字,例如原数为321,应输出123。.输入4个整数,要求按由小到大的顺序输出。实验五循环结构程序设计【目的与要求】熟练掌握while,do—while和for三种循环语句的应用。【上机内容】【•般示例】【例1】求5!main(){intn,t;n=1;t=1;while(t<=5){n=n*t;t=t+1;printf(tt%dw,n);【例2】求和s=1!+2!+3!main(){intn,s=0,t=1;for(n=1;n<=3;n++){t=t*n;s=s+t;)printf(u%d",s);)【例3I求和s=1!+3!+5!main(){ints=O,t,i,j;for(i=1;i<=3;i++){t=1;for(j=1;j<=2*i-1;j++)t=t*j;s=s+t;)printf(u%d",s);)【例4】求和s=3+33+333main()(ints=0,t=3,i;for(i=1;i<=3;i++){s=s+t;t=10*t+3;}printf(H%dn,s);}【例5】有一数列:2/1,3/2,5/3,8/5,.・求出这个数列的前10项之和。main()(intn,t,;floata=2,b=1,s=0;for(n=1;n<=10;n++)s=s+a/b;t=a;a=a+b;b=t;)printf(u%f-,s);)【例6】打印500以内的“水仙花数”。“水仙花数”是ー个三位数,其各位数立方和等于该数本身。main()(intfor(n=100;n<=500;n++){i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf(M%d;n);【例7】一个数如果恰好等于它的因子之和,这个数就称为完数。求100之内的所有完数。main()intn,s,j;for(n=1;n<=100;n++)(s=0;for(j=1;j<n;j++)if(n%j==0)s=s+j;if(s==n)printf(u%d-,s);))【典型示例】【例1】计算两个数的最大公约数;分析:首先,随机输入两个数m,n(默认m>n);其次,算法:使k为m除以n的余数,如果m能被n整除,则k值为〇,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。#include"stdio.h"main(){intm,n,k,result;printf("Entertwonumbers:");scanf("%d,%d",&m,&n);if(m>0&&n>0)/・限定两个正整数・/do(k=n%m;if(k==0)result=m;else(n=m;m=k;}}while(k>0);/・循环取余求出最大公因子・/printf(MThegreatestcommondivistoris:%d\nM,result);}elseprintf("Nonpositivevaluesnotallowed\n");}【例2]用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。#include“math.h"main()x=1.0;do{xO=x;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=xO-f/f1;}while(fabs(x-xO)>=1e-5);printf(“%6.2f”,x);}【例3】打印下列图案main(){inti,j;for(i=1;iv=4;i++){for(j=1;j<=4-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("・り;【例4】判断m是否是素数。程序:#include<math.h>main()(intm,i,k;scanf("%d”,&m);k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf("%disaprimenumber\n,J,m);elseprintf(“%disnotaprimenumber\n"m);【作业】.输入两个正整数m和n,求其最大公约数和最小公倍数。.求Sn=a+aa+aaa+...+aa..a之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。.求和1!+2!+3!+4!+..20!.打印100-999之间所有的“水仙花数”。“水仙花数”是ー个三位数,其各位数立方和等于该数本身。.ー个数如果恰好等于它的因子之和,这个数就称为完数。求1000之内的所有完数。.有一数列:2/1,3/2,5/3,8/5,..求出这个数列的前20项之和。.用迭代法求x=Va。求平方根的迭公式为xn+1=1/2(xn+a/xn)要求前后两次求出的x的差的绝对值小于10-5.用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。.打印下列图案实验六一维数组【目的与要求】.掌握ー维数组的定义、赋值和输入输出的方法;.掌握字符数组的使用;.掌握与数组有关的算法(例如排序算法)。【I:机内容】【一般示例】【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。方法一:起泡排序从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(№1)个数,以此类推直到第(№1)遍比较后就可以完成排序。源程序如下:#defineN10#include"stdio.h"main(){inta[N],i,j,temp;printf("pleaseinput%dnumbers\n",N);for(i=0;i<N;i++)scanf("%d",&a/-for(i=O;i<N-1;i++)for(j=0;j<N-1-i;j++){if(a[j]>a[j+1])/temp=a[j];aU]=a[j+1];a[j+1]=temp;}}printff"thearrayaftersort:\n");for(i=0;ivN;i++)printf("%5d",a);}方法二:选择排序首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置:然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。ffindude"stdio.h"#defineN10main(){intprintff"pleaseinput%dnumbers\n",N);for(i=0;ivN;i++)scanf("%d",&a);for(i=0;i<N-1;i++){r=i;for(j=i+1;j<N;j++)if(a[j]<a[r])r=j;if(r!=i){temp=a[r];a[r]=a;a=temp;}}printff'thearrayaftersort:\n");for(i=0;ivN;i++)primf("%5d”,a);printf(H\nn);}【例2】青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后ー个分数以外的数的平均分,其中排序部分这里用选择法实现。main(){inti.j.min;floattemp,ave=O;floata[11];printf("\n输入评委所打的分数バn");scanf("%ド,&a);for(i=1;iv=9;i++){min=i;for(j=i+1;jv=10;j++)if(a[min]>a[j])min=j;temp=a;a=a[min];a[min]=temp;}for(i=2;i<=9;i-b+)/*注意/值的变化范围・/ave=ave+a;printf("选手所得最后分数:%6.1f",ave/8);printf(',\nH);}【例3】输入一串字符,计算其中空格的个数。ffindude<stdio.h>main(){charc[30];/nti,sum=O;gets(c);for(i=O;i<str!en(c);i++)if(c==>>)sum=sum+1;printf(〃空格数为:%dIn-tsum);}【作业】.已有一个已排好序的数组,今输入ー个数,要求按原来排序的规律将它插入数组中。.将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。.有15个数按由小到大顺序存放在ー个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。.编ー程序,将两个字符串连接起来,不要用strcat函数。实验七二维数组【目的与要求】.掌握二维数组的定义、赋值和输入输出的方法;.掌握字符数组的使用;.掌握与数组有关的算法(例如排序算法)。【上机内容】【一般示例】【例1】有一个3x4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。#defineM3#defineN4main(){intmax,i,j,r,c;staticinta[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};max=a[0][0];for(i=0;i<M;i++)for(j=0;j<N;i++)if(a[i][j]>max){max=a[i][j];r=i;c=j;)printf(,'max=%d,row=%d,colum=%d\n",max,r,c);)【例2】打印以下图案:main(){chara[5]=inti,j,k;charspace='for(i=0;iv5;i++)/・输出5行・/{printf(w\nM);/*输出每行前先换行・/printfC'");/*每行前面留5个空格・/for(j=1;j<=i;j++)printf(H%cn,space);/*每行再留1个空格・/for(k=0;k<5;k++)printf(”%c”间k]);/*每行输入5个・号・/}}【例3】求矩阵下三角形元素之和。#defineN6main(){inti,j,sum=0;inta[N][N]={0};printf(Hinput5x5dataヘバ);for(i=1;i<N;i++){printf("Inputthe%dlinedata:\n",i);for(j=1;j<N;j++)scanf(M%dw,&a[i][j]);}for(i=1;i<N;i++){for(j=1;j<N;j++)pnntf(,,%5d,,,a[i][j]);printf(H\n");}for(i=1;i<N;i++)for(j=1;j<=i;j++)sum=sum+a[i][j];printf(,'sum=%d\n,',sum);}【作业】.求一个3x3矩阵对角线元素之和。.打印出以下的杨辉三角形(要求打印出10行)。111121133114641151010513.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数实验ハ函数【目的与要求】.掌握C语言函数的定义方法、函数的声明及函数的调用方法。.了解主调函数和被调函数之间的参数传递方式。【上机内容】【一般示例】【例1】写ー个判断素数的函数,在主函数输入ー个整数,输出是否素数的信息。源程序如下:mian(){intnumber;printf(“请输入ー个正整数:'n");scanf(M%dn,&number);if(prime(number))printf(H\n%d是素数.”,number);elseprintf(u\n%d不是素数.”,number);}intprime(number)/・此函数用于判别素数・/intnumber;{intflag=1,n;for(n=2;n<number/2&&flag==1;n++)flag=O;return(flag);}判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。【例2】写ー函数,是给定的•个二位数组(4x4)转置,即行列互换。源程序如下:/・矩阵的转置・/#defineN4intarray[N][N];convert(array)intarray[4][4];{inti,j,t;for(i=0;i<N;i++)for(j=i+1;j<N;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;main()inti,j;printf(“输入数组元素:'n");for(i=0;i<N;i++)for(j=O;j<N;j++)scanf(M%d;&array[i][j]);printf("\n数组是:'n");for(i=0;i<N;i++){for(j=O;j<N;j++)printf(tt%5dw,array[i][j]);printf(a\nw);}conver(array);printf(“转置数组是:'n");for(i=0;i<N;i++){for(j=O;j<N;j++)printf(u%5dn,array[i][j]);printf"”);本例题用数组作为函数参数,大家要注意数组作为函数参数时的用法。【典型示例】【例1】写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。源程序如下:#include"stdio.h"hcf(u,v)intu,v;|inta,b,t,r;if(u>v){t=u;u=v;v=t;}a=u;b=v;while((r=b%a)!=0){b=a;a=r;}return(a);}lcd(u,v,h)intu,v,h;return(u*v/h);main()(intu,v,hj;scanf("%d,%d",&u,&v);h=hcf(u,v);printf(HH.C.F=%d\n",h);l=lcxl(u,v,h);printf(wLGD=%d\nH,l);}这是一个十分典型的算法,同学们一定要认真分析、学

温馨提示

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

评论

0/150

提交评论