栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言函数指针编程练习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言函数指针编程练习

前言

以下代码是我自己想的一个情景,并通过编程实现,通过本次编程熟悉了一下函数指针的操作,供大家参考!
函数指针概念的链接如下:
https://blog.csdn.net/qq_55648035/article/details/121660141

一、功能描述

本程序实现了一个编码解码的功能,设置了雇主和雇员两个结构体,雇主只需进行编码,而雇员需要解码和编码,雇主的编码方式是将需要发送的内容首先进行字符串转化为整型数组,之后再将每一个元素的值加50;
(原因:雇主拥有最高权力,他只需要编码,不需要解码)
雇员的解码方式是首先判断雇主发送来的编码最后一位的情况,如果是“ r ”,则将编码升序排列,如果是“ f ”,则将编码降序排列,最后将排好的编码每个元素减50输出需要的信息;
(原因:雇员不仅需要接收雇主发来的编码,还需要接收其他雇员的编码,所以在接收编码后需要对编码进行排序,后再解码)
雇员的编码方式是将每一位转化为字符,最后组成字符串输出;
(原因:雇主发送的编码是乱序的,而雇员之间传递的编码是正序的,雇主到雇员值之间需要进行排序解码,而雇员值之间传递不需要)

二、部分代码展示



三、整体代码(供大家学习调试)
#include 
#include



void bian1(char*, int*, int);
void bian2(char*, int*, int);
void jie(int*, int, int*(*p)(int*, int));



typedef struct 
{
    int num;
    char a[15];
    int b[15];
    void (*code)(char*, int*, int) = bian1; 
}employer;

typedef struct 
{
    int num;
    char a[15];
    int b[15];
    void (*decode)(int *, int , int* (*p)(int*, int)) = jie; 
    void (*code)(char*, int*, int) = bian2;
}employee;



int* rise(int *a, int len)
{
    int t;
    for (int i = 0; i < len; i++)
    {
        for (int j = 0; j < len - 1 - i; j++)
            if (a[j] > a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
    }        
    return a;
}

int* fall(int *a, int len)
{
    int t;
    for (int i = 0; i < len; i++)
    {
        for (int j = 0; j < len - 1 - i; j++)
            if (a[j] < a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
    }    
    return a;
}



void jie(int *a, int len, int* (*p)(int*, int))
{
    a = (*p)(a, len - 1);
    for(int i = 0; i < len - 1; i++)
    {
        a[i] = a[i] - 50;                //雇员解码方式,先排序在给每个数组元素减 50
    }
}

void bian1(char* a, int* b, int len)
{
    for(int i = 0; i < len - 1; i++)
    {
        b[i] = a[i] - '0' + 50;          //雇主编码方式,字符转化为整型数据并加 50
    }
    b[len-1] = a[len-1];
}

void bian2(char* a, int* b, int len)
{
    for(int i = 0; i < len - 1; i++)
    {
        a[i] = b[i] + 48;                //雇员编码方式,整型数据转化为字符
    }
    a[len-1] = b[len-1];
}

int main()
{
    employer boss1;                      //定义两个结构体 boss 和 staff
    employee staff1;
    int len = 0;
    printf("请输入编码:");               //boss输入编码到编码数组 a
    scanf("%s", boss1.a);
    len = strlen(boss1.a);
    boss1.code(boss1.a, boss1.b, len);
    printf("编码结果为:");               //boss编码结果输出到编码数组 b 中并输出展示
    for(int i = 0; i < len-1; i++)
    {
        printf("%d", boss1.b[i]);
    }
    printf("n");
    printf("正在将编码发给雇员,请稍后……");
    printf("n");
    for(int i = 0; i < len; i++)
    {
        staff1.b[i] = boss1.b[i];        //boss的编码结果一个个赋值到 staff 解码数组 b中
    }
    switch(staff1.b[len-1])              //通过判断最后一位数据来确定解码方式
    {
        case 'r': staff1.decode(staff1.b, len, rise); break;
        case 'f': staff1.decode(staff1.b, len, fall); break;
    }
    printf("雇员解码结果为:");
    for(int i = 0; i < len - 1; i++)
    {
        printf("%d", staff1.b[i]);        //输出解码结果
    }
    printf("n");
    staff1.code(staff1.a, staff1.b, len); //通过 staff 解码数组重新编码后放到编码数组 a 中
    printf("雇员编码为:");
    printf("%sn", staff1.a);
    return 0;
}


四、结果展示


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676741.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号