#include <iostream>
using namespace std;
const int MaxSize=100;
// 定义矩阵的最大行数和列数
// 定义一个方向标,用来求出一个元素周围的值
struct position
{
int x;
int y;
};
// 求矩阵的四边的数值总和
// int matrix[MaxSize][MaxSize] 为矩阵
// maxrow 为该矩阵的行数 maxline 为矩阵的列数
int GetCircleSum(int matrix[MaxSize][MaxSize],int maxrow,int maxline)
{
int sum=0;
int i;
//求矩阵上下两行数据元素之和
for(int i=0;i<maxline;i++)
{
sum+=matrix[0][i];
sum+=matrix[maxrow-1][i];
}
//求矩阵左右两边除了第一个和最后一个数据元素之外的其他数据元素之和,
for(i=1;i<maxrow-1;i++)
{
sum+=matrix[i][0];
sum+=matrix[i][maxline-1];
}
return sum;
}
// 使用前提:矩阵为方阵,也就m=n=size
// 该函数是:求出对角线之和
int GetSum(int matrix[MaxSize][MaxSize],int size)
{
int sum=0;
int i;
//求主对角线数据元素之和
for(int i=0;i<size;i++)
{
sum+=matrix[i][i];
}
cout<<" the sum of one of the diagonal is:"<<sum<<endl;
//求副对角线上数据元素之和
sum=0;
for(i=0;i<size;i++)
{
sum+=matrix[size-1-i][size-1-i];
}
cout<<" the sum of the other diagonal is:"<<sum<<endl;
return sum;
}
// 该函数是:输入一个矩阵中的位置,求出它附近相邻的元素之和
// int matrix[MaxSize][MaxSize] 为矩阵
// maxrow 为该矩阵的行数 maxline 为矩阵的列数
// row 为输入元素的行数 line 为输入元素的列数
int GetAroundSum(int matrix[MaxSize][MaxSize],int row,int line,int maxrow,int maxline)
{
//利用位置结构体,以输入数据元素的下标为原点,计算该数据元素周围其他8个点的相对位置
position dir[8];
dir[0].x=1;dir[0].y=0;
dir[1].x=1;dir[1].y=1;
dir[2].x=0;dir[2].y=1;
dir[3].x=-1;dir[3].y=1;
dir[4].x=-1;dir[4].y=0;
dir[5].x=-1;dir[5].y=-1;
dir[6].x=0;dir[6].y=-1;
dir[7].x=1;dir[7].y=-1;
int sum=0;
//求出一个数据元素周围8个数据元素的方向标,并以此作为数组下标,求出这些数据元素之和
for(int i=0;i<8;i++)
{
int x=row+dir[i].x;
int y=line+dir[i].y;
if(x<0||x>maxrow)
continue;
if(y<0||y>maxline)
continue;
sum+=matrix[x][y];
}
return sum;
}
//求从A[0][0]开始的互不相邻的各元素之和
int GetInterSum(int matrix[MaxSize][MaxSize],int row,int line)
{
int sum=0;
for(int i=0;i<row;i++)
{
if((i%2)==0)
{
for(int j=0;j<line;j=j+2)
{
sum+=matrix[i][j];
}
}
else
{
for(int j=1;j<line;j=j+2)
{
sum+=matrix[i][j];
}
}
}
return sum;
}
// 菜单选项
void menu()
{
cout<<" **************** 数组应用 ****************"<<endl;
cout<<" *** ***"<<endl;
cout<<" *** 菜单 ***"<<endl;
cout<<" *** 输入矩阵 PRESS 1 ***"<<endl;
cout<<" *** 求对角线之和 PRESS 2 ***"<<endl;
cout<<" *** 求不相邻元素之和 PRESS 3 ***"<<endl;
cout<<" *** 求数组靠边元素之和 PRESS 4 ***"<<endl;
cout<<" *** 输出矩阵 PRESS 5 ***"<<endl;
cout<<" *** 退出程序 PRESS 0 ***"<<endl;
cout<<" *** ***"<<endl;
cout<<" **************************************************"<<endl;
cout<<" PRESS :";
}
// 输入矩阵
void Input(int matrix[MaxSize][MaxSize],int &row,int &line)
{
cout<<" 输入矩阵的行数: ";
cin>>row;
cout<<" 输入矩阵的列数: ";
cin>>line;
//判断输入数据是否合理
if(row*line==0)
{
cout<<" data wrong! Please input again!"<<endl;
Input(matrix,row,line);
}
cout<<" 输入矩阵: "<<endl;
for(int i=0;i<row;i++)
{
for(int j=0;j<line;j++)
{
cin>>matrix[i][j];
}
}
}
// 输出矩阵
void Output(int matrix[MaxSize][MaxSize],int row,int line)
{
cout<<" 输出矩阵: "<<endl;
for(int i=0;i<row;i++)
{
for(int j=0;j<line;j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
int row,line;
int matrix[MaxSize][MaxSize];
bool flag=false;
while(1) // 处理函数的过程
{
menu();
int key;
cin>>key;
switch(key)
{
//输入矩阵
case 1:
Input(matrix,row,line);
flag=true;//确定每次操作开始时,总是先输入矩阵
break;
//计算矩阵对角线之和
case 2:
if(flag)
{
if(row==line)
{
cout<<GetSum(matrix,row)<<endl;
}
else
{
cout<<" m!=n "<<endl;
}
}
else
{
cout<<"还未输入矩阵!请先输入矩阵"<<endl;
}
break;
//计算从第一个数据元素开始的不相邻的数据元素之和
case 3:
if(flag)
cout<<GetInterSum(matrix,row,line)<<endl;
else
cout<<"还未输入矩阵!请先输入矩阵"<<endl;
break;
//计算数组靠边数据元素之和
case 4:
if(flag)
cout<<GetCircleSum(matrix,row,line)<<endl;
else
cout<<"还未输入矩阵!请先输入矩阵"<<endl;
break;
//退出程序
case 5:
if(flag)
Output(matrix,row,line);
else
cout<<"还未输入矩阵!请先输入矩阵"<<endl;
break;
default :
exit(0);
}
}
return 1;
}
afreshmen
- 粉丝: 3
- 资源: 17
最新资源
- 电力市场节点出清电价 程序备注清晰 适合刚刚接触电力市场的同学 部分参考文献《机组运行约束对机组节点边际电价的影响分析》
- 模块化多电平变器(MMC)matlab仿真 最近电平逼近调制-载波层叠-载波移相调制 二倍频负序环流抑制 子模块电容电压排序 整流 逆变-电压电流双闭环解耦控制 快速学习MMC必备
- 液体混合装置plc控制系统 西门子1200仿真系统 采用博途V15编写,全自动仿真完成 包含程序和画面 实现要求:液体混合装置控制系统,由液面传感器SL1、SL2、SL3,液体A、B、C阀门与混合
- 基于非奇异快速终端的无差拿电流预测控制 (有传感) 模型的鲁棒性很好,和其他模型一样是同样的负载转矩,但波动非常小 电流环采用无差拿电流预测控制,没引入任何参数
- 粒子群算法PSO优化BP做分类模型,数据是多输入单输出的,可以做多分类预测,程序注释详细,直接替数据就可以用,第一次用MATLAB,对软件不熟悉的人,可以远程给替数据
- 昆仑通态触摸屏与台达变频器RS485通讯程序,不经过plc直接用昆仑通态触摸屏的串口对台达变频器进行modbus通讯,实现频率设定,启停控制,输出频率读取,输出电压读取 包含程序和接线方法以及参数设
- 导弹六自由度仿真模型,图1所有模块都给,对学习MATLAB simulink搭建模型很有帮助
- carsim+simulink联合仿真实现变道 包含路径规划 carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于
- 基于内容的新闻推荐系统 红旗技术栈:Java EE、Eclipse、Mysql-5.6、Spring、SpringMVC、Mybatis、JavaScript、EasyUI、TF-IDF算法、余弦
- 西门子1500博图程序例程,纺织机械无纺布项目,硬件采用S7-1500+30台G120变频器及KTP触摸屏 运用PID,PN通讯控制G120变频器实现收卷 博图TIA V14及以上版本
- 146-西门子S7-1200冷热水恒压供水系统程序案例,程序含四个PLC站,冷热水配置,模拟量,流量计算,配方控制,比例阀控,PN通讯 等程序块 硬件:西门子S7-1200PLC -KTP1200
- 新能源汽车 电动汽车整车控制器 VCU 含canbootloader 基于飞思卡尔MC9S12XEP100整车控制器 VCU方案 1:C源文件,底层驱动+控制策略 2:程序变量表格,Execl文件
- Matlab红绿灯识别程序 APP 代码复制一下基本就可以转化为gui
- 西门子S7-1200PLC双轴定位算法电池焊接控制博图程序 案例,触摸屏画面采用威纶触摸屏 程序设计结构灵活,采用SCL语言+梯形图结构,项目包括: 1.博图V15PLC程序
- Pmsm磁链观测器,一个电周期收敛
- 带相机PLC1200 SCL梯形图混编立体库机器人码垛机伺服视觉程序 包括2台西门子PLC1215程序和2台西门子触摸屏TP700程序 PLC和基恩士相机视觉定位Modbus TCP通讯(SCL语言)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈