醋溜梅子 2022-06-22 17:57 采纳率: 50%
浏览 52
已结题

C语言代码运行不出来,要求用函数指针。

img


#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;
        }
    }
}
  • 写回答

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;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 创建了问题 6月22日

悬赏问题

  • ¥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做蓝牙接受端