课程代码:0613025
高级程序设计
Advanced Program Design
学分:3.0 总学时:64 实验学时:24
面向专业:信息管理与信息系统
一、实验教学目标
《高级语言程序设计》是一门实践性很强的课程。上机实验是学习和掌握本课程的重要环节。要学好本课程,应在掌握必要的高级语言程序设计基础知识基础上,通过上机实验,将课堂所学理论知识与实际应用结合起来,熟练掌握调试程序的方法和编写简单程序的初步能力。
二、实验教学基本要求
1.学生按照实验要求,上机前做好上机实验预习。
2.上机实验时应按实验要求完成每一个实验的内容。
3.理解计算机程序的执行过程;
4.掌握用计算机解决问题的方法和基本的程序设计技术;
5.学会程序的调试方法。
三、 实验教材或实验指导书
1.谭浩强编. C程序设计. 第3版. 北京:清华大学出版社,2005.
2.谭浩强编. C程序设计试题汇编. 第2版. 北京:清华大学出版社,2006.
3.朱小菲等. C语言程序设计题解及实验教程. 北京:清华大学出版社,2009
四、考核方式与评分办法
1.实验考核内容:
(1)实验课出勤情况,必选实验课学生必须参加实验。
(2)积极主动认真做实验。
(3)实验方案过程结果要正确。
2.成绩评定标准:
优秀:实验中认真操作,实验报告独立完成,字迹工整,实验步骤清晰,数据处理及计算正确,有实验分析和总结(特别是总结出实验中出现的问题及解决的方法等);对实验过程自己设计的 ,实验步骤自己编写的,只要无根本性错误。
良好:实验中认真操作,实验报告独立完成,字迹工整,实验步骤清晰,数据处理及计算无根本错误。
中等:实验中认真操作,实验报告独立完成,实验步骤清晰,数据处理及计算无根本错误。
及格:实验中基本能认真操作,实验报告按标准格式独立完成,数据处理及计算无根本错误。
不及格:实验中不认真操作,实验报告不完成,抄袭实验报告,字迹潦草,数据处理及计算错误等。
五、实验项目设置
序号 |
实验项目名称 |
实验学时 |
实验类型 |
实验要求 |
主要设备(用品)台(套)数 |
1 |
数据类型、运算符和表达式 |
3 |
设计 |
1.掌握C语言基本类型变量的使用。 2.掌握加、减、乘、除等基本运算符的定义与使用规则。 3.学会输入/输出函数调用语句的使用格式,进行相应程序设计训练。 4.熟悉C程序的编辑、编译、连接和运行的过程。 |
计算机80台 |
2 |
选择结构程序设计 |
3 |
设计 |
1. 了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”); 2.掌握条件判断的用法和特点。 3.掌握if语句的单路分支、二路分支的用法。 4.了解if语句的多路分支和if语句嵌套形式的用法。 5.掌握switch语句的用法。 |
计算机80台 |
3 |
循环结构程序设计 |
3 |
设计 |
1.掌握while语句使用。 2.掌握do-while语句使用。 3.掌握for语句使用。 4.理解break和continue在循环结构中的作用。 |
计算机80台 |
4 |
数组 |
4 |
设计 |
1.掌握字符数组和字符串函数的使用。 2.掌握一维数组的定义、引用、初始化的用法。 3. 掌握与数组有关的算法(特别是排序算法)。 |
计算机80台 |
5 |
函数定义与调用 |
4 |
设计 |
1.掌握函数定义的方法。 2.掌握函数形参和实参的特点。 3.掌握函数调用的使用形式。 4. 掌握函数的嵌套调用和递归调用的方法; |
计算机80台 |
6 |
指针 |
4 |
设计 |
1.掌握指针的概念,会定义和使用指针变量; 2.学会使用数组的指针和指向数组的指针变量; 3.学会使用字符串的指针和指向字符串的指针变量; 4.学会使用指向函数的指针变量; 5.了解指向指针的指针的概念及其使用方法。 |
计算机80台 |
7 |
结构体和共用体 |
3 |
设计 |
1.掌握结构体类型变量的定义和使用; 2.掌握结构体类型数组的概念和应用; 3.掌握链表的概念,初步学会对链表进行操作; 4.掌握共用体的概念与使用。 |
计算机80台 |
六、实验内容与实验方式
实验一
(一)实验内容
1.输入并运行以下程序:
main( )
{ char c1,c2; c1=97; c2=98; printf(“%c %c\n”,c1,c2);printf(“%d %d\n”,c1,c2);}
在此基础上
①将第三行、第四行改为:
c1=321;c2=353;
再使之运行,分析其运行结果。
②将第二行改为:
int c1,c2;
再使之运行,分析其运行结果。。
2.输入并运行以下程序:
main( )
{int i=8,j=10,m,n; m=++i;n=j++; printf(“%d,%d,%d,%d\n”,i,j,m,n); }
分别作以下改动并运行:
①程序改为:
main( )
{int i=8,j=10;printf(“%d,%d\n”,i++,j++); }
②在②的基础上,将printf语句改为:
printf(“%d,%d\n”,++i,++j);
③再将printf语句改为:
printf(“%d,%d,%d,%d\n”,i,j, i++,j++);
④程序改为:
main( )
{int i=8,j=10,m=0,n=0;;m+=i++;n-=--j;printf(“i=%d,j=%d,m=%d,n=%d\n”,i,j,m,n); }
3. 请将下列给出的两个程序段分别输入计算机后,分析其运行结果:
①main()
{ int num;num=32767;printf(“num=%d\n”,++num); }
② main()
{ int a=-2;printf(“%d, %d\n”,a, a--); }
(二)实验方式与分组要求
上机,每人一组
实验二
(一)实验内容
先编程序,解以下问题,然后上机调试运行程序。
1.有一个函数

用scanf函数输入x的值(分别为x<1、1~10、≥10三种情况),求y值。
2.给出一个百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。
3.给一个不多于5位的正整数,要求:
求出它是几位数;
分别打印出每一位数字;
按逆序打印出各位数字,例如原数为321,应输出123。
(二)实验方式与分组要求
上机,每人一组
实验三
(一)实验内容
编程序并上机调试运行。
1.输入两个正整数,求其中最大公约数和最小公倍数。
2.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
3.用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。牛顿迭代法的公式是
。
4.打印出以下图案:
*
***
*****
*******
*****
***
*
5.编程求1!+2!+3!+……+20!。
(二)实验方式与分组要求
上机,每人一组
实验四
(一)实验内容
编程序并上机调试运行。
1. 编写程序,用scanf函数输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
2.有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值,如果该数不在数组中,则输出“无此数” ,并且可以实现连续查找。15个数用赋初值的方法在程序中给出,要找的数用scanf函数输入。
3.将以下二维数组中数按列的顺序存放到一个一维数组中。二维数组的内容是
11 22 33 44
11 22 33 44
11 22 33 44
则一维数组中的内容是11 11 11 22 22 22 33 33 33 44 44 44
4.将两个字符串连接起来,不要用strcat函数。
5.从键盘输入5个字符串,找出最长的字符串和最大的字符串。
(二)实验方式与分组要求
上机,每人一组
实验五
(一)实验内容
编程序并上机调试运行之。
1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
2.两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。
3.已知二阶Fibonacci数列:
0 若n=0
Fib(n)= 1 若n=1
Fib(n-1)+Fib(n-2) 其他情况
定义递归函数求Fib(n)。
4.写一个函数完成下列任务:输入一个表示正整数的字符串,将字符串转换成对应的数字。例如,输入3个字符组成的字符串“123”,将它转换成整型数123。
5.设计一个含有多个菜单项的菜单演示程序。程序运行后,给出4个菜单项的内容和输入提示:
1.求最大公约数
2.求最小公倍数
3.判断素数
4.退出程序
选择1-4:
使用数字1~4来选择菜单项,其他输入则不起作用。
(二)实验方式与分组要求
上机,每人一组
实验六
(一)实验内容
编程序并上机调试运行程序(都要求用指针处理)。
1.定义函数void fun(int x[ ],int *max,int *min),找出数组x中的最大值和最小值,最大值和最小值通过形参指针max和min传回。
2.编写一个函数comp(s1,s2)实现两个字符串的比较。
如果s1=s2,则函数返回值为0;如果s1≠s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如s1<s2则输出负值。
两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数输出。
3.从键盘输入一个字符串与一个指定字符,调用函数,将字符串中出现的指定字符全部删除。
4.编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用 “.”结束输入。
5.在主函数中输入5个字符串,用另一个函数对它们排序(要求用指针数组来完成),然后在主函数输出排好序的字符串。
(二)实验方式与分组要求
上机,每人一组
实验七
(一)实验内容
编程序,然后上机调试运行。
1.有3个学生,每个学生的数据包括学号、三门课的成绩,要求用input函数实现从键盘输入学生数据,用average函数求每个人的平均分,用output函数打印学生数据及平均成绩。
2.建立一个带有头结点的单链表,每个结点包括:学号、年龄,并输出链表中所有结点的数据。在链表中查找年龄最大的结点,并将链表中等于此年龄的结点删除(年龄最大的结点可能不止一个)。
3.将一个链表按逆序排列,即将链头当链尾,链尾当链头。
4.上机输入如下程序:
main( )
{union bt {int k;char c[2];}a;a.k= -7; printf(“%o,%o\n”,a.c[0],a.c[1]);}
分析其运行结果。
(二)实验方式与分组要求
上机,每人一组
执笔:曾 波
审核:韩 红