初识C(2)---从printf函数开始
继承[K&R]的传统,我们的第一个C语言程序也是“Hello, World.”。
书写C语言程序的大前提:C语言中的语法符号必须都是英文字符,即在中文输入法关闭状态下输入的字符。
例 1. Hello World
/*暂且记住只要用到 printf 输出函数,就现在程序开头写上如下一行#include <stdio.h>。*/
#include <stdio.h>
/* main函数是C程序有且只能有一个的主函数(特例除外),C 程序总是从 main 里面的第一条语句开始执行。*/
int main(void)
{
printf("Hello, world.\n");
return ;
}
第1行和第3行的/* ... */结构是一个注释(Comment),其中可以写一些描述性的话,解释这段程序在做什么。注释只是写给程序员看的,编译器会忽略从/*到*/的所有字符,并且不管写多少都不会被编译进可执行文件中。换言之,注释不影响C程序的功能。但这里还是要注意一点,/* ... */结构是不允许嵌套的,如下/* .../*…*/... */结构是错误的嵌套结构。
第4行要多说几句。它包含着函数定义的几个要素:1.函数名,这里的函数名是main;2.函数返回值类型,放在函数名前面空格隔开,这里的int表明main函数的返回值类型是int类型,即整型;3.函数参数,紧跟函数名,用括号括起来,这里的void表明无参数。
第5行到第8行,用一对大括号括“{}”起来的部分称之为函数体,也就是要实现函数功能的语句,要注意C语言中的“;”代表一条语句的结尾,如第6、7行。这里可以看到{}里面的语句比main那一行往里缩进了一些(通常一个制表位,即按一下Tab),虽然并没有这样的规定,但这样做可以让程序结构看起来更清晰,很容易看出哪些语句是属于某个函数或某个模块的。
今天的重点来了,第6行printf语句,我们就从它开始认识C语言的丰富多彩。
首先,这条语句是调用C语言的库函数printf,包含在头文件stdio.h中。而使用C语言库函数时必须在程序中嵌入该函数对应的头文件,用#include <>加到里面就可以了(尖括号内填写文件名),所以我们看到了程序开始部分的#include <stdio.h>。
接下来,我们看函数调用形式:给出函数名,此处为printf;给出参与函数执行的参数,此处为括号里的内容。printf的参数类型是可变的,这里我们先介绍两种情况。
第一种情况如例程1所示,printf函数的参数只有一类,放在双引号内,此时函数功能是将双引号内的字符原样输出在屏幕上。但这里需要注意一类特殊字符,即转义字符。C语言规定斜杠“\”为转义字符,也就是说“\”后跟的字符会失去它的原义而变为其它的内容。在例程中的“\n”就表示换行,而不再是字符n。更多的转义字符可查阅相关资料。例程1运行结果如图:
按上面的介绍,给出如下调用:printf("Hello \n world.\n");,它的输出结果是什么呢?虽然简单,但我们也要知其所以然:双引号里的内容原样输出,于是先输出Hello和一个空格;遇到\n时由于转义所以输出一个换行,接着在下一行继续输出一个空格和world.;又遇到一个\n,所以继续输出一个换行。如图:
第二种情况,printf函数具有两类参数的情况。先看例程2:
#include <stdio.h>
int main(void)
{
printf("There are %d people in my family.\n", ); /* print the number of people in my family*/
return ;
}
此时printf函数的参数分两类,一类是双引号内的,一类是双引号外的,用逗号隔开了。双引号外面的整数5有什么用呢?它的作用是与括号内的%d这个符号对应的。%d是输出格式符的一种,在这里表示一个整型数据。我们也将这类输出格式符叫做“占位符”。它的作用就好比先告诉printf函数一声,“哥们儿,我先把这个输出位置占下,一会儿输出的时候将双引号外的那个整数放到我这个位置上显示出来。”
这样,整个的输出过程我们就可以这样理解了:首先输出双引号的字符There are ,这时遇到了%d符号,根据提前的告知情况,printf函数便会到双引号外把整数5拿过来放到%d的位置上按照其格式要求显示出来,然后继续输出后面的字符people in my family.最后遇到\n,输出什么内容大家已经很清楚了----换行呗。例程2的运行结果如图:
There are 5 people in my family. 与我们的分析完全一致。
如果双引号内出现两个、三个,甚至更多的占位符呢?这时就需要在双引号外给出更多与之对应的数据,并用逗号隔开(注意:双引号外的第一个数据前就有逗号,千万别丢掉!),数据的先后顺序与占位符出现的先后顺序是一一对应的。如例程3:
例程3输出结果如图:
如果与你的分析一模一样,那么恭喜你,可以继续新的学习了。
最后留个问题:printf("There are %d people in my family.\n", 5); 与printf("There are 5 people in my family.\n"); 输出结果完全一样,它们的本质有何不同?从文中就可以找到答案。
初识C(2)---从printf函数开始的更多相关文章
- 可变参数列表与printf()函数的实现
问题 当我们刚开始学习C语言的时候,就接触到printf()函数,可是当时"道行"不深或许不够细心留意,又或者我们理所当然地认为库函数规定这样就是这样,没有发现这个函数与普通的函数 ...
- printf函数
printf函数的格式及含义 d 以十进制带符号的形式输出整数(对正数不输出符号) o 以八进制无符号的形式输出整数(不输出 ...
- Linux Linux下特殊的printf函数和fputs函数
Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算),如果需要不换行的输出,一般可以使用write函数代替.'\n ...
- 关于printf函数的所思所想
缘起大一下学期,C语言程序设计徐小青老师的随口一提,经娄嘉鹏老师提醒,我觉得应该自己整理清楚这一问题.涉及网上资料将会标明出处. 关于printf函数的所思所想 * printf的定义 printf( ...
- C语言printf()函数:格式化输出函数
C语言printf()函数:格式化输出函数 头文件:#include <stdio.h> printf()函数是最常用的格式化输出函数,其原型为: int printf( char ...
- 关于printf函数输出先后顺序的讲解!!
对于printf函数printf("%d%d\n",a,b);函数的实际输出顺序是这样的先计算出b,然后在计算a,接着输出a,最后在输出b:例子如下:#include<ios ...
- printf()函数
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息. printf()函数的调用格式为: printf("<格式化字符串>", <参 ...
- C 中 关于printf 函数中度剖析
题外话 这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们 ...
- printf函数重定向
printf函数底层会调用fputc函数 /*重定向c库函数printf到USART1*/ int fputc(int ch, FILE *f) { /*发送一个字节数据USART1 */ USART ...
随机推荐
- strcat()的编写
1.strcat() #include <windows.h> #include <assert.h> #include <iostream> //strcat() ...
- Android项目记录点滴
服务器端:(根据Apache POI库函数其中SlideShow表示PPT文档,Slide表示某一张幻灯片) 1.先把电脑中的PPT文件读入到一个字节数组中.(输入流-->字节数组-->输 ...
- HTTP生命周期
HTTP生命周期 Http 请求 AspNet_ISAIP.DLL (ISAPI扩展,独立于站点外,用于可扩展的桥梁), w3wp.exe (net工作进程) IIS6 以上,6以下为aspnet_w ...
- opencv如何用模板匹配寻找目标
首先使用: MatchTemplate 比较模板和重叠的图像区域 void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr ...
- Oracle EBS-SQL (BOM-8):检查物料属性(无采购员).sql
select msi.segment1 物料编码, msi.DESCRIPTION ...
- java线程管理
java线程管理 参见: http://harmony.apache.org/subcomponents/drlvm/TM.html 1. 修订历史 2. 关于本文档 2.1. 目的 2.2. 面向的 ...
- coroutine
在脚本语言中,coroutine 不是个新鲜词汇,比如 lua 内建 coroutine,python中的greenlet,但在C程序中,并不是太常见. windows 下有 fiber,相关函数为 ...
- SVG关注复杂图形的网页绘制技术
SVG 是使用 XML 来描述二维图形和绘图程序的语言. 学习之前应具备的基础知识: 继续学习之前,你应该对以下内容有基本的了解: HTML XML 基础 如果希望首先学习这些内容,请在本站的首页选择 ...
- vim简单命令教程-firstblood
你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法. Vim the Six Billion Dollar editor Better, ...
- iOS 性能测试 - FBMemoryProfiler
FBMemoryProfiler 是Facebook开源的一款用于分析iOS内存使用和检测循环引用的工具库. 脑补:http://www.cocoachina.com/ios/20160421/159 ...