C语言程序设计 高级篇(1).ppt
C语言程序设计高级篇,第一讲 跑马灯程序设计函数参数传递、指针引入 双C工作室,主要内容,一、针对上机出现的一些问题进行分析讲解 二、电表计时计费系统引入函数的参数传递(一般的值传递,数组的传递等); 三、修改跑马灯程序引入指针;练习简单的指针操作; 四、选个题 五、习题选做。,一、实验六上机问题总结,1.大括号“”,配对使用 ; 2.for,if等之后除非是要进行“空操作”,否则不能直接跟上“;”号; 3.循环的嵌套,不只有while ,for这种方式; 4.函数的概念还没有; 5.单步调试,注意查看viewdebug windowswatch窗口,在这个窗口输入你想要看的变量名。,自己动脑解决问题、自己调整,一段子程序来实现某个功能; 在C语言中将常用的功能模块编写成函数;,二、电表计时计费系统,1.管理员子系统,图1 电表计时计费系统管理员子系统,实现了特定的功能,实现了特定的功能,(1)管理员身份验证模块,bool administerVerifychar admname,int admpassword ,一维数组作为参数传递,(2)管理员身份操作模块,void administerOperateint restElectricMONTH,int electricBillMONTH ,二维数组作为参数传递,三、有趣的问题,1.有一对兔子,从出生后第3个月起每个月都生一堆兔子。 小兔子长到第3个月后每个月又生一堆兔子。假设所有兔子都不死,请问第十个月兔子的总数是多少第一百个月呢 (1)问题分析,兔子繁殖的规律,(2)绘制流程图 (3)源代码 include void main long int f1,f2; int i; int numberMouths; f11;f21; printf“请输入您想要知道的月份“; scanf“d“, ,实验七,1.填空将电表计时计费系统,管理员操作模块的一些功能补充完整。 2.写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息;(书202页8.3题) 3.用指针方法处理输入3个整数,按由小到大的顺序输出。(书278页10.2题) - 思考书202页8.14题,学生成绩管理系统部分功能实现。,函数的作用,1.常用的功能模块编写成函数,放在公共函数库中供大家选用。(如库函数) 2. 将一些特定功能的模块写成函数,便于程序阅读、程序扩展、及团队之间的有效合作。,一个大的工程,每个特定的部分需要不同的人来完成; 你所写的函数,此时只要提供函数的使用方法(函数名,形式参数,返回参数及具体实现的功能),团队中其他人员即可使用你所编写的程序,而不用关心函数内部具体是如何实现的。,函数定义,1.无参函数 类型标识符 函数名 声明部分 语句部分 ,void delay forint i0;i100000000;i; ,2.有参函数 类型标识符 函数名形式参数列表 声明部分 语句部分 ,int maxint x,int y int z; zxyxy; return z; ,空函数 类型说明符 函数名 思考其作用,函数的使用,一般形式函数名实参列表 调用方式 1.函数语句delay; 2.函数表达式 c2*maxa,b; 3.函数参数mmaxa,maxb,c;,void main int a,b,c,m; int maxint x,int y; scanf“d,d,d”, ,注意 使用某函数之前,要在调用该函数的主函数(或其他函数)进行该函数的声明。,函数参数,1.形式参数定义函数时函数名后面括号中的变量。 2.实际参数调用某个函数时,该函数名后面括号中的变量。,void main int a,b,c,m; int maxint x,int y; scanf“d,d,d”, ,int maxint x,int y int z; zxyxy; return z; ,形式参数(形参),实际参数(实参),函数参数传递,1.值传递单向传递,只由实参传给形参,传递的是值。,int maxint x,int y int z; zxyxy; return z; ,include void main int a5,b3,c9,m; int maxint x,int y; mmaxa,maxb,c; printf“ad, bd, cd , maxd n”,a,b,c,m; ,图 参数传递,图调用函数,在内存中,实参,形参放在不同的单元,2.地址传递 (1)数组作为函数参数,传递的是数组首元素地址。,include void main float averagefloat array; float score10,aver; int i; printf“intput 10 scoresn“; fori0;i10;i scanf“f“, ,float averagefloat array int i; float aver,sumarray0; fori1;i10;i sumsumarrayi; aversum/10; return aver; ,查看,数组传递与值传递的区别两个数组共占一段内存单元,指针的引入,函数的参数如果不是数组,但又想传递过来的不只是变量的值,而是该变量的地址(即直接在函数中就改变了参数的值),要怎么处理include void main void swapint x,int y; int a,b; printf“please 2 number asa,b“; scanf“d,d“, ,void swapint x,int y int z; zx; xy; yz; ,include void main void swapint* x,int* y; int *p_a,*p_b; int a,b; printf“please 2 number asa,b“; scanf“d,d“, ,void swapint* x,int* y int z; z*x; *x*y; *yz; return ; 让我们先看看这两个程序执行出来的差别吧,指针定义,根据变量名与地址的对应关系,找到变量a的地址2000,然后从由2000开始的两个字节中取出数据,进行输出。思考数据在内存中如何存储,如何读取 区分内存单元的地址与内存单元的内容这两个概念。如 int a3; Printf“d”,a;,2000a,指针一个变量的地址成为该变量的“指针”。如地址2000是变量a的指针。,include void main int a,b; int *pointer_1,*pointer_2; a100;b10; pointer_1 ,指针变量定义,1.指针变量有一个变量专门用来存放另一个变量的地址(即指针),则称它为“指针变量”。