广州大学学生实验报告,程序设计基础,实验3数组、结构体及指针

本文主要是介绍广州大学学生实验报告,程序设计基础,实验3数组、结构体及指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

广州大学学生实验报告

开课学院及实验室:计算机学院/电子信息楼              202x年  月  日

  

计算机

年级/专业/

计科

姓名

Great

Macro

学号

实验课程名称

程序设计基础

成绩

实验项目名称

实验3数组、结构体及指针

指导老师

(***(1)报告只能为文字和图片;(2)实验项目名称不能有任何改动;(3)必须填写正确的姓名和学号;否则会影响最后成绩的统计,后果自负***)

实验A 数组字符串

一、实验目的及要求

1.了解数组与数学矩阵的关系;

2.掌握数组的定义、引用与初始化;

3.理解二维数组数据的存储顺序;

4.理解并掌握冒泡排序法、选择排序法;

5.掌握字符数组与字符串的定义、引用;

6.了解字符串处理函数的用法。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Visual C++ 6.0或Microsoft Visual Studio 2005/2008/2010/2012/2013/2015/2017/2019;或适合的C/C++编程环境。

三、实验内容及步骤

编写程序,解下列问题,然后把编写的程序代码和运行结果截图复制到题目后面的空白处。

    1、某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;

(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

#include <iostream>
#include <ctime>
using namespace std;#define N 30    // 定义班级人数// 定义学生结构体
struct student
{int NO;     // 学生编号int MT;     // 数学成绩int EN;     // 英语成绩int PH;     // 物理成绩int sum;    // 学生总分float avg;  // 学生评价分
};// 初始化学生信息
void init(student *stu, int n)
{for(int i = 0; i < n; i++){stu[i].NO = 1000 + i;stu[i].MT = rand()%71 + 30;stu[i].EN = rand()%71 + 30; stu[i].PH = rand()%71 + 30; stu[i].sum = stu[i].MT + stu[i].EN + stu[i].PH;stu[i].avg = stu[i].sum / 3.0;}
}// 按照总分高低排名, 方便起见,用选择排序
void sort(student *stu, int n)
{int i, j, max;student tmp;for(i = 0; i < n - 1; i++){max = i;for(j = i + 1; j < n; j++){if(stu[max].sum < stu[j].sum){max = j;}}if(max != i){tmp = stu[i];stu[i] = stu[max];stu[max] = tmp;}}
}// 打印学生信息
void display(student *stu, int n)
{cout << "名次\t学号\t数学\t英语\t物理\t总分\t平均分" << endl;for(int i = 0; i < n; i++){cout << i+1 << '\t' << stu[i].NO << '\t' << stu[i].MT << '\t' << stu[i].EN << '\t' << stu[i].PH << '\t' << stu[i].sum << '\t' << stu[i].avg << endl;}
}int query(student *stu, int n, int NO)
{for(int i = 0; i < n; i++){if(NO == stu[i].NO){return i;}}return -1;
}int main()
{int i, k, NO;srand(time(0));student stu[30];init(stu, 30);while(1){cout << "请输入你的操作,1.排名并查看名次 2.查看个人信息 3.退出:";cin >> i;switch(i){case 1:sort(stu, 30);display(stu, 30);break;case 2:cout << "请输入学号:";cin >> NO;k = query(stu, 30, NO);if(k != -1){cout << "名次\t学号\t数学\t英语\t物理\t总分\t平均分" << endl;cout << k+1 << '\t' << stu[k].NO << '\t' << stu[k].MT << '\t' << stu[k].EN << '\t' << stu[k].PH << '\t' << stu[k].sum << '\t' << stu[k].avg << endl;}else{cout << "没有找到对应学号的学生" << endl;}break;}if(i == 3){cout << "你已退出!\n" << endl;break;}}return 0;
}

 

    2、不用字符串处理函数将两个字符串连接,即将字符串b连接到字符串a的后面,变成字符串c。

   

#include <iostream>
using namespace std;// 计算字符串长度
int mystrlen(char *s)
{int i = 0;while(s[i]){i++;}return i;
}// 字符串拼接函数
void mystrcat(char *s1, char *s2, char *s)
{int i, j;// 复制字符串s1for(i = 0; i < mystrlen(s1); i++){s[i] = s1[i];}// 复制字符串s2for(i = 0, j = mystrlen(s1); i < mystrlen(s2); i++, j++){s[j] = s2[i];}// 最后要补上一个结束符s[j] = '\0';
}int main()
{int n;char s1[50] = {'\0'};char s2[50] = {'\0'};cout << "请输入字符串s1: ";cin >> s1;cout << "请输入字符串s2:";cin >> s2;n = mystrlen(s1) + mystrlen(s2);char *s = new char[n + 1];if(s == NULL){cout << "动态内存空间分配出错" << endl;return -1;}mystrcat(s1, s2, s);cout << "字符串s1拼接字符串s2后为:" << s << endl;return 0;
}

 

实验B结构实验

一、实验目的

1.掌握结构的概念;

2.学会通过结构成员来使用结构;

3.学会通过函数的参数使用结构;

4.学会结构变量成员值的输出。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Visual C++ 6.0或Microsoft Visual Studio 2005/2008/2010/2012/2013/2015/2017/2019;或适合的C/C++编程环境。

三、实验内容

1、定义一个结构变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。由主函数将年月日传递给days函数,计算后将日子传递回主函数输出。

 

 

 

2、编写一个程序,用结构表示一个学生的信息,每个学生的信息包括:学号、姓名、三门成绩。要求从键盘输入学生的数据,并输出成绩表(包括每个学生的学号、姓名、三门成绩及平均分数),并输出平均分在前3名的学生的姓名及平均分。

#include <iostream>
using namespace std;// 定义学生的信息结构体
struct student
{char NO[10];    // 学号char Name[10];  // 姓名int MT;         // 数学int EN;         // 英语int PH;         // 物理float avg;      // 平均分
};// 初始化学生信息
void init(student *stu, int n)
{for(int i = 0; i < n; i++){cout << "请依次输入学生的学号,姓名,数学,英语,物理:" << endl;cin >> stu[i].NO >> stu[i].Name >> stu[i].MT >> stu[i].EN >> stu[i].PH;stu[i].avg = (stu[i].MT + stu[i].EN + stu[i].PH) / 3.0;}
}// 打印学生信息
void display(student *stu, int n)
{cout << "名次\t姓名\t学号\t数学\t英语\t物理\t平均分" << endl;for(int i = 0; i < n; i++){cout << i+1 << '\t'<< stu[i].Name << '\t' << stu[i].NO << '\t' << stu[i].MT << '\t' << stu[i].EN << '\t' << stu[i].PH << '\t' << stu[i].avg<< endl;}
}// 按照总分高低排名, 方便起见,用选择排序
void sort(student *stu, int n)
{int i, j, max;student tmp;for(i = 0; i < n - 1; i++){max = i;for(j = i + 1; j < n; j++){if(stu[max].avg < stu[j].avg){max = j;}}if(max != i){tmp = stu[i];stu[i] = stu[max];stu[max] = tmp;}}
}int main()
{int n;cout << "请输入班级人数:";cin >> n;student *stu = new student[n];if(stu == NULL){cout << "动态分配内存空间失败" << endl;return -1;}init(stu, n);sort(stu, n);display(stu, n);cout << "平均分前三名学生信息: " << endl;display(stu, 3);return 0;
}

 

实验C 指针实验

一、实验目的

1.掌握指针的概念;

2.学会通过指针处理普通变量和一维数组;

3.学会通过指针处理动态分配的内存;

4.学会将一个问题提炼出数学模型,学会利用数学模型编写程序的方法。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Visual C++ 6.0或Microsoft Visual Studio 2005/2008/2010/2012/2013/2015/2017/2019;或适合的C/C++编程环境。

三、实验内容

1、 要求使用指针处理下面的问题,输入四个整数,按由小到大的顺序输出;然后将程序改为:输入四个字符串,按由小到大顺序输出。(使用指针或指针数组)

#include <iostream>
using namespace std;#define N 4// 比较数组大小
void sort1(int *a, int n)
{int i, j, min,tmp;for(i = 0; i < n - 1; i++){min = i;for( j = i + 1; j < n; j++){if(*(a + min) > *(a + j)){min = j;}}if( min != i){tmp = *(a + i);*(a + i) = *(a + min);*(a + min) = tmp;}}
}// 计算字符串长度
int mystrlen(char *s)
{int i = 0;while(s[i]){i++;}return i;
}// 复制字符串
void mystrcpy(char *src, char *dest)
{int i;for(i = 0; i < mystrlen(src); i++){dest[i] = src[i];}dest[i] = '\0';
}// 比较字符串大小, a>b 返回1,a==b 返回0,a<b 返回-1
int check(char *a, char *b)
{int i = 0;while(i <= mystrlen(a) && *(b+i)){if(*(a+i) < *(b+i)){return -1;}else if(*(a+i) == *(b+i)){i++;}else{return 1;}}if(*(b+i))  // 如果字符串b还有字符,而字符串a没有字符,即a<b{return -1 ;}if(i <= mystrlen(a))    // 如果字符串a还有字符,而字符串b没有字符,即a>b{return 1;}return 0;}// 比较字符串组大小
void sort2(char **s, int n)
{int i, j, min;char tmp[50];for(i = 0; i < n - 1; i++){min = i;for( j = i + 1; j < n; j++){if(check(*(s + j), *(s + min)) < 0){min = j;}}if( min != i){mystrcpy(*(s + i), tmp);mystrcpy(*(s + min), *(s + i));mystrcpy(tmp, *(s + min));}}
}int main()
{int i, *p, a[N];char *b[N], c[N][50];cout << "请输入四个整数:";for(i = 0; i < N; i++){cin >> a[i];}sort1(a, N);cout << "由小到大顺序输出:";for(i = 0; i < N; i++){cout << a[i] << ' ';}cout << endl << "请输入四个字符串:" << endl;for(i = 0; i < N; i++){cin >> c[i];b[i] = c[i];}sort2(b, N);cout << "由小到大顺序输出:";for(i = 0; i < N; i++){cout << b[i] << ' ';}return 0;
}

 

2、 通过指针动态存储处理下面的问题:利用随机函数模拟产生300个1~12月出生的人数,统计本次运行得到的数据中,各个月的出生率是多少。

#include <iostream>
#include <ctime>
using namespace std;#define N 300int main()
{int i;int *a = new int[N];int b[12] = {0};srand(time(0));// 模拟产生300个1~12月出生的人数for(i = 0; i < N; i++){*(a + i) = rand() % 12 + 1;}// 计算各个月的出生人数for(i = 0; i < N; i++){(*(b + *(a + i) - 1))++;}// 计算各个月的出生率for(i = 0; i < 12; i++){cout << i + 1 << "月出生率:" << *(b + i) / 3.0 << "%" << endl;}return 0;
}

 

这篇关于广州大学学生实验报告,程序设计基础,实验3数组、结构体及指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388878

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录