C_Primer第2章 C语言概述

本章介绍以下内容:

  • 运算符
  • 函数:main()、printf()
  • 编写一个简单的C程序
  • 创建整形变量,为其赋值并在屏幕上显示其值
  • 换行字符
  • 如何在程序中写注释,创建包含多个函数的程序,发现程序的错误
  • 什么是关键字

2.1 简单的C程序示例

#include<stdio.h>
int main()
{
	int num;
	num = 10;

	printf("I am a simple ");
	printf("computer.\n");
	printf("MY favorite number is %d because it is first.\n",num);
	return 0;
}

程序输出:

I am a simple computer.
MY favorite number is 10 because it is first.
2.2 示例解释

2.2.1 第1遍:快速要要

2.2.2 第2遍:程序细节

1. #include指令和头文件

2.main()函数

函数是C程序的基本模块

如果浏览旧式的C代码,会发现程序以如下形式开始:

main()

C90标准勉强接受这种形式,但C99和C11标准不允许这样写。因此,即你你使用的编译器允许,也不要这样写。

你还会看到下面这种形式

void main()

一些编译器允许这样写,但是所有的标准都未认可这种写法。因此,编译器不必接受这种形式,而且许多编译器都不能这样写。需要强调的是,只要坚持使用标准形式,把程序从一个编译器移至另一个编译器时就不会出什么问题。

3.注释

4.花括号、函数体和块

5.声明

int num;

程序清单2-1中,这行代码叫作声明(declaration)。声明是C语言最重要的特性之一。

变量

数据类型

关键字

以前的C语言,还要求把变量声明在块的顶部,其他语句不能在任何声明的前面。也就是说,main()函数体如下所示:

int mian()    //旧规则
{
    int doors;
    int dogs;
    doors = 5;
    dogs = 3;
    // 其他语句
}

C99和C11遵循C++的惯例,可以把声明放在块中的任何位置。尽管如此,首次使用变量之前一定要先声明它。加些,如果编译器支持这一新特性,可以这样编写上面的代码。

int main()    //目前的C规则
{
    //一些语句
    int doors;
    doors = 5; //第1次使用doors
    //其他语句
    int dogs;
    dogs = 3;    //第1次使用dogs
    //其他语句
}

为了与旧系统更好地兼容,本书沿用最初的规则(即,把变量声明都写在块的顶部 )。

数据类型

命名

C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符。

声明变量的4个理由

6.赋值

7.printf()函数

8.return语句

2.3简单程序的结构

2.4.提高程序可读性技巧

2.5进一步使用C

程序清单2.2 fathm_ft.c程序

//fathm_ft.c --把2英寻转换成英寸,1英寻等于6英尺
#include<stdio.h>
int main(void)
{
	int feet,fathoms;

	fathoms = 2;
	feet = 6 * fathoms;

	printf("There are %d feet in %d fathoms!\n",feet,fathoms);
	printf("Yes,I said %d feet!\n",6 * fathoms);
	return 0;
}

2.5.1 程序说明

2.5.2 多条声明

2.3.3 乘法

2.5.4 打印多个值

2.6 多个函数

程序清单2-3 two_func.c程序

//*two_func.c --一个文件中包含两个函数 */
#include <stdio.h>
void butler(void); /* ANSI/ISO C函数原型*/
int main(void)
{
	printf("I will summon the butler function.\n");
	butler();
	printf("Yes,Bring me some tea and writeable DVDs.\n");
}
void butler(void)
{
	printf("You rang,sir?\n");
}

该程序输出如下:

I will summon the butler function.
You rang,sir?
Yes,Bring me some tea and writeable DVDs.

butler()函数在程序中出现了3次。第1次是函数原型(prototype),告知编译器在程序中要使用该函数;第2次以函数调用(function call) 的形式出现在main()中;最后一次现现在函数定义(function definition)中,函数定义即是函数本身的源代码。下面逐一分析。

C90标准新增了函数原型,旧式的编译器可能无法识别(稍后我们将介绍,如果使用这种编译器应该怎么做)。函数原型是一种声明形式,告知编译器正在使用某函数,因此函数原型也被称为函数声明(function declaration)。函数原型还指明了函数的属性。例如,butler()函数原型中的第1个void表明,butler()函数没有返回值(通常,被调函数会向主调函数返回一个值,但是bulter()函数没有)。第2个void(butler(void)中的void)的意思是butler()函数不带参数。因此,当编译器运行至此,会检查butler()是否使用得当。注意,void在这里的意思是“空的”,而不是‘“无效”。

早期的C语言支持一种更简单的函数声明,只需要指定返回类型,不用描述参数"

void butler();

早期的C代码中的函数声明就类似上面这样,不是现在的函数原型。C90、C99和C11标准都承认旧版本的形式,但是也表明了会逐渐淘汰这种过时的写法。如果要使用以前写的C代码,就需要把旧式声明转换成函数原型。本书在后面的章节会继续介绍函数原型的相关内容。

C标准建议,要为程序中用到的所有函数提供函数原型。

2.7调试程序

程序清单2.4 nogood.c程序

/*nogood.c --有错误的程序*/
#include <stdio.h>
int main(void)
(
	int n,int n2,int n3;
	
	/*该程序有多处错误
	n= 5;
	n2 = n * n;
	n3 = n2 * n2;
	printf("n = %d, n squared = %d, n cubed = %d\n",n,n2,n3);
	
	return 0;
)

2.7.1语法错误

2.7.2语言错误

2.7.3程序状态

2.8 关键字和保留标识符

2.9 关键概念

编程是一件富有挑战性的事情。程序员要具备抽象和逻辑的思维,并谨慎地处理细节问题(编译器会强迫你注意细节问题)。平时和朋友交流时,可能用锘几个单词,犯一两个语法错误,或者说几句不完整的句子,但是对方能明白你想说什么。而编译器不允许这样,对它而言,几乎正确仍然是错误。

编译器不会在下面讲到的概念性问题上帮助你。因此,本书在这一章中介绍一些关键概念帮助读者弥补这部分的内容。

在本章中,读者的目标应该是理解什么是C程序。

2.10 本章小结

猜你喜欢

转载自blog.csdn.net/tjjingpan/article/details/83992312