《程序设计基础教案262课时——局部变量和全局变量.docx》由会员分享,可在线阅读,更多相关《程序设计基础教案262课时——局部变量和全局变量.docx(9页珍藏版)》请在第一文库网上搜索。
1、教案序号26周次授课形式新授授课章节名称局部变量和全局变量教学目的了解局部变量和全局变量教学重点局部变量和全局变量的理解教学难点局部变量和全局变量的理解使用教具机房课外作业课后体会6.4.1局部变量在一个函数内部定)函数。如:f(inta)itx,y;s(intb)(iti.j;fvoidmain()授课主要内容2的变量称为内部变量,即局部变量。局部变量的作用范围是定义它的Aa、x、y的有效范围b、i、j的有效范围(intm,n、m、n的有效范围(于局部变量的作/需要说明以下几点。主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。形参属于被调函数的局部变量,实参属于主调函数的局部变
2、量。(3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰。(4)在复合语句中也可定义变量,其作用域只在本复合语句范围内。6.4.2全局变量在函数外部定义的变量称作外部变量,即全局变量。全局变量可以被定义它的文件中的所有函数使用。全局变量的作用范围是从定义变量的位置开始到它所在源文件的结束。如:intRQ;f(inta)intx,y;intS1,S2s(intb)intM;定义全局变量P和Q定义全局变量SI和S2P和Qfi勺作用范围SI.S2和P、Q都是全局变量,但它们的作用范围不同,f函数和S函数中可以使用的变量有哪些?它们分别又是什么为了增强程序的可读性,便
3、于区别全局变量和局部变量约定(但非规定),将全局变量名的第一个字母用大写表示。西域朝自曲自一下,在主函数、在C程序设计旧有一-个不成文的intmain()intm,n1.16,5函数应用举例【例6.8编写函数判断整数X是否为素数。设函数名是f,函数的形参只有一个m,它代表被判断的整数,函数需返回一个变量f1ag的值,结果为O代表是素数,结果为1则不是素数。函数流程图如图6.7所示。f1ag=Ok=Jmj=2k可以整除j?xY/Nf1ag二。结束循环返问f1ag的值图6.7函数流程图#inciude#inc1udeintf(intm)intf1ag=0;intk,j;k=(int)sqrt(m)
4、;将sqrt(m)的值强制转换为整型并赋给kfbr(j=2;j1)解法一(用递推法):#inc1udeintmain()(intn;inty;intfac(int);PrintfVinPUtn:);scanf(%d,&n);y=fac(n);printf(%d!=%dn,n,y);return0;1intfac(intn)(inti;inti=1;for(i=1;i=n;i+)仁产i;return(f);解法二(用递归法):#inc1udeintmain()(intn;inty;intfiac(int);printf(inputn:);scanf(%d,&n);y=fac(n);printf(
5、%d!=%dn,n,y);return0;intfac(intn)intf;if(n=On=1)住1;e1sef=fac(n-1)*n;retum(f);1函数的调用过程如图6.8所示。fac函数fac函数fac函数fac函数(n)(n-1)(2)(1)从图6.8可以看班(曲眼数共被榭nfA昵fac(n)fac*)c(2)fac(1,ac(n)是主函数调用的,其余n-1次是在恸屐蝠爨勰角过槿递归调用n-1次。应当强调说明的是在调用fac函数时并不是立即得到fac(n)的值,而是一次又一次地递归调用,直到fac(1)才有一个确定的值1,然后再递推出fac(2)、foc(3)fac(n-1)sfa
6、c(n)的值。请读者将程序和图6.8结合起来认真分析程序的运行过程。【例6.10编写函数实现数组的逆序存放。程序如下。#inc1udeintmain()(inti,aI01=-8,23,72,54,8,29,6,-3,75J9);voidchange(intaU,inti);rintf(befbren);for(i=0;i10;i+)printf(1,%dt,aij);printf(n);changc(a,10);printf(aften);for(i=0;i10;i+)printf(%dt,aij);printf(,n);return0;voidchange(intx,intn)(inti,
7、tcmp;for(i=0;in/2;i+)temp=x1i;xi=xn-1-i;x1n-1-i=tenp:)运行结果为:before:-82372548296-37519after1975-36298547223-8请读者认真研究程序,并回答以下三个问题:在change函数中循环i是0n2,为什么不能是0n?循环中为什么是xi和xn-1-i交换而不是和xn-i交换?如果主程序中数组元素个数是奇数,要不要修改Change函数?【例6.11编写函数实现对数组元素的修改、删除和插入的操作。设有数组d数据,其关系如下表:i=12345678910di=85537692348364607580在进行插入
8、和删除操作时,d数组中的数据要相应的前移或后移。#inc1udeintTota1=IO;定义全局变量TotaI,存放总数据个数intmain()(intd20=-1,85,53,76,92,34,83,64,60,75,80);从第1位元素开始,数据不用intx,i,xh,cj;voidinse(intd,int,int);voidde1e(intd,int);whi1e(1)让程序一直等待用户输入(PrindCIModifyDatanu);printf(2InsertDatan);printf(3De1eteDatan);printR,Other-ENDn,);printf(P1easech
9、oose:,);scanf(,%dx);if(x=1)修改数据printf(InputNo.andData:);scanf(0%d,%d,&xh,&cj);dxh=cj;)e1seif(x=2)插入数据printf(InsertNo.andData:);scanf(0%d,%d,&xh,&cj);inse(d,xh,cj);)e1seif(x=3)删除数据printf(De1eteNo.:);scanf(,%dxh);de1e(d,xh);)e1se运行结束break;输出编辑后的结果printf(nNewdata:n);for(i=1;i=xh;i-)di+1=di;)dxh=cj;将cj插
10、入到第xh位Tota1=Tota1+1;数据总数加1)voidde1e(intd1,intXh)删除函数(inti;将数据从xh+1位起,向前移动for(i=xh;i1bta1;i+)di=di+1;)Tota1=Tota1-I;数据总数减1)程序运行情况如下:1 ModifyData2 InsertData3 De1eteDataOther-ENDP1easechoose.InputNo.andData:3.65/Newdata:1 852 533 654 925 346 837 648 609 7510 801 ModifyData2 InsertData3 De1eteDataOther
11、-ENDP1easechoose:3/De1eteNo.:5ZNewdata:1852533654925836647608759801 ModifyData2 InsertData3 De1eteDataOther-ENDP1easechoose:2ZInsertNo.andData:5.78ZNewdata:18525336549257868376486097510801ModifyData2Insert1Data3DeIeteDataOther-ENDP1easechoose:0Z程序中并没有做一些简单的容错处理,请读者分析程序,画出NS流程图。感兴趣的读者可自行对程序进行修改,加入错误数据的处理工作。