《嵌入式系统编程语言第二章C语言开发流程及基本结构.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统编程语言第二章C语言开发流程及基本结构.ppt(27页珍藏版)》请在三一办公上搜索。
1、嵌入式系统 编程语言,第二章 C语言开发流程及基本结构,思考题,已知圆的半径,求圆的面积,本节课内容,一、C语言开发流程二、C程序基本结构,三、C语言开发流程,高级编程语言中的指令,哎呀 我理解不了,编译程序/解释程序,可以 我现在可以理解了,高级语言由编译/解释程序转换为机器代码,这种机器代码计算机可以理解,计算机硬件,高级语言程序,编译程序/解释程序(编译器/解释器)0,机器代码,高级语言的编译和执行,三、C语言开发流程,编译器,连接器,源程序:是用户创建的文件,以“.c”为文件扩展名保存,目标文件:是编译器的输出结果。这类文件的常见扩展名为“.o”或“.obj”,可执行文件:是连接器的输
2、出结果。可执行文件的扩展名为“.exe”。,编译和执行C程序,三、C语言开发流程,设计程序,编写代码,编译,运行程序,测试和调试,维护和修改,编译中发现错误,转回修改源程序,运行中发现错误,转回修改源程序,调试运行中发现问题,表明分析本身有错误,重新分析设计问题,定义程序目标,C程序的开发步骤,三、C语言开发流程,步骤:成果:编辑.c.h 预编译编译.obj或.o链接.exe加载运行,是否理解它们真正的含义?,例 求圆面积程序 area.c分析(编译预处理),/*给定半径,求圆的面积*/#define PI 3.14159/*编译预处理宏替换*/#include/*编译预处理文件包含*/#in
3、clude/*编译预处理文件包含*/int main()/*主函数*/float r,s;/*定义变量r、s类型为单精度实型*/r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf(“半径R=%f 时,面积S=%fn”,r,s);/*输出结果*/return 0;,注释部份这部分内容不会被编译,也不被执行,预编译处理程序编译、执行前系统自动进行的特殊处理特点:以#开头结束处无分号,预编译处理宏定义,#define PI 3.14159 PI 符号常量(宏名,最好用大写,以区别一般变量)3.14159 宏体(可以是一个表达式)作用:用简单符号代表宏体部份内
4、容(编译时会先自动替换)意义:直观/多次使用/便于修改注意:#define 可出现在程序的任一位置(作用范围:由此行到程序末尾)宏定义不是C语句,不必在行未加分号,否则会连分号一起置换。,例二#define A 1#define B 2#define C 2*A+Bint main()printf(“C=%d”,C);/*输出结果:C=*/return 0;,例三#define WIDTH 80#define LENGTH WIDTH+40s=LENGTH*20,/*s=80+40*20=880*/,预编译处理文件包含,#include stdio.h“头文件”(标准前导文件)C语言是一种“装
5、配式”语言,许多常规的工作如输入、输出、数学函数等,往往事先由人做成各种“程序模块”,存放在各种所谓“头文件”(.h)中。文件包含的作用,就是根据需要把相应的某个“头文件”的内容在预编译时先整体嵌入所编的程序中。用户也可以将自己设计的程序模块等做成“头文件”,供其他程序“包含”。,文件包含示意图,#include#include 源程序area.c(用户编写),头文件stdio.h(系统提供),头文件math.h(系统提供),area.exe(可执行程序),stdio.hmath.h,编译/连接,area.c文件本身只有11行,stdio.h有187行,math.h有107行,实际上stdio
6、.h本身还包括 一个25行的头文件stdarg.h。,stdarg.h,stdio.hstdarg.hmath.h,使用“文件包含”功能的优点,提高程序设计效率和程序可靠性减少程序员重复劳动量 常用有:stdio.h 标准输入/输出函数 math.h 数学函数 stdlib.h 常用函数 一个优秀的程序员不应是事无巨细都要从头做起的“工匠”,而应是一个“策划师”+“组装师”。所以,逐步熟悉并掌握常用函数等现有功能模块,是学习C程序设计的一个重要内容。,链接,主函数 main(),C语言是一种函数式语言,它的一个函数实际上就是一个功能模块C程序的基本组成是函数。一个C程序是由一个固定名称为mai
7、n的主函数和若干个其他函数(可没有)组成。一个C程序必须有一个、也只能有一个主函数。主函数在程序中的位置可以任意,但程序执行时总是从主函数开始,在主函数内结束。主函数可以调用其他各种函数(包括用户自己编写的),但其他函数不能调用主函数。,主函数的一般形式:,int main()说明部分程序段(定义数据类型)执行部分程序段(给出操作指令)return 0;,函数体,说明部分(简单程序可能没有此部分):float r,s;/*定义变量r、s类型为单精度实型*/int a,b;/*定义变量a、b类型为整型*/执行部份:输入、赋值、计算、控制、输出等 r=1.0;/*变量r赋初值*/s=PI*pow(
8、r,2);/*计算圆面积s*/printf(“半径R=%f 时,面积S=%fn”,r,s);/*输出结果*/,其他函数,标准函数只能调用(先文件包含)。方法是:函数名(参数)例:s=PI*pow(r,2);pow(x,y)求xy(标准数学函数)printf(“半径R=%f 时,面积S=%fn”,r,s);printf();(标准输出函数)自编(定义)函数:(后面几章将详细介绍)先定义,后调用【示例】求三个数的平均值,自定义函数示例,float average(float x,float y,float z)float aver;aver=(x+y+z)/3;Return(aver);int m
9、ain()/*主函数*/float a,b,c,ave;a=3.5;b=4.6;c=7.9;ave=average(a,b,c);/*调用自定义函数*/printf(“average=%f”,ave);return 0;Lets try,自定义函数格式 函数类型 函数名(形式参数类型 形式参数)(函数体),小结1、C语言程序的基本结构,一个C程序是由一个固定名称为main的主函数和若干个其他函数(可缺省)组成。其基本结构一般形式如右图所示。,#include int main(void)/*一个简单的c程序*/int num;/*定义一个名为num的变量*/num=1;/*为num赋一个值*/
10、printf(“I am a simple computer.n”);printf(“My favorite number is%d.”,num);return 0;,以#开始的语句称为预处理器指令,以.h为后缀的文件被称为头文件,可以是 C 程序中现成的标准库文件,也可以是自定义的库文件。,stdio.h文件中包含了有关输入输出语句的函数,main()函数是 C 程序处理的起点。,main()函数返回一个int型整数,void表示main()函数不接受任何参数.,在函数定义的后面有一个左大括号,即,它表示函数的开始,后面是函数的主体,大括号也可以用于将语句块括起来,在函数定义的结尾处有一个右
11、大括号,即,在屏幕上产生一行输出:I am a simple computer.My favorite number is 1.,函数主体中的每个语句都以分号结束。,C 程序中的一个语句可以跨越多行,并且用分号通知编译器该语句已结束。,C 程序的基本结构,C程序的基本结构,C程序是由函数组成的函数由说明部分和函数体组成C程序总是从main函数开始执行的C程序书写格式自由每个语句和数据定义后必须有一个分号C语言本身没有输入输出语句可以用/*.*/做注释,小结2、C语言程序若干特点,C语言是一种函数式语言,其程序基本组成是函数每个C程序必须有一个、也只能有一个主函数main不管主函数在程序中的位置
12、如何,程序执行总是从主函数开始所有变量必须先定义(规定数据类型)后使用每个语句必须用分号“;”结束(注意是“每个语句”而不“每行语句”)编译预处理命令不是语句(行末不能用分号结束)C语言本身没有输入/输出语句,其功能须通过调用相关函数来实现使用系统提供的标准库函数或其他文件提供的现成函数时,必须使用“文件包含”(除了printf和scanf语句)。,示例程序的完善,示例程序:#define PI 3.14159#include#include main()float r,s;r=1.0;s=PI*pow(r,2);printf(“R=%f,S=%f n”,r,s);,示例程序(求圆面积)有两个
13、不足:如果要求多个半径r值时的面积s,每次都必须修改源程序并重新编译处理;如果半径r为负值,也会有正常的s值输出。为此,可将程序进行如下修改:,#define PI 3.14159#include#include#include main()float r,s;printf(“Input R=”);scanf(“%f”,作业,已知圆的面积为S,求圆的周长,简单测试,设有以下定义int a=0;double b=1.25;char c=A;#define d 2则下列语句中错误的是()A)a+;B)b+;C)c+;D)d+;,简单测试,有以下程序int main()int a=1,b=2,m=0,n=0,k;k=(n=ba)|(m=a);printf(“%d,%dn”,k,m);return 0;程序运行后的输出结果是?,简单测试,有以下程序int main()int k=4,n=0;for(;n;n+)if(n%3!=0)continue;k-;printf(“%d,%dn”,k,n);return 0;程序运行的输出结果是?,The end!,