《C语言上机实验.doc》由会员分享,可在线阅读,更多相关《C语言上机实验.doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、17.5 实验5 循环结构程序设计1.实验目的(1)熟悉掌握用while语句、dowhile语句和for语句实现循环的方法。(2)掌握在程序设计中循环的方法实现一些常用的算法(如穷举、迭代、递推等)。(3)进一步学习调试程序。2 实验内容编程并上机调试运行(1) 输入一行字符、分别统计出其中的英文字母、空格、数字和其他字符的个数(本题是教材第5章第4题)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。(2) 输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=1+5+3(本题是教材第五章
2、第8题)。(3) 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃,只剩一个桃子了。求第一天共摘了多少桃子(本题是教材第五章第12题)。再得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。请修改程序并运行,检查结果是否正确。(4) 用牛顿迭代法求方程2X=4x+3x-6=0在1.5附近的根(本题是教材第五章第13题,学过高等数学的读者可选做此题)。再得到正确结果后,请修改程序所设的X初始值由1.5改为100,1000,1000,再运行
3、,观察结果,分析不同的x初值对结果有什么影响,为什么?修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。3.预习内容预习教材第5章。 17.6 实验6 数组1. 实验目的(1) 掌握一维数组和二维数组的定义、赋值和输入输出的方法。(2)掌握字符数组和字符串函数的使用。(3)掌握与数组有关的算法(特别是排序算法)。2.实验内容编程序并上机调试运行。(1) 用选择法对10个整数排序。10个整数用scanf函数输入(本题是教材第6章第2题)。(2) 已有一个已排好序的数组,求输入一个数后,按原来排序的规律将它插入数组中(本题是教材第6章第4题)。(3) 有一篇文
4、章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数(本题是教材第6章第10题)。(4) 找出一个二维数组的“鞍点”,及该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点(本题是教材第6章第8题)。应当至少准备两组测试数据;二维数组有鞍点,例如; 9 80 205 40 90 -60 96 1 210 -3 101 89二维数组没有鞍点 9 80 205 40 90 -60 196 1 210 -3 101 89 45 54 156 7用scanf函数从键盘输入各数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序
5、应处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同函数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。 如果已制定了数组的行数和列数,可以在程序中对数组元素赋初值,而不用scanf函数。请读者修改程序以实现之。3. 预习内容预习教材第6章。17.7 实验7 函数(一)1.实验目的(1)熟悉定义函数的方法。(2)熟悉声明函数的方法。(3)熟悉调用函数时实参与形参的对应关系,以及“值传递”的方式。(4)学习对多文件的程序的编译和运行。2.实验内容编程序并伤及调试运行之。(1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息(本题是第
6、七章第三题)。本程序应当准备以下测试数据:17,34,2,1,0。分别运行并检查结果是否正确。要求所编写的程序,主函数的位置在其它函数之前,在主函数中对其所调用的函数做声明。运行以下工作:a) 输入自己编写的程序,编译和运行程序,分析结果。b) 将主函数的函数声明删掉,再进行编译。分析编译结果。c) 把主函数的位置改为其他函数之后,在主函数中不含函数声明。d) 保留判别素数的函数,修改主函数,要求实现输出100 到200之间的素数。(2)写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出(本题是第7章第七题)。1)输入程序,编译和运行程序,分析结果。2)分析函数声明中参数的写法。
7、先后用以下两种形式。(a)函数声明中参数的写法与定义函数时的形式完全相同,如:void cpy(char s ,char c );(b)函数声明中参数的写法与定义函数时的形式基本相同,但省略写数组名。如:void cpy(char ,cha );分别编译和运行,分析结果。思考形参数组为什么可以不指定数组大小。(c)如果随便制定数组大小行不行,如:Void cpy(char s 40,char c 40);请分别上机试一下。(3)输入10个学生5门课的成绩,分别用函数实现下列功能;1)计算每个分数平均分;2)计算每门课的平均分3)找出所有50个分数中最高的分数所对应的学生和课程(本题是第7章第1
8、4题)(4)用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数(本题是第7章第10题)。 1)把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。 2)把两个函数分别房子两个程序文件中,作为两个文件进行编译、连接和运行。3.预习内容(1)教材第七章。(2)本书第三部分中有关对多文件程序进行编译和连接方法。 178 实验8 函数(二)1.实验目的(1)进一步熟悉怎样利用函数实现制定的任务。(2)熟悉函数的嵌套调用和递归的调用的方法。(3)熟悉全局变量和局部变量的概念和用法。2. 实验内容(1) 写一个函数,用起泡法对输入的10个字符按由小到大顺序排列(本题是第七
9、章第11题)。1)输入程序,进行编译和运行,分析结果。2)将要排序的字符串改为5个,按由从小到大的顺序排列。(2) 用递归法将一个整数位n转换成字符串。例如,输入483,应输出字符串“483”。N的位数不确定,可以使任意的整数(本题是第七章第17题)1)输入程序,进行编译和运行,分析结果。2)分析递归调用的形式和特点。3)思考如果不用递归法,能否改用其他方法解决此问题,上级试一下。(3) 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。1)在程序中用全局变量。编译和运行程序。分析结果。分析结果,讨论为什么要用全局变量。
10、2)能否不用更全局变量,修改程序并运行之。(4) 求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一个函数根据求出的最大公约数求最小公倍数。1)不用全局变量,分别用两个函数求最大公约数和最小公倍数,两个整数在函数中输入,并传送给函数hcf,求出最大的公约数返回主函数,然后再与两个整数一起作为实参传递函数lcd,求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。2)用全局变量的方法。用两个全局变量分别代表最大公约数和最小公倍数。用两个函数分别求出最大公约数和最小公倍数,但其数值不由函数带回,而是赋给全局变量。在主函数中输出他们的数值。分别用以上两种方法编程并运行,分析对比。
11、3.预习内容教材第七章17.9 实验9 指针(一)1.实验目的(1)掌握指针和间接访问的概念,会定义和使用指针变量。(2)能正确使用数组的指针和指向数组的指针变量。(3)能正确使用字符串的指针和指向字符串的指针变量。2.实验内容编程序并上机调试运行以下程序(都要求用指针处理)。(1)输入3个整数,按由小到大的顺序输出,然后将程序改为:输入3个字符串,按由小到大的顺序输出(本题是第八章第1-2题)。 先编写一个程序,以处理输入3个整数,按由小到大的顺序输出。运行此程序,分析结果。 把程序改为能处理输入3个字符串,按由小到大的顺序输出。运行此程序,分析结果。 比较以上两个程序,分析处理整数与处理字
12、符串有什么不同?例如:(a)怎样得到指向整数(或字符串)的指针。(b)怎么比较两个整数(或字符串)的大小。(c)怎样交换两个整数(或字符串)。(2)将一个33的整型二维数组转置,用一函数实现之(本题是第8章第9题)。在主函数中用scanf函数输入以下数组元素: 1 3 5 7 9 11 13 15 19将数组0行0列元素的地址作为函数实参,再执行函数的过程中实现行列交换,函数调用结束后在主函数中输出已转置的二维数组。请思考: 二维数组的指针,某一行的指针、某一元素的指针各代表什么含义?应该怎样表示? 怎样表示低i行j列元素及其地址。(3) 将n个数按输入时的顺序的逆序排列,用函数实现(本题是教
13、材第8章第14题)。 在调用函数时用数组名作为函数实参。 函数实参改为用指向数组元素首元素的指针,形参不变。分析以上二者的异同。(4)写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度(本题是教材第8章第6题)。分别在程序中按以下两种情况处理: 函数形参用指针变量。函数形参用数组名。作比较分析,掌握其规律。3 预习内容预习教材第8章17.10 实验10 指针(二)1.实验目的(1)进一步掌握指针的应用。(2)能正确使用数组的指针和指向数组的指针变量。(3)能正确使用字符串的指针和指向字符串的指针变量。(4)了解指向指针的指针的用法。2.实验内容根据题目要求,编写程序(要求用
14、指针处理), 运行程序,分析结果,并进行必要的讨论分析。(1)有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的人(本题是第8章第5题)。(2)将一个55的矩阵(二维数组)中最大的元素放在中心,4个角放最小的元素(顺序为从左到右,从上到下一次从小到大存放),写一函数实现之。用main函数调用(本题是第8章第10题)。(3)有一个班4个学生,5门课程。 求第一门课程的平均分。 找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩。 找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个
15、要求(本题是第8章第14题)。(4)用指向指针的指针的方法对n个字符串排序并输出。要求将排序单独写成一个函数。n 和各整数在主函数中输入。最后在主函数中输出(本题是第8章第20题)。3.预习内容预习教材第8章17.11 实验11 用户自己建立数据类型1.实验目的(1)掌握结构体类型变量的定义和使用。(2)掌握结构体类型数组的概念和应用。(3)了解链表的概念和方法。2.实验内容编程序,然后上机调试运行。(1)有5个学生,每个学生的数据包括学好、姓名、3门课的成绩。从键盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学好、姓名、3门课的成绩、平均分数),本题是第9章第5题
16、。 要求用一个input函数输入5个学生的数据,用一个average函数求总平均分,用max函数找出最高分学生数据。总平均分和最高分的学生的数据都在主函数中输出。(2)13个人围成一圈,从第1个人开始顺序报号1,2,3。凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。要求用链表实现(本题是第9章第6题)。(3)建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去(本题是第9章第12题)。3.预习内容预习教材第9章。17.12 实验12 文件操作1.实验目的(1)了解文件和文件指针的概念。(2)学会使用文件操作函数实现
17、对文件的打开、关闭、读、写等操作。(3)学会对数据文件进行简单的操作。2.实验内容编程序并上机调试运行。(1)有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生学号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数放在磁盘文件stud中(本题是第10章第5题)。设5名学生的学号、姓名、和3门课的成绩如下: 10101 Wang 89,98,67.5 10103 Li 60,80,90 10106 Sun 75.5,91.5,99 10110 Ling 100,50,62.5 10113 Yuan 58,68,71向文件stud写入数据后,应检查验证stud文件中的内容是否正确。(2)将上题stud文件中的学生数据按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_sort中(本题是第10章第6题)。在向文件stu_sort写入数据后,应检查验证stu_sort文件中的内容是否正确。(3)将上题已排序的学生成绩文件进行插入处理。插入一个学生的3门课成绩。程序先计算新插入的学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件(本题是第10章第7题)。要插入的学生数据为: 10108 Xin 90,95,60在向新文件stu_new写入数据后,应检查验证stu_new文件中的内容是否正确。 3.预习内容预习教材第10章。
限制150内