《程序设计基础C》实验指导书上海应用技术学院2012-2-20目录实验一顺序结构程序设计 (1)实验二分支结构程序设计 (2)实验三循环结构程序设计一 (3)实验四(1)循环结构程序设计二 (4)实验四(2)循环结构程序设计三 (5)实验五数组 (6)实验六数组和字符串 (7)实验七函数 (8)实验八函数 (9)实验九指针 (10)实验十结构体 (11)实验十一文件 (12)实验十二综合 (13)实验一顺序结构程序设计实验目的:1.掌握C语言程序结构。
2.掌握变量的定义和使用。
3.掌握输入输出函数的使用。
4.掌握赋值语句的使用。
内容:1.从键盘输入两个数,计算两个数的和,然后输出。
注意:带下划线的内容表示是从键盘输入的,实际上机时并不显示下划线,其余的内容是程序输出的。
2.从键盘输入一个华氏温度,请转换成摄氏温度后输出。
3.电路图如下所示,从键盘输入5个电阻的电阻值,计算并输出总的电阻值。
实验二 分支结构程序设计实验目的:1. 掌握逻辑表达式的使用方法。
2. 掌握if 和switch 语句的使用方法。
3. 掌握一些简单的算法。
内容:1. 有下列函数,写一段程序,输入x 的值,输出y 的值x (x<1)y= 2x-1(1<=x<10)3x-11(x>=10)2. 输入一个不超过6位的正整数,输出该数的最高位和最低位,如果该数是一位数,则输出该数。
然后再输出该数是几位数。
程序需要对输入的数进行合法性检查,对小于0和大于6位的数要有提示。
3. 输入一个0到100的百分制成绩,转换成五级制A 、B 、C 、D 和E 。
程序中首先需要对输入的数进行合法性检查,对小于0和大于100的数要有提示,然后转换部分使用switch 语句实现。
实验三 循环结构程序设计一实验目的:1. 掌握循环结构的使用方法。
2. 掌握while 和for 语句的使用方法。
3. 掌握程序单步调试的方法。
4. 掌握一些简单的算法。
内容:1. 公式的计算∑==201i i sum ∑-==101)1(i ii sum x=N!2. 输入最多10个整数,找出最大值、最小值,并计算平均值。
3. 输入一个不超过6位的正整数,分别输出该数的每一位,并用逗号分隔,如果该数是一位数,则输出该数。
然后再输出该数是几位数。
程序需要对输入的数进行合法性检查,对小于0和大于6位的数要有提示。
实验四(1) 循环结构程序设计二实验目的:1. 掌握单重循环和多重循环结构的使用方法。
2. 掌握程序单步调试的方法。
3. 掌握一些简单的算法。
内容:1. 输入N ,计算公式 ∑=++=Ni i i s u m 1)]1([ 的值。
2. 输入一个正整数n (1≤n ≤200),输出所有的整数对,其相乘的积等于n 。
3. 编程打印数字金字塔。
实验四(2) 循环结构程序设计三实验目的:1. 掌握单重循环和多重循环结构的使用方法。
2. 掌握程序单步调试的方法。
3. 掌握一些简单的算法。
内容:1. 输入N ,计算公式 ∑∑=-=+=N i i j j i s u m 11))( 的值,其中N>0。
2. 每个大于1的数的立方都可以表示成一连续奇数之和,试证实2到10的数都满足这样的规律。
3. 用牛顿迭代法求方程在下面方程在1.5附近的根:实验五数组实验目的:1.掌握一维数组和二维数组的定义、赋值和输入输出的使用方法。
2.掌握与数组有关的算法。
内容:1.输入n及n个整数(n<20),然后按奇数升序、偶数降序排列输出。
2.输入一个日期,计算该天是该年的第几天。
3.依次输入某个班级n个学生的数学、物理和化学课程的成绩,计算平均成绩后输出成绩列表,同时还要输出每个学生的平均成绩是否高于班级的平均成绩。
实验六 数组和字符串实验目的:1. 掌握一维数组、二维数组和字符数组的定义、赋值和输入输出的使用方法。
2. 掌握与数组有关的算法。
内容:1. 输入S1和S2两个字符串,将长的字符串拼接在短的字符串后面并输出,如果长度相等,S1接在S2后面。
假设两个字符串的长度相加不超过80。
(不能使用strcat 等函数)2. 输入两个日期,计算两日期的天数差,并显示两日期的顺序。
假设两个日期在同一年份。
(思考:任意给两个日期,求天数差。
)(需要考虑两个日期不在同一年份,但不考虑1700、1800等不是闰年的年份)3. 依次输入某个班级n 个学生的姓名、数学、物理和化学课程的成绩,在输入姓名时直接回车表示输入结束,计算平均成绩后按姓名的字典顺序输出成绩列表,同时还要输出每个学生的平均成绩是否高于班级的平均成绩。
(注意:输出时,姓名的首字母大写。
)实验七 函数实验目的:1. 掌握函数定义的方法。
2. 掌握函数调用、实参和形参的传递方法。
3. 掌握变量作用域和变量类型的使用方法。
内容:1. 从键盘输入数行数据,每行三个正整数n1、n2和n3,三个0表示输入结束。
每输入完一行,输出n1和n2之间(包括n1和n2)能被n3整除的数的个数。
要求用一个函数实现统计整除数个数的功能,其首部为: int aliquot(int n1, int n2, int n3)2. 求组合数。
计算 )!(!!),(n m n m n m C -=其中计算 C(m,n)的函数首部为: int cmn(int m, int n) 计算阶乘的函数首部为: int fac(int n) 并用cmn 函数打印杨辉三角形。
3. 从键盘输入最多50个整数,0表示结束。
将该批数据存入一个数组中,然后调用ReverseAndCount 函数将数据在数组中的存放次序颠倒并统计出大于平均数的个数,输出结果。
ReverseAndCount 函数的功能为颠倒数据存放的次序和统计大于平均数的个数,其首部为:int ReverseAndCount(int n, int s[])如果为了程序的结构,你还可以添加其他的子程序。
如,可以编写计算数组中数据的平均值的函数,还可将ReverseAndCount 函数分成两个子程序实现等。
实验八函数实验目的:1.掌握函数调用、实参和形参的传递方法。
2.掌握变量作用域和变量类型的使用方法。
3.掌握递归子程序的编写和使用方法。
内容:1.从键盘输入数行数据,每行最多20个正整数,每行最后用0表示行结束。
一个以0开始的行表示输入结束。
每输入完一行,输出该行数据的个数、平均值和有几个数据大于该行的平均值。
用一个函数实现数据输入的功能,其首部为:int input(int s[])input的参数为输入的数据,函数返回值大于0表示该行输入的数据个数,0表示输入结束。
用一个函数实现求平均值的功能,首部为:int Average(int n, int s[])Average的参数是n个数的数组,函数返回值为平均值。
用一个函数实现统计大于平均值的数据个数,首部为:int Count(int avg, int n, int s[])2.组合问题,由组合的基本性质可知:(1)C(m,n)=C(n-m,n)(2)C(m,n+1)=C(m,n)+C(m-1,n)公式(2)是一个递归公式,一直到满足C(1,n)=n为止。
当n<2*m时,可先用公式(1)进行简化。
使用递归求C(m,n)。
3.用递归实现将输入小于32768的正整数按逆序输出。
实验九指针实验目的:1.掌握指针的概念、定义指针和使用指针的方法。
2.掌握和理解指针和数组的关系和使用方法。
3.掌握指针和字符串的关系和使用方法。
注意:本次实验需要使用指针进行编程。
内容:1.从键盘输入若干数据整数(零表示结束),统计出数据个数,以及最大值、最小值和平均值。
用一个函数实现数据输入的功能,其首部为:int input(int s[])input的参数为输入的数据,函数返回值大于0表示该行输入的数据个数,0表示输入结束。
用一个函数实现求最大值、最小值和平均值的功能,首部为:void statistics(int n, int s[], int *max, int *min, float *avg)2.编写函数,通过指针一个将字符串反向。
函数首部为:void ReverseString(char *s)3.编写一个Insert(插入)函数,将一个字符串插入另一个字符串中指定位置。
函数首部为:int Insert(char *dest, char *src, int pos)函数的返回值为插入后的字符串长度。
实验十 结构体实验目的:1. 掌握结构体类型变量的定义和使用。
2. 掌握结构体类型数组的概念和使用方法。
3. 掌握链表的概念和初步的使用方法。
内容:1. 现有如下定义一个点和圆的结构体:用一个函数来实现判断某个圆是否包含坐标原点,其首部为:int Having Origin (struct CIRCLE c)返回1表示包含,0表示不包含。
主程序输入圆的参数,然后调用函数判断,并输出判断结果。
2. 每个学生有学号、姓名、语文、数学、外语和平均成绩。
建立一个最多保存五个学生成绩的结构体类型数组。
Input 函数输入学生的学号、姓名和三门课的成绩,并计算平均成绩,函数首部为:Input(int n, struct student s[])主程序调用Input函数输入学生成绩,然后输出学生的信息。
3. (本题使用链表)从键盘输入若干个大于0的整数,0表示输入结束。
建立一个链表,链表节点的值为输入的数,节点次序和输入次序相同。
然后复制该链表,但次序相反,并输出。
实验十一文件实验目的:1.掌握文件的定义和使用。
2.掌握文件的打开、关闭和读写等使用方法。
内容:1.先利用Notepad在D:\MyDoc目录中建立一个名为MyNew.txt的文本文件,在其中任意输入数行内容,然后编写一个C语言程序,读出MyNew.txt文件的内容并在屏幕上显示。
2.编写C语言程序,在D:\MyDoc目录中建立一个名为MyText.txt的文本文件,在其中写入两行内容,你的学号和你的姓名。
在程序正确运行后,利用Notepad打开该文件查看结果。
3.编写文件复制程序。
并用Notepad查看复制结果。
如果文件打开错误等要进行提示。
实验十二综合实验目的1.提高综合应用流程控制语句的能力;2.提高对复杂流程结构的程序的编写能力和调试能力;3.掌握利用数组的组织存储数据以及一些实用的算法。
4.掌握对文件的操作。
实验内容编写和调试一个具有能对用一维数组建立的顺序表进行各种操作的应用程序。
实验步骤1.写程序显示如下菜单1. 插入 (插入一个数据)2. 删除 (删除一个数据)3. 排序 (排序)4. 输出 (输出表中所数据)0. 退出 (退出程序)2. 用输入函数输入菜单选择的数字(0-4)对其他输入要提示错误信息流程控制结构如图1所示。