收藏 分销(赏)

AVR单片机C语言编程.ppt

上传人:胜**** 文档编号:767763 上传时间:2024-03-08 格式:PPT 页数:99 大小:1.72MB
下载 相关 举报
AVR单片机C语言编程.ppt_第1页
第1页 / 共99页
AVR单片机C语言编程.ppt_第2页
第2页 / 共99页
点击查看更多>>
资源描述
机电系统控制电路设计张志安张志安机电系统控制电路设计22024/3/6 周三1C语言基础语言基础2数据类型、运算符和表达式数据类型、运算符和表达式3程序控制语句程序控制语句4函数及其调用函数及其调用5编译预处理编译预处理6数组及指针数组及指针AVRAVR单单片机片机C C语语言言编编程基程基础础机电系统控制电路设计32024/3/6 周三1 C语言基础例子例子 1 机电系统控制电路设计42024/3/6 周三例子例子 2 2 1 C语言基础机电系统控制电路设计52024/3/6 周三1 C语言基础例子例子 3 3 机电系统控制电路设计62024/3/6 周三1 C语言基础/*给定半径,求圆的面积*/#define PI 3.14159 /*编译预处理宏替换*/#include /*编译预处理文件包含*/#include /*编译预处理文件包含*/main()/*主函数*/float r,s;/*定义变量r、s类型为单精度实型*/r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf(半径R=%f 时,面积S=%f n,r,s);/*输出结果*/例例4求圆面积程序求圆面积程序 area.carea.c机电系统控制电路设计72024/3/6 周三关于关于关于关于编译预处编译预处理(宏定理(宏定理(宏定理(宏定义义)1 C语言基础#define PI 3.14159-不带参数#define S(a,b)a*b-带参数#define 宏定义命令 PI 符号常量(宏名,最好用大写,以区别一般变量)3.14159 宏体(可以是一个表达式,如3+4)作用:用简单符号代表宏体部份内容(编译时会先自动替换)意义:直观/多次使用/便于修改注意:#define 可出现在程序的任一位置 (作用范围:由此行到程序末尾)宏定义不是C语句,不必在行未加分号,否则会连分号一起置换。机电系统控制电路设计82024/3/6 周三1 C语言基础#include stdio.h“头文件”(标准前导文件)C语言是一种“装配式”语言,许多常规的工作如输入、输出、数学函数等,往往事先由人做成各种“程序模块”(库函数),存放在各种所谓“头文件”(.h)中。使用时只需进行以下处理#include“头文件名”或#include 在程序的执行部分调用该库函数:函数名(参数)文件包含的作用,就是根据需要把相应的某个“头文件”的内容在编译时先整体嵌入所编的程序中。用户也可以将自己设计的程序模块等做成“头文件”,供其他程序“包含”。关于关于关于关于编译预处编译预处理(文件包含)理(文件包含)理(文件包含)理(文件包含)机电系统控制电路设计92024/3/6 周三1 C语言基础标识符被#define 命令定义过#ifdef 标识符程序段1#else程序段2#endif关于关于关于关于编译预处编译预处理(条件理(条件理(条件理(条件编译编译)标识符未被#define 命令定义过#ifndef 标识符程序段1#else程序段2#endif#if 表达式-表达式真执行程序段1,假执行程序段2程序段1#else程序段2#endif机电系统控制电路设计102024/3/6 周三1 C语言基础 关于主函数关于主函数关于主函数关于主函数 main()main()C语言是一种函数式语言,它的一个函数实际上就是一个功能模块C程序的基本组成是函数。一个C程序是由一个固定名称为main的主函数和若干个其他函数(可没有)组成。一个C程序必须有一个、也只能有一个主函数。主函数在程序中的位置可以任意,但程序执行时总是从主函数开始,在主函数内结束。主函数可以调用其他各种函数(包括用户自己编写的),但其他函数不能调用主函数。机电系统控制电路设计112024/3/6 周三主函数的一般形式:主函数的一般形式:main()说明部分程序段(定义数据类型)执行部分程序段(给出操作指令)说明部分(简单程序可能没有此部分):floatr,s;/*定义变量r、s类型为单精度实型*/inta,b;/*定义变量a、b类型为整型*/执行部份:输入、赋值、计算、控制、输出等:r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf(半径半径R=%f时,面积时,面积S=%fn,r,s);/*输出结果*/1 C语言基础机电系统控制电路设计122024/3/6 周三其他函数其他函数标准库函数只能调用。使用方法:先“包含”,即将该函数所在头文件包含在程序中。后调用。调用方式:函数名(参数)例:例:#include#include main()s=PI*pow(r,2);printf(“半径R=%f 时,面积S=%fn”,r,s);说明:pow(x,y)求xy (math.h中的标准数学函数)printf();(stdio.h中的标准输出函数)1 C语言基础机电系统控制电路设计132024/3/6 周三其他函数其他函数自编(定义)函数:先定义(规定函数类型、函数名和函数功能)后调用(使用所定义的函数实现其功能)定义函数:函数类型 函数名(形式参数)(函数体)调用函数:函数名(参数)求三个数的平均值求三个数的平均值求三个数的平均值求三个数的平均值floataverage(floatx,floaty,floatz)/*floataverage(floatx,floaty,floatz)/*定义函数定义函数定义函数定义函数average()*/average()*/floataver;floataver;aver=(x+y+z)/3;aver=(x+y+z)/3;return(aver);return(aver);main()/*main()/*主函数主函数主函数主函数*/floata,b,c,ave;floata,b,c,ave;a=3.5;b=4.6;c=7.9;a=3.5;b=4.6;c=7.9;ave=average(a,b,c);/*ave=average(a,b,c);/*调用自定义函数调用自定义函数调用自定义函数调用自定义函数average()*/average()*/printf(printf(average=%faverage=%f,ave);,ave);1 C语言基础机电系统控制电路设计142024/3/6 周三关于关于语句:句:数据数据类型定型定义语句句语句形式 变量类型关键字变量类型关键字 变量名;floatr,s;定义r、s为单精度实型变量intr,s;定义r、s为整型变量【注意】在C语言程序中,所有变量都要先定义后使用,否则就会出现编译错误提示,如:Error:Undefined symbol a in function main Lets try变量类型关键字 字符型(描述文字性的数据)char 数值型:整型(在机内是准确表示的整型(在机内是准确表示的)int 实型(在机内一般是近似表示的实型(在机内一般是近似表示的)float (有效数字6位)double(有效数字16位)变量名 C语言标识符标识符标识符标识符(变量名、符号常量名、函数名等)命名:组成:字母、数字、下划线 开头:字母、下划线 长度:32字符【注意】大小写为不同字符(变量名一般小写,符号常量 名一般大写),还要注意不得与关键字同名。1 C语言基础机电系统控制电路设计152024/3/6 周三关于关于语句:句:赋值语句句作用:使变量获得具体的运算值。语句形式 变量名=表达式(常量、变量、函数、算式及其混合);r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/变量赋初值亦可在数据类型定义时进行:float r=1.0,s;把变量声明语句与赋值结合在一起的语句,术语上称为 “初始化语句”。1 C语言基础机电系统控制电路设计162024/3/6 周三关于关于语句:句:输出出语句句作用:将运算结果送到显示器屏幕显示出来语句形式 printf();printf(半径半径R=%f 时,面积时,面积S=%fn,r,s);printf(“Hello,everyone!”);【注意】C语言本身没有输入、输出语句,其功能要借用有关函数来实现。%f 格式字符串 n 控制字符(转义字符)n表示回车换行 引号中的其他部分照原样输出1 C语言基础机电系统控制电路设计172024/3/6 周三关于格式字符串关于格式字符串表示该处将用printf语句引号外对应表达式的值替换后输出 例:若 r=1,s=3.14 printf(“半径半径R=%f时,面积时,面积S=%fn”,r,s);输出结果:半径R=1 时,面积S=3.140000常用格式字符串:字符型:%c 单字符%s 字符串 数值型:%d 整数(十进制)%f 实数(小数形式,默认为6位小数)例一例一int x=5;f loat y=3;printf(a=%d,b=%f,c=%s,x,y,abcdefg);输出结果:输出结果:a=5,b=3.000000,c=abcdefg 例二例二 int x=5;f loat y=3;printf(a=%d,b=%f,c=%s,x+2,y*3,123defg);输出结果:输出结果:a=7,b=9.000000,c=123defg1 C语言基础机电系统控制电路设计182024/3/6 周三C语言程序的基本言程序的基本结构构 一个C程序是由一个固定名称为main的主函数和若干个其他函数(可缺省)组成。其基本结构一般形式如右图所示。编译预处理部分(可选)main()说明部分 /*变量定义等*/执行部分 /*输入/输出/计算*/其他函数(可选,位置任意)1 C语言基础返回返回返回返回机电系统控制电路设计192024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式机电系统控制电路设计202024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式机电系统控制电路设计212024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式 可知可知对不同数据不同数据类型占用的存型占用的存储空空间:charshort=intlong=float=!=关系表达式:含有关系运算符的表达式 特别注意 aXb 之类算式的正确写法:a=x&x=b(错误写法:a=X5)printf(“m5”);else printf(“m=%d”,m-);printf(“m=%d”,m-);运算结果运算结果:m=6,m=5【例二】main()int m=5;if(+m5)printf(“m5”);else printf(“m=%d”,m-);printf(“m=%d”,m-);运算结果运算结果:m5 机电系统控制电路设计272024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式运算符运算符运算符运算符逻辑运算运算&(与运算符)运算符两边均为真时,结果为真|(或运算符)运算符两边均为假时,结果为假 !(非运算符)将运算符右边真假倒置 逻辑运算符的任一端如果为非0数,则视为“真”,为0则视为假。【例】printf(“%d”,!3+5)结果为5 printf(“%d”,!0+5)结果为6注意:!优先于关系运算符,与+、-同级。【例一】main()int a=1,b=2,m=2,n=2;(m=ab)&+n;printf(%dn,n);运行结果:n=2【例二】main()int a=1,b=2,m=2,n=2;(m=ba)&+n;printf(%dn,n);运行结果:n=3 原因:在&和|的左边如果能判断出结果,则右边不再作运算。结论:在逻辑表达式的求解中,并不是所有的逻辑运算符都会被执行。只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。机电系统控制电路设计282024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式运算符运算符运算符运算符条件运算条件运算?:(三元运算符,即需连接三个运算量)一般形式:e1?e2:e3 (e1为条件表达式,e2,e3为任意类型表达式)功能:如果e10(为真),运算结果为e2的值。如果e1=0(为假),则取e3的值。【例】分别令x=3,x=0,x=-5,求运行结果。main()int x,y;printf(“Input x=”);scanf(“%d”,&x);y=x0?1:x0)y=0(x=0)-1(x0)机电系统控制电路设计292024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式运算符运算符运算符运算符位操作运算符位操作运算符&(与AND)|(或OR)(异或XOR)(非NOT)(右移)机电系统控制电路设计302024/3/6 周三2数据数据类型、运算符和表达式型、运算符和表达式运算符的运算符的运算符的运算符的优优先先先先级级返回返回返回返回机电系统控制电路设计312024/3/6 周三3 程序控制程序控制语句句条件控制条件控制条件控制条件控制语语句句句句if语句句1、简单if语句if(表达式表达式)程序段程序段 下面程序的功能是:如果输入的数据大于等于60,则输出You are passed!:scanf(“%d”,&x);if(x=60)printf(“You are passed!n”);机电系统控制电路设计322024/3/6 周三3 程序控制程序控制语句句条件控制条件控制条件控制条件控制语语句句句句2、if-else语句if(表达式)程序段 else 程序段如果输入的数据大于等于60,则输出 You are passed!否则输出You failed!scanf(“%d”,&x);if(x=60)printf(“You are passed!n”);else printf(“You failed!n”);if语句句机电系统控制电路设计332024/3/6 周三3 程序控制程序控制语句句条件控制条件控制条件控制条件控制语语句句句句#include main()int x,y=100,z=0;x=180;if(xy)/交换x和y z=x;x=y;y=z;rintf(x=%d,y=%dn,x,y);#include main()int x,y=100,z=0;x=180;if(x0&x10&x=20)printf(“10.20n);elseprintf(errorn);if语句句机电系统控制电路设计352024/3/6 周三3 程序控制程序控制语句句条件控制条件控制条件控制条件控制语语句句句句switch语句句switch(变量或表达式P)case 常量表达式C1:程序段S1 break;case 常量表达式C2:程序段S2 break;.case 常量表达式Cn:程序段Sn break;default:程序段Sn+1 break;机电系统控制电路设计362024/3/6 周三#include main()char ch;printf(input the mark(A,B,C,D,E or F);scanf(%c,&ch);switch(ch)case A:printf(100n);break;case B:printf(90n);break;case C:printf(80n);break;case D:printf(70n);break;case E:printf(60n);break;case F:printf(50n);break;default:printf(input error!n);3 程序控制程序控制语句句条件控制条件控制条件控制条件控制语语句句句句switch语句句运行结果:input the mark(A,B,C,D,E or F)D 70机电系统控制电路设计372024/3/6 周三 break子句可以省略,但是否省略break子句,要根据算法的逻辑而定。因为没有了break语句,switch语句会被执行到语句结束。3 程序控制程序控制语句句条件控制条件控制条件控制条件控制语语句句句句switch语句句char ch=N;switch(ch)case Y:printf(Yesn);break;case N:printf(Non);break;case A:printf(Alln);break;char ch=N;switch(ch)case Y:printf(Yesn);break;case N:printf(Non);case A:printf(Alln);break;输出:出:No输出:出:No All机电系统控制电路设计382024/3/6 周三3 程序控制程序控制语句句循循循循环环控制控制控制控制语语句句句句while语句句while语句的形式:while(表达式P)程序段S int a;long sum;/sum should be long type sum=0;a=1;while(a=100)sum+=a;a+;printf(1+2+.+%d=%ldn,100,sum);while语句的例子:句的例子:计算算1+2+3+100的的值通常情况下,程序中会利用通常情况下,程序中会利用一个一个变量量来来控制控制while语句的表句的表达式达式P的的值,这个个变量被称量被称为循循环控制控制变量量。在。在执行行while语句句之前,循之前,循环控制控制变量量必必须初始化初始化,否,否则执行的行的结果将是不可果将是不可预知的。知的。上面的程序重新上面的程序重新编写,其运行写,其运行结果将是不可果将是不可预知的,因知的,因为a未初始化:未初始化:int a;long sum;/sum should be long type sum=0;/a should be initialized here while(a=100)sum+=a;a+;printf(1+2+.+%d=%ldn,100,sum);机电系统控制电路设计392024/3/6 周三3 程序控制程序控制语句句循循循循环环控制控制控制控制语语句句句句while语句句有关有关while语句的几点句的几点说明明 1、要在while语句的某处(表达式P或循环体内)改变循环控制变量的值,否则极易构成死循环。下面的while语句便是死循环:x=2;while(x100)break;sum+=a;a+;机电系统控制电路设计412024/3/6 周三3 程序控制程序控制语句句循循循循环环控制控制控制控制语语句句句句while语句句有关有关while语句的几点句的几点说明明3、如果在执行循环体过程中,遇到了continue语句,则循环体中continue语句后面的其他语句将被跳过,而直接进入下一轮循环。a=1;while(a=10)printf(%d,a);a+;if(a%5=1)continue;printf(*);运行结果:12*3*4*5*67*8*9*10机电系统控制电路设计422024/3/6 周三3 程序控制程序控制语句句循循循循环环控制控制控制控制语语句句句句do-while语句句do-while语句的形式:do 程序段Swhile(while(表达式表达式P);P);do-while语句的例子:句的例子:计算算1+2+3+100的的值inta;longsum;sum=0;a=1;dosum+=a;a+;while(a=100);printf(1+2+.+%d=%ldn,100,sum);do-while语句与while语句大体相同,但要特别注意,while()后面的分号不要漏掉。此外,while语句的循环体可能永远不被执行,但do-while语句的循环体至少被执行一次。机电系统控制电路设计432024/3/6 周三3 程序控制程序控制语句句循循循循环环控制控制控制控制语语句句句句for语句句for语句的形式:必须是分号 必须是分号 for(表达式1;表达式2 ;表达式3)程序段S 机电系统控制电路设计442024/3/6 周三3 程序控制程序控制语句句循循循循环环控制控制控制控制语语句句句句for语句句inta;longsum;sum=0;for(a=1;an2)nmax=n1;elsenmax=n2;if(n3nmax)nmax=n3;printf(“max=%dn”,nmax);输入三个整数,求三个整数中的最大入三个整数,求三个整数中的最大值不使用函数不使用函数(除除main外外)intmax(int,int,int);main()intn1,n2,n3,nmax;scanf(“%d%d%d”,&n1,&n2,&n3);nmax=max(n1,n2,n3);printf(“max=%dn“,nmax);intmax(intx,inty,intz)intm;if(xy)m=x;elsem=y;if(zm)m=z;returnm;输入三个整数,求三个整数中的最大入三个整数,求三个整数中的最大值使用函数使用函数子函数定义机电系统控制电路设计512024/3/6 周三形式参数与形式参数与实际参数参数1、形式参数形式参数(形参):函数定(形参):函数定义时设定的参数。定的参数。前例中,函数前例中,函数头intmax(intx,inty,intz)中中x,y,z就是形参就是形参它它们的的类型都是整型。型都是整型。2、实际参数参数(实参):参):调用函数用函数时所使用的所使用的实际的参数。的参数。前例中,主函数中前例中,主函数中调用用max函数的函数的语句是:句是:nmax=max(n1,n2,n3);其中其中n1,n2,n3就是就是实参,它参,它们的的类型都是型都是整型。整型。关于形参和关于形参和实参的参的说明:明:a、形参只有当、形参只有当调用用时才才临时分配存分配存储单元。元。b、实参一定要有确定的参一定要有确定的值,可以是表达式。,可以是表达式。c、实参和形参的参和形参的类型型应相同或相同或赋值相容。相容。4 函数及其函数及其调用用机电系统控制电路设计522024/3/6 周三4 函数及其函数及其调用用形式参数与形式参数与实际参数参数机电系统控制电路设计532024/3/6 周三4 函数及其函数及其调用用函数的返回函数的返回值C语言可以从函数(被言可以从函数(被调用函数)返回用函数)返回值给调用函数(用函数(这与数与数学函数相当学函数相当类似)。在函数内是通似)。在函数内是通过return语句返回句返回值的。函的。函数可以使用一个或者多个数可以使用一个或者多个return语句返回句返回值也可以不返回也可以不返回值(此(此时函数函数类型是型是void)。)。return语句的格式:句的格式:return表达式表达式;或;或return(表达式)(表达式);说明:明:函数的函数的类型就是返回型就是返回值的的类型,型,return语句中表达式的句中表达式的类型型应该与函数与函数类型一致。如果不一致,以型一致。如果不一致,以函数函数类型型为准(准(赋值转化)。化)。机电系统控制电路设计542024/3/6 周三4 函数及其函数及其调用用 局部局部变量量概念:概念:是指在一定范是指在一定范围内有效的内有效的变量。量。C语言中,在以下各位置定言中,在以下各位置定义的的变量均量均属于局部属于局部变量。量。在函数体内定在函数体内定义的的变量:量:在本函数范在本函数范围内有效,作用域局限于函数体内。内有效,作用域局限于函数体内。在复合在复合语句内定句内定义的的变量:量:在本复合在本复合语句范句范围内有效,作用域局限于复合内有效,作用域局限于复合语句内。句内。有参函数的形式参数也是局部有参函数的形式参数也是局部变量:量:只在其所在的函数范只在其所在的函数范围内有效。内有效。机电系统控制电路设计552024/3/6 周三4 函数及其函数及其调用用全局全局变量量全局全局变量:量:在函数之外定在函数之外定义的的变量。量。(所有函数前,各个函数之(所有函数前,各个函数之间,所有,所有函数后)函数后)全局全局变量作用域:量作用域:从定从定义全局全局变量的量的位置起到本源程序位置起到本源程序结束束为止。止。在引用全局在引用全局变量量时如果使用如果使用“extern”声明全局声明全局变量,可以量,可以扩大大全局全局变量的作用域。例如,量的作用域。例如,扩大到整大到整个源文件(模个源文件(模块),),对于多源文件于多源文件(模(模块)可以)可以扩大到其它源文件(模大到其它源文件(模块)。)。全局全局变量和局部量和局部变量同名的量同名的“屏蔽屏蔽”。机电系统控制电路设计562024/3/6 周三4 函数及其函数及其调用用全局全局变量和局部量和局部变量的量的应用用局部局部变量量输出出结果果。count is 100机电系统控制电路设计572024/3/6 周三4 函数及其函数及其调用用变量(局部/全局)两大属性:数据类型 存储类别1、数据类型(复习)通过变量说明(定义)来规定其数据类型:格式 数据类型关键字 变量名 如 char a;int b,c;float x,y;为什么使用变量前要先对其数据类型进行“说明”好比看电影前先买票订座 预留存储空间(如char型为1个字节,int型为2个字节)确定存储方式(如char型存放ASCII值,int型存放补码值)机电系统控制电路设计582024/3/6 周三变量(局部/全局)两大属性:数据类型 存储类别4 函数及其函数及其调用用2、存储类别 规定了变量在计算机内部的存放位置决定变量的“寿命”(何时“生”,何时“灭”)一个完整的变量说明格式如下:存储类别数据类型变量名 如 static int x,y;C程序的存储类别有:register型(寄存器型)auto型(自动变量型)static型(静态变量型)extern型(外部变量型)机电系统控制电路设计592024/3/6 周三C程序的程序的变量存量存储位置位置4 函数及其函数及其调用用变量的生存期 静态存储区中的变量:与程序“共存亡”动态存储区中的变量:与函数“共存亡”寄存器中的变量:同静态存储区机电系统控制电路设计602024/3/6 周三4 函数及其函数及其调用用C程序的程序的变量存量存储类别 register型(寄存器型)型(寄存器型)变量值存放在运算器的寄存器中存取速度快,一般只允许存23个变量,且限于char型和int型,通常用于循环变量。auto型(自动变量型)型(自动变量型)变量值存放在主存储器的动态存储区(堆栈方式);优点同一内存区可被不同变量反复使用。以上两种变量均属于“动态存储型”,即调用函数时才为这些变量分配单元,函数调用结束其值自动消失。机电系统控制电路设计612024/3/6 周三4 函数及其函数及其调用用C程序的程序的变量存量存储类别 static型(静态变量型)型(静态变量型)变量值存放在主存储器的静态存储区程序执行开始至结束,始终占用该存储空间 extern型(外部变量型)型(外部变量型)同上,其值可供其他源文件使用以上两种均属于“静态存储”性质,即从变量定义处开始,在整个程序执行期间其值都存在(都可用!)机电系统控制电路设计622024/3/6 周三4 函数及其函数及其调用用 auto(默认)所在函数调用结束时,其值自动消失局部变量 register 如不赋初值,取不确定值为初值 static 所有函数调用结束,其值仍保留 如不赋初值,取初值为0(数值型)或空字符0(字符型)extern(默认)允许本源文件中其他函数及其他全局变量 源文件使用 static 只限本源文件中使用 机电系统控制电路设计632024/3/6 周三4 函数及其函数及其调用用求程序运行求程序运行结果果main()int a=2,i;clrscr();/清楚屏幕,内部函数 for(i=0;i3;i+)printf(%4d,f(a);f(int a)int b=0;static int c=3;b+;c+;return a+b+c;变量跟踪变量跟踪 mainmain()()f f函数函数 a i a i b b c c c c f(a)f(a)2 0 01 4 7 2 0 01 4 7 1 01 5 8 1 01 5 8 2 01 6 9 2 01 6 9 【结果果】7 8 9 7 8 9 如果去掉如果去掉static呢?呢?【结果果】7 7 7机电系统控制电路设计642024/3/6 周三4 函数及其函数及其调用用求程序运行求程序运行结果果main()int k=4,m=1,p;clrscr();p=func(k,m);printf(%d,p);p=func(k,m);printf(%d,p);func(int a,int b)static int m=0,i=2;i+=m+1;m=i+a+b;return m;变量跟踪变量跟踪main()func函数 k m a b m i 4 1 4 1 08 23 4 1 4 1 817 312 【结果】8,17 如果去掉如果去掉static呢?呢?【结果】8,8机电系统控制电路设计652024/3/6 周三4 函数及其函数及其调用用求程序运行求程序运行结果果#include main()int a=3,b=2,c=1;/注意应用范围 int b=5,c=12;/注意应用范围 c-=b*2;printf(a=%d,b=%d,c=%dn,a,b,c);a+=c;printf(a=%d,b=%d,c=%dn,a,b,c);【结果】a=3,b=5,c=2 a=5,b=2,c=1 机电系统控制电路设计662024/3/6 周三4 函数及其函数及其调用用int a=3,b=5;max(int a,int b)int c;c=ab?a:b;return c;main()int a=8;printf(%dn,max(a,b);求程序运行求程序运行结果果【结果】8如果主函数中没有int a=8,结果?【结果】5如果让主函数中int a=4或a=-1,结果?【结果】均为 5机电系统控制电路设计672024/3/6 周三4 函数及其函数及其调用用求程序运行求程序运行结果果void num()extern int x,y;int a=15,b=10;x=a-b;y=a+b;int x,y;main()int a=7,b=5;x=a+b;y=a-b;num();printf(%d,%dn,x,y);【结果】5,25如果第二行不加上如果第二行不加上extern呢?呢?【结果】12,2 机电系统控制电路设计682024/3/6 周三4 函数及其函数及其调用用求程序运行求程序运行结果果int a=0;fun(int i)a+=2*i;return a;main()int a=10;clrscr();printf(%d,%dn,fun(a),a);【结果】20,10 返回返回返回返回机电系统控制电路设计692024/3/6 周三5 编译预处理理预处理在编译之前对源程序进行“预处理”预处理命令不是C语句,末尾没有分号预处理命令不在可执行文件中执行预处理命令都以#开始包括宏定义、文件包含、条件编译等举例#define MAX 1000#include 机电系统控制电路设计702024/3/6 周三宏宏(Macro)(Macro)定义定义5 编译预处理理无参数的宏定义带参数的宏定义机电系统控制电路设计712024/3/6 周三5 编译预处理理无参数的宏定义一般形式#define 标识符 字符串说明把源程序中相应标识符予以替换仅是简单的字符串替换,没有任何语法正确性检查有效范围从定义处开始,到文件结束,或者由#undef命令终止作用域行末没有分号,如有分号将会被一起替换#define R 3.0#define PI 3.1415926#define L 2*PI*R#define begin#define end#define forever for(;)int main()begin /*/printf(L=%f,L);#undef PI /*取消对PI的宏定义*/forever;/*for(;);无限循环*/end /*/机电系统控制电路设计722024/3/6 周三5 编译预处理理带参数的宏定义一般形式#define 宏名(参数表)字符串说明宏定义仅是把参数作为字符串做简单替换,而不做任何运算求值和语法检查宏名与参数表的括号之间不应有空格应注意参数替换后可能出现的语法错误和意料之外的运算应在宏定义内容及其中参数两边加上括号#define S1(a,b)a*b#define S2(a,b)(a)*(b)#define max(a,b)(a)(b)?(a):(b)int main()int x=3,y=4,i=5,j=6,s,z;s=S1(x+y,x-y);/*s=x+y*x-y;s=11*/s=S2(x+y,x-y);/*s=(x+y)*(x-y);s=-7*/z=max(i+,j+);/*z=(i+)(j+)?(i+):(j+);*/*z=7,i=6,j=8*/机电系统控制电路设计732024/3/6 周三5 编译预处理理文件包含文件包含一般形式#include filename#include 说明把另一个源文件的全部内容包含进来预编译后,它们已成为一个文件头文件的扩展名一般用.h,但并非规定调用库函数一般使用,也可以使用调用用户编写的头文件应使用机电系统控制电路设计742024/3/6 周三条件编译条件编译5 编译预处理理条件编译对某些部分的源程序指定编译的条件可以减少被编译的语句,减少目标程序的长度,减少运行时间有利于移植程序,增加程序的灵活性命令形式#ifdef.#else.#endif#ifndef.#else.#endif#if.#else.#endif机电系统控制电路设计752024/3/6 周三如果标识符被定义过*如果标识符未被定义过#ifdef 标识符#ifndef 标识符 程序段1 程序段1 /*编译此程序段*/#else#else/*#else部分可省略*/程序段2 程序段2 /*反之,编译此程序段*/#endif#endif *此处指标识符用#define等命令定义过。条件编译条件编译5 编译预处理理#if 表达式 /*如果表达式为真*/程序段1 /*编译程序段1*/#else 程序段2 /否则*编译程序段2*/#endif机电系统控制电路设计762024/3/6 周三5 编译预处理理#define DEBUG 0main()int a=10,b=20,c;clrscr();c=a/b;#ifdef DEBUG printf(a=%d,b=%dn,a,b);#endif printf(c=%dn,c);条件编译条件编译结果:a=10,b=20c=0如果没有#define行呢?只输出c=0 返回返回返回返回2024/3/6 周三776数数组及指及指针 C 语言可以根据用言可以根据用户需要,用基本数据需要,用基本数据类型定型定义特殊性特殊性质的数据的数据类型,称型,称为构造构造构造构造类类型型型型。构造。构造类型型有:数有:数组、结构体、共同体。构体、共同体。数数组:相同数据:相同数据类型型变量的有序集合。有序表量的有序集合。有序表现在数在数组元数在内存中元数在内存中连续存放。存放。数数组用一个名字作用一个名字作为标识。为区分各元素,每个区分各元素,每个元素有一个用整型表示的序号,称之元素有一个用整型表示的序号,称之为下下标。下。下标可可以有多个,下以有多个,下标的个数称的个数称为数数组的的维数。数。机电系统控制电路设计2024/3/6 周三786数数组及指及指针1.一一维数数组的定的定义type array1常量表达式常量表达式,arrayn常量表达式常量表达式;类型型说明符,明符,说明数明数组的的类型。型。数数组名,用名,用标识符命名。符命名。数数组的元素的个数,数的元素的个数,数组的下的下标从从0变化到常量达式的化到常量达式的值减一。减一。例:例:int a5;float b20,c15;a0a1a2a3a4分配内存分配内存机电系统控制电路设计2024/3/6 周三796数数组及指及指针一一维数数组定定义的几点的几点说明:明:v数数组名命名名命名规则和和
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服