疫情学习第三天: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]鼓励大家设计更多的系统功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值