由于笔者初学C语言,在代码上难免有疏漏,望各位大佬指正!

attribute.h头文件

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <assert.h>//描述一个数据是否合法的结构
typedef struct isValid
{int tag;int index;double num;
} isValid;typedef struct relicAttributes
{double relicElementalCharging; //元素充能效率double relicElementalMastery;  //元素精通double relicCritDamage;        //暴击伤害double relicCritChance;        //暴击率double relicHealthPercentage;  //生命值百分比double relicHealth;            //生命值double relicDefensePercentage; //防御力百分比double relicDefense;           //防御力double relicAttackPercentage;  //攻击力百分比double relicAttack;            //攻击力
} Attributes;typedef struct yieldWeights
{double Charging;               //元素充能效率double Mastery;                //元素精通double CritDamage;             //暴击伤害double CritChance;             //暴击率double HealthPercentage;       //生命值百分比double Health;                 //生命值double DefensePercentage;      //防御力百分比double Defense;                //防御力double AttackPercentage;       //攻击力百分比double Attack;                 //攻击力
} yieldWeights;//收益权重
yieldWeights* yieldWeightsMultiply(char* role);
//判断输入是否正确
bool isValidValue(isValid* judg);
//输入
Attributes* enterAttributes();
//计算函数
double calculator(Attributes* att, yieldWeights* yie);

algorithm.c源文件

#include "attribute.h"//判断输入是否正确
bool isValidValue(isValid* judg)
{while (getchar() != '\n');if (judg->tag == 0){printf("输入非法,请重新输入!\n");return false;}else{if (!((judg->index == -1 && judg->num == 0 || judg->num == 1)|| (judg->index == -2 && judg->num == 0 || judg->num == 1)|| (judg->index == 0 && judg->num <= 23.3)|| (judg->index == 1 && judg->num <= 46.6)|| (judg->index == 2 && judg->num <= 39)|| (judg->index == 3 && judg->num <= 140)|| (judg->index == 4 && judg->num <= 35)|| (judg->index == 5 && judg->num <= 117)|| (judg->index == 6 && judg->num <= 35)|| (judg->index == 7 && judg->num <= 1794)|| (judg->index == 8 && judg->num <= 43.8)|| (judg->index == 9 && judg->num <= 140))){printf("输入非法,请重新输入!\n");return false;}}return true;
}//输入
double enter(int index)
{double num = 0;isValid* judg = (isValid*)malloc(sizeof(isValid));assert(judg);do{if (index == 0) printf("暴击率      :");//打印说明if (index == 1) printf("暴击伤害    :");if (index == 2) printf("元素充能效率:");if (index == 3) printf("元素精通    :");if (index == 4) printf("攻击力百分比:");if (index == 5) printf("攻击力      :");if (index == 6) printf("生命值百分比:");if (index == 7) printf("生命值      :");if (index == 8) printf("防御力百分比:");if (index == 9) printf("防御力      :");judg->tag = scanf("%lf", &num);//输入judg->num = num;judg->index = index;} while (!isValidValue(judg));//判断free(judg);return num;
}
Attributes* enterAttributes()
{double temp[11] = { -1 };//临时存放输入数据Attributes* att = (Attributes*)malloc(sizeof(Attributes));assert(att);for (int i = 0; i < 10; i++)//输入数据{temp[i] = enter(i);}att->relicCritChance = temp[0];//赋值att->relicCritDamage = temp[1];att->relicElementalCharging = temp[2];att->relicElementalMastery = temp[3];att->relicAttackPercentage = temp[4];att->relicAttack = temp[5];att->relicHealthPercentage = temp[6];att->relicHealth = temp[7];att->relicDefensePercentage = temp[8];att->relicDefense = temp[9];return att;
}//计算函数(核心算法)
double calculator(Attributes* att, yieldWeights* yie)
{double critStrikeChance = att->relicCritChance * 2 * yie->CritChance;double critDamage = att->relicCritDamage * 1 * yie->CritDamage;double elementalMastery = att->relicElementalMastery * 0.33 * yie->Mastery;double elementalCharging = att->relicElementalCharging * 1.1979 * yie->Charging;double attackPercentage = att->relicAttackPercentage * 1.33 * yie->AttackPercentage;double healthPercentage = att->relicHealthPercentage * 1.33 * yie->HealthPercentage;double defensePercentage = att->relicDefensePercentage * 1.06 * yie->DefensePercentage;double attack = att->relicAttack * 0.398 * 0.5 * yie->Attack;double health = att->relicHealth * 0.026 * 0.66 * yie->Health;double defense = att->relicDefense * 0.355 * 0.66 * yie->Defense;return (critStrikeChance + critDamage + elementalMastery + elementalCharging+ attackPercentage + healthPercentage + defensePercentage+ attack + health + defense);
}

yieldWeights.c源文件

#include "attribute.h"//收益权重
yieldWeights* yieldWeightsMultiply(char* role)
{yieldWeights* yie = (yieldWeights*)malloc(sizeof(yieldWeights));assert(yie);/*将角色相同的收益权重归为一类,大大简化代码量*///暴击率if (strcmp(role, "shgxh") == 0){yie->CritChance = 0;}else if (strcmp(role, "yj") == 0 || strcmp(role, "wl") == 0 || strcmp(role, "dan") == 0|| strcmp(role, "tm") == 0 || strcmp(role, "bbl") == 0 || strcmp(role, "zy") == 0|| strcmp(role, "bnt") == 0){yie->CritChance = 0.5;}else{yie->CritChance = 1;}//暴击伤害if (strcmp(role, "shgxh") == 0){yie->CritDamage = 0;}else if (strcmp(role, "yj") == 0 || strcmp(role, "wl") == 0 || strcmp(role, "dan") == 0|| strcmp(role, "tm") == 0 || strcmp(role, "bbl") == 0 || strcmp(role, "zy") == 0|| strcmp(role, "bnt") == 0){yie->CritDamage = 0.5;}else{yie->CritDamage = 1;}//元素充能效率if (strcmp(role, "wl") == 0 || strcmp(role, "bnt") == 0|| strcmp(role, "dan") == 0 || strcmp(role, "tm") == 0){yie->Charging = 1;}else if (strcmp(role, "ldjj") == 0 || strcmp(role, "mn") == 0){yie->Charging = 0.75;}else if (strcmp(role, "nae") == 0){yie->Charging = 0.7;}else if (strcmp(role, "lyl") == 0 || strcmp(role, "kds") == 0 || strcmp(role, "dl") == 0|| strcmp(role, "kelai") == 0 || strcmp(role, "yl") == 0 || strcmp(role, "sh") == 0|| strcmp(role, "fywy") == 0 || strcmp(role, "xq") == 0 || strcmp(role, "zl") == 0|| strcmp(role, "xl") == 0 || strcmp(role, "wd") == 0 || strcmp(role, "shgxh") == 0|| strcmp(role, "x") == 0 || strcmp(role, "jtsl") == 0 || strcmp(role, "q") == 0|| strcmp(role, "bd") == 0 || strcmp(role, "bbl") == 0 || strcmp(role, "lxzc") == 0|| strcmp(role, "cy") == 0 || strcmp(role, "qq") == 0 || strcmp(role, "zy") == 0|| strcmp(role, "xy") == 0 || strcmp(role, "st") == 0 || strcmp(role, "jqr") == 0){yie->Charging = 0.55;}else if (strcmp(role, "hlyd") == 0 || strcmp(role, "youla") == 0 || strcmp(role, "sllh") == 0){yie->Charging = 0.3;}else{yie->Charging = 0;}//元素精通if (strcmp(role, "nxd") == 0 || strcmp(role, "fywy") == 0 || strcmp(role, "zy") == 0|| strcmp(role, "st") == 0 || strcmp(role, "jqr") == 0){yie->Mastery = 1;}else if (strcmp(role, "nl") == 0 || strcmp(role, "sn") == 0 || strcmp(role, "tnl") == 0|| strcmp(role, "kelai") == 0 || strcmp(role, "lyypz") == 0 || strcmp(role, "bcsz") == 0 || strcmp(role, "xl") == 0 || strcmp(role, "ht") == 0 || strcmp(role, "gy") == 0 || strcmp(role, "wd") == 0 || strcmp(role, "mn") == 0 || strcmp(role, "ddly") == 0 || strcmp(role, "xg") == 0 || strcmp(role, "kl") == 0 || strcmp(role, "bd") == 0 || strcmp(role, "dlk") == 0 || strcmp(role, "lxzc") == 0 || strcmp(role, "lxzl") == 0 || strcmp(role, "lxzf") == 0 || strcmp(role, "cy") == 0 || strcmp(role, "yf") == 0 || strcmp(role, "ab") == 0 || strcmp(role, "ls") == 0){yie->Mastery = 0.75;}else{yie->Mastery = 0;}//攻击if (strcmp(role, "sh") == 0 || strcmp(role, "qq") == 0){yie->AttackPercentage = 1;yie->Attack = 1;}else if (strcmp(role, "nxd") == 0){yie->AttackPercentage = 0.55;yie->Attack = 0.55;}else if (strcmp(role, "hlyd") == 0 || strcmp(role, "wl") == 0 || strcmp(role, "bnt") == 0|| strcmp(role, "ht") == 0 || strcmp(role, "shgxh") == 0 || strcmp(role, "dan") == 0|| strcmp(role, "tm") == 0 || strcmp(role, "bbl") == 0 || strcmp(role, "nae") == 0|| strcmp(role, "zy") == 0){yie->AttackPercentage = 0.5;yie->Attack = 0.5;}else if (strcmp(role, "lyl") == 0 || strcmp(role, "nl") == 0 || strcmp(role, "kds") == 0|| strcmp(role, "yl") == 0 || strcmp(role, "yj") == 0 || strcmp(role, "abd") == 0|| strcmp(role, "jqr") == 0){yie->AttackPercentage = 0;yie->Attack = 0;}else{yie->AttackPercentage = 0.75;yie->Attack = 0.75;}//生命值if (strcmp(role, "lyl") == 0 || strcmp(role, "nl") == 0 || strcmp(role, "kds") == 0|| strcmp(role, "bnt") == 0 || strcmp(role, "shgxh") == 0 || strcmp(role, "dan") == 0|| strcmp(role, "tm") == 0 || strcmp(role, "bbl") == 0 || strcmp(role, "jqr") == 0){yie->HealthPercentage = 1;yie->Health = 1;}else if (strcmp(role, "yl") == 0 || strcmp(role, "zl") == 0 || strcmp(role, "ht") == 0){yie->HealthPercentage = 0.8;yie->Health = 0.8;}else if (strcmp(role, "dl") == 0){yie->HealthPercentage = 0.75;yie->Health = 0.75;}else if (strcmp(role, "sllr") == 0){yie->HealthPercentage = 0.5;yie->Health = 0.5;}else{yie->HealthPercentage = 0;yie->Health = 0;}//防御力if (strcmp(role, "yj") == 0 || strcmp(role, "hlyd") == 0 || strcmp(role, "wl") == 0|| strcmp(role, "abd") == 0){yie->DefensePercentage = 1;yie->Defense = 1;}else if (strcmp(role, "nae") == 0){yie->DefensePercentage = 0.9;yie->Defense = 0.9;}else{yie->DefensePercentage = 0;yie->Defense = 0;}return yie;
}

mian.c源文件

#include "attribute.h"int main()
{    isValid* judg = (isValid*)malloc(sizeof(isValid));assert(judg);int Tag = 1;//index == -2while (Tag){Tag = 0;char role[10] = { 0 };printf("输入该圣遗物所属角色全称首字母\n(eg:霄宫 ==> xg 注:优菈、科莱要输全拼):");scanf("%s", role);while (getchar() != '\n');int isCrit;//index == -1do{printf("主词条是否为双爆?是 1 否 0 :");judg->tag = scanf("%d", &isCrit);judg->num = (double)isCrit;judg->index = -1;} while (!isValidValue(judg));printf("副词条:\n");Attributes* att = enterAttributes();if (isCrit == 1)//主词条为双爆{printf("该圣遗物评分为:%d\n", (int)(20 + calculator(att, yieldWeightsMultiply(role)) + 0.5));}else if(isCrit == 0)//主词条不为双爆{printf("该圣遗物评分为:%d\n", (int)(calculator(att, yieldWeightsMultiply(role)) + 0.5));}do{printf("是否继续?是 1 否 0:");judg->tag = scanf("%d", &Tag);judg->num = (double)Tag;judg->index = -2;} while (!isValidValue(judg));printf("\n");}printf("再见!\n");free(judg);system("pause");return 0;
}

由于笔者能力有限,暂时只能以打印日志的形式实现,学了界面设计后会尝试对其程序进行一波大改。

c语言实现的原神圣遗物评分计算器相关推荐

  1. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)

    数据科学导论:Python语言实现(原书第2版) 作者:(意)阿尔贝托·博斯凯蒂(Alberto Boschetti);(意)卢卡·马萨罗(Luca Massaron) 著 出版日期:2018年01月 ...

  2. 《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...

  3. 《数据结构与抽象:Java语言描述(原书第4版)》一2.2.1 可变大小数组

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timo ...

  4. 《数据结构与抽象:Java语言描述(原书第4版)》一2.1.4 让实现安全

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timoth ...

  5. 《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,第1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy ...

  6. 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案...

    转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...

  7. 《数据结构与抽象:Java语言描述(原书第4版)》一练习

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...

  8. 《数据结构与抽象:Java语言描述(原书第4版)》一P.4.1 标识类

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...

  9. 《数据结构与抽象:Java语言描述(原书第4版)》一1.1 什么是包

    本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,第1.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timoth ...

最新文章

  1. “tel.xls.exe病毒”解决方法
  2. 【正一专栏】爱是一种信仰
  3. ESFramework介绍之(23)―― AgileTcp
  4. 上手 Docker 容器,不应该是个问题
  5. tp5 分页php不能foreach,tp5框架无刷新分页实现方法分析
  6. POJ 3468 线段树+lazy标记
  7. 美国参议院紧急通过关键基础设施网络安全法案
  8. Emacs进阶之M-x创建别名
  9. 33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作
  10. 妈妈说就算你注册的域名再长google都能搜索出来-google太强了
  11. GitLab上传文件教程
  12. jQuery LigerUI使用教程入门篇
  13. 做一个微信消息的日期展示
  14. Android不同手机屏幕分辨率自适应
  15. 计算机教室英语手抄报,我的教室英语手抄报
  16. 美团饿了么外卖CPS联盟小程序(新增H5端)花小猪,滴滴大车,一键获取Path
  17. 关于Eth-Trunk接口与IP-Trunk接口
  18. 免费学习coursera的课程的操作办法
  19. python requests 乱码
  20. 网站建设项目合同撰写

热门文章

  1. 基于localStorage开发的前端缓存jquery插件,jquery.cache.js [修改]
  2. proteus 555定时器占空比可调的多谐振荡电路
  3. 冲击函数的广义定义——吴大正 郭宝龙
  4. Android Data Binding 入门
  5. Lrc2021 Lightroom Classic
  6. 反编译apk获得源代码
  7. Python采集最热影评 + 制作词云图
  8. libevent的使用
  9. ICASSP2021丨多说话人多风格音色克隆大赛(M2VoC)
  10. 渡一大师课笔记(重点:事件循环、浏览器渲染原理)