返回课程

C语言算法和三种基本程序结构

算法

做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。

算法是一个基本的概念,但也是一门深奥的学问,小到如何输出九九乘法表,如何对一组数据进行排序,大到如何控制飞行器的姿态,如何让无人机壁障。

这里主要是向大家阐述一下算法的概念,对于初学者,涉及到的算法都很简单,一般不会成为学习的障碍,我们会在后面的实例中逐渐向大家渗透具体的算法。

请大家思考一个问题:如何求1×2×3×4×5的值。

最原始方法:
步骤1:先求1×2,得到结果2。
步骤2:将步骤1得到的乘积2乘以3,得到结果6。
步骤3:将6再乘以4,得24。
步骤4:将24再乘以5,得120。

这样的算法虽然正确,但太繁。

改进的算法:
S1:使t=1
S2:使i=2
S3:使 t×i,乘积仍然放在在变量t中,可表示为 t×i -> t
S4:使i的值+1,即 i+1 -> i
S5:如果i≤5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。

如果计算100!只需将“S5:若i≤5”改成“i≤100”即可。

如果改成求1×3×5×7×9×11,算法也只需做很少的改动:
S1:1 -> t
S2:3 -> i
S3:t×i -> t
S4:i+2 -> i
S5:若i≤11,返回S3;否则,结束。

该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。

三种基本程序结构

几乎所有编程语言,包括C语言,都会有三种基本的程序结构:顺序结构、选择结构和循环结构。

顺序结构

顺序结构就是一条一条地从上到下执行语句,所有的语句都会被执行到,执行过的语句不会再次执行。

例如,求1+2+3+4+5的和,就可以一个数一个数地依次累加。

选择结构

选择结构就是根据条件来判断执行哪些语句,如果给定的条件成立,就执行相应的语句,如果不成立,就执行另外一些语句。

例如,根据用户输入的年龄来输出不同的内容:
年龄 小于18 你还未成年,应该好好学习
大于等于18,小于等于30 珍惜青春,多做有益的事情
大于30,小于60 社会中坚力量,工作的同时注意身体
大于等于60 请您安享晚年,我们会记得您对社会的贡献

用户输入年龄,程序会做出判断,根据不同的年龄输出不同的内容。这四个输出语句,只有一个被执行,其他三个被跳过,没有执行。

循环结构

循环结构就是在达到指定条件前,重复执行某些语句。

例如,上面说到的计算 100! 的值,就会重复执行 S3、S4。

最后,我们用双重循环结构来输出九九乘法表:
#include <stdio.h>
int main(){
    int i, j;
    for(i=1; i<=9; i++){
        for(j=1; j<=i; j++){
            printf("%-3d ", i*j);  // -3d 表示输出整数,宽度为3(占3个字符),左对齐
        }
        printf("\n");
    }
    return 0;
}
运行结果:

C语言程序的结构特点

通过前面的几个例子,我们总结出了C语言程序的几个特点:
  1. 一个C语言源程序可以由一个或多个源文件组成。
  2. 每个源文件可由一个或多个函数组成。
  3. 一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
  4. 源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
  5. 每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
  6. 标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时应遵循以下规则:
  1. 一个说明或一个语句占一行。
  2. 用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。
  3. 低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。

在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的知识,前面的问题也就迎刃而解了。

初学者一定要记住这一点,开始不明白很正常,初学编程有很多知识要补充,一定要学下去,学到后面,你会豁然开朗,自然就解开了前面的疑问。

还要记住“千金难买回头看”,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是非常重要的。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。

C语言输出函数(printf)和输入函数(scanf)

前面的几个例子都用到了输出函数printf,例1-3还用到了输入函数scanf,这里我们先简单介绍一下它们的格式,以便后面使用。

scanf和 printf这两个函数分别称为格式输入函数和格式输出函数。其意义是按指定的格式输入输出值。因此,这两个函数在括号中的参数都由以下两部分组成:
1) 格式控制串:格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。

在printf函数中可以在格式控制串内出现非格式控制字符,这时在显示屏幕上会显示源字符串。各种类型的格式表示方式请参考:C语言格式输出函数printf()详解

在scanf函数中也可以在格式控制串内出现非格式控制符,这时会将输入的数据以该字符为分隔。各种类型的格式表示方式请参考:C语言scanf()函数

2) 参数表:参数表中给出了输入或输出的变量。当有多个变量时,用英文逗号(,)分开。例如:
printf("sine of %lf is %lf\n",x,s);
// %lf为格式字符,表示按双精度浮点数处理,它在格式串中两次现,对应了x和s两个变量
// 其余字符为非格式字符则照原样输出在屏幕上。
scanf("%d %fa%c", &intNum, &floatNum, &c);
// %d, %f, %c为格式字符
// 表示将输入的数据分别以整数、浮点数和字符形式赋值给变量intNum, floatNum,c
// 其中的空格和a为分隔符
// 变量intNum, floatNum,c都有一个'&'符号,表示取地址

【例1-4】对例1-3稍加修改,在printf中使用多个参数,在scanf中使用'|'作为分隔符。
#include<stdio.h>  // 包含stdio.h头文件

int max(int, int);  // 函数声明

int main(){
    int a, b, n;  // 声明两个整型变量
    printf("Input two integers: ");  // 以空格为分隔
    // 以'|'为分隔符,将输入的两个整数分别赋值给a, b
    scanf("%d|%d", &a, &b);
    // 以整数形式输出a、b和最大值,a, b, max(a,b)为参数列表
    n = max(a, b);
    printf("The max between %d and %d is %d.\n", a, b, n);
    return 0;
}

// 函数定义
int max(int num1, int num2){  // num1, num2为形式参数(形参)
    if(num1>num2){  // 如果num1大于num2
        return num1;  // 返回num1并结束max函数
    }else{  // 如果num2大于num1
        return num2;  // 返回num2并结束max函数
    }
}
运行结果:
Input two integers: 12|34↙
The max between 12 and 34 is 34.

上面例中程序的功能是由用户输入两个整数,程序执行后输出其中较大的数。本程序由两个函数组成,主函数main和max 函数。函数之间是并列关系。可从主函数中调用其它函数。max 函数的功能是比较两个数,然后把较大的数返回给调用函数 -- main函数。max函数是一个用户自定义函数。因此在使用前要给出说明(程序第3行)。可见,在程序的说明部分中,不仅可以有变量说明,还可以有函数说明。关于函数的详细内容将在后续章节介绍。

上例中程序的执行过程是,首先在屏幕上显示提示,请用户输入两个数,以'|'为分隔,回车后由scanf函数语句接收这两个数送入变量a、b中,然后调用max函数,并把x、y的值传送给max函数的参数a、b。在max函数中比较a、b的大小,把大者返回给main函数中的变量n。

C语言基本概念

下面介绍C语言中常用的几个概念:标准C语言、标识符、关键字、运算符、分隔符、常量、变量和注释。

1. 标准C语言

C语言诞生于20世纪70年代,年龄比我们自己还要大,期间产生了很多标准,但是各种编译器对标准的支持不尽相同。

ANSI C是使用的最广泛的一个标准,也是第一个正式标准,被称为“标准C语言”。ANSI C于1980年由美国国家标准局(American National Standards Institute,简称ANSI)对外发布,各种编译器几乎都完整支持ANSI C,市面上的书籍、大学里的教材、网上的教程大都以ANSI C为基础进行讲解,C语言中文网也不例外,也以ANSI C为基础。

如果你遇到其他称呼,如ISO C、C89、C90、ANSI / ISO C,要知道都是指一个版本,其中的故事请查看:C语言的发展及其版本

2. 标识符

在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能是字母(A~Z, a~z)、数字(0~9)和下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。

以下标识符是合法的:
a, x,  x3, BOOK_1, sum5

以下标识符是非法的:
3s    以数字开头
s*T    出现非法字符*
-3x    以减号(-)开头
bowy-1    出现非法字符减号(-)

在使用标识符时还必须注意以下几点:
  • 标准C语言不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。例如在某版本C语言中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。
  • 在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。
  • 标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。

3. 关键字

关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。

C语言的关键字分为以下几类:
分类 说明
类型说明符  用于定义、说明变量、函数或其它数据结构的类型。如前面例题中用到的int、double等。
语句定义符 用于表示一个语句的功能。如【例1-3】中用到的if else就是条件语句的语句定义符。
预处理命令字 用于表示一个预处理命令。如前面各例中用到的include。

全部关键字请参考这里:C语言关键字及其解释[共32个]

4. 运算符

C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成,如加号(+)、减号(-)、乘号(*)等。

5. 分隔符

在C语言中采用的分隔符有逗号(,)和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误,例如把 int a; 写成 inta; C语言编译器会把 inta 当成一个标识符处理,其结果必然出错。

6. 常量

常量是值不能被改变的量。C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。在后面章节中将专门给予介绍。

7.变量

变量由用户自己命名,用来保存特定类型的数据,数据可以被改变。数据类型有整数、浮点数、字符等,将在后面章节进行介绍。

8. 注释

标准C语言的注释是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。

另外,各种编译器都支持以“//”开头的注释,虽然它不是标准C的规定,但是早已成为事实标准,在程序中广泛使用。“//”仅支持单行注释,也就是说,注释中不能出现换行符;而“/*  */”支持多行注释,注释中可以出现换行符。

例1-2和例1-3中使用了很多注释。

在Linux下运行C语言程序

市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核、桌面环境和各种常用的必备工具,国内使用较多的是Ubuntu(乌班图)、CentOS、Deepin(深度Linux)。本教程以Deepin为例来讲述如何编译C程序。

Gedit

Gedit是一个简单实用的文本编辑器,拥有漂亮的界面,支持语法高亮,比 Vim 更易上手。本教程将Gedit作为C代码编辑器。

Gedit的安装:
sudo apt-add-repository ppa:ubuntu-on-rails/ppa    //添加ubuntu的软件源
sudo apt-get update    //更新软件列表
sudo apt-get install gedit-gmate    //安装

在当前目录下创建一个C源文件并打开:
touch test.c
gedit test.c

可以看到gedit的窗口,输入:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf("Hello,Linux.\n");
    exit(0);
}


gedit 窗口截图

注意:Gedit支持多种语言的高亮显示,一般情况下能够自动识别语言,如果识别错误,请在“编辑->高亮模式“下选择C。

GCC

Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具。本教程毫不犹豫地使用GCC来编译C程序。

保存文件后退出,打开终端并 cd 到当前目录,输入下面的命令:
    gcc test.c -o test
可以直接将C代码编译链接为可执行文件。

可以看到在当前目录下多出一个文件 test,这就是可执行文件。不像Windows,Linux不以文件后缀来区分可执行文件,Linux下的可执行文件后缀理论上是可以任意更改的。

当然,也可以分步编译:

1) 预处理
    gcc -E test.c -o test.i
在当前目录下会多出一个预处理结果文件 test.i,打开 test.i 可以看到,在 test.c 的基础上把stdio.h和stdlib.h的内容插进去了。

2) 编译为汇编代码
    gcc -S test.i -o test.s
其中-S参数是在编译完成后退出,-o为指定文件名。

3) 汇编为目标文件
    gcc -c test.s -o test.o
.o就是目标文件。目标文件与可执行文件类似,都是机器能够识别的可执行代码,但是由于还没有链接,结构会稍有不同。

3) 链接并生成可执行文件
    gcc test.o -o test

如果有多个源文件,可以这样来编译:
    gcc -c test1.c -o test1.o
    gcc -c test2.c -o test2.o
    gcc test1.o test2.o -o test

注意:如果不指定文件名,GCC会生成名为a.out的文件,.out文件只是为了区分编译后的文件,Linux下并没有标准的可执行文件后缀名,一般可执行文件都没有后缀名。

编译后生成的test文件就是程序了,运行它:
    ./test
如果没有运行权限,可以使用sudo命令来增加权限(注意要在Linux的分区下):
    sudo cdmod test 777

对于程序的检错,我们可以用-pedantic、-Wall、-Werror选项:
  • -pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码(并不是全部);
  • -Wall可以让gcc显示警告信息;
  • -Werror可以让gcc在编译中遇到错误时停止继续。

这3个选项都是非常有用的。

在Windows下运行C语言程序

Windows下的编程工具使用 VC 6.0,下面讲解如何在VC 6.0下运行上节的“Hello, world”程序。

1) 新建Win32 Console Application工程

打开VC6.0,在菜单栏中选择“文件 -> 新建”,或者 Ctrl+N,弹出下面的对话框:

切换到“工程”选项卡,选择“Win32 Console Application”,填写工程名称和路径,点击“确定”,会弹出一个对话框询问类型,这里选择“一个空工程”,如下图所示:

点击“确定”完成创建。

“Win32 Console Application”是控制台应用程序,这样的程序类似 doc 或 cmd,没有漂亮的界面,可以显示字符。

2) 新建C源文件

在菜单栏中选择“文件 -> 新建”,或者 Ctrl+N,弹出下面的对话框:
切换到“文件”选项卡,选择“C++ Source File”,填写文件名,点击确定完成。

该步骤是向刚才创建的工程添加源文件;C语言源文件一般以 .c 为后缀。

3) 编写C语言代码

在工作空间中可以看到刚才创建的工程和源文件,入下图所示:

双击 hello.c,进入编辑界面,输入例1-1中的代码。

4) 编译并运行代码

C语言源代码,必要要经过编译、组建(也被称为“链接”)和运行才能看到输出结果:
  • 编译将C语言代码“翻译”成机器码(这里暂时可以理解成0和1序列)。
  • 组建将工程所需的所有资源集合到一起,最终生成 .exe文件。
  • 运行就是执行 .exe 程序,和运行其他程序一样,双击即可。

编译、组建、运行的功能可以在“组建”中找到,如下图所示:

更加简单的方法是使用快捷方式,如下图所示:

对于初学者,最常用的是运行按钮,编写完代码,一次点击就可以看到输出结果。当然,你也可以使用快捷键:Ctrl+F7(编译)、F7(组建)、Ctrl+F5(运行)。

刚才我们已经编写了源代码,保存后,点击运行按钮或 Ctrl+F5,如果程序正确,可以看到运行结果,如下图所示:

恭喜你,你已经完成了第一个C语言程序,越过了第一道障碍。

注意:编译生成的 .exe 文件在工程目录下的Debug文件夹内。以上面的工程为例,路径为 E:\cDemo,打开看到有一个Debug文件夹,进入可以看到 cDemo.exe。

如果你在安装或使用过程中遇到错误,请查看VC6.0使用教程,已经解决了一些常见的问题。

在C-Free中运行C语言程序更加简单,无需创建工程,可以单独运行一个C源文件,这里不再赘述,方法与VC6.0类似。

两个练习

请大家再运行下面两个程序,体会一下C语言的结构。这两个例子大家无需理解,能够运行出正确的结果就成功了。

【例1-2】输出1+2+3+...+99+100的值。
#include<stdio.h>  // 包含stdio.h头文件
int main(){
    int i, total=0;  // 声明两个整型变量
    /* for语句用来循环
      i的起始值为 1,每循环一次加 1,i>100 时退出循环 */
    for(i=1; i<=100; i++){
        total+=i;  // 加法运算,也可以写作 total=total+i
    }
    printf("1+2+3+...+99+100=%d\n", total);  // 将total以整数形式输出
    return 0;
}

【例1-3】输出两个整数中较大的数。
#include<stdio.h>  // 包含stdio.h头文件

int max(int, int);  // 函数声明

int main(){
    int a, b;  // 声明两个整型变量
    printf("Input two integers: ");  // 以空格为分隔
    scanf("%d %d", &a, &b);  // 将输入的两个整数分别赋值给a, b
    // 以整数形式输出最大值, a, b为实际参数(实参)
    printf("The max integer is %d.\n", max(a, b));
    return 0;
}

// 函数定义
int max(int num1, int num2){  // num1, num2为形式参数(形参)
    if(num1>num2){  // 如果num1大于num2
        return num1;  // 返回num1并结束max函数
    }else{  // 如果num2大于num1
        return num2;  // 返回num2并结束max函数
    }
}

C语言开发工具(编译器|IDE)推荐

常用的C语言开发工具有很多,每个开发工具所支持的库函数和对标准的实现都有差异。不过,对于初学者,可以忽略这些细节,选择一款使用广泛、上手容易的开发工具才是王道。

Windows平台下推荐VC6.0或VS

Visual C++ 6.0简称VC或者VC6.0,是微软1989年推出的一款C/C++编译器,界面友好,调试功能强大。VC6.0是一款革命性的产品,非常经典,至今仍然有很多企业和个人在使用,很多高校也将VC6.0作为C语言的教学基础,作为上机实验的工具。本教程中的代码,也都是在VC6.0下运行通过。

VC6.0确实有点老了,微软原版VC6.0在XP、Win7、Win8下都存在兼容性问题,甚至不能正常启动,C语言中文网提供了两个经过第三方更改的版本。

1) VC6.0精简版(15M / 16M)

VC6.0精简版维持了原版VC6.0的界面,解决了兼容性问题,简化了安装过程,可以在XP和Win7下完美运行(Win8不行)。

下载地址:VC 6.0精简版下载,支持Win7和XP

2) C-Free MSCL版(42M)

C-Free MSCL版是在 C-Free 5.0 基础上集成了 Visual Studio 10.0 SP1 的编译器、调试工具、绿色部署工具等,支持XP、Win7、Win8,相当于给 Visual Studio 10.0 SP1 换了个界面。

下载地址:C-Free MSCL版下载

3) Visual Studio

微软后来对VC6.0进行了升级,并更名为Visual Studio(简称VS),支持更多的编程语言,更加强大的功能,不过 Visual Studio 文件很大,有3G左右,大部分功能初学者暂时不会用到;而且安装繁琐,不容易卸载干净。

Visual Studio 还有一个缺点是占用资源较多,不建议配置低的机器使用。

当然,如果你希望进行Windows开发,追求强大的功能,拥有良好的网络和高配的机器,那么 Visual Studio 也是一个很好的选择。

Visual Studio 下载地址:http://www.iplaysoft.com/vs2013.html

一点忠告:C语言初学者应化繁就简,尽快搭建起编程环境,实际运行几个C语言程序,找到学习的乐趣和成就感。而不是追求功能强大的开发工具,VC6.0精简版和C-Free MSCL完全可以满足初学者的需求。

Linux平台下推荐使用GCC

GCC是Linux下最流行最好用的C语言开发工具,不管是新手还是大牛,大部分都是GCC的拥护者,对于初学者,GCC是毋庸置疑的选择。大部分的Linux发行版自带了GCC,一般情况下无需安装。

Vim是Linux下的文本编辑器,通常与GCC结合使用,提高开发效率。

在Windows下,也有集成了GCC的开发工具,如 Code::Blocks、MinGW、C-Free 等,但不要期待这些工具在Windows下拥有良好的表现,实际的Windows项目开发中大部分使用VC6.0或其升级版Visual Studio。

给点提示

上面的开发工具不仅仅包含了C语言编译器,还包含了很多辅助功能,比如编辑器、代码高亮、调试功能和错误提示等,这叫做“集成开发环境”。

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

第一个C语言程序

学习一门新语言的惟一途径就是使用它来编程。对于初学者来说, 编写的第一个程序几乎都是相同的,即在屏幕上显示“Hello, world”,专业说法为打印“Hello, world”。

【例1-1】打印 Hello, world。
/* 第一个C语言程序
打印 Hello, world */
#include<stdio.h>  //包含头文件stdio.h
int main(){  // 主函数
    printf("Hello, word\n");  // 打印字符串
    return 0;  // 返回0,表示程序正确运行
}
尽管这个程序很简单,但对初学者来说,它仍然可能成为一大障碍,因为要实现这个目的,首先要编写代码,然后编译、链接并运行,最后看到输出结果。掌握了这些操作细节以后,其它事情就比较容易了。

关于编译和链接将在下一节说明,这里先对程序进行解释:
  • 第1行包含标准库文件,include称为文件包含命令,扩展名为.h的文件称为头文件。
  • 第2行定义名为main的函数,它不接受参数值;main函数的语句都被括在花括号中;int为main函数返回值类型。
  • 第3行打印“Hello, world”,main函数调用库函数printf以显示字符序列。
  • 第4行表示main函数的返回值为0,return让函数返回一个值。
  • 第5行结束main函数,花括弧必须成对出现。

位于“/*  */”中和“//”后面的内容为注释,用来对程序进行说明;注释在编译时会被自动忽略。

一个C语言程序,无论其大小,都是由函数和变量组成的。

函数具有某些特定功能,能执行特定操作;函数中包含一些语句,以说明操作的过程。变量则用于存储计算过程中使用的值。

在本例中,函数的名字为main。通常情况下,函数的命名没有限制,但main是一 个特殊的函数名,每个程序都从main函数的起点开始执行,这意味着每个程序都必须在某 个位置包含一个main函数。

main函数通常会调用其它函数来帮助完成某些工作,被调用的函数可以是我们自己编写的,也可以来自于函数库。上述程序段中的第一行语句#include <stdio.h>用于告诉编译器在本程序中包含标准输入/输出库。许多C语言源程序的开始处都包含这一行语句。我们将在后续章节对标准库进行详细介绍。

函数之间进行数据交换的一种方法是调用函数向被调用函数提供一个值(称为参数)列表。函数名后面的一对圆括号将参数列表括起来。在本例中,main函数不需要任何参数,因此用空参数表( )表示。

函数中的语句用一对花括号{}括起来。本例中的main函数包含下面两条语句:
printf("Hello, word\n");
return 0;
调用函数时,只需要使用函数名加上用圆括号括起来的参数表即可。上面这条语句将"hello, world\n"作为参数调用printf函数。printf是一个用于打印输出的库函数,在此处, 它打印双引号中间的字符串。

用双引号括起来的字符序列称为字符串或字符串常量,如"hello, world\n"就是一个字符串。目前我们仅使用字符串作为printf及其它函数的参数。

在C语言中,字符序列\n表示换行符,在打印中遇到它时,输出打印将换行,从下一行的左端行首开始。如果去掉字符串中的\n(这是个值得一做的练习),即使输出打印完成后也不会换行。在printf函数的参数中,只能用\n表示换行符。如果用程序的换行代替,例如:
    printf("Hello, word
    ");
C编译器将会产生一条错误信息。

printf函数永远不会自动换行,这样我们可以多次调用该函数以分阶段得到一个长的输出行。上面给出的第一个程序也可以改写成下列形式:
#include<stdio.h>
int main(){
    printf("Hello, ");
    printf("word");
    printf("\n");
    return 0;
}
这段程序与前面的程序的输出相同。

为什么要学习C语言

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。

也许你将来的工作或学习不会使用C语言,但是它能让你了解编程相关的概念,带你走进编程的大门,以后学习其他语言,会触类旁通,很快上手,7 天了解一门新语言不是神话。

也只有C语言的教程(书籍、在线教程、视频等)才会介绍最基本的编程概念,手把手教你从零学会写代码;其他编程语言(C++、Java等)大都一带而过,对基础介绍很少。如果你从例如C++、Java、PHP等开始学习编程,会发现非常吃力,不知所云,甚至无法掌控。

C语言语法简单精炼,概念少,效率高,包含了基本的编程元素,后来的很多语言(C++、Java等)都参考了C语言,说C语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。

正是由于C语言的简单,对初学者来说,学习成本小,时间短,结合本教程,能够快速掌握编程技术。

C语言不但执行效率高(比C++、Java都高),而且应用广泛,可以用来开发桌面软件、硬件驱动、操作系统、单片机等,从微波炉到手机,从汽车到智能电视,都有C语言的影子。

所以说,学习一门年龄比自己还大的语言很有必要(C语言诞生于20世纪70年代初)。

当然,C语言也不是没有缺点,毕竟是70后老人,有点落后时代。不过这里不讲,讲了你也不明白,以后你自然会了解。


  • 扫一扫 扫二维码继续学习