#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char color;
char num;
float key;
}STR;
int main()
{
int i,j;
STR a[19]={{"桃","K",0.0},{"方","3",0.0},{"梅","8",0.0},{"杏","10",0.0},{"梅","2",0.0},{"杏","4",0.0},{"桃","7",0.0},{"方","10",0.0},{"桃","J",0.0},
{"桃","5",0.0},{"桃","8",0.0},{"杏","9",0.0},{"方","4",0.0},{"梅","2",0.0},{"桃","6",0.0},{"杏","Q",0.0},{"梅","K",0.0},{"方","A",0.0},{"梅","Q",0.0}};
/*void(*k2)(STR);
void(*k1)(STR);
void(*f)(STR);*/
key1(a);
fun(a);
printf("花色:\t");
for(i=0;i<19;i+2)
{
printf("%s\t",a[i].color);
}
printf("点数:\t");
for(i=1;i<19;i+2)
{
printf("%s\t",a[i].num);
}
return 0;
}
float key2(STR a)
{
if(a.num=='A')
a.key+=0.01;
else if(a.num=='2')
a.key+=0.02;
else if(a.num=='3')
a.key+=0.03;
else if(a.num=='4')
a.key+=0.04;
else if(a.num=='5')
a.key+=0.05;
else if(a.num=='6')
a.key+=0.06;
else if(a.num=='7')
a.key+=0.07;
else if(a.num=='8')
a.key+=0.08;
else if(a.num=='9')
a.key+=0.09;
else if(a.num=='10')
a.key+=0.10;
else if(a.num=='J')
a.key+=0.11;
else if(a.num=='Q')
a.key+=0.12;
else
a.key+=0.13;
return a.key;
}
void key1(STR *a)
{
int i;
for(i=1;i<19;i++)
{
if(a[i].color=='桃')
{
a[i].key=key2(a[i])+1;
}
if(a[i].color=='方')
{
a[i].key=key2(a[i])+2;
}
if(a[i].color=='梅')
{
a[i].key=key2(a[i])+3;
}
if(a[i].color=='杏')
{
a[i].key=key2(a[i])+4;
}
}
}
void fun(STR *a)
{
int i,j;
STR t;
for(j=0;j<19;j++)
{
if(a[j].key<a[j+1].key)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
C语言代码运行不出来,要求用函数指针。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 天际的海浪 2022-06-22 18:10关注
color和num应该是数组
char color[5];
char num[5];
字符串比较应该用
if(strcmp(a.num,"A")==0)
排序也少了一层外循环
你题目的解答代码如下:#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct { char color[5]; char num[5]; float key; }STR; float key2(STR a) { if(strcmp(a.num,"A")==0) a.key+=0.01; else if(strcmp(a.num,"2")==0) a.key+=0.02; else if(strcmp(a.num,"3")==0) a.key+=0.03; else if(strcmp(a.num,"4")==0) a.key+=0.04; else if(strcmp(a.num,"5")==0) a.key+=0.05; else if(strcmp(a.num,"6")==0) a.key+=0.06; else if(strcmp(a.num,"7")==0) a.key+=0.07; else if(strcmp(a.num,"8")==0) a.key+=0.08; else if(strcmp(a.num,"9")==0) a.key+=0.09; else if(strcmp(a.num,"10")==0) a.key+=0.10; else if(strcmp(a.num,"J")==0) a.key+=0.11; else if(strcmp(a.num,"Q")==0) a.key+=0.12; else a.key+=0.13; return a.key; } void key1(STR *a) { int i; for(i=0;i<19;i++) { if(strcmp(a[i].color,"桃")==0) { a[i].key=key2(a[i])+1; } if(strcmp(a[i].color,"方")==0) { a[i].key=key2(a[i])+2; } if(strcmp(a[i].color,"梅")==0) { a[i].key=key2(a[i])+3; } if(strcmp(a[i].color,"杏")==0) { a[i].key=key2(a[i])+4; } } } void fun(STR *a) { int i,j; STR t; for(i=0;i<19;i++) { for(j=0;j<19-i-1;j++) { if(a[j].key<a[j+1].key) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } int main() { int i,j; STR a[19]={{"桃","K",0.0},{"方","3",0.0},{"梅","8",0.0},{"杏","10",0.0},{"梅","2",0.0},{"杏","4",0.0},{"桃","7",0.0},{"方","10",0.0},{"桃","J",0.0}, {"桃","5",0.0},{"桃","8",0.0},{"杏","9",0.0},{"方","4",0.0},{"梅","2",0.0},{"桃","6",0.0},{"杏","Q",0.0},{"梅","K",0.0},{"方","A",0.0},{"梅","Q",0.0}}; /*void(*k2)(STR); void(*k1)(STR); void(*f)(STR);*/ key1(a); fun(a); printf("花色:\t"); for(i=0;i<19;i++) { printf("%s\t",a[i].color); } printf("\n点数:\t"); for(i=0;i<19;i++) { printf("%s\t",a[i].num); } printf("\n整合:\t"); for(i=0;i<19;i++) { printf("%s%s\t",a[i].color,a[i].num); } return 0; }
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
- ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
- ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
- ¥15 如何在炒股软件中,爬到我想看的日k线
- ¥15 seatunnel 怎么配置Elasticsearch
- ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
- ¥15 (标签-MATLAB|关键词-多址)
- ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
- ¥500 52810做蓝牙接受端