程序设计基础(2024春)

辽宁科技大学 刘丽华

目录

  • 1 c++概述
    • 1.1 c++语言特点、简单c++程序的组成
    • 1.2 c++程序编译、连接、运行
    • 1.3 模块重点
    • 1.4 项目案例
    • 1.5 资源下载
    • 1.6 实践01
    • 1.7 模块练习
    • 1.8 模块测试
    • 1.9 线上讨论
  • 2 c++基础知识
    • 2.1 c++的词法单位
    • 2.2 c++数据类型、常量、变量
    • 2.3 运算符和表达式
      • 2.3.1 运算符、优先级和结合性
      • 2.3.2 基本运算符及其表达式
        • 2.3.2.1 基本运算符及其表达式 1
        • 2.3.2.2 基本运算符及其表达式 2
    • 2.4 模块重点
    • 2.5 项目案例
    • 2.6 资源下载
    • 2.7 实践02
    • 2.8 模块练习
    • 2.9 模块测试
    • 2.10 线上讨论
  • 3 流程控制语句
    • 3.1 控制结构概述
    • 3.2 顺序结构程序设计
      • 3.2.1 cin、cout
      • 3.2.2 scanf、printf
    • 3.3 选择结构程序设计
    • 3.4 循环结构程序设计
      • 3.4.1 while、do while 、for语句
      • 3.4.2 多重循环
    • 3.5 模块重点
    • 3.6 项目案例
    • 3.7 资源下载
    • 3.8 实践03
    • 3.9 模块练习
    • 3.10 模块测试
    • 3.11 线上讨论
  • 4 数 组
    • 4.1 一维数组
    • 4.2 二维数组
    • 4.3 字符数组
    • 4.4 模块重点
    • 4.5 项目案例
    • 4.6 资源下载
    • 4.7 实践04
    • 4.8 模块练习
    • 4.9 模块测试
  • 5 函数
    • 5.1 函数的定义与声明
    • 5.2 函数类型和函数值
    • 5.3 函数的参数传递
    • 5.4 函数的调用
    • 5.5 内联函数、函数重载
    • 5.6 变量和函数的作用域
      • 5.6.1 变量的作用域
      • 5.6.2 函数的作用域
    • 5.7 宏定义、文件包含
    • 5.8 模块重点
    • 5.9 项目案例
    • 5.10 资源下载
    • 5.11 实践05
    • 5.12 模块练习
    • 5.13 模块测试
  • 6 指针
    • 6.1 指针的基础知识
    • 6.2 指针与数组
      • 6.2.1 指针与一维数组
      • 6.2.2 指针与二维数组
      • 6.2.3 指针与字符串
    • 6.3 指针与函数
    • 6.4 函数main()的预参数、动态内存分配
    • 6.5 模块重点
    • 6.6 项目案例
    • 6.7 资源下载
    • 6.8 实践06
    • 6.9 模块练习
    • 6.10 模块测试
  • 7 类与对象
    • 7.1 类与对象的基本概念
      • 7.1.1 类与对象的基本概念 1
      • 7.1.2 类与对象的基本概念 2
    • 7.2 构造函数
    • 7.3 析构函数
    • 7.4 友元函数和友元类、类的作用域
    • 7.5 模块重点
    • 7.6 项目案例
    • 7.7 资源下载
    • 7.8 实践07
    • 7.9 模块练习
    • 7.10 模块测试
  • 8 继承和多态
    • 8.1 继承的概念与派生的定义
    • 8.2 派生类的继承方式
    • 8.3 派生类的构造函数和析构函数
    • 8.4 多重继承
    • 8.5 基类和派生类的转换
    • 8.6 多态
    • 8.7 虚函数、纯虚函数与抽象类
    • 8.8 模块重点
    • 8.9 项目案例
    • 8.10 资源下载
    • 8.11 实践08
    • 8.12 模块练习
    • 8.13 模块测试
  • 9 综合应用案例
    • 9.1 综合应用案例分析
    • 9.2 综合应用案例设计
      • 9.2.1 类的设计
      • 9.2.2 代码实现
    • 9.3 综合应用案例实现
    • 9.4 应用创新设计案例
      • 9.4.1 交通信号设计
      • 9.4.2 复数计算的实现
      • 9.4.3 课表的实现
      • 9.4.4 迷宫问题
      • 9.4.5 四则运算游戏
      • 9.4.6 打印日历
      • 9.4.7 双向链表的实现
    • 9.5 实践09
    • 9.6 模块测试
  • 10 创新实践
    • 10.1 实践指导书
    • 10.2 实践单元
      • 10.2.1 通讯录设计
      • 10.2.2 车辆信息管理
      • 10.2.3 学生信息管理
  • 11 每周一练
    • 11.1 作品
  • 12 全国计算机等级考试(c++)
    • 12.1 考试大纲
    • 12.2 基础知识
    • 12.3 学习技巧
    • 12.4 实例编程
    • 12.5 上机题库
实践06

实验6 指针——学生成绩统计

目的

1. 熟练掌握指针、地址、指针类型、空指针等有关概念;

2. 熟练掌握指针的间接访问、指针的加减运算和指针表达式;

3. 学会使用指针变量访问数组元素;

4. 学会建立动态数组的方法。

实验内容与要求


 1.内容:

编写一个程序,该程序提示用户输入学生的姓名及考试分数(假定每个班级学生人数最多为30人),并完成下列功能:

1)输出班级平均分。

2)输出考试成绩低于班级平均分的学生姓名及其分数。

3输出最高分及最高分学生的姓名。

2.要求:

(1) 总学生人数由用户动态输入;

(2) 学生姓名使用静态二维字符数组char name[30][20]存储,学生分数使用动态整数数组int score[n]存储。

(3) 通过数组下标使上述两个数组在逻辑上关联起来。例如,若使用二维字符数组第iname[i]存储第i个学生的姓名,则使用整数数组的第i个元素score[i]存储第i个学生的分数。

(4) 先用数组名+下标的方式访问数组元素,完成全部要求的功能。经过测试无错误之后,修改程序,改用数组指针方式访问保存学生分数的数组元素score[i],并完成同样的功能。最后,再次修改程序,使用动态数组存储学生分数score[i],并完成全部要求的功能。

(5) 写出完整的程序,经过测试确定正确无误之后,给出测试数据并完成实验报告。

实验任务分解

指导

1.建立工程

(1) 新建一个win32 Console Application的工程:

打开VC++开发软件,从[文件]菜单中点击[新建]菜单项,出现如图所示:

在右上角的工程下输入该工程的名称,如 c2a,并设置该工程所保存的路径。

最后点击确定。


(2) 当确定后会出现要你选择工程类型的对话框,如图所示:请选择一个空的工程,即第一个选项。

(3) 当单击确定后,工程建立完毕,接下来建立程序源文件,请再单击[文件]菜单下的[新建]出现原先出现的对话框,请选择 “文件选项卡中的c++ source file选项,并取名,如c2a

4 当确定后,就进入了源代码的编辑窗口

(5) 建立C++程序的基本框架 ,输入程序代码以从键盘接受一个整数,此整数即为总学生人数。

2.在函数中main( )使用一个简单的循环语句完成学生姓名和该学生的成绩的输入,例如,要输入第i个学生的姓名和分数,可使用语句cin>>name[i];同时输入该学生分数cin>>score[i]

(1)定义姓名数组name[30][20]和分数数组score[n]

(2)使用cin流输入第一个学生的姓名和成绩,并存入相应数组的0号单元中。

(3)若(2)成功,则将(2)所使用的代码嵌入一个循环体中,以实现输入多个学生的姓名和成绩。

(4)编译运行程序,改正全部编译及运行时错误。

3.完成上述数据的输入后,应输出全部学生姓名及其分数,以确保第1步的有关操作是有效的。

(1) 使用cout流输出某一个学生的姓名和成绩,注意添加必要的空格字符以便于阅读。

(2)若(1)成功,则将(1)所使用的代码嵌入一个循环体中,以实现输出全部学生的姓名和成绩,注意更新循环控制变量。

(3)编译运行程序,改正全部编译及运行时错误。

4.求平均分,这一步比较简单,只要将全部成绩累加起来,再除以学生人数就可以了。

(1)定义两个变量sun和aver分别保存全班成绩的累加和与班级平均分。

(2)使用一个循环将班级所有人的成绩累加起来;

(3)将累加和除以班级总人数即得班级平均分,将此平均分保存到相应的变量中并输出就可以了。

(4)编译运行程序,改正全部编译及运行时错误。

5.要输出低于平均分的学生姓名及其分数,只要将每一名学生的分数score[i]与步骤3中所求得的平均分进行比较,若低于平均分,则输出该分数score[i]及对应数组中的学生姓名name[i]即可。

(1)使用if语句将第一个学生的成绩score[0]与第3步求得的平均分aver进行比较,若score[0]<aver为真或者score[i]>aver为假,则输出name[0]和score[0];

(2)若(1)成功,则将(1)所使用的代码嵌入一个循环体中,以实现将全班每一个学生的成绩与aver进行比较,例如,对第个学生,可对表达式score[i]<aver进行判断,若该表达式的值为真,则输出name[i]和score[i]

(3)编译运行程序,改正全部编译及运行时错误。

6.找出最高分及最高分学生姓名,此问题可转化为求score[i]数组中最大值的下标k,求出了k,输出name[k]score[k]即可。

(1)定义辅助变量max和k以保存数组score[n]当前最高分及其下标。

(2)令max = score[0]及k=0,即首先假定最高分为score[0];

(3)使用一个循环将数组score[n]中从1号单元开始的每一个元素,与max进行比较,若某一个元素score[i]>max;则更新maxscore[i],同时更新ki;循环结束后,变量max必保存最高分,变量k保存最高分的下标。

4)输出name[k]score[k]

(5)编译运行程序,改正全部编译及运行时错误。

7. 1~5全部成功完成,则进行下列操作:

1)将程序中凡是出现score[i]的地方改为*(score +i),编译运行程序,并比较结果是否有错误。

(2)若(1)成功,则定义指针变量 int *p = score;再将程序中凡是出现*(score +i)的地方改为*p++,注意:在每一个循环体用到*p++语句的循环语句之前要更新p的值为score,因为前一个循环结束后,p可能不再指向数组score[n]第一个元素了

(3)编译运行程序,并比较结果是否有错误。

8. 1~6全部成功完成,则进行下列操作:

1)将定义数组score[i]注释掉;

2)在同一位置添加代码 int * score = new int[n];

3编译运行程序,并比较结果是否有错误。