首页 > 其他分享 >C语言函数指针数组,GCC编译问题

C语言函数指针数组,GCC编译问题

时间:2023-05-04 17:01:49浏览次数:39  
标签:lf GCC sub double C语言 break printf operator 函数指针

使用C语言函数指针数组实现简单的计算器,代码如下

#include <stdio.h>
#include <stdlib.h>

double add(double a, double b) {
    return (a + b);
};
double sub(double a, double b) {
    return (a - b);
};
double mul(double a, double b) {
    return (a * b);
};
double divd(double a, double b) {
    return (a / b);
};

int main(void) {
    double (*p[4])(double, double) = {add, sub, mul, divd};
    printf("Please add, sub, mul, div:\n");
    char s[3];
    scanf("%s", s);
    int operator = 0;
    double a, b;
    switch (s[0])
    {
    case 'a':
        operator = 0;
        break;
    case 's':
        operator = 1;
        break;
    case 'm':
        operator = 2;
        break;
    case 'd':
        operator = 3;
        break;
    default:
        break;
    }
    printf("%d\n", operator);
    printf("Please input two number:\n");
    scanf("%lf %lf", &a, &b);
    double result = p[operator](a, b);
    printf("%lf + %lf = %lf\n", a, b, result);
    exit(0);
}

输入输出如下

Please add, sub, mul, div:
add
0
Please input two number:
1 5
1.000000 + 5.000000 = 1.000000

修改后代码

#include <stdio.h>
#include <stdlib.h>

double add(double a, double b) {
    return (a + b);
};
double sub(double a, double b) {
    return (a - b);
};
double mul(double a, double b) {
    return (a * b);
};
double divd(double a, double b) {
    return (a / b);
};
double (*p[4])(double, double) = {add, sub, mul, divd};
int main(void) {
    
    printf("Please add, sub, mul, div:\n");
    char s[3];
    scanf("%s", s);
    int operator = 0;
    double a, b;
    switch (s[0])
    {
    case 'a':
        operator = 0;
        break;
    case 's':
        operator = 1;
        break;
    case 'm':
        operator = 2;
        break;
    case 'd':
        operator = 3;
        break;
    default:
        break;
    }
    printf("%d\n", operator);
    printf("Please input two number:\n");
    scanf("%lf %lf", &a, &b);
    double result = p[operator](a, b);
    printf("%lf + %lf = %lf\n", a, b, result);
    exit(0);
}

将函数指针数组的定义放在了main函数的外面

输入输出如下

Please add, sub, mul, div:
add
0
Please input two number:
4 5
4.000000 + 5.000000 = 9.000000

GCC版本gcc (Debian 12.2.0-14) 12.2.0

标签:lf,GCC,sub,double,C语言,break,printf,operator,函数指针
From: https://www.cnblogs.com/amhara/p/17371789.html

相关文章

  • [每天例题]蓝桥杯 C语言 天干地支
    天干地支题目 思路分析1.我们首先定义两个二维数组,将天干和地支分别录入,或者建立两个指针录入天干地支2.选取一个年份作为基准,在这里选择的是2020年庚子年3.此时输入的年份便被分为三个部分:小于2020年,2020年,大于2020年4.小于2020年部分减去2020后得到一个负数,我们需要将......
  • Rust中的函数指针
    通过函数指针允许我们使用函数作为另一个函数的参数。函数的类型是fn(使用小写的”f”)以免与Fn闭包trait相混淆。fn被称为函数指针(functionpointer)。指定参数为函数指针的语法类似于闭包。函数指针类型(使用关键字 fn 写出)指向那些在编译时不必知道函数标识符的函数。......
  • C语言--指针的进阶1
    数组指针:int*p[10];指向数组的指针。指针数组:int(*p)[10];存放指针的数组。voidprint1(intarr[3][5],intx,inty){ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]); } printf("\n"); }}v......
  • C语言简答题
    C语言的历史:c语言是在20世纪70年代初美国贝尔实验室开发的一种高级编程语言,由B语言发展来,最初是为了Unix操作系统开发的。在80年代中期,由ISO和ANSIC对它进行了一系列的标准化,90年代末,c语言进行了一次重大更新和扩展,被称为c99,使得c语言更加强大和灵活C语言的特点:1,语言......
  • C语言--数据的储存2
    浮点型在内存中的存储常见的浮点数:3.14159 1E10包括:float、double、longdouble。浮点数表示范围:float.h中定义。…………………………………………………………………………………………………………………总结整数和浮点数的存取方式不一样,所以整数存取用整形,小数存取用浮点型......
  • C语言数据结构---迷宫问题(栈)
    #include<stdio.h>#include<stdlib.h>#defineMAXSIZE20#defineM4#defineN4/*迷宫---外围加上一圈1起点--0011 0000 0111 0000--出口*///此迷宫按照优先向右下方向移动的标准!!!!//要用链表形式的栈存放坐标+方向typedefstruct{ //存放坐标x,y接下来......
  • c语言数据结构-----循环队列
    #include<stdio.h>#include<stdlib.h>#defineMAXSIZE10//循环队列长度为m-1时即为满typedefstruct{ intfront; intrear; int*base;}SqQueue;//初始化队列intInitQueue(SqQueue&q){ q.base=newint[MAXSIZE]; q.front=q.rear=0; return0;}//求队列长度int......
  • gcc/g++编译
    gcc/g++编译gcc本节来自「参考1」简介GCC的意思也只是GNUCCompiler而已。经过了这么多年的发展,GCC已经不仅仅能支持C语言,它现在还支持Ada语言、C++语言、Java语言、ObjectiveC语言、Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等。......
  • C语言--数据的储存1
    C语言类型内置类型、自定义类型原码、反码、补码(整型)计算机中的有符号数有三种表示方法,即原码、反码、补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示正,用1表示负,而数值位三种表示方法各不相同。原码直接将数字按照正负数的形式翻译成二进制。补码原码的符号位不变,......
  • C语言实现成绩管理系统
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>//定义结构体记录学生基本信息structmessages{      intClass[5];         //班级      charStudentNum[10];//学号      charS......