继承[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函数开始的更多相关文章

  1. 可变参数列表与printf()函数的实现

    问题 当我们刚开始学习C语言的时候,就接触到printf()函数,可是当时"道行"不深或许不够细心留意,又或者我们理所当然地认为库函数规定这样就是这样,没有发现这个函数与普通的函数 ...

  2. printf函数

    printf函数的格式及含义 d                    以十进制带符号的形式输出整数(对正数不输出符号) o                    以八进制无符号的形式输出整数(不输出 ...

  3. Linux Linux下特殊的printf函数和fputs函数

    Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算),如果需要不换行的输出,一般可以使用write函数代替.'\n ...

  4. 关于printf函数的所思所想

    缘起大一下学期,C语言程序设计徐小青老师的随口一提,经娄嘉鹏老师提醒,我觉得应该自己整理清楚这一问题.涉及网上资料将会标明出处. 关于printf函数的所思所想 * printf的定义 printf( ...

  5. C语言printf()函数:格式化输出函数

    C语言printf()函数:格式化输出函数 头文件:#include <stdio.h> printf()函数是最常用的格式化输出函数,其原型为:     int printf( char ...

  6. 关于printf函数输出先后顺序的讲解!!

    对于printf函数printf("%d%d\n",a,b);函数的实际输出顺序是这样的先计算出b,然后在计算a,接着输出a,最后在输出b:例子如下:#include<ios ...

  7. printf()函数

    printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息. printf()函数的调用格式为: printf("<格式化字符串>", <参 ...

  8. C 中 关于printf 函数中度剖析

    题外话  这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们 ...

  9. printf函数重定向

    printf函数底层会调用fputc函数 /*重定向c库函数printf到USART1*/ int fputc(int ch, FILE *f) { /*发送一个字节数据USART1 */ USART ...

随机推荐

  1. 修改MyEclipse8.6的Servlet模板

    D:\Genuitec\Common\plugins\com.genuitec.eclipse.wizards_****.jar 解压jar包, 进入templates文件夹,修改生成Servlet模 ...

  2. myql 注意事项

    在[mysqld]下加入一行:lower_case_table_names=1,1为不区分大小写,0是区分大小写...并/etc/init.d/mysql restart即可...

  3. [Linked List]Reverse Nodes in k-Group

    Total Accepted: 48614 Total Submissions: 185356 Difficulty: Hard Given a linked list, reverse the no ...

  4. ecshop给虚拟商品添加出售和未出售的导出xlc

    在admin/virtral_card.php文件中找到$_REQUEST['act'] == 'card'这里是用来显示某一个虚拟商品的出售记录的列表将会发送到replenish_list.htm在 ...

  5. PVRTC 纹理

    iPhone的图形芯片(PowerVR MBX)对一种称为 PVRTC 的压缩技术提供的硬件支持,Apple推荐在开发iPhone应用程序时使用 PVRTC 纹理.他们甚至提供了一篇很好的技术笔记描述 ...

  6. Delphi RichEdit的内容保存为图片

    uses RichEdit; {将RichEdit1的内容保存为图片,此函数也适合于RxRichEdit,即RichEdit: TRxRichEdit}procedure RichEditToCanv ...

  7. magento中的各种form标签

    1. Text Field    $fieldset->addField('title', 'text', array(          'label'     => Mage::hel ...

  8. php什么是变量的数据类型

    什么是变量的数据类型 在变量中,由于变量占用的空间单元不一样(占的地盘大小不一样),也分成几种数据类型,就像超市商品的包装袋,有几种不同类型,不同的商品使用不同的包装袋.我们可以通过使用“memory ...

  9. viewport移动端的meta

    随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...

  10. Android源码学习(一) 数据集观察者

    查看Android源码发现这个,决定记下下来. 1.在android.database这个包下面,存在这样一个抽象类DataSetObserver,里面包括onChanged()和onInvalida ...