求大神帮忙看看程序有什么问题

朱肥肥 朱肥肥 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
题目

、长沙移动公司欲征求顾客意见,从30位优秀职工中,评选10位服务明星:
(1)职工按 1,2,… 顺序连续编号,每个编号用2个字符表示,即0l,02,…。
(2)所收到的选票按以下格式存于文件vote.txt中,一行字符串对应1张选票,其中姓名10个字符,地址 30 个字符,10个服务员编号 20 个字符。
(3)对应名次的职工编号可以有空缺,但必须用 00 表示。
(4)若编号超出规定范围,或编号重复出现,作废票处理。
(5)按选票中所列最佳服务员明星顺序给所列职工按以下标准评分:
一 二 三 四 五 六 七 八 九 十
15 12 9 7 6 5 4 3 2 1
(6)按各位职工得分数由高到低顺序排队,列出前十名最佳服务明星排行表:
名次 职工编号 合计得分 合计得票数
若得分相同,则得票数多的在前;若得分和得票数都相同,则编号小的在前。


我变了一个但是运行结果不对,求各位大神看看怎么回事

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

struct Employee
{
int vote_id,//员工编号
vote_count,//得票数
vote_score;//得分数
};

void StructInitialize(Employee* emp,int size=40)//结构体初始化函数,编号自动排列,其它成员初始化为零
{
for(int i=0;i<size;i++)
{
emp[i].vote_id=i+1;
emp[i].vote_count=0;
emp[i].vote_score=0;
}
}
int* DataFormat(int *a,int size)//格式化数组,格式化后新数组中每一位转换为十进制整数
{
int* b=new int[size/2];
for(int i=0;i<size;i+=2)
b[i/2]=10*a[i]+a[i+1];
return b;
}


int IsAvailableVote(int*p,int n)//判定p后n个数字是否符合选票要求
{
int*q1,*q2;
q1=q2=p;
for(int i=0;i<n;i++)
{

if(q1[i]<0||q1[i]>40)//判断是否超出规定编号范围
return 0;
for(int j=i+1;j<n;j++)//判定是否有重复选同一个编号
if(q1[i]==q2[j])
return 0;
}
return 1;
}

void SetFalseVote(int* p,int n)//将不符合要求的选票所在区域置为-1
{
int*q1,*q2;
q1=q2=p;
q2=q2+n;//q2移动到每行的尾部
if(!IsAvailableVote(q1,n))
while(q1!=q2)
{
*q1=-1;//置-1
q1++;//指针向后移动直到指到和q2相同位置
}
}

int* VoteSelect(int* a,int size)//将整个数组区域所有不符合要求选票选出,即所代表区域值置为-1
{
int row_count=0,//文件中行计数,即选票计数
*p=a;//指向传入数组首部
while(row_count<size/10)//结束条件为所有选票都判断完毕
{
SetFalseVote(p,10);//如选票不符合要求,则将其所对应区域置为-1
p+=10;//移到下一张选票
row_count++;//选票数增1
}
return a;
}

void VoteCount(Employee* emp,int *a,int size)//统计符合要求的选票,将结果送入结构体数组
{
int*p=a,count=0,rank=0,i=0;
while(count<size)
{
if(*p!=0&&(*p)!=-1)
emp[*p-1].vote_count++;
p++;
count++;
}
count=0;//清零
while(count<size)//此种算法,数组元素为零时被自动过滤掉,因此不需要考虑该情况
{
count++;
rank=count%10;
i=a[count-1]-1;//count-1表示数组元素下标,i表示结构体数组下标,
//由于下标从零开始,所以减1
//cout<<a[count-1]<<" ";
if(i!=-1)
{
switch(rank)
{
case 1:
emp[i].vote_score+=15;break;
case 2:
emp[i].vote_score+=12;break;
case 3:
emp[i].vote_score+=9;break;
case 4:
emp[i].vote_score+=7;break;
case 5:
emp[i].vote_score+=6;break;
case 6:
emp[i].vote_score+=5;break;
case 7:
emp[i].vote_score+=4;break;
case 8:
emp[i].vote_score+=3;break;
case 9:
emp[i].vote_score+=2;break;
case 0:
emp[i].vote_score+=1;break;
}
}
}
}
void Show(Employee* emp,int n)
{
for(int i=0;i<n;i++)
cout<<emp[i].vote_id<<'\t'<<emp

[i].vote_count<<'\t'<<emp[i].vote_score<<endl;
}

int RowCount(char* filename)//行计数函数
{
int row=1,count=0;
char temp;
ifstream infile;
infile.open(filename);
if(!infile)
{
cout<<"不能打开输入文件a!"<<endl;
exit(1);
}
infile>>noskipws;
while(infile>>temp)
{
count++;
if(count%61==0)row++;
}
infile.close();
return row;
}

int* FileRead(char* filename)//文件读取函数,按要求提取代表选票的字符串到一维数组中
{
ifstream infile;
char temp;//临时字符变量
int char_count=0,//文件中字符计数
row_count=0,//文件中行计数
row,//存储文件中的行数
**arr,//指向二维数组
*arr1,//指向一维数组
*p_array;//指向DataFormat()返回的数组

row=RowCount(filename);
cout<<"文件中共有行数(即选票张数):"<<row<<endl;//测试
cin.get();

arr=new int*[row];
for(int i=0;i<row;i++)
arr[i]=new int[21];//申请动态二维数组,因为存在最后一个换行符,所以是21不是20

infile.open(filename);
if(!infile)
{
cout<<"无法打开输入文件"<<endl;
exit(1);
}
infile>>noskipws;
while(infile>>temp)
{
char_count++;
if(char_count>=41+61*row_count&&char_count<=61+61*row_count)
{
arr[row_count][char_count-(41+61*row_count)]=temp-'0';//字符型映射为整型,数学方法确定每行规律
if(char_count%61==0)
row_count++;
}
}
infile.close();

arr1=new int[row*20];
for(int _i=0;_i<row;_i++)
for(int j=0;j<20;j++)//过滤掉每行最后的换行符所以结束条件是20不是21
arr1[_i*20+j]=arr[_i][j];//二维数组转换为一维数组

for(int __i=0;__i<row;__i++)
delete arr[__i];
delete arr;
p_array=DataFormat(arr1,row*20);//格式化数组,将将arr1指向数组转化为十进制数组返回给p_array指针

return p_array;//需要在最终释放动态内存
}

void Sort(Employee *p,int n)//排序函数,所得结果符合要求,因此不需要考虑多关键字排序
{
int index;
Employee inserter;
for(int i=1;i<n;i++)
{
inserter=p[i];
index=i-1;
while(index>=0&&p[index].vote_score<inserter.vote_score)
{
p[index+1]=p[index];
index--;
}
p[index+1]=inserter;
}
}

void OutPut(Employee* emp,int n)
{
cout<<"名次"<<setw(15)<<"服务员编号"<<setw(15)<<"合计得分"<<setw(15)<<"合计得票数"<<endl;
for(int i=0;i<10;i++)
cout<<i+1<<setw(15)<<emp[i].vote_id<<setw(15)<<emp[i].vote_score<<setw(15)<<emp[i].vote_count<<endl;
}


int main()
{

Employee emp[40],//存储40名员工
*p=emp;//指向结构体数组
int *new_array,//指向FileRead中返回的整形数组
row;//文件中字符串行数(即选票张数)

row=RowCount("vote.txt");//文件行计数
new_array=FileRead("vote.txt");//指向一维数组
new_array=VoteSelect(new_array,row*10);//筛选符合要求的选票
StructInitialize(emp,40);//结构体初始化
VoteCount(emp,new_array,row*10);//选票处理(计算合计得分,合计得票数
Sort(p,40);//对结构体数组进行逆序排序
OutPut(p,40);//输出前十名明星服务员

delete []new_array;//释放在FileRead()中申请的动态内存
return 0;
}


这个程序编译时无错误,也可以运行,但结果不是正确的。正确的结果应该是这样的
程序运行结果为:
名次 服务员编 合计得分 合计得票数
1 12 72 5
2 2 60 5
3 3 45 5
4 4 35 5
5 6 25 5
6 7 20 5
7 1 15 1
8 11 15 1
9 21 15 1
10 31 15 1
...全文

相关推荐

高校及科研院所如何利用外部数据完善技术转移转化机制.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

完全复现虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)

内容概要:本文档围绕“【完全复现】虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比”这一主题,利用Simulink和Matlab平台,系统性地实现了虚拟同步发电机(VSG)的自适应惯量与阻尼控制策略的建模与仿真。内容涵盖VSG的核心控制原理、系统动态响应特性分析、根轨迹绘制以及在不同调节系数下的性能对比研究,旨在深入剖析关键控制参数对系统稳定性与动态性能的影响机制,为新能源并网系统中提升频率支撑能力和暂态稳定性的控制策略设计提供理论依据和技术支持。; 适合人群:具备扎实的电力系统分析与自动控制理论基础,熟练掌握Matlab/Simulink仿真工具,主要从事新能源发电、微电网运行、电力电子变换器控制或电力系统稳定研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展虚拟同步发电机(VSG)的建模与先进控制策略的深入研究;②探究自适应惯量与阻尼控制对改善电网频率响应速度和平抑功率波动的作用机理;③运用根轨迹法进行系统稳定性分析,并指导控制器参数的优化整定;④完成高水平学术论文撰写或科研项目申报所需的仿真复现实验。; 阅读建议:本资源以“完全复现”为核心目标,提供了完整的仿真模型与配套代码。使用者应在深入理解同步发电机转子运动方程、虚拟惯量及阻尼物理意义的基础上,结合电力系统暂态稳定理论,逐步操作并调试仿真模型,尤其需关注不同调节系数变化对系统动态性能指标(如超调量、调节时间)的影响,从而深化对VSG内在控制机制与稳定边界的认知。

天天程序猿

员工满意度数据集(11列,12000 条记录)CSV 合成

详情介绍:该 HR 员工数据集含 12,000 条 ×11 列(满意度、绩效评估、项目数、月均工时、司龄、工伤、福利包、晋升、部门、薪资),无缺失值但无离职标签列,且存在数据质量问题(141 条负绩效评估、144 条负工时、49.4% 异常高工伤率、项目数仅 0/1/2),疑似经过修改或合成,不能直接做经典的员工离职预测,适合做满意度回归、薪资三分类、晋升预测或员工聚类分析,使用前必须清洗异常值并注意数据真实性限制。

神仙别闹

科技服务机构如何通过数据服务增强市场竞争力?.docx

科技服务机构如何通过数据服务增强市场竞争力?

BIZKEEN

基于双向DC-DC变换器的储能电池SOC充电+放电双模式Simulink仿真

内容概要:本文详细介绍了一种基于双向DC-DC变换器的储能电池SOC(荷电状态)充放电双模式Simulink仿真模型,旨在实现储能系统在充电与放电两种工作模式下的智能切换与精确控制。该模型依托Simulink平台搭建,通过检测电池SOC实时值,动态判断并切换充放电模式,有效防止过充与过放,提升电池使用寿命与能量利用效率。系统涵盖双向功率变换、电压电流双闭环控制、模式切换逻辑及保护机制等关键环节,充分体现了电力电子变换与电池管理系统(BMS)的深度融合。该仿真模型适用于微电网、电动汽车及可再生能源系统中的能量管理研究,为优化储能调度策略、提高系统稳定性提供了可靠的技术支撑。; 适合人群:具备一定电力电子技术、自动控制理论及Simulink建模基础,从事新能源、储能系统、电力系统仿真等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究储能电池在不同负载或发电条件下的充放电动态行为;②优化电池管理系统中SOC估算精度与充放电控制策略;③验证双向DC-DC变换器在能量双向流动中的响应特性与控制性能;④为微电网能量调度、电动汽车能量回收、风光储一体化系统等实际应用场景提供仿真验证与设计依据。; 阅读建议:建议结合Simulink仿真环境动手实践,深入理解主电路拓扑、控制环路设计及模式切换逻辑,同时可配合相关文献资料进一步探究PI控制、滞环控制等算法对系统动态性能的影响,以全面提升对储能系统能量管理机制的认知与设计能力。

荔枝科研社
评论 7
收藏 已收藏
分享
返回顶部
朱肥肥
C++ 语言 65,214 成员 250,514 内容