C语言程序开发过程
C语言名称的由来
*C语言是一种面向过程的程序设计语言。
C语言是由丹尼斯·里奇(Dennis Ritchie)于1972年在贝尔实验室开发出来的,最初目的是为了更好地描述UNIX操作系统。
C语言既保持了B语言的精炼、接近硬件的特点,又克服了B语言过于简单、数据无类型的缺点。
C语言的特点
-
使用方便
C语言共有32个关键字1,还有9种控制语句,书写形式自由、灵活。 -
运算符丰富、表达能力强
C语言共有45个运算符2,用户可以灵活使用C语言所提供的运算符构成表达式来描述实际问题。 -
数据类型丰富
-
*以函数作为模块单位
C语言的输入和输出都是通过调用系统提供的库函数实现的,而不像其它程序设计语言是通过语句来实现,从而实现了程序设计的模块化。 -
允许直接访问物理地址
-
生成目标代码质量高
-
可移植性好
程序开发过程
用C语言编写的程序需要编译程序把C语言程序转换为二进制目标代码。
一个C语言程序是由一个或多个具有独立功能的模块组成的,这些模块称为函数。在这些函数中,必须有一个函数名为main的主函数,函数是组成程序的基本单位。
程序开发过程如下:
一个C语言程序的执行是从main函数开始,直到main函数结束。
函数及其结构
一个C语言程序由若干个函数构成,而每一个函数又由若干条语句组成,通过这些语句实现对数据的描述和操作,所以*语句是组成函数的基本单位。
语句
C语言规定每个语句必须由“ ; ”结束,必不可少。
- 说明语句
用来完成对数据的描述,通过说明语句定义变量。 - 可执行语句
用来完成对数据的操作。
(1)表达式语句
表达式+;
(2)函数调用语句:把函数调用作为一条语句。
如
printf("%d,%d\n",a,b);
调用了库函数printf
(3)空语句:只由一个分号构成。
(4)复合语句:用一对花括号括起来。
一般格式:{语句1 语句2 ···语句n}
花括号内的语句可以是说明语句也可以是可执行语句,但说明语句应在可执行语句的前面。
(5)流程控制语句;用于控制程序的流向,由系统提供的特定关键字组成。C语言有9种流程控制语句,可分成以下三类。
条件判断语句:if语句、switch语句.
循环语句:do while语句、while语句、for语句。
转向语句:break语句、continue语句、return语句、goto语句。
标识符
标识符是用来标识某个实体的符号,如函数的名字、变量的名字等。
- 系统标识符:是C语言的关键字1,包括数据类型标识符、存储类别标识符、流程控制标识符和sizeof求存储长度运算符。
- 预定义标识符:是C语言系统中预先定义使用的标识符,如系统常量名、库函数3名等。
- 用户定义标识符:用户在程序中所使用的标识符。
标识符的命名规则:以字母或下划线开头,由字母、数字、下划线组成。
Sum、a、temp、p_2都是合法的用户标识符,而3b、c#和p-1都是不合法的用户标识符。
- 用户标识符不能与系统提供的关键字同名
- 标识符区分大小写字母
- 最好不要使用预定义标识符
函数定义
一般格式:
返回值类型 函数名(参数类型1 形式参数名1 ,···,参数类型N 形式参数名N)
{
数据定义
数据操作
}
- 返回值类型是由系统提供的类型标识符,用以说明该函数返回值的类型。
- 形式参数简称为形参,参数类型是系统提供的类型标识符,用以说明相应形参的类型。
- 函数定义中的“返回值类型 函数名(参数类型1 形式参数名1 ,···,参数类型N 形式参数名N)”称为函数头。
- 一对花括号必不可少,其内的部分称为函数体。
- 如果函数有返回值,通常在函数体内必须有return语句,用来返回函数执行的结果,如果函数没有返回值,即函数返回值类型被定义为void,return语句可省略不写。
return语句的一般格式:
return(表达式);
- 一对圆括号可省略不写,此时表达式与return之间要留有空格。
return语句的作用:使程序流程从被调函数返回到主调函数的函数调用处,并将被调函数的返回值带回到函数调用处。
函数调用及函数声明
- 函数调用
把调用其它函数的函数称为主调函数,相应的其它函数称为被调函数。
一般格式:
[变量=]被调函数名(实际参数表)
- 实际参数简称为实参,实参可以是常量,也可以是变量,还可以是表达式,但变量和表达式都必须有确定的值。
- 参数传递:在执行函数调用时,系统将为每个形参变量分配存储空间,并把实参的值传递给对应的形参,即把实参值写到对应形参变量的存储空间,所以每个实参在函数调用之前都必须有确定的值。
- 函数调用的作用:*使程序流程转向被调用的函数,执行被调函数,完成被调函数的功能。
2.函数声明:
格式:类型标识符 函数名(形参表);
-函数声明是一个说明语句,必须在结尾加上分号。
-如果被调用函数写在主调函数之前,函数声明可省略不写。
-作用:向编译系统提供必要的信息,包括函数名、函数类型、形参类型、形参个数及排列顺序,以便编译系统对函数调用进行检查。
主函数的结构
书写格式:
int main()
{
数据定义
数据输入
函数调用
数据输出
return 0;
}
- main函数可以出现在其它函数之外的任意位置,有且仅有一个
- 返回值的类型是int为C99标准
- 数据定义部分用来定义主函数中将要用到的变量,包括函数声明。数据输入部分用来为所定义的需要用户输入数据的变量输入数据,建议在数据输入前给出相应提示。
- 通过函数调用来实现程序的预定功能,避免把程序的预定功能都写在主函数中。
- return 0;用于通知操作系统程序正常结束,如果返回一个非0值则表示程序非正常结束。
注释
1.以/*开头,以*/结束,中间写待注释的内容。可注释多行,必须成对使用。
2.以//开头,在其后写待注释的内容。只能注释一行。
注释可出现在程序的任何位置,对程序的编译和执行不产生影响。
注释的作用:增强程序的可读性和用于对程序进行调试。
【例】求矩形的周长。
#include<stdio.h>
int Perimeter(int x,int y);//函数Perimeter的声明
int main()
{
int length,wide,pmt;//定义主函数中用到的变量
printf("请输入矩形的长和宽:");//输入提示
scanf("%d%d",&length,&wide);//调用输入函数
pmt=Perimeter(length,wide);//函数调用
printf("矩形的周长是:%d\n",pmt);//调用输出函数
return 0;
}
/*以下是函数Perimeter的定义*/
int Perimeter(int x,int y)//函数头
{
int z;//定义函数中用到的变量
z=2*x+2*y;//数据操作
return z;//返回操作结果
}