精华内容
下载资源
问答
  • 什么函数式编程? C语言为何不是函数式语言? 函数式语言有两个个主要的特点:1. 函数是“头等公民”。2. 数据的“immutability”. 操作的“无副作用”, 这规避了‘锁’。 函数式编程的函数是指数学上的函数:...
    • 什么是函数式编程? C语言为何不是函数式语言?

      函数式语言有两个个主要的特点:1. 函数是“头等公民”。2. 数据的“immutability”. 操作的“无副作用”,
      这规避了‘锁’。
      函数式编程的函数是指数学上的函数:给定输入固定的输出,没有副作用。任何语言都可以用函数式的风格,
      只是难易不同罢了。
      比如函数 y = f(x). 和 函数 t = g(z); 在数学上,当 t在f(x)的定义域内时,可以组成复合函数 y=f(g(z));

    • 对于第二个问题,C为何不是函数式语言?

      因为这种效果在C里面不能实现。

      int f(int x) { print x;} ===== y = f(x)
      int f1(int (*g)(int)) { print g(z);} ===== y = f1(g(z))
      int g(int z) {return z;}  =========  t = g(z)
      

      从上面的函数定义可以看到,当函数f(x)的参数定义为int时,便不能将函数g(z)作为形参传递给它。
      反过来看函数f1()也不能接受int作为参数了。

      于是,C达不到数学上函数的那种效果。

      而在clojure里面却可以。

      (defn f [x] (print x))    ======= y = f(x)
      (defn g [z] z)            ======= t = g(z)
      

      这时,(f (g 3)) 和 (f 3) 的结果是一样的,达到了数学上的效果。
      再者,C也不具有函数式语言的特点2.

    • 常见的函数式语言有哪些?

      coljure、scala、Haskell。
      
    • 为什么如python/javascrip这些语言不是函数式语言呢,因为他们不具备函数式语言的特点2.

    展开全文
  • 什么函数式编程? C语言为何不是函数式语言? 函数式语言有两个个主要的特点:1. 函数是“头等公民”。2. 数据的“immutability”. 操作的“无副作用”, 这规避了‘锁’。 函数式编程的函数是指数学上的函数:...

    什么是函数式编程? C语言为何不是函数式语言?

    函数式语言有两个主要的特点:1. 函数是“头等公民”。2. 数据的“immutability”(不变;永恒性;不变性;). 操作的“无副作用”,
    这规避了‘锁’。
    函数式编程的函数是指数学上的函数:给定输入固定的输出,没有副作用。任何语言都可以用函数式的风格,
    只是难易不同罢了。
    比如有函数 y = f(x). 和 函数 x = g(z); 可以组成复合函数 y=f(g(z));

    对于第二个问题,C为何不是函数式语言?

    因为这种效果在C里面不能实现: y=f(g(z));

    int f(int x) { print x;}             ===== y = f(x)
    int g(int z) {return z;}             ===== x = g(z)
    int f1(int (*g)(int)) { print g(z);} ===== y = f1(g(z))
    
    


    从上面的函数定义可以看到,当函数f(x)的参数定义为int时,便不能将函数g(z)作为形参传递给它。(函数指针与int参数类型不匹配)
    反过来看函数f1()也不能接受int作为参数了。

    于是,C达不到数学上函数的那种效果。

    而在clojure里面却可以。

    (defn f [x] (print x))    ======= y = f(x)
    (defn g [z] z)            ======= t = g(z)



    这时,(f (g 3)) 和 (f 3) 的结果是一样的,达到了数学上的效果。
    再者,C也不具有函数式语言的特点2.

    常见的函数式语言有哪些?

    coljure、scala、Haskell。

    为什么如python/javascrip这些语言不是函数式语言呢,因为他们不具备函数式语言的特点2.
    ————————————————
    原文链接:https://blog.csdn.net/lx1848/article/details/77619881

     

    毫无干货的带你理解什么是函数式编程

     

    世界模型

    如果让你搭建一个模型来描述这个世界你会怎么做?

    面向对象

    面向对象之父Alan Kay给我们带来了一种抽象化世界的方法。

    一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。

    因此我们有了面向对象式的编程式范。

    函数式

    这里本来应该引入《范畴论》的概念,不过在这里引入似乎会把事情搞的更复杂,所以先不去理会它,直接看结果。

    世界就是由事物和事物之间的关系构成的

    下面是一个空无一物的世界:

     

    image.png

    世界中有一个a:

    image.png

     

    世界中有了事物ab,还有他们之间的关系f,即使他们之间没关系也可以用f来表示,只不过f等于null

    image.png

     

    我们的世界更加丰富了:

    image.png

    如果我们继续这样画下去我们可以画出一个足够复杂的世界。不过到这里已经足够了。

    • 把关系f作用到a上可以得到b
    • 把关系g作用到b上可以得到c
    • 把关系h作用到a上可以得到c
    • 其中h = g.f

    让我们再次进行抽象,抽取他们的共性部分。

     

    image.png

    所以我们得到了一个结构:a表示事物,f表示关系。把f作用到a上我们就可以得到b

    image.png

     

    要知道一切真理都是包含在特定的上下文中的(除了这一句)。所以我们的事物a也应该包含在上下文中它才是真正的a,所以我们得到的b也是上下文中的b

    image.png

    (这张图看起来像是a是印在盒子上的而不是在盒子内部,不要在意这些细节它是在盒子里的)
    我们来用一个算式来验证一下模型计算1+2+4的值:

    image.png

     

    我们再来一个用户登录的模型,用户名和密码长度都大于0的时候才可以登录:

    image.png

     

    上面的做法和直接写语句有什么不同?

    - (BOOL)canLoginUserName:(NSString *)username password:(NSString *)password{
        if (username.length > 0 && password.length > 0) {
            
        }else{
            
        }
    }
    

    拆分方式不同,图中拆分成了:

    • username和它的关系length>0,得到结果YES
    • password和它的关系length>0,得到结果YES
    • 两个YES和它的关系&&,得到结果YES

    结论:

    • 如果你把世界拆分成,对象你就得到了面向对象
    • 如果你把世界拆分成事物事物之间的关系你就得到了函数式

    好了道友们,看到这里你可以怀着愉快的心情关上电脑,闭上眼睛,深呼吸,思考一下如何按照事物事物之间的关系的方式来拆分世界,你就已经掌握了函数式编程的思想。

    简单对比

    • 面向对象的世界里我们是把事物抽象成对象,然后通过封装继承多态来演示他们之间的关系。
    • 函数式的世界里把世界抽象成事物事物之间的关系,用这种方式实现世界的模型。

    面向对象的编程更有人情味一些更社会化。比如你想要买一辆汽车,想要托人帮忙砍价。恰好你同学的朋友的大表哥的二嫂子在4s店工作。你就需要:

    import "同学"
    import "朋友"
    import "大表哥"
    import "二嫂子"
    

    然后再调用二嫂子.砍价();

    函数式编程则更“冰冷”一些,像是工厂里的流水线不停的运转,只要你放入材料就可以在出口处拿到产品。而且它对外部环境没有依赖,只需要将流水线搬走就可以在任何地方生产。不需要找同学的朋友的大表哥的二嫂子来帮忙了。


    整理了几篇干货资料,有兴趣的道友可以看看:

    展开全文
  • C语言的scanf函数以浮点型格式输入到整型变量,会是怎么的呢? 当然是数据出错啦? 就是酱紫。我输入175.125,输出的却是1127358464 离谱吧。为什么呢? 我知道你肯定会说 你是沙雕吗?定义的数据是int a却scanf...

    C语言的scanf函数以浮点型格式输入到整型变量,会是怎么的呢?
    当然是数据出错啦?
    在这里插入图片描述
    就是酱紫。我输入175.125,输出的却是1127358464
    离谱吧。为什么呢?
    我知道你肯定会说 你是沙雕吗?定义的数据是int a却用scanf函数float格式化输出,这不错才怪。
    是的,没毛病,但是为什么会是这样的呢?
    底层内存是如何转换导致这样的呢?

    先是百度Google搜查了一波,然后还是很懵,这tm到底是怎么回事?
    先是冲浪了几个小时冷静了一下后,似乎有点头绪。

    int型是使用补码进行存储,而float型则是使用指数形式进行存储。
    重点讲float,一般编译系统分配四个字节,即32位。
    最高位—— 24-31位 —— 0-23位
    符号位—— 阶码 ——尾数
    如20.125
    二进制表示:10100.001 (注意小数点后的二进制计算)
    它储存的二进制是这样的:
    1、首先规格化指数形式:1.0100001x10^4
    2、阶码:4+127=131 =>二进制:10000011
    3、尾数:小数点后全部并用0补齐
    最后得:0 1000 0011 0100 0010 0000 0000 0000 000

    到这,我已经知道它float是这样储存的了,然后就是上面那个程序了。进而进行反推它。
    在这里插入图片描述
    这里我知道它的十进制是1101070336
    所以,我用计算机看看
    在这里插入图片描述
    总结:
    大概就是使用scanf指定%f输入到int的变量的时候,因为我们输出进去的常类也是占内存空间的,所以我们输进去的20.125就转换成“0 1000 0011 0100 0010 0000 0000 0000 000”储存到内存里,然后再把内存单元里的数据分配给int型的a。这时a也是四个字节的int(gcc编译器下),所包含的数据就上上面的二进制数据,读取出来就是:1101070336啦。
    网上寻求无果,个人分析至此,若有误请指出。

    展开全文
  • C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。1、数据类型关键字(12个):(1) char :声明字符型变量或函数(2) double :声明双精度变量或...

    C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。

    1、数据类型关键字(12个):

    (1) char :声明字符型变量或函数

    (2) double :声明双精度变量或函数

    (3) enum :声明枚举类型

    (4) float:声明浮点型变量或函数

    (5) int: 声明整型变量或函数

    (6) long :声明长整型变量或函数

    (7) short :声明短整型变量或函数

    (8) signed:声明有符号类型变量或函数

    (9) struct:声明结构体变量或函数

    (10) union:声明联合数据类型

    (11) unsigned:声明无符号类型变量或函数

    (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

    2、控制语句关键字(12个):

    A循环语句 :(1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环

    B条件语句: (1)if: 条件语句 (2)else :条件语句否定分支(与 if 连用) (3)goto:无条件跳转语句

    C开关语句: (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支

    D return :子程序返回语句(可以带参数,也看不带参数)

    3 、存储类型关键字(4个):

    (1)auto :声明自动变量 一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量) (3)register:声明积存器变量 (4)static :声明静态变量

    4、其它关键字(4个): (1)const :声明只读变量 (2)sizeof:计算数据类型长度 (3)typedef:用以给数据类型取别名(当然还有其他作用 (4)volatile:说明变量在程序执行中可被隐含地改变。

    8eb2083e22ec1b9d6fe579411d96e05e.png

    扩展资料:

    C语言简洁、紧凑,使用方便、灵活。ANSI C标准C语言共有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

    语法限制不太严格,程序设计自由度大:虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。

    允许直接访问内存地址,对硬件进行操作。由于C语言允许直接访问内存地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。

    生成目标代码质量高,程序执行效率高:一般只比经过高效优化的汇编程序生成的目标代码效率低10へ20%。

    适用范围大,可移植性好:C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX、windows 98.windows NT;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。

    参考资料来源:百度百科  C语言关键字

    展开全文
  • C语言文件操作函数

    2016-07-30 17:14:53
    有时候在调试程序需要进行大量数据输入输出时,如何还是采用scanf()、printf()的方式进行,那就苦逼了。。。 万一数据上有一些小改动,那就更苦逼了,所以还是文件来帮我们记录下来,这样在分析的时候才能更...
  • C语言scanf函数详解

    2016-02-06 15:00:00
    函数名: scanf 功 能: 运行格式化输入 法: int scanf(char *format[,...能够读入不论什么固有类型的数据并自己主动把数值变换成适当的机内格式。 其调用格式为: scanf("<格式化字符串>",<地址表...
  • 函数名: scanf功 能: 运行格式化输入用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。能够读入不论什么固有类型的数据并自己主动把...
  • #include #include #include struct LNode { int data; struct LNode *next; };... struct LNode *creat(int n) ...输入1 2 3 ,怎么输出 1 2 3 的下面是我调试得来的...}这里的函数类型用什么。void,int 什么的都是错的
  • 先来讲一下scanf的输入原理吧:1、scanf输入流的概念,当执行到scanf函数时,会检查输入流,如果为空,则要求用户输入。如果不为空,则根据scanf的格式化参数从输入流中读取2、%d 用来输入一个整数类型,会跳过开始...
  • scanf函数原型折叠int scanf( const char...函数 scanf() 是从标准输入流stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。scanf的返回值折叠scanf()函数返回成功赋值的数据项数,读到...
  • 虽然是双链表写的,但是没什么关系。 个人感觉问题在出在指针返还值或者函数返还值上面,_步骤应该都是没有问题的_,调试了很多遍 ``` #define _CRT_SECURE_NO_WARNINGS #include #include #...
  • 翻过高山走不出你scanf函数原型折叠int scanf( const char...函数 scanf() 是从标准输入流stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。scanf的返回值折叠scanf()函数返回成功赋值...
  • C语言小结-输入型参数和输出型参数

    千次阅读 2018-06-22 21:30:10
    1、函数什么需要传参和返回值 (1) 函数的作用就是处理数据,传入的参数就是被加工的数据,返回值就是输出的结果。 (2)函数名就是这个函数的入口,在内存中表示就是一个函数代码段的首地址,实质是一个指针...
  • C语言中EOF什么意思

    万次阅读 多人点赞 2019-03-06 20:26:47
    C语言中,或更精确地说成C标准函数库中表示文件结束符(end offile)。 在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件...举例:C语言输入多组数据,每行两个,然后对应每行一个输出结...
  • 一、PTA实验作业 题目1.符号函数 1.本题PTA提交列表 ...本题我的方法比较简单,没遇到什么问题 题目2. 倒顺数字串 1.本题PTA提交列表 2.设计思路 (1)定义变量a,i (2)输入a (3)如果a>1,i=1;i<=a;i++,输...
  • #include <stdio.h> /*标准输入/输出函数库*/ #include <stdlib.h> /*标准函数库*/ #include <string.h> /*字符串函数库*/ //学生信息数据类型定义 typedef struct student { char name[20]; /*姓名*/ int num[10]...
  • eof在c语言中表示什么?在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件...举例:C语言输入多组数据,每行两个,然后...
  • C语言---malloc函数详解

    2018-10-23 11:55:50
    malloc函数和free函数详解 引言:为什么使用动态内存分配 ...但是,数组的长度常常在运行时才知道,这是由于它所需要的内存空间取决于输入数据。例如,一个用于计算学生等级和平均分的程序可能需要存储一个班...
  • 要求把数据(一个数组)输入到一个文件中,然后要求用户随机输入一个索引,然后输出这个索引对应的值本人照着书上代码敲了下,发现无论是输入什么所以,结果都是0.00,然后本人看了下,程序创建的那个文件ls命令看...
  • c语言

    2018-12-11 17:09:27
    思考:新的数据类型有什么好处?请看下面的代码: 可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool类型最大的好处! 新的初始化方法 随随定义 &amp;nbsp;&amp;nbsp;&amp;...
  • 需要明确一点:sprintf是把东西输入到字符数组的函数 对sprintf函数的讲解就不再赘述了。 主讲输出n位小数: 通过看程序截图,可以看到:最后的$$$$后面没有输出数据,原因是printf("…")其中的…是字符串常量,不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 399
精华内容 159
关键字:

c语言用什么函数输入数据

c语言 订阅