CS自修室第五期:一个程序,实际上是由一个个带有具体功能的函数叠加而成的。

- 1 -

2021年03月21日。

周日。

这是奶爸进击之旅——CS自修室的第五期更新。

- 2 -

上期我们一起创建了第一个C语言程序:<hello,world>。

而且前几期有提到过C语言中的一些基本功能,functions(函数)、loops(循环)、conditions(条件)、Boolean expression(布尔表达式)等。

接下来我们将进一步去学习这些功能,将它们写入到真正的代码当中。

首先,functions在各种语言书籍里的中文均称之为‘函数’,但其实应当把functions理解成‘功能’更为恰当一点,functions就像一个个小小的程序,可以在程序中执行某些操作。

最理想的状态是,每一个function都独立地完成某项功能,而所有这些functions则组成了一个程序,所以,可以这样理解:“一个程序是由多个小的功能叠加而成。”

functions可以接受输入和调用,在学习如何调用函数参数的输入时,又引入了一个新的术语——参数(arguments或者parameters,它们具有相同的意义,都表示参数),参数就是函数的输入。

如同我们上期使用的“打印”函数:printf();

你可以注意到,在打印函数的后面有一对圆括号,圆括号里的内容,实际上就是函数的参数,也就是该函数的输入。

在C语言中,打印函数中的参数,需要使用双引号标注:

printf("hello, world");

而在C语言中,有些烦人的是,任何函数都需要以分号「;」结尾,函数方可以正确执行,你把它当做平时写完一个句子时,需要在末尾增加一个句号去记忆就好了。

如果忘记了,导致编译不成功,编辑器也会相应的警告你错误的位置,找出来补上就好了。

在刚开始编写程序的的时候,漏写(有时候是结尾的分号,有时候是引号,有时候是括号)是经常发生的,不要为这些愚蠢的事情感到沮丧,随着不断的练习,你的大脑会不断强化记忆这些规则。

即便你因为一个引号的漏写编译报错而检查了半天,不知道到底自己错在哪里,也不要因此感到挫败,即便是最厉害的程序员,他在编写代码的时候,仍然会出现这样或那样的小错误。

- 3 -

另外,functions并不只会打印一段文本,有些functions能够返回值(return values),而要做到返回值,就必须引入变量(variables),将functions的输入存储在变量当中,再以某种形式传递给使用者,从而可以重复地使用它。

C语言本身支持输入的方法并不容易,但如果你使用库(library——库就是别人写的代码,你可以在你自己编写的程序中引入它,简化你的编写工作)的话,就会变得非常容易。

CS50拥有自己编写的库(library),它可以帮助我们在前期的学习中,更好的理解和操作。

如CS50库中的函数:get_string();——就能帮助我们更好地从用户那里获得输入的文本。

string(字符串)——是编程世界中的艺术术语,string就是文本。

如:get_string("What is your name? ");

函数内的参数为某种提示,你可以任意设定这些提示,好让用户知道自己接下来输入的内容是什么?

但是C语言无法直接获取输入,还需要你引入一个变量将用户的输入存储其中,所以你必须提供一个变量的名称,将用户的输入赋值给这个变量,如下:

name =get_string("What is your name? ");

以上name就是一个变量,变量可以是任意名称,但最好是具有描述性的名称,让人一看知道该变量的含义。

变量可由字母(一般是小写字母,大写字母在编程语言中有其他的指示)、下划线、数字组成,可以是字母开头或下划线开头,但不能以数字为开头。

虽然可以用下划线开头,但根据惯例,下划线开头的变量名是系统专用的,所以最好的选择是使用字母开头,如果需要两三个词才能描述一个变量,则用下划线将每个词隔开,方便阅读。

如存储学生的姓名的变量,则可以命名为:name_student,相较于随意命名,这样的命名方式就能很清晰的描述该变量。

还有一点,变量名不能使用C语言内置的关键字(keywords),如printf,这会引发程序的错误。

其实这些变量的命名规则,在任何语言中都基本适用,如python也是按照这些规则给变量命名的。

另外,要注意的是,上文代码中的等号(=),在大多数编程语言中,它其实并不是等号,而是赋值符号,执行将它右边的内容赋值给左边变量的操作。

简单来说,它的作用就是将右边的内容复制下来,并将它分配给左边的内容当中。

如上述代码就是将用户输入的名字赋值给变量【name】。

不过上述代码仍然是不完整的代码,在C语言中,你不能直接写出变量以期盼计算机能识别你的意图,你还需要给变量指定类型,告诉计算机你所创建的变量属于什么类型的变量。

C语言指定字符串变量有点复杂,但由于我们引入了CS50的函数库,我们可以简化字符串的类型指定,见下面代码:

string name = get_string("What is your name? ");

现在,这就是C语言中一行完整又正确的代码了。

不过,通常来说,我们并不会只存储用户输入的值就这样结束一个程序,那程序也就没有什么存在的意义了。

接着,我们得学会如何调用functions中的返回值或输入,并处理使用这个数据。

如程序的作用是用户输入了自己姓名后,将对其打招呼。

这里就又需要用到printf();函数了。

在C语言中,我们可以用以下代码执行上述打招呼的操作:

printf("hello, %s", name);

这里出现的新的语法,%s,表示的是格式代码(printf函数不仅可以打印(print)文本,而且printf中的f(format)使其也可以打印格式代码),但格式代码并不会真正地打印出来,它只是为需要打印的string(字符串)提供一个占位符。

代码中的第二个< , >的作用是将functions中的多个参数或输入分开来,但值得注意的是,第一个< , >,由于它存在于printf函数的引号之中,它实际上就只不过是一个文本中的逗号而已,并非程序语言的符号,所以没有任何功能。

现在,将这些代码组合起来,并输入CS50 IDE中编译执行:

以上就是<hello,world>程序的改进版,从用户那里获得输入,再调用处理这个输入。

虽然和前文介绍的代码略有不同,如图中的变量名为answer,实际上我是故意为之的,目的是要让你知道变量命名不影响程序的执行,在这个程序中,变量answer和name没有任何区别,只是命名的选择而已。

不过,要谨记的是,这里使用到了string来指定变量名,而且使用了get_string();函数来获取用户的输入,则必须要在最开始引入CS50的函数库才可以。

因为C语言本身并没有这些函数和功能,它是CS50编写的代码,意欲让你在前期的学习中更好的学习,更好的理解。

好了,以上,就是本期CS自修室总结,希望对你有所帮助,我们下期再会。

01010100 01101000 01100001 01101110 01101011 01111001 01101111 01110101 00100001

——我就是可可奶爸,一个平平无奇的全职奶爸

我只是一个平平无奇的全职奶爸,不敢指导你什么,只想和你一起共同成长。

关注公号:Irene_Daddy 【进击的可可奶爸】

本号的更新内容:

周一,马拉松幻视:以马拉松为目标,每周跑步总结。

周三,英语屋:总结学习时收获的英语口语表达,以及一些英文的学习方法。

周五:向往的N2:以考取日语N2为目标,每周学习总结。

周日:CS自修室:自学CS的每周总结。

还有不定时的更新奶爸的日常:读书、观影的一些碎碎念,偶尔的秀恩爱撒狗粮,不时的亲子活动等……

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容