




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品C语言与程序设计实验指导、报告书 班级:_姓名:_计算机科学与技术学院C程序设计语言课程是计算机专业和非计算机专业的一门技术基础选修课程,大学一年级开设,同时也是作为学生学习计算机的一种启蒙语言。通过本课程的学习使学生更好地了解和应用计算机,培养学生应用计算机独立解决问题的能力,让学生基本掌握一门使用计算机的语言工具,为学生今后无论是从事计算机或非计算机工作都奠定了良好的、扎实的计算机语言基础。C程序设计语言最早是由Dennis Richie于1973年设计并实现的。从那时开始,C语言已经从其位于贝尔实验室的发源地传播到世界各地,它已成为全球程序员的公共语言,并由此也诞生了两个新的主流语言C+与Java它们都建立在C语言的语法和基本结构的基础上。现在世界上的许多软件都是在C语言及其衍生的各种语言的基础上开发出来的。C程序设计语言课程是高强度的脑力劳动,不是听会的,也不是看会的,而是自己练习会的。因此,要求大家在学习C程序设计语言课程时,不能满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即能独立地编写出源程序,独立地上机调试程序,独立运行程序和分析结果。程序设计是一门实践性很强的课程,必须十分重视实践环节,同时还必须保证应有足够的上机实验时间。C程序设计实验指导、报告书是为配合C程序设计语言课程而编写的一本具有很强的实践性教材。C程序设计语言课程为我校精品课程建设之一,为了达到本课程各个教学环节的规范化,并且让学生真正达到学以致用的效果,除了要求学生掌握本课程大纲所要求的知识点外,更重要的还要通过实践教学环节来拓展学生程序设计的逻辑思维和提高程序设计的能力,同时也能让学生深刻地了解关于如何运用软件工程的理念去开发软件。由于本课程是为面向全校各专业开设,为此,对学生学习本课程的要求也有所不同,考虑这一点,在本教程的内容安排上也有所不同,授课教师可根据授课专业的需要进行必要的题目选择。本实验教程中内容的编写,是根据本课程教学大纲的指导下基本上是以学生的兴趣和爱好为出发点进行编排的,其中体现出在掌握了课堂教学环节上的理论知识,得以在本实践环节中得到应用。本实验教程共安排了5个实验,每项实验包括实验学时、实验目的、实验内容及部分思考题等。整个实验建议用40学时完成,其中计划学时20,另外20学时是对编程感兴趣的同学安排的,可作为选项实验题目,所以学生可以根据自己的情况进行选做。 书山有路勤为径 祝你成功! C程序设计课程教学组 2005年秋学期目 录实验1:简单C程序设计 1.1 项目编程(1) 找出a,b,c中最大值(2) 按a,b,c值由小到大输出(3) 报选体育科目统计程序1.2 课外选做题(1) 输入100条数据,找出最大值及位置(2) 统计输入的字符串中,数字、字母与其他字符的个数(3) 打印简单图形实验2:数组与排序2.1 项目编程(1) 交换数组元素(2) 排序程序(3) 查询程序2.2 课外选做题(1) 矩阵运算(2) 级数求和(3) 电路计算(4) 字符串处理实验3:模块化编程3.1 项目编程(1) 矩阵运算(2) 字符串升序排序 (3) 排列方阵程序3.2 课外选做题(1) 计算某数的位数之积(2) 年龄统计程序(3) 字符插入操作实验4:指针与链表4.1 项目编程(1) 利用行指针实现成绩查询(2) 建立链表程序(3) 字符删除4.2 课外选做题(1) 字符统计(2) 结构体数组的应用(3) 字符串连接实验5:综合程序设计5.1 项目编程(1) 破译密码程序(2) 趣味编程(3) 人民币面值统计(4) 考试成绩处理5.2 课外选做题(1) 文本词汇统计(2) 趣味编程(3) 选票统计附录 本实验总结附录 编程必须注意的几个问题附录 程序调试与常见错误分析附录 TC部分出错信息注释参考文献实验1 简单C程序设计一、实验学时:4二、实验目的: 1、学习和了解C程序设计语言的数据类型及在内存中的储存方式,理解数据的层次结构;2、学习掌握输入、输出函数的基本格式和使用方法;3、了解C语言源代码转换成可执行程序的过程;4、掌握选择、循环语句的使用规则;5、能够设计和编写简单的C应用程序。三、必须学习和掌握的知识点:1、常用的数据类型及各类型数据的取值范围(int、long int、float、double、char)2、选择语句:if-else switch 3、循环语句:while do-while for4、编译程序图1-1所表示的是一个简化的编译过程,它简单地描述了计算机执行程序的方式。实际编译过程的细节是非常复杂的,且难以理解,在此不予讨论。图1-1 编译过程 编程人员在编程语言中要编写计算机将遵循的指令,类似于英语的命令称为源代码。计算机读取这些代码后,将其存入内存,以便进行后续处理。因为计算机不能执行这种形式的源代码,所以在处理之前,每条语句必须经历一系列的转换过程。 图1-1说明了在文本编辑器中输入C语句来创建源程序。编译器随后将源程序转换为一中间形式,称为目标程序Object Program),目标程序表示源代码对应的机器码。编译器读取和检查源程序的各个语句,在检查过程中将源语句转换为机器码(即计算机可以理解的二进制代码),并检查其语法错误。如发现错误,编译器将标记不正确的语句,并打印一系列错误诊断消息,简要说明所有语法错误(即违反C语句有效编写规则的代码)。此时,编程人员需要修改错误并重新编译程序。查找和修改错误的过程称为调试,在编译器指示编译过程没有错误之后,调试才告终止。C程序通常包含对预先编写函数的引用,这些函数存储于称为头文件的库中,链接器的首要任务是引入预编译的库代码,并将其插入到目标程序中,以创建可执行程序。5、程序流程图程序流程图是一个图表,它显示了计算机执行程序的详细处理步骤和顺序,在书中用于描述求解问题的算法。图1-2为设计者提供的程序流程图所用的标准符号,请参考。图1-2 程序流程图标准符号 四、实验项目: 1、将下列源代码输入计算机并运行,然后分析其运行结果。 main() int a; long int b; float c; double d; char e; printf(“sizeof a=%dn”, sizeof(a); printf(“sizeof b=%dn”, sizeof(b); printf(“sizeof c=%dn”, sizeof(c); printf(“sizeof d=%dn”, sizeof(d); printf(“sizeof e=%dn”, sizeof(e); (1)本程序段要求学生对C语言的数据类型的理解,并通过实际运行结果观察到常用的数据类型在内存的存储方式及占用存储空间的字节数;(2)源代码中的sizeof()函数:实现计算数据类型字节的长度。 / * C语言源代码 */main() 2、将下列由程序流程图描述的算法,转换为C源代码并填写到图1-3b框中,然后输入计算机并运行后分析其运行结果。图1-3a 程序流程图 图1-3b 转换后C语言源代码3、项目编程(1)请向计算机输入a,b,c三个值,经过程序处理后,要求输出其中最大的一个。/* 输出最大值 */main() 程序流程图 项目要求: 画出程序流程图; 根据流程图编写程序(2)请向计算机输入a,b,c三个值,经过程序处理后,要求按值从小到大输出。程序流程图 /* 将a,b,c三个值由小到大输出 */main() 项目要求: 画出程序流程图; 根据流程图编写程序项目提示: 可采用if结构; a,b,c由scanf函数输入(3)编程实现打印下列由字母组成的树形。说明:本项目编程的知识点是让学生对双重循环语句结构的理解,清楚双重循环的特点(即当外循环变量中的值变化一次时,则内循环变量中的值要变化若干次)。提示:可用外循环变量代表行数;内循环变量代表需打印字符的个数。难点:字符个数是按奇数变化递增 左右边界字符打印的位置 / * 打印图形 */main() 图1-4字母A-G组成的树形 (4)设计报选体育科目统计程序设某学校在新生入学时,需报选体育选修科目。体育科目包括:篮球、排球、体操、兵乓球和网球。请为某班级(30人)统计报选各体育科目人数。项目要求: 画出程序流程图; 根据流程图编写源程序C语言源代码main() 程序流程图 项目提示:可采用switch与for结构 五、知识点检查: (1) 解释下列语句的作用,为什么要在变量名之前加&符号? float x; scanf(“%f ”, &x); 解答:(2) 若忘记在上文中的scanf()的语句中加入“&”符号,则输出结果将会如何? 解答: (3) 请将下列给出的两个程序段分别输入计算机后,分析其运行结果,并解答为什么输出如此的结果(不要求助别人,需自己查找资料)。 main() int num; num=32767; printf(“num=%dn”,+num); 解答: main() int a=-2; printf(“%d,%o,%dn”,a,a,-a); 解答:(5) 通过本次实验,即从编程输入、运行、调试以及直到最后输出正确的结果,你从中得到了哪些收获?对于程序运行所出现的错误是如何解决的?解答:六、课外选做题: 1、从键盘输入100条整型数据,请找出其中最大的一个数,并指出这个最大的数是第几次输入的。2、分别统计出在输入的字符串中字母、数字和其他字符的个数。3、请编程实现打印由部分字母组成的图形,如图1-5所示。 图1-5 字母组成图形实验2 数组与排序一、实验学时:4二、实验目的:1、理解数组的作用、下标的用法及数组元素在内存中的存储;2、学习并掌握一维数组与多维数组的应用;3、学习并掌握常用的排序算法;4、了解字符数组的特殊应用。三、必须学习和掌握的知识点:1、数组的定义、特点和使用规则2、数组的查找、排序和插入四、项目编程1、 将下列一组数读入到a数组中,然后从a数组中找出其中最大的元素并与第一个数互换;然后从a数组中找出最小的元素并与最后一个数互换,而其余元素的位置不变。例如,图2-1所示。 图2-1 a数组中部分元素位置的变化(1) 编程技巧与注意事项: 数组是用来在内存中存储一组相关数据项。可对存储于内存的数据进行反复处理,而不必再重新输入。 在C中虽然允许在同一行中定义多个数组,但最好还是每行只定义一个数组,这样做可以消除将逗号错写为分号的可能性;另外在调试过程中,也便于查找数组名。(2)本项目编程指南: 采用循环结构; 需定义一个一维数组a,四个int型变量主要用于储存最大数和最大数的位置及最小数和最小数的位置项目要求: 画出程序流程图; 根据流程图编写源程序C语言源代码main() 程序流程图 项目提示:可采用switch与for结构 2、 以下是某班级(32人)高数的考试成绩。要求将此成绩输入到a数组中,然后按其值由高分到低分进行排列,并输出其排列后的成绩清单。(1) 本项目编程指南: 这是一个关于排序的问题。所谓的排序是按给定顺序排列数据的过程,可根据数组内容按升序或降序排列元素。通常都按数据的输入顺序将数据加载到数组中;如果改变输入顺序,若元素为字符型则应按字母顺序排列,若元素为数值型可按值的大小(即升序或降序)排列。为计算机开发的排序算法种类繁多,如选择法、比较交换法、冒泡法和shell法等。以下简介两种典型的排序算法,其他排序方法学生可查阅其他参考书籍。冒泡排序:也称“起泡排序”或“气泡排序”,是一种比较简单的排序方法。思路是将被排序的元素个数为N,可以对此元素做N-1次处理。在第k次(k=0,1,2,,N-1)处理时,需比较前N-k个元素。此排序方法是,连续从前到后比较相邻的两个元素,如果后面的元素大于前面的元素,则应将二者交换,否则不交换。可见每经过一次处理,至少此次被处理的N-k个元素中最小的元素被移到本次处理的最后位置,所以经过了N-1次处理后就使所有的元素被排好序了。从分析中可以得出,对长列表而言,冒泡排序的效率并不高。它比较适合于对短列表元素的排序,其原因就在于它是反复比较和交换元素,直至数据按指定顺序排列为止。关于冒泡排序方法示例请参考教科书第124页。Shell排序:Shell排序由Donald Shell开发。这种排序算法速度比较快,效率高。如果需排序列表较小,所含项目元素在10个左右时,Shell排序和冒泡排序的执行次数相当。但如果对于一个排序列表在含有100个项目元素时,则冒泡排序比Shell排序所执行的时间高出5倍;如果要是一个包含有1000个项目元素的列表而言,冒泡排序就要比Shell排序所执行的时间高出30倍。与冒泡排序一样,Shell排序也是比较和交换元素。但不同的是,它是通过计算一系列间距(指两个项目元素间的距离)反复比较和交换元素,直到元素按指定顺序排列为止。本项目要求学生采用冒泡法排序方法完成上述给出的学生成绩的排序。(2) 项目要求: 画出程序流程图; 根据流程图编写源程序C语言源代码main() 程序流程图 (3) 项目提示: 利用一维数组与for结构 3、 按照下列要求编写一个查询程序。某汽车维修厂仓库存有多种型号的汽车零件,请为该仓库管理员编写一查询程序用于查询库中每种零件的库存量。图2-2 设置的零件型号与对应的库存量(1) 项目要求: 具有交互式输入(提示操作者从键盘输入要查询的零件编号); 具有重复查询功能; 具有数据检测功能。(2) 项目说明: 当程序运行时,首先在屏幕上显示“请输入要查询的零件编号:” ,例如,操作者输入了 150003 后,则在屏幕上立即显示出该零件编号及该编号所对应的库存量,如:150003 230 。 如果操作者输入的零件编号超出了该库中所规定的范围,则应在屏幕上显示出“您输入的是错误的零件编号,请选择:重新输入(Y),退出查询(N)” 。 当操作者正确地查询到自己所要查询的库存数据后,则在屏幕上应显示出“您还继续查询吗(Y/N)? ” ,如果继续查,则可输入Y否则输入N,即结束此次查询。(3) 项目提示: 利用二维数组 采用if结构和嵌套式循环结构 (4) 编程技巧与注意事项: 二维数组表示的是以行列格式排列的数据表; 可通过行下标和列下标来访问二维数组中存储的元素; 如何使用行下标和列下标来操纵二维数组是一个令很多学生感到头痛的问题。要想克服这个困难,最好的办法是仔细参阅读教科书中第129页例7.5题中的代码,认真领会示例,确保完全理解其工作原理。同时利用纸和笔,在程序处理期间,跟踪记录各个元素。这同投篮一样,练习的越多,成功率也就越高。/* 汽车零件查询 源代码 */main() 祝你好运。五、思考题:(1)下标在数组中起什么作用?取值范围?解答:(2)在使用数组时,如果数组元素个数超过了数组定义的个数时,将会产生什么现象,是严重问题吗?解答:(3) 字符数组在使用规则与数值型数组有哪些不同之处?解答:六、课外选做题: 1、 请编程计算下列给出直流电路中a,b两端的等效电阻R。图2-3 串并联直流电路项目提示: 图2-3中的R1,R2,R0电阻值均由键盘输入。 由for循环结构实现。2、 请编程计算下列给出的二维数组周边元素之和。3、 请编写一个程序,其功能是统计一个子字符串在另一个字符串中出现的次数。例如,假设输入的字符串是“This is a string”,子字符串为“is”,则输出结果是 2 。 实践3 模块化编程一、实验学时:4二、实验目的:1、深刻理解模块结构化编程的概念及其优点;2、了解如何将程序分解为一系列的独立模块;3、学习和掌握模块结构化编程的规则与方法;4、学会运用自顶向下设计的思想和模块结构化编程技巧来编写C程序。三、必须学习和掌握的知识点:1、模块的划分规则2、函数的调用规则3、全局与局部变量4、变量的存储类别四、知识点讲解1、模块(Model):是一个独立程序逻辑单元,它执行一个主要处理任务,在编写和测试模块之后,可将它们装配起来,形成一个完整的程序。2、模块结构化编程是一个设计策略,用来管理、组织和开发计算机程序。它使用的是“分而治之”方法,将程序分解为一系列的被称为模块的逻辑单元。模块结构化编程旨只提供一种管理编程编程的方法。通过这个方法,可将一个大应用程序分解为有限数量的模块。由此看来,大程序细分为一系列更小的、逻辑相关的任务,可独立开发和测试。所以每次编写一个模块要比一次性完成整个项目要容易的多。总之,模块结构化编程是一种编程技巧,它的理念是自顶向下的设计和模块化编程。该发有助于设计和构建高质量的程序,使程序有更好的可读性,且更易于测试和调试。在C程序中是利用函数来实现模块的功能。例如,在求3个学生四门课程中,每个学生的平均成绩的程序,就是由3个模块构架起来的。见图3-1计算平均成绩程序的层次图所示。 图3-1 计算平均成绩程序层次图3、层次图:也称框图(block diagram),将程序划分为若干个任务等级(模块),并显示任务之间的关系。如图3-1显示了计算每个学生平均成绩的处理过程。第一层模块显示的是程序的目的,第二层显示的是程序执行的处理模块,由成绩输入、求平均值和输出成绩单三个子模块组成。 4、程序流程图:是对每个模块所要处理的任务执行过程的一个描述。如图3-2为图3-1计算平均成绩程序层次图中三个子模块的程序流程图。 图3-2a 第一层程序流程图 图3-2b 第二层程序流程图 图3-2描述的程序流程所对应的C源代码如下:/* 求平均成绩模块代码 */int average() int sum;for(i=0;i3;i+) sum=0; for(j=0;j4;j+) sum+=sij; avei=sum/4; /* 输出平均成绩模块代码 */int output() for(i=0;i3;i+) printf(“%f”,avei); /* 主模块代码 */int i,j,s34;float ave3;main() intput();average();output(); /* 成绩输入模块代码 */int input() for(i=0;i3;i+)for(j=0;j字符串2,函数值为一正整数;字符串1字符串2,函数值为一负整数;StrCopy():字符串复制函数格式: strcpy(字符数组1,字符串2)功能: 将字符串2复制到字符数组1中。 (3)请画出main函数与城市名表列排序和打印输出函数的流程图。(4)程序流程图(5) C源代码清单3、请设计一个fun函数,其功能是给一维数组输入任意4个整数后,应如下规律输出。如输入整数 1,2,3,4,则程序运行后将输出以下方阵:要求:该程序由一个主函数和一个fun函数组成按以下给出程序结构填写fun函数中的C代码#define M 4main() int aM; fun(a); int fun(int a) int i,j,k,m; for(i=0;iM;i+) scanf(“%d”, &ai); 七、思考题:(1) 函数都有哪些调用方式?解答:(2) 参数在进行信息传递时,都具有哪些传递方式,各有什么特点(即实参与形参的传递)?解答:(3) 根据你对局部变量和全局变量的理解,在什么情况下用局部变量合适,在什么情况下用全局变量合适?解答:(4) 从课堂的教学以及上机的实践教学中,你是如何理解模块化程序设计的?为什么提倡模块化?(如果你没有充分理解的话,可去书店或上网查阅有关这方面的资料,一定弄清楚这个问题!)解答: 九、课外选做题: 1、 请编写一个fun函数,用于计算给定整数num各位数字之积。例如,若输入252,则应输出结果是,20;输入202,输出结果是0。2、设某学校在校生的年龄在17岁到23岁,请编写一个fun函数,用于统计该校5000人各年龄的人数。3、请编写fun函数,在下列给出的一个有序的数列中插入一个数,且当该数插入后,应使该数列仍然有序。60, 68, 78, 88, 90, 93, 95, 96, 98, 100实验4 指针与链表一、实验学时:4二、实验目的:1、深刻理解指针的特点和作用 2、学习并应用指针来设计算法 3、学习和掌握利用指针对内存进行动态分配 4、学习和掌握指针的编程技巧 三、必须学习和掌握的知识点:1、指向变量的指针变量2、指向数组和多维数组的指针变量3、指向函数的指针变量4、指向字符串的指针变量5、指针数组6、用指针处理链表四、主要知识点讲解1、内存的动态分配:动态内存管理使程序员可以在程序运行过程中随时申请一块空闲内存,在使用后即可释放。比较之下,它比程序中定义的变量或数组更能灵活有效地使用并节约内存。因为程序中变量或数组一经定义,即使不再使用也必须占用内存。2、动态内存管理函数:(1) malloc函数的一般使用格式(类型*)malloc(字节数)以字节数为单位,动态分配存储空间。当存储空间被分配成功时,将返回的是该内存块的首地址,否则返回值为0。 例如,float *p; p=(float *)malloc(5*sizeof(float);上述语句表示,malloc函数动态分配到了5个内存块,每个内存块为4个字节(即实型数的存储长度),并且指针变量p将指向的是5个内存块的首字节的地址。见图4-1所示。图4-1 指针p指向5个内存块的首地址(2) free函数的一般使用格式free(动态分配的内存块首地址)其作用是释放掉由malloc函数分配的内存空间,也就是将该内存空间归还给系统,以便另行分配使用。 例如,float *p; p=(float *)malloc(5*sizeof(float); free(p); 3、指向变量的指针变量,示例:float a,*p1;p1=&a; 图4-2 指针p指向变量a的首字节地址变量a所占用的存储空间是由4个字节组成,如果假设地址编号是从2000开始,则变量a所占用内存的地址编号应该是2000,2001,2002,2003,而指针p中所存放的地址编号是 2000,也就是变量a的首字节地址。 4、指向一维数组和多维数组的指针变量,示例:float a3,b23,*p1,(*p2)3;p1=a;p2=b;图4-3a 指针p1指向数组a的首地址指针p1被定义为是指向一维数组的指针变量。如果执行了p1=a;该指针变量p1具有的是一维数a的首地址(C语言规定,数组名代表地址常量,即该数组的首地址),见图4-3a。如果该首地址编号是FFB6,则a代表的是FFB6。而当执行p1+时,也就是让指针p1向高字节方向增加1时,相当于增加4个字节的长度,此时,p1将具有a1元素的地址,地址编号是FFBA,见图4-3b所示,依次类推。图4-3b指针p1指向a1元素的地址指针p2被定义为是指向二维数组的指针变量指针,也称为p2是行指针。此时,p2具有二维数b的首地址,地址编号是FFA6,见图4-3c。图4-3c 指针p2指向数组b的首地址如果此时执行了p2+操作时,也就是让指针p2向高字节方向增加1时,相当于增加12个字节的长度(就即相当于p2具有了下一行的首列地址),也就是a10元素的地址,地址编号是FFB2,依次类推。见图4-3c所示。图4-3d 指针p2指向b10元素的地址 请同学们思考:若要求利用行指针输出上述b数组中的所有元素的地址和所有元素值的话,则代码将如何编写?5、指向函数的指针变量,示例:int fun( ),(*p)( ),a=5,b=7,c;p=fun; 指针p具有函数fun的入口地址(每个函数都有一个入口点,称该入口点即为该函数的入口地址),本例函数的入口地址编号是0046,见图4-4。在C语言中,函数的名字是一个指针,其值就是该函数的入口地址。此时,函数名fun为一个入口地址常量,且把fun赋给p,则指针p称为指向函数的指针变量,也就是在进行函数fun的调用时,也可利用指针p进行函数的调用了。图4-4 指针p指向fun函数的入口地址如有下面的语句行:c=(*p)(a,b); 此语句就相当于函数调用的语句:c=fun(a,b); 。6、字符串指针变量,示例:Char *str=“student”;图4-5 字符串指针str所指向字母s的地址7、指针数组,示例:int a34,*p3,i;for(i=0;i3;i+)pi=&ai0;图4-6指针数组p指向数组a的首列地址指针p被定义的是指针数组,即在该数组中的每一个元素值都是地址值。在该示例中p具有三个指针元素,即p0,p1,p2它们分别具有数组a00,a10和a20的地址,如图4-6所示。此时,可利用指针数组间接对a数组进行操作。指针数组应用最多的还是对字符串的处理,如利用指针数组对字符串的排序、查找以及字符的统计操作等。在本实验中的项目编程中的第3题就涉及到指针数组的应用。关于该知识点的详细内容请参阅教科书第248页。8、链表链表属于动态数据结构,可以类比成一“环”接一“环”的链条,这里的每一“环”可以视作一个结点,如果把结点串在一起就形成了链表。这种数据结构非常灵活,结点数目无须指定,可以临时生成。每个结点有自己的存储空间,结点间的存储空间也无须连接,结点之间的串连是由指针来完成的,而指针的操作又极为灵活方便,习惯上称这种数据结构为动态数据结构。这种结构的最大的优点是插入和删除结点方便,无须移动大批数据,只须修改指针的指向即可。这是编程中十分重要的一种数据结构。 在以下项目编程中的第2题就是关于链表的问题。五、项目编程1、请建立一个学生成绩数组然后调用一个fun函数用于查询该数组中一门课程以上不及格的学生并打印他们全部课程的成绩。(要求利用行指针作为函数的传递参数)。(1) 提供部分代码如下,并请完成其他全部代码:#define M 3#define N 4main() float stuMN=68,90,66,80,56,78,80,90,50,68,56,98; float fun(); fun(stu,M); float fun(float (*p)N,int n) 2、请为下列给出的某班级C程序编码员列表,建立一个链表。图4-7 C程序编码员列表(1)说明: 在上表中,每人为一个节点,节点中有4个成员:姓名、出生年、出生月和指针。然后用指针将每个节点链接起来。 节点链接的条件是生日大者在前,小者在后。 最后输出已按顺序排好的并具有5个节点的链表,如图4-8编码员链表所示。 图4-8 程序编码员链表 (2)本题相关知识这是一个关于建立单向动态链表的问题。所谓建立动态链表是指在程序执行过程中从无到有地建立起一链表,即一个一个地开辟节点和输入各节点的数据值,并建立起前后相链的关系。在做本实验时之前,首先应弄清楚节点数据类型的定义、如何利用指针的动态地开辟节点以及输出已建立的动态链表等项内容。 动态数据结构:本题主要是链表的建立,它的实现依赖于动态的内存管理,即利用malloc函数; 描述单向链表的数据类型:单向链表的一般结构如图4-9所示。 图4-9a 单向链表为了实现链表必须定义能够描述链表中节点的数据类型,该类型应包含有数值和地址两大部分。见图4-9b。 关于链表动态建立和链表输出的具体实现过程,请参阅教科书第275页到279页。 图4-9b链表节点 除了上述建立、输出链表,则与本题相关的内容还有关于链表的插入和删除操作(参照教科书的第281-286页)。(3) 要求:设计一个主函数和两个子函数(即建立链表模块和输出链表模块)。(4) 请在以下空间内完成本题的C源程序。3、编写一个fun函数,其功能是将字符指针s所指字符串(见图4-10a)所有下标值为奇数的字符删除,然后将串中剩余字符存放到由字符指针t所指的字符数组中(例如图4-10b所示)。 (1)要求:利用字符指针变量作fun函数中的形参 (2)本题相关知识:在字符串相关的所有操作中,包括有计算给定字符串的长度、对奇数位操作、对偶数位操作等一系列问题。在这些操作中,需要利用循环语句“遍历”字符串的每一个下标。 字符串的理解字符串是由一串字符组成的整体,包括常量和变量。但字符串不是一种专门的数据类型,而是由字符数组充当。字符串的常量是以双引号括起来的若干个字符的集合,如“hello”,这些字符在内存中都是以ASCII码值形式进行存储的。并以“0”作为字符串的结束标记。 指向字符串常量的指针在程序设计中,可以用字符象指针变量记载字符串常量的首地址,从而形成了一类“字符串变量”。例如:char *p=”hello”; 或 char *p; p=”hello”;以上两种形式含义相同,都使指针p存储着字符串常量“hello”的首地址。此时,应注意一定不能认为字符串存储在变量p中,而是仅仅是首地址存储在p中。这样变量p即可具有与字符数组相同的用法和功能。 字符数组作为字符串变量常用的一种构成字符串变量的方法是使用char类型的一维数组,但在没对数组赋值之前并不能称其为字符串:char str10;事实上,上述定义仅定义了一个数组而已。如果需要将其用作字符串,最好应该在定义数组的时候就赋以初值,如:char str10= “a string!”;经过上述赋值后,系统就会将字符串常量“a string!”完整地存储到数组str中(注意与指向字符串常量的指针变量的区别)。包括结束符 0。通过上述说明可以发现,字符串的结束符0是至关重要的一环。因为C语言中并不存储字符串的长度,所以只能利用字符串中的元素是否为结束符作为判定字符串结束的依据。另者,还值得注意的一点是,字符串结束符号0的ASCII码值是整数0,也就是说,0与整数0相同,当它不同于字符0,应为对于字符0的ASCII码值是48,故可以说,0与整数48相同。(3) 提供main函数代码如下,并请完成fun函数的全部代码:main() char ch100,t100,fun(); gets(ch); fun(ch,t); char fun(char *s, char *t) 六、课外选题1、 请设计一个fun函数,其功能是统计由字符指针ss所指的字符串中指定字符的个数,并将此统计结果返回给主函数。例如,若输入字符串:123412132 ,再输入 1,则应输出为 3,也就是说,该字符串的数字中含有数字1的个数有3个。请完成fun函数中的C代码。main() char ss100,ch; int c; gets(ss); scanf(“%c”, &ch); c=fun(ss,&ch); printf(“%dn”, c); char fun(char *s, char *t) 2、学生的记录是由学号和成绩组成,现有N名学生的数据已存在主函数中的结构体数组s中,如图4-11所示。请设计一个fun函数,其功能是:把分数最低的学生数据放
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 远程医疗在分级诊疗体系中的创新发展与实施效果评价报告
- 基层生产管理培训资料
- 小狗折纸美术课件
- 改善护理服务临床心理科案例比赛
- 关于弓箭培训课件下载
- 网培训心得体会总结
- 高速业务培训课件
- 钟南山院士健康警示:开学第一课护胃防血栓指南
- 事业单位财务知识考试真题
- 禁毒社工工作培训课件
- 小学美术奇怪的梦课件
- 头颈部肿瘤放疗中危及器官与正常组织勾画课件
- 广州市退休人员个人情况登记表
- 切格瓦拉完整
- 智能门锁采购投标方案
- 课程设计DLP4-13型锅炉中硫烟煤烟气袋式除尘湿式脱硫系统设计
- 中学生如何正确交友主题班会
- 追责问责申请书
- 水培果菜营养液日本山崎华南农业大学配方大全
- 我今天写什么日记
- 健康教育学第三版课后题答案
评论
0/150
提交评论