任务1.1 熟悉C程序设计语言

学习目标

● 了解C语言的形成、发展和基本特点;

● 掌握C语言程序的基本结构和组成。

0

熟悉C程序设计语言

任务描述

本次任务是掌握C语言程序设计的基本框架,使读者能够编写运行简单的C程序,通过从键盘上输入两个整数,然后输出这两个整数的和。

相关知识

正如人与人之间通过各种语言进行沟通一样,我们和计算机交流也需要用计算机和用户都能够理解的语言才行,这种语言我们称之为“计算机语言”。为了使计算机进行各种工作,需要用某种计算机语言将这些工作内容表达出来,然后输入到计算机,这个过程便是“计算机编程”或“程序设计”,用计算机语言表达的命令集称为“计算机程序”,用于编写计算机程序的语言称为程序设计语言。

1.1.1 C语言的发展

C语言的原型是ALGOL60语言,也称为A语言。1963年,英国的剑桥大学和伦敦大学将ALGOL60发展成为混合编程语言(Combined Programming Language,CPL)。1967年,英国剑桥大学的Matin Richards对CPL语言进行了简化,推出了基础混合编程语言(Basic Combined Programming Language,BCPL)。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起名为“B语言”。而且他还用B语言写了第一个UNIX操作系统。1972年,美国贝尔实验室的Dennis Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年年初,C语言的主体完成之后,Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。1977年,Dennis Ritchie开发了独立于具体机器的C语言编译文本。1978年贝尔实验室正式发表了C语言。1982年,美国国家标准学会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。1983年,ANSI为C语言制定了新的标准,即ANSI C。1989年,ANSI发布了第一个完整的C语言标准—ANSI X3.159-1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Organization for Standardization)采纳,也称“C90”。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。

0

图1-1 C语言的发展历程

1.1.2 C语言的特点

C语言是一种通用的程序设计语言,既可以编写系统应用程序,也可以作为应用程序设计语言,具有如下特点。

(1)结构化的程序设计语言

结构化程序设计语言的显著特点是代码与数据的分隔,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可以让程序的层次结构更清晰,从而便于程序的使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

(2)具有丰富的数据类型

C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型和共用体类型等,能用来实现各种复杂数据结构的运算,并引入了指针概念,进一步提高了程序的效率。

(3)具有丰富的运算符

C语言的运算符包含的范围很广泛,共有34种。C语言把括号、赋值和强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。

(4)语言简洁紧凑、书写灵活方便

C语言一共有32个关键字、9种控制语句,程序书写形式自由,且区分大小写。只要符合C语言的语法规则,程序书写的格式并不受严格限制。

(5)允许直接访问物理地址,对硬件进行操作

由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来编写系统软件。

(6)生成目标代码质量高,程序执行效率高

C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。

(7)程序移植性好

C语言程序本身独立于机器硬件,可从一种环境换到另一种环境中运行,能被广泛地移植到各类计算机上,从而形成了多种版本的C语言。

1.1.3 简单的C语言程序

0

简单的C语言程序

用C语言编写的程序称为C程序或C源程序。下面通过一个简单的程序来初步了解一下C语言程序。

【例1-1】一个简单的C程序。

#include <stdio.h> 
int main() 
{ 
    printf("Hello, world!\n");   /*输出要显示的字符串*/ 
   return 0;      /* 程序返回0*/ 
} 

程序运行结果:

Hello world! 
Press any key to continue 

程序分析如下。

(1)#include指令

程序中的第一行:

#include <stdio.h> 

这条语句中的include称为文件包含命令,其功能是把尖括号(<>)内指定的文件包含到本程序中,成为程序的一部分。这里被包含的文件通常是由系统提供的头文件(其扩展名为.h)。C语言的头文件中包括了各个标准库函数的函数原型。“stdio.h”文件包含了标准输入/输出函数的定义。

(2)main函数头

程序中的第2行:

int main() 

这条语句代表main()函数的函数头部分,int代表函数的返回值类型为整型。main()函数是程序的入口点。也就是说,程序都是从main()函数开始执行的。

(3)函数体

程序中的第3行到第6行:

{ 
    printf("Hello, world!\n");   /*输出要显示的字符串*/ 
   return 0;      /* 程序返回0*/ 
} 

一个函数分为两个部分,一部分是函数头,另一部分是函数体。程序中的第3行和第6行这两个大括号中的语句构成了函数体,即第4行和第5行的语句就是函数体中要执行的内容。

(4)执行语句

程序中的第4行:

printf("Hello, world!\n");  /*输出要显示的字符串*/ 

执行语句就是函数体中要实现的操作。这条语句实现向控制台输出字符串“Hello,world”。printf()是格式化输出函数,括号中的内容称为函数的参数。其中的“\n”符号代表回车换行。

(5)return语句

程序的第5行:

return 0;      /* 程序返回0*/ 

这条语句使main函数结束运行,并返回一个整型常量“0”,return相当于main()函数的结束标志。一般默认约定return 0是正常退出程序,return非零是异常退出程序,它是给操作系统识别的,对你的程序无影响。如果将函数定义void main()可以不用返回值。

(6)注释

程序中的第4行和第5行后面都有一段关于代码的文字描述。

printf("Hello, world!\n");  /*输出要显示的字符串*/ 
return 0;      /* 程序返回0*/ 

这段对代码的文字描述称为代码的注释。添加注释是为了帮助自己或他人阅读程序时,能够理解程序代码的含义和设计思想。“//”用于单行注释符,也就是说,注释中不能出现换行符;而“/*...*/”用于多行注释,注释中可以出现换行符。

【例1-2】一个完整的C语言程序。

本例要求实现这样的功能:输入圆半径,计算并输出圆的面积。

#include <stdio.h> 
#define PI 3.1415926 
double calculate(float r); 
int main() 
{ 
   float r;                              /*定义float型变量,代表圆的半径*/ 
   double area;                          /*定义double型变量,代表圆的面积*/ 
    printf("Please input the radius: "); /*输出提示信息*/ 
   scanf("%f",&r);                       /*输入圆的半径*/ 
    area=calculate(r);                   /*调用函数,计算圆的面积*/ 
    printf("The area is %f\n",area);     /*输出圆的面积*/ 
    return 0; 
} 
double calculate(float r) 
{ 
    double s= PI*r*r;                   /*实现计算面积*/ 
   return s;                            /*将计算的结果返回*/ 
} 

程序运行结果:

Please input the radius:2.5↙ 
The area is 19.634954 

程序分析如下。

(1)定义常量

程序中的第二行:

#define PI 3.1415926 

这条语句的功能是用#define定义一个符号PI,并且指定这个符号代表的值为3.1415926。

(2)函数声明

程序中的第三行:

double calculate(float r); 

这条语句的功能是说明在程序代码的后面会有calculate()函数的具体定义,如果程序中调用calculate()函数,就会执行calculate()函数中的定义来执行有关的操作。

(3)定义变量

程序中的第6、7行:

float r; 
double area; 

这两条语句都是定义变量的语句。变量是用来存储数据的,C语言中变量必须先定义再使用,这样编译器就可以根据变量的类型为变量分配内存空间。

(4)输入语句

程序中第9行:

scanf("%f",&r); 

在C语言中,scanf()函数用于接收键盘输入的内容,并将输入的数据保存到相应的变量中。其中的&符号是取地址运算符。

由以上分析可以看出本例程序的流程,如图1-2所示。

0

图1-2 程序流程图

通过对上述两个程序实例的分析可以看出C程序具有以下特点。

① 一个C程序可以包含文件包含指令、预处理指令、变量声明、函数声明、主函数和函数定义共6部分。

② C程序整体是由函数构成的,程序总是从main()函数开始执行,与main()函数在程序中的位置无关。

③ C程序中每个语句都以分号结束。

④ C程序的书写区分英文字母的大小写,一般情况使用小写字母。

任务实现

步骤1:启动Visual C++ 6.0,选择【开始】→【程序】→Microsoft Visual Studio 6.0→Microsoft Visual C++ 6.0命令进入VC++ 6.0编程环境。

步骤2:新建文件(task1.c)。选择【文件】→【新建】命令,选择【文件】选项卡,选择C++ Source Files项,修改文件保存“目录”和“文件”(文件名),单击【确定】按钮。

步骤3:在编辑窗口输入源程序,并保存。

#include<stdio.h> 
int main() 
{ 
   int x,y; 
   printf("从键盘上输入整数:x="); 
   scanf("%d",&x); 
   printf("从键盘上输入整数:y="); 
   scanf("%d",&y); 
   printf("x+y=%d\n",x+y); 
   return 0; 
} 

步骤4:编译检查语法错误。选择【编译】→【编译】命令或按Ctrl+F7组合键,在产生的【工作区】对话框中,单击【是】按钮。

步骤5:连接。选择【编译】→【组建】命令或按F7键。

步骤6:运行。选择【编译】→【执行】命令或按Ctrl+F5组合键。

程序运行结果:

从键盘上输入整数:x=6↙ 
从键盘上输入整数:y=7↙ 
x+y=13