教育教学
当前位置: 首页 >> 教育教学 >> 正文
《程序设计基础》实验课程教学大纲
发布时间:2021-11-29

一、实验课程教学性质、目的、要求

《程序设计基础》是医药软件、信息管理和信息系统专业的一门专业基础课,它是一门实践性很强的课程,需要通过大量的实践,培养学生的计算思维,训练学生的程序设计和程序调试能力。

实验遵循初学者的认知规律,结合课程教学大纲的相应内容,引导学生由浅入深了解并掌握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月

 

(信息工程学院 医学信息工程教研室)

 

Copyright 2023 湖北中医药大学信息工程学院 All Right Reserved

地址:湖北省武汉市洪山区黄家湖西路16号

联系电话:027-68890145