一、实验课程教学性质、目的、要求
《程序设计基础》是医药软件、信息管理和信息系统专业的一门专业基础课,它是一门实践性很强的课程,需要通过大量的实践,培养学生的计算思维,训练学生的程序设计和程序调试能力。
实验遵循初学者的认知规律,结合课程教学大纲的相应内容,引导学生由浅入深了解并掌握C++程序设计语言的基本语法,通过大量上机题目的训练,培养学生分析问题、算法设计、编写程序、及调试程序的能力,在实训中掌握程序设计的基本思想和一般方法,提高计算思维能力和程序设计能力。
要求学生在上机前认真做好各种准备工作,独立完成程序编制,在规定的时间内将所编程序在计算机上调试通过,提交到CG平台。
二、实验内容
实验一 使用cin和cout进行数据的输入和输出
实验目的:
1、了解和熟悉集成开发环境;
2、学会使用cout进行数据输出操作;
3、学会使用cin进行数据输入操作。
实验内容:
1、表白C++。设计一个C++程序,输出以下信息:
I LOVE C++!
2、为程序1加上装饰,输出如下图案:
***************
* I LOVE C++! *
***************
3、编写程序,实现从键盘终端输入两个整型的数据,计算其和,以形如1+2=3的形式输出。
4、温度转换。从键盘输入华氏温度,将其转换为摄氏温度。
5、设计一个程序,从键盘输入一个圆的半径,求其周长和面积。(应用符号常量)
实验二 基本数据类型和表达式
实验目的:
1、掌握基本数据类型常量的表示方式;
2、掌握基本数据类型变量的定义;
3、掌握运算符与表达式的应用;
4、学会编写简单程序验证常量、表达式、运算符所表示的值。
实验内容:
1、设计一个C++程序,输入三个学生的成绩,求其总成绩。
2、从键盘输入三个整数,求这三个整数的较大值。
3、设计一个程序,从键盘输入一个小写字母,将它转换成大写字母后输出。(提示:小写字母ASCII=大写字母ASCII-0x20)
4、从键盘输入一个三位整数n=abc,从左到右用a、b、c表示各位的数字,现要求依次输出从右到左的各位数字,即输出另一个三位数m=cba,例如:输入123,输出321,试设计程序。(提示:a=n/100,b=(n-a*100)/10,c=n%10,m=c*100+b*10+a)
5、从键盘输入一个整数,判断其奇偶性。
实验三 选择结构程序设计
实验目的:
1、掌握if语句的使用;
2、掌握switch语句的使用;
3、掌握switch语句中break语句的使用。
实验内容:
1、从键盘终端输入一个整数,若该整数为奇数则输出“该数是奇数!”,为偶数则输出“该数为偶数!”(要求用两种方法:if和switch)
2、从键盘终端输入三个整数,输出这三个数中的最大值和最小值。
3、从键盘终端输入学生的成绩,输出其等级。
4、求一元二次方程的根。(方程的系数从键盘终端输入)
5、编程设计一个简单的运算器,要求先输出一个菜单,如下图所示,输入1或2或3或4,选择执行对应的运算。参与运算的操作数从键盘终端输入。
实验四 循环结构程序设计
实验目的:
1、初步掌握循环结构的程序设计方法,掌握while语句的使用方法;
2、掌握do-while语句的使用;
3、掌握for语句的使用;
4、掌握break和continue的使用。
实验内容:
1、依次对从键盘终端输入的10个整数判断其奇偶性。
2、判断并输出1-1000之间所有17的倍数,以5个一行输出。
3、用公式求
的近视值,直到最后一项的绝对值小于10-6为止。
4、判断一个整数是否是素数。
5、输入一行字符,分别统计出其中英文字母,数字和其他字符的个数。(cin.get())
6、编程计算a+aa+aaa+aa……a(n个a)的值,n和a的值由键盘输入。
7、求100-999之间的水仙花数(各位数的立方和等于其值。例如:407=4*4*4+7*7*7)。
8、输出兔子序列:1 1 2 3 5 8 13 ......
9、编程设计一个简单的可重复运算的运算器,要求先输出一个菜单,输入1或2或3或4,选择执行对应的运算,输入5退出运算器。参与运算的操作数从键盘终端输入。
实验五 循环结构嵌套
实验目的:
1、掌握嵌套循环的执行过程;
2、学会用循环嵌套解决实际问题;
实验内容:
1、乘法口诀表。(三角形的形式输出)
2、求2-1000之间的所有完数(所谓完数是指它的所有因子之和等于它本身,如6=1+2+3)。
3、求2-1000之间的所有素数,并以10个一行输出。
4、输出下列图形。
(a)
*
***
*****
*******
*********
(b)
*
***
*****
*******
*********
*******
*****
***
*
(c)
*
***
*****
*******
*********
*******
*****
***
*
5、求和S=1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+...+n)。n从键盘输入。
6、求1!+2!+3!+...+6!
实验六 函数
实验目的:
1、掌握函数的定义;
2、掌握函数的调用;
3、掌握return语句的使用。
实验内容:
1、定义一个函数,实现判断某个整数是否是完数。并调用该函数求2-1000之间的所有完数(所谓完数是指它的所有因子之和等于它本身,如6=1+2+3)。
2、定义一个函数,实现判断某个整数是否是素数。调用该函数求2-1000之间的所有素数,并以10个一行输出。
3、定义一个函数,实现判断某个整数是否是素数。借用该函数验证哥德巴赫猜想:任意一个大的偶数都可以分解成两个素数之和。从键盘输入一个偶数,输出该偶数的两个素数之和。
4、定义一个函数,实现求某个整数的阶乘。并调用该函数实现求1!+2!+3!+...+n!
5、定义一个函数,实现求任意两个整数之间的所有整数的和。并借助该函数求和S=1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+n)。n从键盘输入。
6、若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数称为可逆素数。编写一个判断某数是否为可逆素数的函数,在主函数中输入一个整数,再调用此函数进行判断。
实验七 一维数组
实验目的:
1、掌握一维数组的定义;
2、掌握一维数组的存储;
3、掌握一维数组元素的访问;
4、掌握一维数组的应用。
实验内容:
1、求从键盘终端输入的十个整数的最大值、最小值、平均值。
2、从键盘终端输入10个整数,用冒泡法按从小到大排序后输出。
3、从键盘终端输入10个整数,用选择法按从小到大排序后输出。
4、统计从键盘终端输入20个整数,统计其中有多少个正数、多少个负数。
5、从键盘终端输入20个学生的成绩,统计各个分数段的人数。(小于60、60-69、70-79、80-89、90-100)用一个一维数组作为各分数段的计数器。
6、从键盘终端输入一个十进制数,将其转换为二进制后输出。借助数组实现。
7、利用数组实现求兔子序列前50个数,并10个一行输出。
8、利用一维数组求解并输出杨辉三角形前10行。
实验八 二维数组
实验目的:
1、掌握二维数组的定义;
2、掌握二维数组的存储;
3、掌握二维数组元素的访问;
4、掌握二维数组的应用。
实验内容:
1、二维数组的二维数组访问法。
2、二维数组的一维数组访问法。
3、求矩阵的转置矩阵。
4、输出二维数组及每行的最大值。(函数法)
5、求两个矩阵的乘积。
6、利用二维数组求解并输出杨辉三角形前10行。
实验九 字符数组
实验目的:
1、掌握字符数组的定义;
2、掌握字符串的表示;
3、掌握字符数组的使用
4、掌握字符串变量的定义和使用。
实验内容:
1、编写函数实现求字符串的长度、字符串的复制、字符串的连接、字符串的比较。
2、对从键盘终端输入的5个字符串,按从大到小的顺序输出。
实验十 指针
实验目的:
1、掌握指针的定义;
2、掌握指针的表示;
3、掌握如何通过指针访问数组;
4、掌握指针作为函数的参数。
实验内容:
1、编写函数实现求字符串的长度、字符串的复制、字符串的连接、字符串的比较。
2、编写一个程序,该程序建立一个动态数组,为动态数组的元素赋值,显示动态数组的值并删除动态数组。
3、从键盘读入若干整数,将它们按由低到高排序输出。要求用一个数组存放各个整数;
在主函数main()中实现数据的输入和输出操作,并用一个函数实现对数组元素的排序操作。
排序函数调用另一个函数swap()实现两个数组元素的交换。可以使用指针、引用两种方式实现函数参数的传递:
swap(int *pa, int *pb);
swap(int & a, int & b);
另要求:用数组实现程序
说明:用一个长度为10的数组存放待排序的数据,数组的定义为 int iArray[10];
数组排序函数的原型为:void sort(int num, int iArray[]);
其中,num表示数组元素的个数,iArray是数组。用动态申请空间的方式实现程序要求。
说明:使用指针来实现前面数组的功能
nt *piArray;
piArray = new int[num];
其中,数组的大小num需要由用户预先输入。
实验十一 结构
实验目的:
1、学习堆内存分配技术;
2、学习用指针构造链式数据结构;
3、学习操作链表。
实验内容:
1、编程打印学生数据:有5个学生,每个学生的数据包括学号、姓名、三门课程成绩,从键盘输入5个学生数据,要求打印出三门课总平均分,以及最高分的学生数据(包括学号、姓名、三门课成绩、平均分数)。
要求:
用一个自定义函数,负责输入5个学生数据;用另一个自定义函数求总平均分;再用一个自定义函数求出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。
用多文件程序结构实现。
2、用单向链表实现约瑟夫环问题。
实验十二 类
实验目的:
1、定义类;
2、学习构造类的方法;
3、领会面向对象程序设计的方法。
实验内容:
1、打印矩阵
定义一个矩形类,内有保护数据成员长和宽(范围1-30),成员函数:取长、取宽。在构造该类对象时,初始化矩阵的长和宽。
编制应用程序,创建矩形对象,并打印其矩形的形状,如一个长为6宽为15的矩阵打印如下:
***************
***************
***************
***************
***************
***************
2、生日是星期几。
实验十三 友元
实验目的:
1、掌握友元函数和友元类的说明方法;
2、理解友元函数和友元类的使用特点。
实验内容:
1、设计一个学生类,成员变量包含学生的姓名、成绩,设计其成员函数,并设计一个友元函数比较学生成绩的高低,并输出所有学生中最高分和最低分学生的姓名。
2、设计一个日期类Date,包含日期的年、月、日三个数据成员,编写一个友元函数,求两个日期之间相差的天数。
3、设计一个点类Point,包含点的坐标x和y两个数据成员,设计两个友元函数,分别计算两点间的水平距离和垂直距离。
4、采用友元类方式重新编写以上各题的程序。
实验十四 运算符重载
实验目的:
1、理解运算符重载的概念和实质;
2、掌握运算符重载函数的定义方法;
3、掌握将运算符重载为类的成员函数和友元函数的方法,掌握和运用几种常用的C++语言运算符的重载进行解决问题的方法。
实验内容:
1、运用运算符重载实现点类Point的两个对象(即两点)间横、纵坐标的相加运算。
2、设计一个person类,包含姓名、年龄等数据成员。要求重载流插入运算符(<<)和流提取运算符(>>),以实现对person类对象信息的输入和输出。
3、设计一个复数类Complex,实现两个复数的相加(+)、相减(双目-)以及取负(单目-)的运算。
4、设计一个日期类,重载++和—运算符实现求日期的前一天和后一天。
实验十五 模板
实验目的:
1、理解类模板和函数模板的意义和作用;
2、掌握类模板和函数模板的定义方法及在程序中的使用方法。
实验内容:
设计一个类模板,模拟动态数组的增加、删除、排序、输出等操作。
三、实验课程学时分配
序号
|
实验名称 |
课时 |
一 |
数据类型、表达式 |
2 |
二 |
程序设计初步 |
8 |
三 |
利用函数实现指定功能 |
4 |
四 |
利用数组批量处理数据 |
4 |
五 |
善于使用指针和引用 |
4 |
六 |
用户自定义数据类型 |
6 |
七 |
类和对象的特性 |
2 |
八 |
怎样使用类和对象 |
2 |
九 |
运算符重载 |
2 |
十 |
继承与派生 |
2 |
十一 |
输入输出流 |
2 |
四、教材与参考书
1、(美)文尼特(Stewart Venit),(美)德雷克(Elizabeth Drake)著,远红亮等译,程序设计基础(第5版),清华大学出版社出版,2013年04月
2、姜沐著,程序设计基础(C99),东南大学出版社,2015年09月
3、(美)Stephen Prata著,C++ Primer Plus(第6版)中文版,清华大学出版社,2013年04月
(信息工程学院 医学信息工程教研室)