2.1 简单C语言程序设计

本节的目标是通过几个简单程序来了解C语言程序设计的基本结构,理解常量、变量、数据类型和表达式四个基本概念。

我们学习C语言的第一个程序是在屏幕上显示“Hello world”。可以用printf 函数来完成这个任务,可以一个单词一个单词地输出、也可以一个字母一个字母地输出,或者整个字符串一起输出。我们来看看这个完整的程序,它完成了在屏幕上显示"Hello world"这串符号。

/*在屏幕上输入Hello,world*/ #include<stdio.h> int main(void) { printf("Hello,world\n"); return 0; }

仔细观察以上程序,其第一行是注释,以“/*”开始,以“*/”结束,用以说明程序的作用。第二行预编译处理语句,用#include语句引入stdio.h头文件;第三行是main函数定义,由三部分构成:main是函数名字,前面的int表示函数的返回值为整型数据,一对括号“()”用来说明main是一个函数;从第四行开始到最后称为函数体,左花括号“{”表示函数的开始,右花括号“}”表示函数的结束。

在这个函数里面有两行,第一行用printf函数在屏幕上显示字符串,第二行的return用于结束main函数的执行,这两行都称为语句,后面都用分号(;)结束。printf称为输出函数,在Hello world 的两边用一对双引号定界,表示这是字符串,又称为字符串常量。在这个字符串的最后一个符号为“\n”,称为转义字符,用来表示换行。

根据程序,我们就可以看出三个方面的内容:第一,任何程序它都只能有一个称为main的函数;第二,程序可以由若干语句构成;第三,每个语句的后面用分号结束。

接下来我们来看一下第二个程序。与第一个程序相比,这里用两个printf语句输出了两行字符串。

#include <stdio.h> /*编译预处理命令*/ int main (void) { printf ("Programming is fun! \n"); printf ("And Programming in C is even more fun! \n"); return 0; }

可以看到,这两个printf语句括号里面都是用一对双引号定界字符串,每个字符串里都用反斜杠"\n"来换行。如果我们把第一行的"\n"去掉,屏幕上还会显示两行字符串吗?答案是否定的。两个字串会会连接在一行上输出。

第三个程序是把华氏度转换成对应的摄氏度。用公式c=(5/9)*(f-32)来进行转换,f表示华氏温度,c表示转换后摄氏温度。那么如何来表示100华氏度呢,可以用f来表示, 用c存储摄氏度结果。程序如下;

#include <stdio.h> int main (void) { int c, f; /*变量定义*/ f = 100; /*变量使用*/ c = 5 * (f - 32) / 9; printf ("f = %d, c = %d\n", f, c);/*输出结果*/ return 0; }

我们看到,在函数体里面,第一行用来定义c 和f,其数据类型都是整型的(int),称为整型变量。变量定义的作用是向计算机申请存储空间存储数据。第二行f 等于100,作用是把100放到名为f 的变量里,等于号“=”称为赋值运算符,后面加分号称为赋值语句。“赋”是给予的意思,赋值的意思是把等号“=”右边的值给予等号左边的变量。第三行是把5*(f-32)/9运算式子的值计算出来后赋给变量c。 5*(f-32)/9又称为表达式,即是运算符连接运算量构成的带有值的运算式子,在使用时,把表达式当成一个值就行了。另外,要注意乘号(*)和除号(/)的写法,乘号(*)在表达式中不能省略。第四行的printf 和前面的printf的用法不太一样,前面的printf 只有一对双引号定界的字符串。而这里,printf 里面的字符串包含了两个%d,称为格式符,这是一种占位符,即字符串输出时会被后面对应位置表达式的值依次替代。本例中,printf 的输出结果中,%d 都会被对应的表达式数值取代,如第一个%d 被f 的值替代,第二个%d被c 的值替代。程序的运行结果是:

f=100,c=37

根据C语言的运算规则,整型数据的算术运算的结果也是整型,所以表达式5*(f-32)/9的值是整型数据37,而不是我们期待的实数37.777777。整型表达式运算结果如果出现小数,则小数点后的小数部分会被直接舍弃而不是按四舍五入取整数。那么如何得到更精确的实数呢?只要表达式中至少有一个浮点型运算量即可,可以把f定义成float或double浮点型变量或让某个常量为浮点型常量,如:5.0* ( f- 32 ) / 9 或 5 *( f - 32 ) / 9.0等。可见,正确定义和使用数据类型对程序设计而言非常重要。

接下来我们学习三个非常重要的概念——常量、变量数据类型。函数第一行“int c ,f;”称为变量定义,c和f称为变量,而变量指的是程序执行过程中可以被改变的量,在计算机里变量代表内存单元。赋值语句“c =5*(f-32)/9;”中。5、32和9称为常量,常量指的是在程序执行过程中保持不变的量。常量和变量都统称为运算量,实质都是数据。数据类型用于限定数据的存储格式、大小和可参与的运算,5、32和9都是整数类型,称为整型常量,c 和f由int指定称为整型变量,一般在内存占用2或4个字节存储空间,整型(int)的长度取决于不同的C编译器。

定义变量的一般形式是:

类型名 变量名列表;

如以下定义了五个不同类型的变量:

int c,f; float x; double area,length;

类型名用来指定每个变量的数据类型。变量名表是用逗号分隔不同变量名。如“int c,f;”中, “c,f” 称为变量名列表,int是整型类型名。“float x;”定义了一个变量x,其类型是单精度浮点型float。“double area,length;”定义了两个双精度浮点型变量area,length。关于单精度或双精度浮点型变量如何存储,与前面1.2中讲的IEEE 754标准一致。单精度浮点型float占4个字节,双精度浮点型double 占八8字节。double 型数据比float 型精度高,取值范围更大,因为double 用53比特表示尾数,而float 只用23比特表示尾数,所以double它表示数的范围非常大,精度也高。

在定义变量时,变量名字最好有意义,这样可以达到见名知义的目的,对程序阅读和理解有重要意义。所谓见名知义,就是要让变量名和它存储的内容建立联系,看到名字就知道这个变量到底用来干什么。变量定义的目的是用变量名与内存对应起来,并告诉计算机内存空间存储数据的格式、大小及数据可以参与的计算。刚才定义的c, f, x,area 和length这五个变量占用的内存如图所示。

c语言及程序设计快速入门(简单C语言程序设计)(1)

变量的内存映象

可以看到整型变量存储占的空间较少,而单精度浮点型变量x 占的空间刚好是两个整型变量之和。一个double 型变量占用的空间大小,是4个整型变量或2个单精度浮点型变量大小之和。变量名是一个存储单元的代表,看到变量名就要想到它是一块内存空间。变量占用内存空间的大小由其数据类型决定。

变量一般应在程序中第一个可执行语句之前定义,并且要先定义后才能使用。我们不能使用没有定义的变量,也不能使用未被赋值的变量。如程序三中:

int c,f; f =100;

两句不能交换顺序,因为使用f之前要先定义变量f。程序的语句之间有先后之分,如果表达式要使用变量f,必须先执行f=100,让f获得了具体的数据才能完成表达式计算。变量可以在程序、文件、函数、复合语句或分程序中定义,同一级程序块的变量名不能重复定义。变量名与存储空间具有一一对应关系。

在程序三中,如果把f=100这行赋值语句去掉,后面的“c=5*(f-32)/9”语句结果是什么呢?计算结果不可知,因为f的值是什么我们不知道。定义的变量如果未被赋出值,则变量的值是“拉圾”数据。因此,如果我去掉了f=100这行代码,导致f 的值未知,变量c结果也就无法预知了。

本节我们介绍了C语言程序的基本结构,对常量、变量和数据类型等基本概念和应用作了简单介绍。本节就讲到这里,下次再见!

,