本章介绍以下内容:
- 运算符
- 函数: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 本章小结