你好编程林耿亮c语言输出你好?

在之前的章节中,我们使用到了+运算符,用于两个数据对象的相加。

这一节中,我们将继续认识更多的运算符,并讨论运算符和数据对象是如何相互作用的。

1.1 什么是表达式?

运算符往往需要与运算对象一起使用才有意义。例如:

其中,5与10是运算对象,+为运算符

在C语言中,一个或多个运算对象与零个或多个运算符组成表达式。下面几个都是表达式:

如上的例子可以看出,100也是一个正确的表达式,虽然它只有运算对象而没有运算符。

运算符运算对象进行运算操作必然产生一个结果,因此每个表达式都有一个结果。例如上面的表达式5 + 10的结果为15。

值15被传入printf后,在控制台上打印出字符15。

表达式后面加上分号构成表达式语句

C语言中表达式不能单独存在,必须以表达式语句的形式存在。

那么下面的表达式5+10呢?它为什么可以没有分号。

因为5 + 10是一个子表达式,函数名加上括号运算符,构成了一个函数调用表达式。 所以,5 + 10为函数调用表达式的子表达式,而函数调用表达式后面加了分号了。

当然函数调用表达式也有一个表达式结果,这个结果就是函数的返回值了。

+为加法运算符,它左右边各需要一个运算对象,构成加法运算符表达式

表达式结果:加法表达式的结果为左右表达式结果相加。

-为减法运算符,它左右边各需要一个运算对象,构成减法运算符表达式

表达式结果:减法表达式的结果为左右表达式结果相减。

+用于标明一个表达式的正负 -用于改变一个表达式的正负。

与加减运算符不同的是,它仅需要在运算符右边有一个运算对象。

+号表达式的结果为右边运算对象的值。

-号表达式的结果为右边运算对象值的相反数。

用于改变表达式的正负:

请注意:+不能改变表达式的正负,请使用负负得正。

相信你已经看到了第一个示例代码的效果了。这个程序所实现的效果很简单,就是在屏幕上输出了一行字符"Hello World"。

我们根据这一小段代码,借此了解一些C语言的基础语法知识。

首先,主函数main,一个标准的主函数如下:

main翻译成中文是主要的、最重要的意思,而在C语言里面表示一个主函数。(稍后我们会讨论什么是计算机语言里面的函数,以及主函数在C语言程序中的存在意义。)

双斜杠后面的为注释,打一个比较形象的比喻,注释就类似于老师在作业本上的批注。

一般来说,注释用于标注这段代码的用途或解释思路等。因为注释不会被当作代码进行编译,所以无论添加什么注释内容,都不会对代码的实际运行产生任何影响。

如上代码中,用注释标出了哪里为主函数,哪里是函数的返回值

我们先谈谈什么是函数?在大家的认知里面,函数是数学领域的一个名词,它可能是如下图所示:

但是,这只是数学领域中的函数,与编程语言中的函数完全不同。

在编程语言里面,你可以把函数看做一个盒子,这个盒子有如下几个特性:

  1. 开始执行时,函数可以被输入一些值
  2. 执行过程中,函数可以做一些事情
  3. 执行完成后,函数可以返回一些值

让我们看看我们的这个主函数,在这3个特性上,分别做了什么。

  1. 主函数打印了一行字到屏幕上

其中,int表明了函数的返回值类型为整数类型,intinteger(整数)的缩写。这是由语言标准规定的,不可以写成别的单词。

main函数名main后面的括号()内为输入参数,目前为空。

return后跟函数的返回值,为0。而0是一个整数,和函数名前面的int对应。

我们总结一下函数的写法公式:

函数返回值类型 函数名(函数输入参数值) 
 
被花括号包括的被称为
函数体,注意函数体一定要被花括号包括且不可省略。花括号上面的函数名、函数参数及返回值被称作函数头

3. 写一个自己的函数

 
我们不如趁热打铁,根据上面的函数写法的公式,写一个两个整数加法的函数。这个函数需要做到:输入两个整数,返回它们相加的结果。
这个既然这个函数是用于计算加法的,我们把函数名取名为add。当然自定义函数的函数名可以按照自己的喜好来写,就算写成aaaaa也行。不过,为了函数名拥有语义化,方便人阅读理解,我们一般使用英文来作为函数名。

 



好的,那我们写完了一个
add函数了。这一段代码被称之为add函数的函数定义。

4. 主函数是整个C语言程序的入口

 
上面我们已经自己定义好了一个add函数,那我们需要怎样来使用它呢?add函数能直接运行嘛?

所有的C语言代码都有一个起始入口,而这个入口就是主函数main。进入了主函数以后,才能经由主函数来调用其他函数。
这也意味着,每个C语言代码,只能有且只有一个main函数。
我们把代码稍微修改,现在代码如下。
当程序运行时,首先会进入主函数main。接着调用我们刚刚编写的add函数了。我们传了2个值分别是整数2和3给add函数
函数的定义中规定了需要传a、b,2个参数,我们调用的时候,也必须传2个,并且类型也需要尽量一致,否则编译可能会报错。(若类型不同,编译器会尝试自动类型转换。自动类型转换失败则会编译失败。)

那么自然地,我们会想到,主函数是被谁调用的?主函数的返回值必须是int吗?
主函数在程序开始的时候被自动调用,不需要在程序内主动调用主函数。
而主函数的返回值会返回给调用这个程序的程序。
C语言标准中规定主函数有返回值且必须是int。如果程序正常结束,一般将返回值设置为0

5. 要调用函数,必须先知道函数

 
我们再来看看,编译器是怎么理解add这个名称的。
编译器会从代码开始,按照从上往下的顺序阅读代码。
编译器首先看到了一个函数的定义,描述了一个叫add的函数。接着,在main中需要使用add,由于编译器已经知道了add的定义,因此编译器可以正常编译通过。

但是,如果将函数定义和函数调用反过来呢?
首先,编译器看到了add这个名称,编译器会很疑惑,add是什么呢?编译器无法理解add究竟是什么。因此,编译器将报错,并停止编译。

 
add函数计算完毕之后,需要有一个东西来接受add返回回来的值。所以,我们在add前面声明了一个int整型变量
什么是变量呢?你可以把它看做一个空箱子,里面可以装任何其他的和它类型一致的值。
result只是我们给它起的一个名字,当然,你可以任意起名。比如叫he,叫xiangzi,都可以。
我们把add返回回来的5,装进了result。因此,result里面装着的值是5了。
=等号,在C语言中是赋值运算符,相信你已经发现它有把右边的值装进左边变量的功能了。和函数一样,这里的等号和数学里面的等号,也是有很大不同的,它并不是相等的意思。
赋值运算符:将符号右边的值,装进左边的变量的一种运算符。
下图就是add函数接受2,3为输入,返回5,被赋值号=赋值给result的流程了。

那我们能不能这样写呢?去掉int result;这一条。
答案是不行的,变量必须先声明后使用。
编译器看到result这个名称,但是从未见过result的定义时,肯定也会疑惑它究竟是个什么类型的变量,甚至它有可能不是变量而是一个函数。这样,编译器只能遗憾地给出一个编译错误的提示,并结束编译了。
你必须像上面这样,声明有一个变量,名字叫result,类型是int。接下来,编辑器就能记下result为一个int类型的变量。在后面的代码中,即可愉快地使用这个result变量了。

 
在前面的代码中,由我们自己命名,用于指代某一个实体的名称,例如:add,result,函数的参数a,b都是一个标识符
标识符由我们自己命名的一个特殊标识,用于表示一个变量、函数或其他实体的名称。
例如前面我们的自定义函数取名为add是为了清晰地表明函数意图。而将变量命名为result,也是为了表明变量内保存的是函数返回的结果。
并且,要让编译器能够识别标识符,必须进行声明或定义。例如,add被定义成了一个函数,result,a,b被声明成了一个整数类型变量。如果编译器遇到未经定义或声明的标识符,将会无法理解这个标识符具体是一个什么实体的名称而报错。
在C语言中,标识符的可以按照你的喜好自己随意命名,但是必须遵循以下规则:
标识符可以用小写字母、大写字母、数字和下划线来命名。但是,标识符的第一个字符必须是字母或下划线,而不是数字。并且,标识符区分大小写。

 
我们再思考一个问题,int是一个标识符吗?
答案是不是。首先int并不是我们随意命名的,其次int并不是任何实体的名称。
int是C语言中的一个关键词
关键词是在语言标准中规定的,并且在代码中有特殊意义和用途。因此,关键词不能作为一个标识符来使用。
C语言中的关键词如下表所示。

9. 什么是字面常量?

那么,像2,3,这种数值,需不需要声明呢?

不需要,他们是常量,无法被更改。并且一旦被写出来,就已经知道它们是整型int类型的常量了。

同样的,字符串字面常量也不需要被声明,例如:"Hello World\n"。被双引号包裹的,我们认为它是一个字符串,以区别于数值。

变量我们可以通过赋值来更改,常量不能更改,所以你不能对它进行赋值。

现在,你应该明白了这段代码的大部分含义了。我们再进一步,把它全部解析完。

add一样,printf也是一个函数,但是这个并不是一个自定义函数,而是一个系统自带的函数。

我们把字符串字面常量"Hello World\n"传给了printf函数。运行代码时,我们在屏幕上看到了这行字符。显然,printf函数的作用就是将字符串输出到控制台上了。

printf由单词print(打印)和单词format(格式)的首字母f组成,意为格式化打印。

在早期,计算机的输出主要是靠连接打印机将字符打印在纸张上。而如今,计算机的输出大部分都在屏幕上实现。但是print这个词却被保留了下来。有时候我们会沿用打印这种说法,而实际上,我们是在屏幕上的控制台中输出字符。

让我们再次比较两段代码,我们写Hello World时只传了1个参数给printf,但为什么在add函数后却能传2个给它呢?函数定义的参数个数和类型需要和函数调用时候的保持一致吗?

printf是一个很特别的函数,它是一个变参函数,所以可以接受可变数量和类型的输入参数。这里我们无需太过关心怎样写一个可变参数函数,暂时只需要使用它即可。

通过如下示例,我们可以简单了解printf函数的更多用法。


 
我们来总结一下
printf的公式

 

 
printf的第一个参数必须是字符串,这里我们传入了一个字符串字面常量(被双引号包裹)。其中,占位用%转换操作表示。例如:整型int的占位符为%d。后面的替换参数,会依次替换前面的占位。printf是一个变长参数函数,只要第一个字符串参数占位符写对了,后面可以加任意多的替换参数。

 
printf函数并不是我们定义的函数,而是系统自带的函数。这个函数被写在文件stdio.h中,我们要使用printf就必须先让编译器理解printf
我们假定printf的函数定义写在文件stdio.h中,用#include命令,可以将文件stdio.h的代码复制到我们的代码中。

 

stdio.h里面并未定义printf函数,但是它里面有printf函数的函数声明。但是,在当前阶段里面,你可以理解为stdio.h里面,写了printf的函数定义。


我要回帖

更多关于 c语言输出你好 的文章

 

随机推荐