继承[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. 全站 HTTPS

    1.HTTPS 基础 HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信 ...

  2. Permutations,Permutations II,Combinations

    这是使用DFS来解数组类题的典型题目,像求子集,和为sum的k个数也是一个类型 解题步骤: 1:有哪些起点,例如,数组中的每个元素都有可能作为起点,那么用个for循环就可以了. 2:是否允许重复组合 ...

  3. VMware的CentOS无法上网的解决方法

    1)点击 VM->Settings Hardware 选项卡下面 2)点击 Network Adapter 设置在虚拟机中将网络配置设置成NAT 3)开启 Windows服务中的 VMware ...

  4. 以Ajax的方式访问数据库

    一:以Ajax的方式显示数据 我们都知道,如果用Ajax程序去加载一个动态页,则加载的实际上是这个动态页执行完毕后生成的静态HTML代码字符串. 1.以原有的格式显示数据 <?php heade ...

  5. skynet的流程1

    logpath = "."harbor = 1address = "127.0.0.1:2526"master = "127.0.0.1:2013&q ...

  6. ApiDemos示例学习(1)——ApiDemos示例的导入

    ---恢复内容开始--- 今天准备开始写这个ApiDemos示例的学习日记了,放在网上以监督自己! 首先是导入该示例.如果我们在配置Android开发环境是,利用Android SDK 安装包中的SD ...

  7. PTF在PET上印刷線路的注意事項

    PTF: Polymer Thick Film (聚合厚模),維基的解釋 PET: Polyethylene terephthalate (聚乙烯對苯二甲酸酯),維基的解釋 就如同大家所知道的,相較於 ...

  8. 通过jpegoptim批量压缩文件

    #!/bin/sh filelist=$(ls) for file in $filelist do if [ -d $file ] then du -h $file /usr/local/bin/jp ...

  9. 谷歌page speed 安装使用及页面问题详解

    原文地址:http://wenku.baidu.com/view/b0a61f3ebcd126fff7050b40.html 谷歌page speed 安装使用及页面问题详解 谷歌page speed ...

  10. 如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称

    如果我们从 title 为 “首页” 的页面 A 点击进入一个子页面 B,那么在页面 B 的左上角将显示一个名为 “<首页” 的按钮.假设这个页面 A 叫 “你是我天边最美的云彩”,那在页面 B ...