疫情学习第三天:C++

本文深入探讨C++中数组和函数的使用,包括一维和二维数组的定义与操作,如查找最大值、逆置元素及冒泡排序。同时,讲解函数定义、调用、值传递以及常见样式,帮助读者掌握C++核心编程技能。

啊啊啊不能再熬夜了。感觉身体吃不消。
现在开始看一下C++关于数组和函数的部分

5 数组

5.1概述

数组是一个集合,里面存放了相同类型的数据元素。
1.数组中的每个元素都是相同的数据类型
2.数组放在连续的内存空间中

5.2一维数组

三种定义方法:
1.数据类型 数组名【数组长度】

int arr[5];
arr[0]=1;
arr[1]=2;
...

2.数据类型 数组名 【数组长度】={,,,,}
后面数字个数少,那么进行补零

int arr2[5]={1,2,3,4,5};
for (int i=0;i<5;i++)
{
	cout << arr2[i]<<endl;
}

利用下标进行输出
3.数据类型 数组名 【】={,,,}

int arr3[] = {9,8,7,6,5,32,42,42};//正确
int arr3[]//错误,定义数组的时候必须要有初始长度

5.2.2 一维数组数组名

数组名称的用途:
1.统计整个数组在内存中的长度 size of(arr),size of(arr[0]):第一个元素的字节(所占内存的)长度,两个数相除就获得数组中元素的个数
2.可以获取数组在内存中的
首地址arr 一般是一个十六进制的数据,代替地址编号
数组中第一个元素地址为&arr[0],和上面的是一样的位置是重合的
注意:数组名是常量,不能进行赋值的操作arr =100是错的

案例分析1,取数组元素的最大值
int arr[5] = {1,2,3,4,5};
int max = arr[0];
for (int i = 0 ;i<5;i++)
{
	if (arr[i]>max)
	{
		max = arr[i];
	}
}
cout << max << endl;
案例分析2 数组元素逆置

两个元素互换的时候要找一个临时的元素,否则元素的值就被覆盖掉了

int arr[5] = {1,2,3,4,5};
int start = 0;//起始下标
int end = sizeof(arr) / sizeof(arr[0]) -1;//结束下标
while (start < end)
{
//实现start和end的元素互换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//下标更新
start++;
end--;
}
cout<<"数组元素逆置后"<<endl;
for (int i = 0 ;i<5;i++)
{
	cout<<arr[i]<<endl;
}
冒泡排序

由低向高进行排列。
1.比较相邻的元素,如果第一个元素比第二个元素大,就交换他们两个
2.对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值
3.重复上面的步骤,直到不需要进行比较
排序的轮数元素的个数减一
每次对比的次数=元素个数-排序轮数-1

int arr[9]={4,3,1,5,6}
// 总共排序轮数为 元素个数-1
for (int i=0;i<9-1;i++)
{
    //内层循环对比 次数 = 元素个数 - 1- 当前轮数
	for(int j=0;j<9-i-1)
	{
	//如果第一个数字,比第二个数字大,交换两个数字
		if(arr[j]>arr[j+1])
		{
			int temp = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = temp;
		}
	}
}
5.3.2 二位数组数组名
int arr[2][3] = 
{
	{1,2,3},
	{4,5,6}
};

1.查看二维数组所占内存空间,2.二维数组首地址
二维数组占用内存空间为:sizeof(arr)
二维数组第一行占用内存为:sizeof(arr[0])
二维数组第一个元素占用内存为:sizeof(arr[0][0])
二维数组行数:sizeof(arr) /sizeof(arr[0])
二维数组列数:sizeof(arr[0]) /sizeof(arr[0][0])
首地址 :arr
第一行首地址:arr[0]
第二行首地址:arr[1]
第一个元素首地址:&arr[0][0]
第二个元素首地址:&arr[0][1]

int scores[3][3] = 
{
	{100,100,100},
	{90,50,100},
	{60,70,80}
};
string names[3] = {"张三","李四","王五"}
for (int i=0;i<3;i++)
{
	int sum = 0;
	for (int j=0;j<3;j++)
	{
		sum +=scores[i][j];
	}
	cout<<names[i]<<"个人的总分为:"<<sum<<endl;
}
6 函数
6.2函数的定义

返回值类型 函数名 (参数列表)
{
函数体语句
return 表达式
}
都要前面加上类型

int add(int num1,int num2)
{
	int sum = num1 + num2;
	return sum;
}
6.3 函数的调用

函数名(参数)
在调用函数的时候,实参的值会传递给形参

6.4 函数值传递
6.5 函数常见的样式

1.无参无返 2.有参无返 3. 无参有返 4.有参有返

6.6 函数的声明

函数的声明可以多次,但是函数的定义只能有一次。
可以提前告诉编译器函数的存在,可以利用函数的声明。因为函数是从上到下运行的。
声明是告诉函数存在

//下面是函数的声明
int max(int a,int b);
int main()
{
	int a=10;
	int b=20;
	cout << max(a,b)<<endl;
}
int max(int a, int b)
{
	return a>b?a:b;
}
6.7 函数分文件编写

让结构更加清晰。创建后缀名为.h的头文件,swap.h
2.创建后缀名为.cpp的源文件 swap.cpp
3.在头文件中写函数的声明,也就是在.h文件中写上函数的声明
4.在源文件中写函数的定义,也就是在cpp文件中写上函数的定义
5.在cpp文件中上面写上 #include “swap.h”
5.在头文件中加上#include < iostream>等
7.在主程序中加上#include " swap.h"

疫情统计与预测系统 1.基本要求: [1]编写一个新冠肺炎疫情统计与预测系统,实现对不同国家不同城市的疫情情况的管理,并根据前若干天的新增病例数及现存病例,预测当天的新增病例数。 [2]城市疫情信息包括:国家名称、城市名称、疫情数据(新增病例数、现有病例数、累计病例数、治愈病例数、死亡病例)以及新增病例的预测结果,疫情预测模型的辨识以及疫情的预测通过成员函数实现。 2.基本管理功能: [1]城市添加:增加一个城市,并输入(或从文件中读入)这个城市的所属国家及疫情数据。 [2]国家(城市)修改:修改已经选择的国家(城市)。 [3]国家(城市)删除:删除已经选择的国家(城市)。 [4]疫情预测:预测已选城市的新增病例数。 [5]打印功能:以表格形式打印全部城市疫情信息。 [6]统计功能:所有城市疫情数据可以分别按照新增病例数、现有病例数、累计病例数、治愈病例数、死亡病例数从高到低排序并打印,并可通过选择不同国家来查看该国家的所有城市累计疫情数据 新增病例数、现有病例数、累计病例数、治愈病例数、死亡病例)。 [7]信息保存:将全部城市疫情信息保存到不同的文件中(数据库文件或普通文本文件)。 3.其他要求及说明: [1]要求系统至少包含3个国家,每个国家至少包含10个城市,每个城市至少保存30天的数据,疫情信息可以上网查,也可自己输入合理数据。 [2]当日新增病例数采用时间序列方法预测,即根据前面n天的平均新增病例数x1, x2, …, xn预测当天的新增病例数y,即采用如下的预测模型: y = a0 + a1·x1 + a2·x2 + … + an·xn 其中系数a0, a1, a2, …, an需要根据历史数据,编写算法求得(可采用最小二乘法)。模型中的参数n要求大于10,可以设为固定值,也可以由用户自己设定。 [3]鼓励大家自己采用其他的预测模型。 [4]鼓励大家设计更多的系统功能。
### 高校疫情防控管理系统设计方案 #### 系统概述 疫情防控管理系统旨在帮助高校有效管理师生健康状况、行程记录以及疫情相关信息。以下是基于 C++ 的一种实现方案,涵盖了主要的功能模块设计。 --- #### 功能模块划分 1. **用户登录与注册** - 用户可以分为两类:管理员和普通用户(学生或教职工)。 - 登录验证需检查用户名和密码是否匹配[^1]。 2. **健康打卡** - 普通用户每日提交体温、是否有症状等信息。 - 数据存储到文件或数据库中以便后续查询。 3. **行程记录** - 用户可上传近期出行地点及时间戳。 - 管理员可通过筛选条件查看特定时间段内的行程记录。 4. **通知公告** - 管理员发布重要通知,所有用户均可查阅最新消息。 5. **数据分析** - 统计全校师生的健康状态分布情况。 - 提供图表展示功能(可用第三方库如 Gnuplot 或 Qt 进行可视化[^3])。 6. **系统设置** - 修改个人信息、重置密码等功能由用户自行操作。 - 管理员有权调整全局参数,例如打卡截止时间。 --- #### 核心代码示例 ##### 1. 用户类定义 ```cpp #include <iostream> #include <string> #include <vector> using namespace std; class User { private: string username; string password; public: User(string uname, string pwd) : username(uname), password(pwd) {} bool authenticate(const string& input_pwd) const { return password == input_pwd; // 密码验证逻辑 } }; ``` ##### 2. 健康打卡功能 ```cpp struct HealthRecord { string date; float temperature; bool hasSymptoms; }; void recordHealth(User* user, vector<HealthRecord>& records) { cout << "请输入日期 (YYYY-MM-DD): "; string date; cin >> date; cout << "请输入体温: "; float temp; cin >> temp; cout << "是否有症状? (1 是 / 0 否): "; int sympt; cin >> sympt; HealthRecord rec = {date, temp, static_cast<bool>(sympt)}; records.push_back(rec); } ``` ##### 3. 行程记录功能 ```cpp struct TravelRecord { string location; string timestamp; }; void addTravelRecord(vector<TravelRecord>& travelRecords) { cout << "请输入目的地: "; string loc; cin >> loc; cout << "请输入到达时间 (YYYY-MM-DD HH:MM): "; string time; cin >> time; TravelRecord tr = {loc, time}; travelRecords.push_back(tr); } ``` ##### 4. 主菜单界面 ```cpp int main() { vector<User> users = {User("admin", "123"), User("student", "abc")}; // 初始化用户列表 vector<HealthRecord> healthRecords; vector<TravelRecord> travelRecords; while (true) { cout << "\n=== 疫情防控管理系统 ===\n"; cout << "1. 用户登录\n2. 注册新账户\n3. 查看健康记录\n4. 添加行程记录\n5. 退出\n请选择: "; int choice; cin >> choice; switch(choice) { case 1: /* 登录 */ break; case 2: /* 注册 */ break; case 3: /* 显示健康记录 */ break; case 4: addTravelRecord(travelRecords); break; case 5: return 0; default: cout << "无效选项,请重新输入。\n"; continue; } } return 0; } ``` --- #### 技术难点解析 1. **数据持久化** - 使用文件 I/O 将用户数据保存至本地磁盘,便于下次启动时加载。 - 示例代码片段: ```cpp void saveDataToFile(const vector<string>& data, const string& filename) { ofstream outFile(filename); for(auto& d : data) outFile << d << endl; outFile.close(); } ``` 2. **安全性增强** - 对敏感信息(如密码)进行加密处理[^4]。 - 可引入哈希算法 MD5 或 SHA-256 来保护用户隐私。 3. **性能优化** - 若用户量较大,则考虑使用索引机制加快查找速度。 - 结合 STL 容器特性合理分配内存资源。 --- #### 总结 以上是一个基础版本的疫情防控管理系统框架,可根据具体需求进一步扩展和完善。例如加入更多统计分析工具或者对接外部 API 获取实时疫情资讯。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值