日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言转移表之加减乘除无限进化版

發(fā)布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言转移表之加减乘除无限进化版 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • 主干程序
  • 初級版本
  • 進階版本
  • 版本進化

主干程序

  • 輸入程序
  • 解析程序
/*解析字符串 有空格把空格分開 比如輸入:add 1 2 解析后:add12*/ void do_parse(char *buf) {int state = 0;int i = 0;int argc = 0;char *argv[8] = {0};for (i = 0; buf[i]; i++){if (state == 0 && !isspace(buf[i])){state = 1;argv[argc++] = buf + i;}else if(isspace (buf[i])){state = 0;buf[i] = 0;}}argv[argc] = NULL;/*核心算法*/do_math(argc, argv); }int main() {char buf[1000] = {0};while (1){printf(">");scanf("%[^\n]%*c", buf);//輸入if (strcmp(buf, "exit") == 0)//如果輸入了"exit"就結束break;elsedo_parse(&buf);//解析程序} }

初級版本

void do_math(char * argc, char *argv[]) {if (strcmp(argv[0], "add") == 0){int a = atoi(argv[1]);//字符串轉(zhuǎn)a整形int b = atoi(argv[2]);//字符串轉(zhuǎn)b整形printf("%s + %s = %d\n", argv[1], argv[2], add(a, b));//打印加法結果a+b}else if (strcmp(argv[0], "sub") == 0){int a = atoi(argv[1]);int b = atoi(argv[2]);printf("%s - %s = %d\n", argv[1], argv[2], sub(a, b));} }

進階版本

int add(int a, int b) {return a + b; } int sub(int a, int b) {return a - b; } int(*pf)(int a, int b) = NULL; void do_math(char * argc, char *argv[]) {if (strcmp(argv[0], "add") == 0){pf = add;}if (strcmp(argv[0], "sub") == 0){pf = sub;}int a = atoi(argv[1]);int b = atoi(argv[2]);printf("%s + %s = %d\n", argv[1], argv[2], pf(a, b)); } #include<stdio.h> #include<stdlib.h>float add(float a, float b) {return a + b; } float sub(float a, float b) {return a - b; } float mul(float a, float b) {return a * b; } float div(float a, float b) {return a / b; }int main(void) {float(*operate[])(float, float) = { add,sub,mul,div };float number_a, number_b;float result;int oprate;printf("input the operator!1 +,2 -,3 *,4 /\n");scanf("%d", &oprate);printf("Input the number_a:");scanf("%f", &number_a);printf("Input the number_b:");scanf("%f", &number_b);printf("the result is %.3f\n",result = operate[oprate - 1](number_a, number_b));system("pause");return 0; }

這兩句關鍵程序

float(*operate[])(float, float) = { add,sub,mul,div }; result = operate[oprate - 1](number_a, number_b)

版本進化

總結

以上是生活随笔為你收集整理的C语言转移表之加减乘除无限进化版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。