高级程序设计I(C语言)实验指导书_第1页
高级程序设计I(C语言)实验指导书_第2页
高级程序设计I(C语言)实验指导书_第3页
高级程序设计I(C语言)实验指导书_第4页
高级程序设计I(C语言)实验指导书_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

高级语言程序设计I(C语言)实验

指导书四川大学计算机学院计算机工程系C语言教学组编写

洪枚审定高级程序设计I(C语言)实验指导书

目录TOC\o"1-5"\h\z使用说明 4实验一 C语言程序初步 9实验二 数据类型 11实验三运行符与表达式 12实验四 输入与输出 13实验五 选择结构 15实验六条件型循环结构 17实验七计数型循环结构 18实验八 函数的定义及调用 20实验九 数组 21实验十 指针(一) 24实验十二结构体和共用体 29实验十三 位运算 30实验十四 文件 31实验十五 综合应用举例(一) 32实验十六 综合应用举例(二) 37附录一:TurboC程序设计上机指导 42Turbo C 程序设计初步 42Turbo C 常用的编辑命令 44Turbo C程序的调试 46Turbo C编译、连接和运行时的常见错误 48附录二:C语言程序设计调试技术 51C语言程序设计调试技术(一)——运行错误的判断与调试 51C语言程序设计调试技术(二)——基本调试手段 51C语言调试技术(三)-TurboC集成环境的调试功能 52C语言调试技术(四)一图形程序运行的条件 53附录三:《四川大学计算机学院C语言考试系统》样题 55选择题 55改错题 58编程题 59附录四:全国计算机等级考试试题选编 60\o"CurrentDocument"二级C语言上机试题(1999年秋季1,2,3)套 60第一•套 60第二套 62第三套 64—CiS (1,2,3) ..........................................................................66(第一套)1997年9月全国计算机等级考试笔试试卷 66(第二套)2001年4月二级C笔试试题 70(第三套)2001年9月二级C笔试试题 85附录五:《C语言》课程教学大纲 99一、本课程的地位与任务 99二、本课程的基本要求与基本内容 99三、本课程的教学要求: 100四、学时分配 101五、教材和参考书 101电地暖使用说明本实验指导书为开设《高级语言程序设计I(C语言)》课程的专业使用,各专业根据本专业的教学计划和实验任务书,选做规定的实验项目。全院各专业所做的实验项目具体说明和要求如下:必须完成本指导书的实验一、二、三、五、六、八、九、十、十二、十四,共十个实验项目的内容。(2005年级开绐执行)计算机学院2006-7、VisualC++实验环境介绍1、VisualC++简介VisualC++是Microsoft公司的VisualStudio开发工具箱中的一个C++程序开发包。VisualStudio提供了一整套开发Internet和Windows应用程序的_1:具,包括VisualC++,VisualBasic,VisualFoxpro,VisualInterDev,VisualJ++以及其他辅助工具,如代码管理工具VisualSourceSafe和联机帮助系统MSDN。VisualC++包中除包括C++编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。从最早期的L0版本,发展到最新的6.0版本,VisualC++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。最新的6.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。VisualC++一般分为三个版本:学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种。VisualC++集成开发环境(IDE)集成开发环境(IDE)是一个将程序编辑器、编译器、调试工具和其他建立应用程序的工具集成在•起的用于开发应用程序的软件系统。VisualC++软件包中的DeveloperStudio就是•个集成开发环境,它集成了各种开发工具和VC编译器。程序员可以在不离开该环境的情况下编辑、编译、调试和运行一个应用程序。IDE中还提供大量在线帮助信息协助程序员做好开发工作。DeveloperStudio中除了程序编辑器、资源编辑器、编译器、调试器外,还有各种工具和向导(如AppWizard和ClassWizard),以及MFC类库,这些都可以帮助程序员快速而正确地开发出应用程序。向导(Wizard)向导是一个通过一步步的帮助引导你工作的工具。DeveloperStudio中包含三个向导,用来帮助程序员开发简单的Windows程序,它们是:AppWizard:用来创建一个Windows程序的基本框架结构。AppWizard向导会一步步向程序员提出问题,询问他所创建的项目的特征,然后AppWizard会根据这些特征自动生成一个可以执行的程序框架,程序员然后可以在这个框架下进一步填充内容。AppWizard支持三类程序:基于视图/文档结构的单文档应用、基于视图/文档结构的多文档应用程序和基于对话框的应用程序。也可以利用AppWizard生成最简单的控制台应用程序(类似于DOS下用字符输入输出的程序)。ClassWizard:用来定义AppWizard所创建的程序中的类。可以利用ClassWizard在项目中增加类、为类增加处理消息的函数等。ClassWizard也可以管理包含在对话框中的控件,它可以将MFC对象或者类的成员变量与对话框中的控件联系起来。ActiveXControlWizard:用于创建一个ActiveX控件的基本框架结构。ActiveX控件是用户自定义的控件,它支持一系列定义的接口,可以作为一个可再利用的组件。MFC库库(library)是可以重复使用的源代码和目标代码的集合。MFC(MicrosoftFundamentalCasses)是VisualC++开发环境所带的类库,在该类库中提供了大量的类,可以帮助开发人员快速建立应用程序。这些类可以提供程序框架、进行文件和数据库操作、建立网络连接、进行绘图和打印等各种通用的应用程序操作。使用MFC库开发应用程序可以减少很多工作量。2、项目开发过程在一个集成的开发环境中开发项目非常容易。一个用C++开发的项目的通用开发过程可以用左图表示。建立一个项□的第一步是利用编辑器建立程序代码文件,包括头文件、代码文件、资源文件等.然后,启动编译程序,编译程序首先调用预处理程序处理程序中的预处理命令(如#include,#define等),经过预处理程序处理的代码将作为编译程序的输入。编译对用户程序进行词法和语法分析,建立目标文件,文件中包括机器代码、连接指令、外部引用以及从该源文件中产生的函数和数据名。此后,连接程序将所有的目标代码和用到的静态连接库的代码连接起来,为所有的外部变量和函数找到其提供地点,最后产生一个可执行文件。一般有一个makefile文件来协调各个部分产生可执行文件。 可执行文件分为两种版本:Debug和Release。Debug版本用于程序的开发过程,该版本产生的可执行程序带有大量的调试信息,可以供调试程序使用,而Release版本作为最终的发行版本,没有调试信息,并且带有某种形式的优化。学员在上机实习过程中可以采用Debug版本,这样便于调试. 选择是产生Debug版本还是Release版本的方法是:在DeveloperStudio中选择菜单BuildlSetActiveConfiguration,在弹出的对话框中,选择所要的类型,然后选择OK关闭对话框。VisualC++集成开发环境中集成了编辑器、编译器、连接器以及调试程序,覆盖了的开发应用程序的整个过程,程序员不需要脱离这个开发环境就可以开发出完整的应用程序。helloexe helloexe3、集成开发环境进入DeveloperStudio 如果你使用的是VisualC++6.0,则要进入DeveloperStudio,需要单击任务栏中“开始“后选择“程序",找至ljMicrosoftVisualStudio6.0文件夹后,单击其中的MicrosoftVisualC++6.0图标,则可以启动DeveloperStudio0 如果你使用的是VisualC++5.0,则要进入DeveloperStudio,需要单击任务栏中“开始“后选择"程序",找至"MicrosoftVisualC++5.0文件夹后,单击其中的MicrosoftVisualC++5.0图标,则可以启动DeveloperStudiooDeveloperStudio的界面DeveloperStudio用户界面是一个由窗口、工具条、菜单、工具及其他部分组成的一个集成界面。通过这个界面,用户可以在同一环境下创建、测试、调试应用程序。VC5和VC6的DeveloperStudio的初始化界面有一些小的差异,VC5的界面如下:

'、状态条'、状态条工具条和菜单,用于提供用户操作的命令接口。菜单以文字和层次化的方式提供命令接口,工具条由一系列按钮组成。这些按钮用•系列小的位图标志。工具条以图标方式提供快速的命令选择。菜单和工具条在开发的不同进程有不同显示内容。当第一次打开DeveloperStudio时,标准的工具条和菜单就会显示出来,随着开发的不同步骤,不同的工具条就会自动显示出来,菜单也会有所变化。工具条有很多种,你可以显示任意多的工具条,只要屏幕空间允许。工具条可以任意移动,也可以放大缩小。工具条和菜单条功能基本相同,唯的区别是:菜单条总占据•行,并且般不能隐藏。 工作区窗口,这个窗口包含关于正在开发的这个项目的有关信息。在没有开发任何项目时,该窗口显示系统的帮助目录。当打开一个项目以后,工作区窗口将会显示关于当前项目的文件信息和类的信息。下图是打开个项目hello以后的工作区窗U(假设该项目由两个文件cppl.cpp,cpp2.cpp组成)。用Workspace'hello':1project(s)-@1hellofiles21cpp1.cpp/cpp2.cpp■:■:ClassView国FHeVlewI?InfoView文档窗口区,这个区域可以显示各种类型的文档,如源代码文件、头文件、资源文件等。可以同时打开多个文档。输出窗口,输出窗口用来显示几种信息,可以通过选择不同的标签显示不同的信息。这些信息包括:编译连接结果信息(Build标签)、调试信息(Debug标签)、杳找结果信息(FindinFiles标签)。其中查找结果信息有两个标签,可以显示两次在文件中查找指定内容的结果 VC6因为在联机帮助系统上比VC5做了很大改进,所以在工作区窗口中没有VC5的InfoView,初始化界面的其他部分都与VC5相似。DeleveloperStudio使用MicrosoftDeveloperNetwork(MSDN)库作为它的联机帮助系统。其界面如下:总的来说,窗口和命令接口(包括工具条和菜单条)是构成界面的最主要组成部分。通常有两种窗口:文档窗口和可附着(docking)窗口。文档窗口显示在文档窗口区,用于显示和编辑文档,其的大小和位置可以随其所处的DeveloperStudio窗口的改变而改变,可以最大化和最小化。可附着窗口可以附着于应用程序窗口的边界,也可以浮在屏幕上的任何位置。可附着窗口有:工作区(workspace)窗口,输出(output)窗口,调试窗口(包括variable,watch,local等窗口)等。 文档窗口的位置、大小及是否可见和它所在的项目有关,docking窗口的位置、大小及是否可见则与项目进行的状态以及各种编辑和调试的操作有关。各种窗口和各种工具条以及菜单构成了界面的布局。一旦用户决定了一种界面布局,系统就会为一直为用户保持这种布局,直到用户下一次改变该布局为止。 获得帮助信息大多数时候,你可以通过按FI得到上下文帮助。如在编辑文件时按F1可以得到有关编辑的帮助,在编译连接错误信息上按F1可以得到关于该错误的帮助信息。如果想系统地获得帮助,在VC5中可以单击工作区窗口的InfoView标签,从其中选择要想了解的内容。要想查找关于某个话题的帮助,可以选择菜单HelplSearch,在查询对话框中进行查找。VC6中,可以通过选择菜单HelplContents来启动MSDN查阅器,MSDN查阅器是•个功能强大的程序,可以方便地浏览、查找信息,要想知道具体如何使用MSDN查阅器,可以在MSDN查阅器中选菜单Help下的命令。VisualC++的编辑器 DeveloperStudio包含,个功能强大的编辑器,可以编辑将被编译成Windows程序的VisualC++源文件。这个编辑器有点象字处理器,但是没有字处理器具备的复杂的排版、文本格式等功能,它注重的是如何帮助程序员快速高效地编制程序。它具有以下特点: 自动语法。用高亮度和不同颜色的字来显示不同的语法成分,如注释、关键字和一般代码用不同的颜色显示自动缩进。帮助你排列源代码,使其可读性更强 参数帮助。在编辑时用到预定义的windows函数时,可以自动为你显示函数参数 集成的关键字帮助。能够使你快速得到任何关键字、MFC类或Windows函数的帮助信息(按Fl即可) 拖放编辑。能够用鼠标选择文本并自由拖动到任意位置 自动错误定位。能自动将光标移动到有编译错误的源代码处。 当你打开一个源代码文件时,就可以利用编辑器对其进行编辑。源代码文件在文档显示区显示,每个文件有独立的显示窗口。如果你选择用其他编辑器编辑源文件,必须将它以纯文本的方式保存。VC的编译器不能处理其中有特别格式字符的文件。4、常用功能健及其意义为了使程序员能够方便快捷地完成程序开发,开发环境提供了大量快捷方式来简化一些常用操作的步骤。

键盘操作直接、简单,而且非常方便,因而程序员非常喜欢采用键盘命令来控制操作。下面是一些最常用的功能键,希望学员在实验中逐步掌握。操作类型功能键对应菜单含义文件操作Ctrl+NFilelNew创建新的文件、项口等Ctrl+OFilelOpcn打开项目、文件等Ctrl+SFilelSave保存当前文件编辑操作Ctrl+XEditICut剪切Ctrl+CEditICopy复制Ctrl+VEditIPaste粘贴Ctrl+ZEditlUndo撤消上••个操作Ctrl+YEditIRedo重复上一个操作Ctrl+AEditlSelectAll全选DelEditIDel删除光标后面的一个字符建立程序操作Ctrl+F7BuildlCompilercurrentfile编译当前源文件Ctrl+F5BuildlRunexe运行当前项目F7BuildlBuildexe建立可执行程序F5BuildlStartDebugging启动调试程序调试F5DebugIGo继续运行FHDebuglStcpinto进入函数体内部shift+FllDebuglStepout从函数体内部运行出来F10DebuglStepover执行一行语句F9设置/清除断点Ctrl+FlODebugIRuntocursor运行到光标所在位置shift+F9DcbugIQuickWatch快速查看变量或表达式的值Shift+F5DebuglStopdebugging停止调试实验一 C语言程序初步一、目的和要求1、熟悉c语言运行环境。2、掌握C语言程序的书写格式和C语言程序的结构。3、掌握C语言上机步骤,了解运行一个C程序的方法。4、本实验可在学习完教材第一章后进行。二、实验内容1、C语言上机步骤:(A)、在四川大学计算机基础教育实验中心上机,启动后请选择进入Windows2000系统。(B)、常用命令编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一"。2、有下面的C程序,目的是想计算由犍盘输入的任意两个整数的积。/********exl.c********/#include(stdio.h);main()scanf(k4%x,%yM,&x,%y)p=prodct(x,t)printf(44Theproductis:",p)intprodct(inta,intb)intcc=a*breturnc请调试上述程序。三、实验步骤1、静态地检查上述程序,改正程序中的错误。2、在编辑状态下照原样键入上述程序。3、编译并运行上述程序,记下所给出的出错信息。4、按照事先静态检查后所改正的情况,进行纠错。5、再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。6、下面给出6组测试用例,你认为哪几组较好?为什么?(1)0, 0(2)0, 99(3)20,50(4)33000,20(5)—5,-2(6)-5,2要测试出上述程序中所有错误,你认为应当用几组测试用例?四、分析与讨论1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。2、总结C程序的结构和书写规则。实验二数据类型一、目的和要求1、了解C语言中数据类型的意义。2、本实验可在学习了教材第2.3节后进行。二、实验内容和步骤1、下面的程序试图计算由键盘输入的任意两个整数的平均值:#include<stdio.h>main()(intx,y,a;scanf(44%x,%y,&x,&y);a=(x+y)/2;printf(**Theaverageis:"a);}调试无语法错误后,分别使用下列测试用例对上述程序进行测试:(1)2,6(2)1,3(3)—2,—6(4)-1,-3(5)-2,6(6)—1,3TOC\o"1-5"\h\z(7) 1 , 0(8) 1 , 6(9) 3 2 8 0 0, 3 3 0 0 0(10 )- 3 2 8 0 0, 3 3 0001、分析上述哪几组测试用例较好?通过测试,你发现程序有什么错误了吗?若有错误,请指出错误原因。2、操作符sizeof用以测试一个数据或类型所占用的存储空间的字节数。请编写一个程序,测试各基本数据类型所占用的存储空间大小。三、分析与讨论如何正确地选用数据类型?(提示:给合前面做过的两个实验及书本进行讨论总结)实验三运行符与表达式一、目的和要求1、理解常用运行符的意义。2、掌握C语言表达式的运行规则。3,本实验可在学习了教材第2.3节后进行。二、实验内容和步骤1、编写一个C语言程序,测试下列各表达式>Ji+l,j+1i++,j++++i,++ji+++++j++i+++++j++要求在各表达式中i和j都分别有相同的初值。在实验中注意下列问题:(1)哪些表达式是错误的?为什么?(2)理解+,++,++i,i++的意义和优先级别。2、编写一个程序,测试常用的十个运算符的优先顺序。四、分析与讨论分析总结运算符的优先级。实验四输入与输出一、目的和要求I、掌握C语言程序输入、输出的方法和格式。2、本实验可在学习教材第二章后进行。二、实验内容与步骤1、输入并编辑下面的程序main()(inta,b;floatc,d;longe,f;unsignedintu,v;charcl,c2;scanf(tt%d,%d,\a,b);scanf("%f,%F',c,d);scanf(ut%ld,%ld,\e,D;scanf(tt%o,%o,\u,v);scanf(i4%c,%c,,,cl,c2);printf("\n”);printf(t<a=%7d,b=%7d\n,,,&a,&b);printf(4<c=%10.2f,d=%10.2f\n,\&c,&d);printf("e=171d,f=%1printf(Mu=%o,d=%o\n,,,&u,&v);printfC4cl=%c,d=%c\n,,,&cI,&c2);这个程序有语法错误吗?为什么?2、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,cl='a',c2='b'分析运行结果。特别注意输入cl,c2的值是什么?什么原因?3、将输入e和f的语句改为:scanf("%d,%d”,&e,&f);再用上述测试数据测试并分析结果。4、将输入u、v的语句改为:scanf("%d,%d'',&u,&v);再用上述测试数据测试并分析结果。5、将输出e,f的语句改为:printf(4,e=%17d,f=%17d\n”,e,f);再用上述测试数据测试并分析结果。6、将输出u、v的语句改为:printf("u=%u,v=%u\n”,u,v);或printf(44u=%d,v=%d\n,,,u,v);再用上述测试数据测试并分析结果。7、请读者自己修改程序和改变数据输入的形式,分析各种情况下的输入与输出。8、在scanf("%c,%c”,&cl,&c2);语句之前加一个语句:getchar();9、验证转义字符\n与\r的意义有何不同。三、分析与讨论1、总结在printf函数中可以使用的各种格式指定符,并给出样例。2、总结在printf函数中可以使用的各转义字符及其功能。实验五选择结构一、实验目的1、了解条件与程序流程的关系2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。3、本实验应在学习教材第3.2节后进行。二、实验内容和步骤1、题目有如下程序段:if(a>l&&b==0)x=x/a;if(a==2llx>l)x=x+l;}为了更容易明白程序的逻辑结构,我们用图5.1所示流程图来加以描述。要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。2、实验步骤记下分别使用下列各组数据运行时的操作流程。(1)a=l,b=l,x=i;(2)a=l,b=l,x=2;(3)a=3,b=0,x=l;(4)a=2,b=l,x=4;(5)a=2,b=l,x=l;(6)a=l,b=0,x=2;(7)a=2,b=l,x=l;(8)a=3,b=0,x=2o三、分析讨论用哪一组数据就可使程序中的每个处理语句都执行一次?为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?请上机验证自己的结论。用哪两组数据就可以使程序段中的每个分支都运行一次?这种情形与上面的讨论有何不同?如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?请上机验证自己的结论。用哪两组数据就可以把判定框中的每个条件运算都进行一次?如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?请上机验证自己的结论。用哪四组数据才可以把各种条件的组合都检测一遍?如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?请上机验证自己的结论。用哪四组数据才可以把起始到终止的各条路径都覆盖一次?如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?请上机验证自己的结论。四、进一步的实验.题目从键盘上输入三个数,让它们代表三条线段的长度,请写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三角形)的C程序。.请分别设计下列数据对自己的程序进行测试:找出各条语句中的错误。找出积压分支中的错误。找出各条件中的错误。找出各种条件组合中的错误。找出各条路径中的错误。实验六条件型循环结构一、目的和要求1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。2、了解条件型循环结构的基本测试方法。3、本实验可在学习教材3.3节后进行。二、实验内容与步骤1、下面是一个计算e的近似值(使误差小于给定的6)的程序。main(){doublee=1.0,x=1.0,y,detax;inti=l;printf(44\npleaseinputenteraerror:");scanf(44%lf\&detax);y=i/x;while(y>=detax)(x=x*I;y=l/x;e=e+y;++i;|printfC%12.101f\e);}2、实验步骤(1)、阅读上面的程序,写出程序所依据的计算公式。(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:.不进入循环;.只循环一次;.只循环两次;.进入死循环(程序将永远循环下去)。为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?(3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y<detax,y<=detax,观察程序运行将会有什么变化。假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。(4)、把原程序中while语句之前的y=l/x语句去掉,观察程序的运行将会发生什么样的变化。假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。(5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化?假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了.(6)、把原程序中的while结构改写成do—while结构,再分别按上述的(2)、(3)两步进行实验。三、分析讨论总结一下测试条件循环结构的一般方法。实验七计数型循环结构一、目的和要求1、掌握如何正确地控制计数型循环结构的次数2、了解时计数型循环结构进行测试的基本方法3、了解在嵌套循环结构中,提高程序效率的方法4,本实验应在学习了教材第3.3.4进行二、 实验内容与步骤1、实验题目下面是一个用以计算 的C程序。main()(inti,j;longsum=0;for(i=1,i<=20,i++)for(j=l;j<=3;j++)sum=sum+(i+l)*(i+l)*(j+2)printf(4tsumis:%d\n”,sum);)2、实验步骤将上述程序中的和分别做什么样修改,能使程序按如下要求运行:.不循环;.外循环1次,不进入内循环;.外循环,内循环各1次;.外循环1次,内循环2次;•外循环2次,内循环1次;.外循环19次,内循环3次;・外循环20次,内循环2次;.外循环21次,内循环3次。试修改程序,以便能知道控制表达式i=|;j<=20;i++和j=l;j<3;j+=各执行了多少次?(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对换后的外循环与内循环控制表达式执行的总次数有无变化?(4)将(3)中程序写为main()(inti,j,k;longsum=0;for(j=l.j<=3.j++)(k=j+2;for(i=l;i<=20;i++)sum=sum+(i+l)*(i+1)**k;1printf(**sumis:%d\n”,sum);}观察程序的执行结果有无变化?(5)将(3)中程序改写为main()(intlongsum=0;for(j=l;j<=3;j++)(m=j+2;for(I=1;j<=20;I++){n=I+1;sum=sum+m*m*k;))printf(44sumis:%d\n'',sum);)观察程序的执行结果有无变化?(6)在(5)的程序中,若将外循环控制表达式分别做如下修改:.j=l;j<3;j++.j=l;j=3;j++.j=l;j>=3;j++.j=l;j>3;j++.j=l;j<=3;j-.j=l;j>3;j-.j=l;j<3;j++,j=O;j<=3;j+=.j=O;j<3;j++j=l;j<=3;j++j=l;j<3;++j观察程序的执行结果有无变化?三、分析讨论如何测试计数型循环结构的控制表达式中的错误?从实验中你得到了哪些提高嵌套循环程序效率的启示?

实验八函数的定义及调用目的与要求掌握C语言函数定义及调用的规则。理解参数传递的过程。本实验可在学习了教材第4.1节后进行。二、实验内容与步骤1、上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。main()int,y;printf("%d\n”,sum(x+y));intsum(a,b)inta,b;return(a+b);2、编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。三、分析讨论1、针对以上实验内容写出相应的参数传递过程并分析结果。2,讨论参数的传递的几种形式。实验九数组一、目的和要求1、掌握数组定义的规则。2、掌握C语言数组的基本用法。3,本实验可在学习教材第5.2节后进行。二、实验内容与步骤1、编写程序,测试下列数组的定义方式是否正确main()(intn;scanf("%d”,&n);inta[n];main()(constintn=10;inta[n];#include<stdio.h>#defineM10main()(inta[M];main()(inta[2+2*4];#include<stdio.h>#defineM2#defineN8main(){inta[M+N];通过这一实验,可以说明什么问题?2、运行下面的C程序,根据运行结果,可以说明什么?main(){intnum[5]={1,2,3,4,5};intii;for(i=0;i<=5;i++)printf("%d”,num[i]);)3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。4、为一个起泡排序程序设计测试用例,并测试之。5、1983年,在ACM图林奖颁奖大会匕杰出的计算机科学家,UNIX的鼻祖,C语言的创始人之一,图林大奖得主,KenThompson上台的第一句话是:“我是一个程序员,在我的1040表上,我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。”这个程序如下:chars[J={'\t','O','\n',,,An',An',7\,*,fAn',/*(213linesdeleted)*/0卜i*Thestringisarepresentationofthebodyofthisprogramfrom'O'totheend/main(){inti;printff<char\ts[]={V,};for(i=0;s[i];i++)printf(<<\t%d,\n,,,s[i]);printf(“%s”,s);)请上机运行这个程序,指出它的功能和运行结果。三、分析讨论通过实验,分析定义与引用数组的区别。实验十指针(一)一、目的和要求.熟悉指针的正确用法。.本实验可在学习了教材第6.3节之后运行。二、实验内容和步骤1、指出下面程序错误的原因。main()(intx=10,y=5,*px,*py;px=py;px=&x;py=&y;printf(<**px=%d,*py=%d,*px,*py);)2、下面的程序试图有如下运行结果:whichstyleyouwantto:Capital(c)oruncapital(a):cZCOMPUTERWhichsytleyouwantto:Capital(c)oruncapital(a):u/computer请调试下面的程序,使其有如上执行结果。#include<stdio.h>main()(chars*;charc;printf(44whichstyleyouwantto:In");printf(44capital(c)oruncapital(a):");c=getchar();if(c='c')strcpy(s,"COMPUTER")elsestrcpy(s,"computer");put(s);}分析出错原因。.下面的程序能获得上述运行结果吗?main()(char*S="COMPUTER”;charc;printf(44whichstyleyouwantto\n");printfC^capital(c)oruncapital(u)f,);c=getchar();if(c=?c?)put(s);else{s=,,computef,;puts(s);)}分析出错原因。.设计一个C程序,用以测试下列各表达式的运算。y=*px++y=*++py⑶y=(*py)++y=—*ppx++三、分析讨论数组与指针的联系。实验十一指针(二)一、目的和要求了解指针参数的特殊性。掌握函数、指针、数组的用法。实验可在学习了教材第六章后进行。二、实验内容与步骤1、想使指针变量pU指向a和b中的大者,pt2指向小者,以下程序能否实现此目的?swap(int*pl,int*p2)(int*p;p=pl;pl=p2;p2=p;}main()(inta,b;scanf("%d,%d”,&a,&b);ptl=&a;pt2=&b;if(a<b)swap(ptl.pt2);printf("%d,%d\n”,*ptl,*pt2);)上机调试此程序。如果不能实现题目要求,指出原因,并修改之。2、下面的程序。注意其中的复杂声明语句;int(*function[4])();和各标记符的含义,并记录执行结果。main()(intfun1();intfun2();intfun3();intfun4();int(*function[4])();inta=10,b=5,i;function[0]=funl;function[l]=fun2;function[2]=fun3;function[3]=fun4;for(I=0;I<4;i++)printf(4tfunno.%d->%d\n,,,i+l,execute(a,b,function[i]));)execute(intx,inlyjnt*fun())retum(*fun)(x,y);)funl(intx,inty)(retum(x+y);}fun2(intx,inty)(retum(x-y);}fun3(intx,inty)(retum(x*y);}fun4(intx,inty)(retum(x/y);}3、程序main(intargc,char*argv[])(while(argc—>1)printf(4t%s\n,\*++argv);的文件名为echo.h,编译后可执行程序名为echo.exe(用DOS时),运行时输入下面命令行:echoBASICFORTRANCOBOLPASCL分析输出结果。4.从1984年起,在每年举行的USENIX大会匕都有一项AWARDFORBESTONE-LINER奖获奖的情况程序都是极精巧的C语言程序,但有些精巧得过分,使人难以懂。如果你有兴致,请先读一下下面的C程序,它是1987年获奖者ONLINECOMPOUTERSYSTEM公司的SEINCERHINES写的,被公认为是历史上风格最差的C语言程序,程序清单如下:#include<stdio.h>char*malloc();main(otgo.toog)inttogo;char*toog[J;(char*ogto;tgoop[80];FILE*ogot;intoogt=0;ootg,otog=79,ottg=1;if(togO==ottg)gotogogojgotogoog;ggot;if(fgets(tgoo,otog,ogot))gotogtgo;gotogott;gtot:exit();ogtg;++oogt;gotoogoo;togg:if(oogt>0)gotooggt;gotoggot;if(!ogot)gotogogo;gotoggto;gtto:printf(44%dgoto\s\nM,oogt);gotogtot;oggt:if(!memcmp(ogto,"goto",4))gotootgg;gotogooo;gogo:exit(ogtt);gtto:ootg=strlen(tgoo);gotogtog;oogo:-oogt;gototogg;goot-ogto;gotooogo;gott:fclose(ogot);gotgtto;otgg:ogto=ogto+3;gotoogtg;tgog:ootg-=4;gototogg;gtgo:ogto=tgoo;gototggo;ogoo:ootg-=3;gotogooo;goog:ogot=fopen(toog[ottg],,Y,);gotoogog;ggto;ggto:ogto=tgoo;gotoggto:}如果你上机还有时间,请运行一下上面的程序,看你能否运行出结果,并分析出程序的功能。实验十二结构体和共用体一、目的和要求1、掌握结构体类型方法以及结构体变量的定义和引用。2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。3、掌握运算符和的应用。4、共用体的概念和应用。二、实验内容和步骤1、按习题7.7的要求编写程序:有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。2、按习题7.8的要求,建立--个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat来建立链表,用list来输出数据。5个职工号为101,103,105,107,109o3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表.5、你有无办法测试构造链表时,内存空间的动态分配情形?实验十三位运算一、目的和要求.掌握位运算的概念和方法。.掌握位运算(&,I,人,〜)的使用方法。.掌握有关位运算的用法。二、实验内容和步骤.按习题8.2的要求,编一个程序,将一个整数的高字节和低字节分别输出(用位运算方法)。上机运行。.按习题8.6的要求,编一个程序,使一个整数的低4位翻转。上机运行,用十六进制数输入和输出。.按习题8.10的要求,将一个整数i的各位循环左移4位,设i的值为十六进制数fel3。.按习题8.13的要求,设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。实验十四文件目的和要求文件和文件指针的概念以及文件的定义方法。了解文件打开和关闭的概念及方法。掌握有关文件的函数。实验内容和步骤习题9.3的要求,从键盘输入一个字符串,然后将其以文件形式存到磁盘上。磁盘文件名为filel.dat。从磁盘文件filel.dat读入一行字符,将其中所有小写字母改为大写字母,然后输出到磁盘文件file2.dat中(习题9.4)。已有两个文本文件,今要求编程序从这两个文件中读出各行字符,逐个比较这两个文件中相应的行和列上的字符,如果遇到互不相同的字符,输出它是第几行第几列的字符(习题9.21)。按习题9.10的要求,统计一篇文章中大写字母的个数和文章中的句子数(句子的结束标志是句点后跟一个或多个空格)。实验十五综合应用举例(一)一、目的与要求1、熟悉C语言的端口及硬件控制的方法与原理。2、了解用C语言实现发声程序所要访问的端口。二、实验内容和步骤1、调试课本中例10.8程序,注意调出不同的效果。2、调试并总结程序中所用的知识点,写出乐谱文件播放的是什么乐谱?乐谱实例:6000h51h32h20.5h30.5hl4h21m72m60.5hl0.5m54m32m51.5m60.5hl1.5h20.5m60.5hl0.5m51h51.5hl0.5h60.5h50.5h30.5h50.5h24h21.5h30.5m71m61m51.5m60.5hl1h21m31hl1m60m50.5m60.5hl0.5m54h31.5h50.5m71h21m60.5hl0.5m53m30.m50.5m30.5m50.5m50.5m60.5m70.5h20.5m63m50.5m60.5hl1.5h20.5h51h31h21h30.5h20.5hl1m60.5m50.5m32hl2m60.5hl0.5m60.5m50.5m30.5m50.5m60.5hl0.5m53h30.5h50.5h20.5h30.5h20.5hl0.5m71m61h54##voidplay_music(char*filename)/*filename为音乐文件名格式见h*/(HLE*fp;intrate;charsound_high[3];floatsound_long;registerinti=0j;intsign=0;floatstr[1000][2];if((fp=fopen(filename,,,rM))=NULL){printf(nOpenfilemusic.docErrors!\nn);exit(l);)fscanf(fpj%d”,&rate);while(!feof(fp)&&!sign)(fscanf(fp,1,%s%f,,&sound_high,&sound_long);str[ij[lJ=rate*sound_long;switch(sound_high[0])(case'h':switch(sound_high[1]){caseT:str[i++][0]=1046.5;break;case2:str[i++][0]=l174.7;break;case31:str[i++][0]=1318.5;break;case4:str[i++][O]=1396.9;break;case'5':str[i++][0]=1568;break;str[i++][0]=1760;break;strli+4-][0]=1975.5;break;default:printf(n\nErrorMusic.doc\nH);break;break;case'm':switch(sound_high[l])caseT:str[i++][O]=523.3;break;strli++J[O]=587.3;break;str[i++JlO]=659.3;break;str[i++][0]=698.5;break;case'5':str[i++][0]=784.0;break;str[i++][O]=88O;break;strli++J[O]=987.8;break;default:printf(n\nErrormusic.doc.\nn);break;break;caseT:switch(sound_high[I])caseT:str[i++][0]=262;break;strli++][0]=296;break;str[i++][0]=329.6;break;str[i++][0]=349.2;break;case'5':str[i++][0]=392;break;str[i++][0]=440;break;str[i++][0]=493.9;break;default:printf("\nErrormusic.doc.\nH);break;}break;case**':switch(sound_high[1])(caseT:str[i++][O]=131;break;str[i++][0]=147;break;str[i++][O]=165;break;str[i++][0]=176;break;case'5':str[i++][0]=196;break;case6:str[i++][0]=220;break;case7,:str[i++][O]=247;break;default:printf(n\nErrormusic.doc\nH);break;)break;caseif(sound__high[l]==*#*)sign=I;break;case'x’:if(sound_high[l]=='0,)str[i++][0]=20;break;default:printf(n\nERRormusic.doc\nn);exit(l);for(j=0;j<=i-l;j++)(sound(str[j][0]);delay(str|j][l]);nosound();2、文件复制/*拷贝一个文件*/#include<stdio.h>main(argc,argv)intargc;char*argv[];(FILE*in,*out;if(argc!=3)(printf("Wrongfilestructure!\nK);exit(O);)if((in=fopen(argv[1];'rbM))=NULL) /*注意是(printf("Can'topeninfile.\nn);exit(O);)if((out=fopen(argv[2];'wbn))==NULL)/*注意是“wb"*/(printf("Can'topenoutfile.\n");exit(O);)while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);成批拷贝文件intCopyFile(char*sfile,char*dfile,intf2d,intbarlongjntheight,intx,inty){intCopyfile(char*sf,char*df);intMakeNdir(char*Dir);charfilename[200][13J,d[40],s[40],s1[40];structffblkffblk;intdone,ij,l,len;i=0;done=findfirst(sfile,&ffblk,0);if(!done)strcpy(filename[i],ffblk.ff_name);while(!done)(done=findnext(&tt'blk);if(!done)(i++;strcpy(filename[i],ffblk.flLname);if(f2d)(Copyfile(sfile,dfile);return1;strcpy(s,sfile);l=strlen(sfile);for(j=l-l;j>=0;j-)if(s[j]==N)(s[j+l]=O;break;实验十六综合应用举例(二)一、目的与要求1、掌握用C语言进行简单的数据库管理。2、了解C程序菜单设计的一般方法。3、理解链表的概念及应用。二、实验内容和步骤建立一个链表,每个结点包括学号、姓名、及三科成绩、平均成绩。除平均成绩外,各项均由键盘输入。要求:.计算平均成绩。.要实现插入功能。.要有排序功能。,要有存取功能。参考程序:^include<stdio.h>structSStudent(unsignednumber;charname[11];intscorel,score2,score3;structSStudent*link;};structSStudent*CreateTableO;voidAppendToTable(structSStudent*stu);voidInsertToTable(structSStudent*stu);voidQueryTable(structSStudent*stu,unsignedage);voidSortTable(structSStudent*stu);voidPrintTable(structSStudent*stu);voidSave(structSStudent*stu);voidLoad(structSStudent*stu);voidHelpO;voidmain()(structSStudent*student;unsignednumber;charkeyValue;student=CreateTableO;clrscr();HelpO;printf(*\n=");while((keyValue=getcheO)!= &&keyValue!='Q'&&keyValue!=27)(puts(**);switch(keyValue)(case,I*:case'L*:PrintTable(student);break;case'd*:case'D':printf(*Pleaseinputthenumberyouwantdelete:");scanf(*%d*,&number);QueryTable(student,number);break;case'a:case'A':AppendToTable(student);break;case'i,:case'F:InsertToTable(student);break;case's':case'S’:SortTable(student);puts(*Sortcomplished!PleaseusecommandLtolist.");break;case'v,:case'V':Save(student);break;case'o':case’0,:Load(student);break;case'c':case'C':clrscr();break;case'h':case'H':HelpO;break;default:puts(*Errorcommand!*);}printfC\n=");})structSStudent*CreateTableO{structSStudent*stu;stu=(structSStudent*)malloc(sizeof(structSStudent));stu->number=0;stu->scorel=stu->score2=stu->score3=0;stu->name[0]='\0';stu->link=NULL;return(stu);}voidAppendToTable(structSStudent*stu){structSStudent*next,*last;intnumber;last=stu;while(last->link)last=last->link;printf(*Pleaseinputthenumber(0toquit):");scanf("%d”,&number);while(number)(next=(structSStudent*)malloc(sizeof(structSStudent));next->number=number;printf(*Pleaseinputname:");scanf(*%10s*,next->name);printf(*Pleaseinputthefirstscore:");scanf&next->scorel);printf(*Pleaseinputthesecondscore:");scanf&next->score2);printf("Pleaseinputthethirdscore:");scanf&next->score3);last->link=next;last=last->link;printf(*\nPleaseinputthenumber(0toquit):");scanf&number);}last->link=NULL;voidInsertToTable(structSStudent*stu)(structSStudent*next,*last;intnumber;printf(*Pleaseinputthenumber(0toquit):");scanfftnumber);while(number)(next=(structSStudent*)malloc(sizeof(structSStudent));next->number=number;printf(*Pleaseinputname:");scanf(*%10s*,next->name);printf("Pleaseinputthefirstscore:");scanf&next->scorel);printf(*Pleaseinputthesecondscore:");scanf&next->score2);printf(*Pleaseinputthethirdscore:");scanf(*%d*,&next->score3);last=stu;while(last->link)(if(last->link->number>next->number)(next->link=last->link;last->link=next;break;)elselast=last->link;}printf(*\nPleaseinputthenumber(0toquit):");scanf&number);})voidQueryTable(structSStudent*stu,unsignednumber)!structSStudent*temp,*next;next=stu;while(next->link){if(next->link->number=number)(temp=next->link;next->link=next->link->link;free(temp);)elsenext=next->link;voidPrintTable(structSStudent*stu)(stu=stu->link;if(!stu){puts(*ThetableisEMPTY!”);return;printf(*number\tname\t\tscoreI\tscore2\tscore3\n*);while(stu)printf(*%3d\t*,stu->number);printf(飞T0s\t”,stu->name);printf("%4d\t”,stu->scorel);printf(*%4d\t*,stu->score2);printf(*%4d\t\n*,stu->score3);stu=stu->link;voidSortTable(structSStudent*stu)(structSStudent*next,*last,*temp;intflag;last=stu;while(last->link)(next=stu;flag=1;while(next->link!=last->link)(if(next->1ink->number>last->link->number){temp=last->link;last->link=last->link->link;temp->link=next->link;next->link=temp;flag=0;break;)elsenext=next->link;)if(flag)last=last->link;voidSave(structSStudent*stu)(unsignedcharfilename[13];FILE*fileSave;printf(*Pleaseinputthefilenameyouwantsavein:");scanffilename);if((fi1eSave=fopen(filename,"wb"))=0){printf(*Cannotopenfile%s!\n”,filename);return;}puts(*Saveingstu=stu->link;while(stu)(fwrite(stu,sizeof(structSStudent),1,fi1eSave);stu=stu->link;}puts(*Saveingisfinished!*);)voidLoad(structSStudent*stu)unsignedcharfilename[13];FILE*fileLoad;structSStudent*temp;while(stu->link){temp=stu->link;stu->link=stu->link->link;free(temp);)temp=(structSStudent*)malloc(sizeof(structSStudent));printf(*Pleaseinputthefilenameyouwantloadfrom:");scanffilename);if((fi1eLoad=fopen(filename,"rb"))==0)(printf(*Cannotopenfile%s!\n”,filename);return;}putsC*Loading...*);while(fread(temp,sizeof(structSStudent),1,fi1eLoad))(stu->link=temp;stu=stu->link;temp=(structSStudent*)malloc(sizeof(structSStudent));}stu->link=NULL;puts("loadingisfinished!*);}voidHelpO{puts("*********************************************")puts("*StudentSystemCommandHelp**)puts("**********************************************)puts(**L=Listallrecords**)puts(*D=Deletearecordselecedbynumber*")puts("*A=Appendrecords*”)puts("*I=Insertrecords*")puts(**S=Sortrecords铲)puts("*H=Showthishelpmessage心puts("*V=Saverecordstoafile心puts("*0=Loadrecordsfromafile铲)puts(**c=Clearscreen*")putsC*Q=QuitSystem*”)puts("*********************************************")putsC*Copyright(C)1999.09.09ByKcliu*")puts("*********************************************z,)块障块障«1234主务务务务仔任任任附录一:TurboC程序设计上机指导TurboC程序设计初步本节主要介绍TurboC程序设计的基本步骤及如何编译、调试和运行源程序。并给出TurboC的常用编辑命令。最后介绍TurboC编译、连接和运行时的常见错误。一、TurboC程序设计基本步骤程序设计方法包括三个基本步骤:第一步:分析问题。第二步:画出程序的基本轮廓。第三步:实现该程序。.编写程序.测试和调试程序.提供数据打印结果下面,我们来说明每一步的具体细节。第一步:分析问题在这一步,你必须:a.作为解决问题的一种方法,确定要产生的数据(输出)。作为这一步的一部分,你应定义表示输出的变量。b.确定需产生输出的数据(称为输入),作为这一步的一部分,你应定义表示输入的'狙i1 I输入数据 I1 I输入数据 I计算购房所需的金额I计算装修所需的金额I计算总金额I输出计算结果C.设计一种算法,从有限步的输入中获取输出。这种算法定义为结构化的顺序操作,以便在有限步内解决问题。就数字问题而言,这种算法包括获取输出的计算,但对非数字问题来说,这种算法包括许多文本和图象处理操作。第二步:画出程序的基本轮廓在这一步,你要用一些句子(伪代码)来画出程序的基本轮廓。每个句子对应一个简单的程序操作。对一个简单的程序来说,通过列出程序顺序执行的动作,便可直接产生伪代码。然而,对复杂一些的程序来说,则需要将大致过程有条理地进行组织。对此,应使用自上而下的设计方法。当使用自上而下的设计方法时,你要把程序分割成几段来完成。列出每段要实现的任务,程序的轮廓也就有了,这称之为主模块。当一项任务列在主模块时,仅用其名加以标识,并未指出该任务将如何完成。这方面的内容留给程序设计的下一阶段来讨论。将程序分为几项任务只是对程序的初步设计。整个程序设计归结为下图所示的流程图1»I 主模块I输入数据II购房额..II装修额.•II总额.•II输出结果II II II II II I图1.程序初步设计 图2.第二级程序设计如果把主模块的每项任务扩展成一个模块,并根据子任务进行定义的话,那么,程序设计就更为详细了(见图2.)。这些模块称为主模块的子模块。程序中许多子模块之间的关系可象图2.中那样归结为一张图。这种图称为结构图。要画出模块的轮廓,你可不考虑细节。如果这样的话,你必须使用子模块,将各个模块求精,达到第三级设计。继续这一过程,直至说明程序的全部细节。这一级一级的设计过程称为逐步求精法。在编写程序之前,对你的程序进行逐步求精,对你来说,是很好的程序设计实践,会使你养成良好的设计习惯。我们刚才描述了程序设计中自上而下的设计方法。实际上就是说,我们设计程序是从程序的"顶部"开始一直考虑到程序的"底部”。第三步:实现该程序程序设计的最后一步是编写源程序。在这一步,把模块的伪代码翻译成TurboC语句。对于源程序,你应包含注释方式的文件编制,以描述程序各个部分做何种工作。此外,源程序还应包含调试程序段,以测试程序的运行情况,并允许查找编程错误。一旦程序运行情况良好,可去掉调试程序段,然而,文件编制应做为源程序的固定部分保留下来,便于你或其他人维护和修改。二、源程序的输入、编译和运行C语言是一种中级语言,用户用C语言编写的程序称为源程序,存放用C语言所写源程序文件名字最后的两个字符一般必须为c

温馨提示

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

评论

0/150

提交评论