C语言基本语法归纳学习教案

上传人:莉**** 文档编号:90592444 上传时间:2022-05-15 格式:PPTX 页数:262 大小:1.04MB
返回 下载 相关 举报
C语言基本语法归纳学习教案_第1页
第1页 / 共262页
C语言基本语法归纳学习教案_第2页
第2页 / 共262页
C语言基本语法归纳学习教案_第3页
第3页 / 共262页
点击查看更多>>
资源描述
会计学1C语言基本语法语言基本语法(yf)归纳归纳第一页,共262页。第1页/共262页第二页,共262页。第2页/共262页第三页,共262页。1、main( ) 表示表示“主函数主函数”,每一个,每一个C程序都必须有且只有程序都必须有且只有(zhyu)一个主函数。一个主函数。 2、main函数体由大括号函数体由大括号 括起来。括起来。3、语句后面有一个分号。、语句后面有一个分号。.4、printf( )是是C语言的输出函数。双引号内的字符语言的输出函数。双引号内的字符 被原样输出。被原样输出。5、“n”是换行符,即在输出是换行符,即在输出This is a C program之后换行。之后换行。第3页/共262页第四页,共262页。第4页/共262页第五页,共262页。例例1.3输入两个输入两个(lin )整数,输出其中的最大值。整数,输出其中的最大值。int max(int x,int y) /*求两数最大值函数(hnsh)max*/ int z;if(xy) z=x;else z=y;return (z); /*将z的值返回给主函数(hnsh)main*/ /*返回值通过函数(hnsh)名max带回main函数(hnsh)调用处*/ main ( ) /*主函数(hnsh)*/ int a,b,c;scanf(“%d,%d”,&a,&b); /*输入a,b的值*/c=max(a,b); /*调用max函数(hnsh),将实参a,b的值给形参x,y*/printf(“max=%d”,c); /*输出最大值*/第5页/共262页第六页,共262页。第6页/共262页第七页,共262页。第7页/共262页第八页,共262页。第8页/共262页第九页,共262页。函数体一般包括:函数体一般包括: 变量定义。如变量定义。如例例1.3中中main函数中的函数中的“int a,b,c;” 执行部分。由若干个语句组成。执行部分。由若干个语句组成。 当然,在某些情况下也可以没有变量定义部分当然,在某些情况下也可以没有变量定义部分(例如例如例例1.1)。甚至可以既无变量定义也无执行部分,如:。甚至可以既无变量定义也无执行部分,如:dump() 它是一个它是一个(y )空函数,什么也不干,但这是合法的。空函数,什么也不干,但这是合法的。第9页/共262页第十页,共262页。、一个、一个C程序总是从程序总是从main函数开始执行的,而不论函数开始执行的,而不论main函数在整个程序中的位置如何(函数在整个程序中的位置如何(main函数可以放在函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前程序最前头,也可以放在程序最后,或在一些函数之前(zhqin)在另一些函数之后)。在另一些函数之后)。 、 C程序书写格式自由,一行内可以写几个语句,一程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。个语句可以分写在多行上。C程序没有行号,也不象程序没有行号,也不象fortran或或cobol那样严格规定书写格式那样严格规定书写格式(语句必须从某一语句必须从某一列开始书写列开始书写)。 C C程序程序(chngx)(chngx)的结构的结构第10页/共262页第十一页,共262页。、每个语句和数据定义的最后必须有一个分号。分号是、每个语句和数据定义的最后必须有一个分号。分号是C语语句的必要组成部分句的必要组成部分(b fen)。例如:。例如:c=a+b; 分号不可少。分号不可少。即使是程序中最后一个语句也应包含分号即使是程序中最后一个语句也应包含分号(这是和这是和pascal语言语言不同的不同的)。、C语言本身没有输入输出语句。输入和输出的操作是由库语言本身没有输入输出语句。输入和输出的操作是由库函数函数scanf和和printf等函数来完成的。等函数来完成的。C对输入输出实行对输入输出实行“函函数化数化”。、可以用、可以用/*/对对C程序中的任何部分程序中的任何部分(b fen)作注释。作注释。可以增加程序的可读性。可以增加程序的可读性。 第11页/共262页第十二页,共262页。v v C源代源代码码编编译译程程序序目标目标代码代码链链接接程程序序可可执执行行代代码码库库C源代源代码码编编译译程程序序目标目标代码代码第12页/共262页第十三页,共262页。第13页/共262页第十四页,共262页。第14页/共262页第十五页,共262页。十进制decimal二进制binary八进制octal十六进制hexdecimal000011112102231133410044510155611066711177第15页/共262页第十六页,共262页。十进制decimal二进制binary八进制octal十六进制hexdecimal810008910019101010111011121100131101141110151111161000010ABCDEF201011121314151617第16页/共262页第十七页,共262页。第17页/共262页第十八页,共262页。第18页/共262页第十九页,共262页。nn二进制转换(zhunhun)为八、十六进制n合三为一、合四为一第19页/共262页第二十页,共262页。第20页/共262页第二十一页,共262页。第21页/共262页第二十二页,共262页。第22页/共262页第二十三页,共262页。第23页/共262页第二十四页,共262页。第24页/共262页第二十五页,共262页。第25页/共262页第二十六页,共262页。第26页/共262页第二十七页,共262页。 3a变量名(一个符号地址,在对程序编译时系统(xtng)分配给它一个内存地址)变量值(在程序中对变量取值,实际上是通过变量名找到相应内存地址,从其存储单元中读取数据)存储单元第27页/共262页第二十八页,共262页。第28页/共262页第二十九页,共262页。第29页/共262页第三十页,共262页。第30页/共262页第三十一页,共262页。第31页/共262页第三十二页,共262页。第32页/共262页第三十三页,共262页。第33页/共262页第三十四页,共262页。第34页/共262页第三十五页,共262页。第35页/共262页第三十六页,共262页。第36页/共262页第三十七页,共262页。第37页/共262页第三十八页,共262页。第38页/共262页第三十九页,共262页。第39页/共262页第四十页,共262页。第40页/共262页第四十一页,共262页。第41页/共262页第四十二页,共262页。第42页/共262页第四十三页,共262页。第43页/共262页第四十四页,共262页。第44页/共262页第四十五页,共262页。第45页/共262页第四十六页,共262页。9798c1c20110000101100010c1c2第46页/共262页第四十七页,共262页。第47页/共262页第四十八页,共262页。 将97和98两个整数直接(zhji)存放到c1和c2的内存单元中。 先将字符a 和b化成ASCII码97和98,然后放到内存单元中。两者的作用和结果是完全相同的程序输出如下:a b97 98第48页/共262页第四十九页,共262页。a的ASCII码为97,A为65;b为98,B为66。从ASCII代码表中可以发现:每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接(zhji)进行算术运算。第49页/共262页第五十页,共262页。第50页/共262页第五十一页,共262页。第51页/共262页第五十二页,共262页。 究竟(jijng)为什么c=a就是正确的,而c“a”就错了呢?第52页/共262页第五十三页,共262页。第53页/共262页第五十四页,共262页。第54页/共262页第五十五页,共262页。第55页/共262页第五十六页,共262页。第56页/共262页第五十七页,共262页。 运算符详见本书附录(fl)III第57页/共262页第五十八页,共262页。第58页/共262页第五十九页,共262页。第59页/共262页第六十页,共262页。第60页/共262页第六十一页,共262页。第61页/共262页第六十二页,共262页。第62页/共262页第六十三页,共262页。第63页/共262页第六十四页,共262页。第64页/共262页第六十五页,共262页。第65页/共262页第六十六页,共262页。第66页/共262页第六十七页,共262页。第67页/共262页第六十八页,共262页。第68页/共262页第六十九页,共262页。第69页/共262页第七十页,共262页。1 2B 66第70页/共262页第七十一页,共262页。运行运行(ynxng)结果:结果:a=16,b=18,c=20第71页/共262页第七十二页,共262页。2.5写出下面程序写出下面程序(chngx)的运行的运行结果结果:main() int a=4; int b,c; c=a+(b=2); a+=a-=a*a; printf(%d,%d,%dn,a,b,c); 2.6 写出下面程序写出下面程序(chngx)的运的运行结果行结果: main() int a,b,c=9; a=3,b=4; c%= a+b; printf(“%dn”,c) 运行运行(ynxng)结果:结果:-24,2,6运行运行(ynxng)结果:结果:2第72页/共262页第七十三页,共262页。2.7 写出下面程序写出下面程序(chngx)的运行结果的运行结果: main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);运行运行(ynxng)结果:结果:9,11,9,10第73页/共262页第七十四页,共262页。2.8 写出下面写出下面(xi mian)程序的运行结果程序的运行结果: main()float x=5.4;int i;i=(int)x;printf(”x=%f,i=%dn,x,i);运行运行(ynxng)结果:结果:x=5.400000,I=5第74页/共262页第七十五页,共262页。第75页/共262页第七十六页,共262页。第76页/共262页第七十七页,共262页。第77页/共262页第七十八页,共262页。C程序(chngx)源程序文件(wnjin)1源程序文件(wnjin)2源程序文件n预处理命令全局变量声明函数1函数n函数首部函数体局部变量声明执行语句.第78页/共262页第七十九页,共262页。第79页/共262页第八十页,共262页。第80页/共262页第八十一页,共262页。一次函数调用分号第81页/共262页第八十二页,共262页。第82页/共262页第八十三页,共262页。第83页/共262页第八十四页,共262页。第84页/共262页第八十五页,共262页。第85页/共262页第八十六页,共262页。第86页/共262页第八十七页,共262页。第87页/共262页第八十八页,共262页。第88页/共262页第八十九页,共262页。第89页/共262页第九十页,共262页。第90页/共262页第九十一页,共262页。第91页/共262页第九十二页,共262页。第92页/共262页第九十三页,共262页。第93页/共262页第九十四页,共262页。在运行时,如果从键盘输入字aa (输入a后,按“回车(hu ch)” 键,字符才送到内存)a (输出变量c的值a)第94页/共262页第九十五页,共262页。第95页/共262页第九十六页,共262页。第96页/共262页第九十七页,共262页。第97页/共262页第九十八页,共262页。第98页/共262页第九十九页,共262页。格式说明:将数据转换(zhunhun)为指定格式输出。普通字符:即需要原样(yun yn)输出的字符(逗号,空格和换行符)输出列表:需要输出的数据,可以是表达式。第99页/共262页第一百页,共262页。第100页/共262页第一百零一页,共262页。第101页/共262页第一百零二页,共262页。第102页/共262页第一百零三页,共262页。123,123,123456, 123456第103页/共262页第一百零四页,共262页。输出(shch): a,97 a,97 第104页/共262页第一百零五页,共262页。第105页/共262页第一百零六页,共262页。m自动(zdng)取n值,即等价于:4.4s第106页/共262页第一百零七页,共262页。第107页/共262页第一百零八页,共262页。第108页/共262页第一百零九页,共262页。第109页/共262页第一百一十页,共262页。按原样输出(shch)的字符由于格式定义(dngy)而输出的字符第110页/共262页第一百一十一页,共262页。第111页/共262页第一百一十二页,共262页。第112页/共262页第一百一十三页,共262页。第113页/共262页第一百一十四页,共262页。354acb第114页/共262页第一百一十五页,共262页。第115页/共262页第一百一十六页,共262页。格式(g shi)字符说明d,i用来输入有符号的十进制整数。 u用来输入无符号的十进制整数。o用来输入无符号的八进制整数。x,Xc用来输入单个字符。s输入字符串,将字符串送到一个字符数组中,输入以非空白符开始,以第一个空白符结束,以0作为其最后一个字符。 f用来输入实数,可以用小数形式或指数形式输入。 e,E,g,G与f作用相同,e与f,g可以互相替换(大小写作用相同)。 用来输入无符号的十六进制整数(大小写作用相同)。第116页/共262页第一百一十七页,共262页。字符(z f)lh域宽*说明(shumng)用于输入长整型数据(可用%ld, % lo,%lx,%lu),以及double型数据(用%lf或%le)。 用于输入短整型数据(可用%hd,%ho,%hx)。 指定输入数据所占宽度(列数),域宽应为正整数表示本输入顶在读入后不赋给相应的变量。 第117页/共262页第一百一十八页,共262页。第118页/共262页第一百一十九页,共262页。计算面积计算面积area输出面积输出面积area输入输入a、b、c计算计算s结束结束开始开始第119页/共262页第一百二十页,共262页。计算面积计算面积area输出面积输出面积area输入输入a、b、c计算计算s第120页/共262页第一百二十一页,共262页。计算面积计算面积area输出面积输出面积area输入输入a、b、c计算计算s结束结束开始开始第121页/共262页第一百二十二页,共262页。第122页/共262页第一百二十三页,共262页。第123页/共262页第一百二十四页,共262页。第124页/共262页第一百二十五页,共262页。第125页/共262页第一百二十六页,共262页。第126页/共262页第一百二十七页,共262页。第127页/共262页第一百二十八页,共262页。第128页/共262页第一百二十九页,共262页。算术(sunsh)运算符关系运算符赋值运算符第129页/共262页第一百三十页,共262页。第130页/共262页第一百三十一页,共262页。第131页/共262页第一百三十二页,共262页。第132页/共262页第一百三十三页,共262页。第133页/共262页第一百三十四页,共262页。!(逻辑非)算术(sunsh)运算符关系运算符&和|赋值运算符第134页/共262页第一百三十五页,共262页。第135页/共262页第一百三十六页,共262页。第136页/共262页第一百三十七页,共262页。第137页/共262页第一百三十八页,共262页。第138页/共262页第一百三十九页,共262页。第139页/共262页第一百四十页,共262页。表达式表达式语句语句(yj)假假(0)真真(非非0)第140页/共262页第一百四十一页,共262页。表达式表达式语句语句(yj)1语句语句(yj)2假假真真第141页/共262页第一百四十二页,共262页。.表达式表达式1表达式表达式2表达式表达式3表达式表达式4语句语句(yj)5语句语句(yj)4语句语句3语句语句2语句语句1假假假假假假假假真真真真真真真真第142页/共262页第一百四十三页,共262页。第143页/共262页第一百四十四页,共262页。if语句所要求(yoqi)的。如果无此分号,则出现语法错误。第144页/共262页第一百四十五页,共262页。第145页/共262页第一百四十六页,共262页。 a b?交换交换a、b的位置的位置假假真真第146页/共262页第一百四十七页,共262页。371371 173137第147页/共262页第一百四十八页,共262页。内嵌内嵌if内嵌内嵌if 第148页/共262页第一百四十九页,共262页。第149页/共262页第一百五十页,共262页。表达式表达式1条件条件(tiojin)表达式表达式取表达式取表达式2的值的值条件条件(tiojin)表达式表达式取表达式取表达式3的值的值假(假(0)真(非真(非0)第150页/共262页第一百五十一页,共262页。第151页/共262页第一百五十二页,共262页。grade输出输出(shch)“6069”输出输出(shch)“60”输出输出“error”输出输出“7084”输出输出“85100”第152页/共262页第一百五十三页,共262页。Default的出现次序的出现次序(cx)会不会影响结果?和书中意见不同。会不会影响结果?和书中意见不同。第153页/共262页第一百五十四页,共262页。第154页/共262页第一百五十五页,共262页。第155页/共262页第一百五十六页,共262页。60 70 80 90 100 6 7 8 9 10ABCDE第156页/共262页第一百五十七页,共262页。60E假假真真70D假假真真80C假假真真B90b)(与这个if配对的else是?) if (a0) printf(A); else if (b-5) printf(B); else printf(C); printf(n); 1.A 2.C 3.B 4.第161页/共262页第一百六十二页,共262页。2. 本程序的作用是判断year是否闰年,如是闰年则输出“leap year”字样,闰年的条件是符合下面二者之一:能被4整除(zhngch),但不能被100整除(zhngch);能被4整除(zhngch),又能被400整除(zhngch)。请对程序填空(填入一个运算符)。 main( ) int year; scanf(%d,&year);if(year%4=0_year%100=0)_year%400=0) printf(leap year); 第162页/共262页第一百六十三页,共262页。条件运算符:表达式条件运算符:表达式1 1?表达式表达式2 2:表达式:表达式3 3例例: max = (ab) ? : max = (ab) ? a : ba : b; c(a+b) c(a+b) (ab)&(ac)ab)&(ac) (ab) |(ab) (ab) |(ab)第163页/共262页第一百六十四页,共262页。 else if else if(表达式(表达式m m)语句语句(yj)m(yj)m else else 语句语句(yj)n (yj)n if if语句语句(yj)(yj)的嵌套的嵌套: : if ( ) if ( ) if ( ) if ( ) 语句语句(yj)1(yj)1 else else 语句语句(yj)2 (yj)2 else else if ( ) if ( ) 语句语句(yj)3 (yj)3 else else 语句语句(yj)4 (yj)4 第164页/共262页第一百六十五页,共262页。第165页/共262页第一百六十六页,共262页。第166页/共262页第一百六十七页,共262页。第167页/共262页第一百六十八页,共262页。第168页/共262页第一百六十九页,共262页。第169页/共262页第一百七十页,共262页。sum=sum+ii=i+1i=100假假真真i=1,sum=01001ii第170页/共262页第一百七十一页,共262页。表达式表达式语句语句(yj)0非非0第171页/共262页第一百七十二页,共262页。1001iisum=sum+ii=i+1i=100假假真真i=1,sum=0第172页/共262页第一百七十三页,共262页。第173页/共262页第一百七十四页,共262页。1001iii=1,sum=0直到直到i=106 第186页/共262页第一百八十七页,共262页。f1f211f1=1f2=123f1=1+1=2f2=2+1=358f1=2+3=5f2=5+3=8第187页/共262页第一百八十八页,共262页。 每次循环每次循环(xnhun)输出两个数,输出两个数,每两次循环每两次循环(xnhun)输出一个换行,输出一个换行,故输出格式为每行故输出格式为每行4个数。个数。第188页/共262页第一百八十九页,共262页。3 3、程序设计的方法(结构化、程序设计的方法(结构化) )和和风格。风格。第189页/共262页第一百九十页,共262页。第190页/共262页第一百九十一页,共262页。第191页/共262页第一百九十二页,共262页。第192页/共262页第一百九十三页,共262页。第193页/共262页第一百九十四页,共262页。第194页/共262页第一百九十五页,共262页。第195页/共262页第一百九十六页,共262页。第196页/共262页第一百九十七页,共262页。第197页/共262页第一百九十八页,共262页。第198页/共262页第一百九十九页,共262页。第199页/共262页第二百页,共262页。第200页/共262页第二百零一页,共262页。第201页/共262页第二百零二页,共262页。第202页/共262页第二百零三页,共262页。第203页/共262页第二百零四页,共262页。第204页/共262页第二百零五页,共262页。第205页/共262页第二百零六页,共262页。第206页/共262页第二百零七页,共262页。第207页/共262页第二百零八页,共262页。第208页/共262页第二百零九页,共262页。第209页/共262页第二百一十页,共262页。第210页/共262页第二百一十一页,共262页。I a m h a p p y ? ? ? ?c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10c11c12c13I a m h a p p y c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 初值个数大初值个数大于数组长度于数组长度(chngd):语法错误:语法错误。第211页/共262页第二百一十二页,共262页。第212页/共262页第二百一十三页,共262页。第213页/共262页第二百一十四页,共262页。系统(xtng)自动定义这一维的长度第214页/共262页第二百一十五页,共262页。第215页/共262页第二百一十六页,共262页。第216页/共262页第二百一十七页,共262页。第217页/共262页第二百一十八页,共262页。I a m h a p p y 0 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10第218页/共262页第二百一十九页,共262页。I a m h a p p y 0 0 0 0c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10c11c12c13第219页/共262页第二百二十页,共262页。ChinaBeijing第220页/共262页第二百二十一页,共262页。第221页/共262页第二百二十二页,共262页。第222页/共262页第二百二十三页,共262页。第223页/共262页第二百二十四页,共262页。第224页/共262页第二百二十五页,共262页。第225页/共262页第二百二十六页,共262页。第226页/共262页第二百二十七页,共262页。C h i n a 0 Str0Str1 Str2J a p a n 0 I n d i a 0 0 1 2 3 4 5 6 7 8 9 10 19 第227页/共262页第二百二十八页,共262页。第228页/共262页第二百二十九页,共262页。第229页/共262页第二百三十页,共262页。3、以下程序是否正确?如果错了,怎么、以下程序是否正确?如果错了,怎么(zn me)改?改?程序程序1:对两个字符串进行比较。:对两个字符串进行比较。#include main( )char str1 =abcdefg;char str2 =abcdefg;if (str1 = str2)printf(yes);else printf(no);程序程序2: 输出一个字符串。输出一个字符串。main () char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(“%c”,ci); printf(n); If(strcmp(str1,str2)= =0)第230页/共262页第二百三十一页,共262页。程序程序(chngx)3:main() int i; char c1 = How are you?; printf(%s, c1 ); 程序程序(chngx)4:main( ) char c6=“China”; printf(%sn,c); puts(c); printf(%s, c1 );第231页/共262页第二百三十二页,共262页。 标准库函数一般均是系统提供,因此程序(chngx)质量应是最高的,即速度快、精度高且占内存少,调用方便。 函数函数 头文件头文件 输入、输出函数 stdio.h 数学函数 math.h 字符和字符串函数 string.h 动态分配函数 malloc.h 图形函数 graphics.hC 中库函数按功能分类:第八章第八章 函数函数(hnsh)(hnsh)一、概述一、概述编程中常遇到完成某个功能的程序段出现多次,为编程中常遇到完成某个功能的程序段出现多次,为使程序更简使程序更简化;常遇到大家均要用到的功能,为了减少不必要化;常遇到大家均要用到的功能,为了减少不必要的重复编程的重复编程使程序质量提高。在计算机高级使程序质量提高。在计算机高级(goj)语言中,引语言中,引入函数(或子程入函数(或子程序、过程),称为标准函数,序、过程),称为标准函数,C中称库函数。中称库函数。第232页/共262页第二百三十三页,共262页。子函数(求某数阶乘)主函数也允许(ynx)子函数嵌套调用:子函数子函数主函数C程序就是由若干函数组成,但必有一个是main( ),顺序不定,但执行一定从main( )开始例:程序中出现次求某数阶乘,这时可将求某数阶乘编制成 函数,而主函数三次调用(dioyng),主函数和子函数关系如下:第233页/共262页第二百三十四页,共262页。、定义:无参函数 类型(lixng)标识符 函数名( ) 说明部分 语句 起名规则符合标识符要求函数返回值的类型函数体C中函数(hnsh): 有参函数(hnsh) 无参函数(hnsh) 空函数(hnsh)二、函数二、函数(hnsh)定义定义与调用与调用第234页/共262页第二百三十五页,共262页。运行结果: 例: main( ) prn1( ); printf(“n”); prn2( ); printf(“n”); prn1( ); prn1( ) printf(“*n”); prn2( ) printf(“*BBI*n”); *BBI* * * 第235页/共262页第二百三十六页,共262页。 空函数(hnsh): 类型说明符 函数(hnsh)名( ) 例: dummy( ) 有参函数 : 类型(lixng)标识符 函数名( 参数表) 说明部分 语句 该空函数什么也不做,常用 于设计程序时在扩充函数。第236页/共262页第二百三十七页,共262页。 二、函数(hnsh)调用1. 调用格式: 函数(hnsh)名(实参列表)例:main( ) ( int x1, x2, minum; scanf(“%d,%d”,&x1, &x2); minum=min(x1,x2); printf(“ min=%dn”, minum); 2. 三种调用方式:函数(hnsh)调用语句 如: printf(“ %s n”, “BBI”);函数(hnsh)调用出现在表达式中: y= max(a,b) + 100;函数(hnsh)调用是另一个函数(hnsh)调用的实参:printf(“ %d n”,max(s,b); 或y=max(max(a,b),c);3. 函数参数及返回值: 返回值: 一般通过 return(表达式)仅返回一个值; 若不返回任何(rnh)值可不要 return ( ); 若表达式的类型与函数返回值规定类型不一致, 应以函数返回值类型为准; 凡函数未说明返回值类型均以 int 处理; 形参:在未被调用时,形参不占内存单元;在调用时形参才被分配单元,调用结束,释放; int min(int a,int b) int c; if (a b) c=a; else c=b; return (c); 第237页/共262页第二百三十八页,共262页。4. 实参: 是表达式,调用时将其值相应传送给形参。值调用:实参传送给形参是值,既实参将值直接赋给形参 (是变量),这称做单方向值调用。这时函数中形 参变量值发生改 变,带不回主调函数。地址调用:实参传给形参是地址,表示被调函数和主调函数操作的是同一批内存单元(dnyun)内容,形参的值发生改变,带回主调函数。 例:main( ) int i=10; printf(“ i=%d n”, change(i) ); printf(“ i=%d n”, i);int change(int ii) ii=ii+100; return(ii); 运行结果:i=110 i=10 调用前:ii不分配单元调用时: ii返回时: ii 返回后:ii释放(shfng),不可访11010第238页/共262页第二百三十九页,共262页。数组作函数参数数组作函数参数例:将键入例:将键入(jin r)的的10个实数按升序排序后输出,要求排序用函数调个实数按升序排序后输出,要求排序用函数调 用实现用实现float sort (float array , int n) int i, y ; float temp; for (i=0; i n -1; i+) for (j=i+1; j arrayj) temp = arrayi; arrayi = arrayj; arrayj = temp; a 是指向(zh xin)10个元素在内存存放的首地址,调用 sort 函数时,将array a,则主调和被调操作的是同一批内存单元的内容。这样速度快,占内存少。被调函数对参数改变在主调中可见。这称地址调用(双向)。 a0:a1a2a9 a array第239页/共262页第二百四十页,共262页。main( ) float a10; int i; for (i=0; i10; i+) scanf(“%f”, &ai); for (i=0; i10; i+) printf(“%f ”, ai); sort (a, 10); for (i=0; iy) ? x : y);第241页/共262页第二百四十二页,共262页。float max (float x, float y) return ( xy ? x : y );main( ) float a, b, c; /* 主调主调(zh dio)不要对被调说明不要对被调说明 */ scanf(“ %f, %f ”, &a, &b); c=max (a,b); printf(“max=%f n”, c);第242页/共262页第二百四十三页,共262页。一、概念 指针是 c 的特色之一,也是难点。 使用指针能有效地表示复杂的数据结构;动态分配内存;方便地使用数组,字符串;实现双向地址调用;使 c能直接处理单元地址,具有低级语言的特点。这对设计系统软件很重要。 对变量访问(fngwn)方式:单元地址: 单元地址: 1000 10 a pa 1000 1 a 1002 20 b pb 1002 2 b 第九章第九章 指指 针针xp第243页/共262页第二百四十四页,共262页。 main() main() int a, b; int a=; b=2; a=10; int *pa, *pb; b=20; pa=&a; pb=&b; printf (“%d,%dn”,a, b); *pa=100; *pb=200; printf (“%d,%dn”, *pa,*pb ); 通过变量名访问(fngwn):直接访问(fngwn)给变量赋值;将变量值输出通过指针变量来访问:间接(jin ji)访问即由指针变量存放的地址来得到变量的值。 第244页/共262页第二百四十五页,共262页。二、指针变量二、指针变量(binling) 指针指针就是变量就是变量(binling)在内存中的地址。在内存中的地址。 指针变量指针变量(binling)存放指针的变量存放指针的变量(binling),即用来存放,即用来存放 变量变量(binling)地址的变量地址的变量(binling)。指针类型由其所指向的数据类型决定指针类型由其所指向的数据类型决定指针变量指针变量(binling)定义:定义: 类型标识符类型标识符 *变量变量(binling)名名 int *pa, *pb; /* 定义定义pa, pb分别指向整型类型分别指向整型类型 */ float *pf1, *pf2; /* 定义定义pf1, pf2分别指向实型变量分别指向实型变量(binling) */ char *pc1, *pc2; /* 定义定义pc1,pc2分别指向字符型变量分别指向字符型变量(binling) */ pa 和和 pb 只可指向整型变量只可指向整型变量(binling), 不可指向其他类型变量不可指向其他类型变量(binling);pf1, pf2 只可指向实型;只可指向实型;pc1, pc2 只可指向字符型;只可指向字符型; 第245页/共262页第二百四十六页,共262页。 1、运算符 *:间接引用运算符 *p表示指针变量p所指内容 *p可用于左值 *p=2;& 取地址符 int x,*p; p=&x ; 则 *p=x; *&x=x; *p*&xx注意(zh y):不允许将任何非地址类型的数据赋给指针变量例:int a,*p; a=4; p=&a; scanf(“%d”,p); scanf(“%d”,&a); printf(“%d”,*p); printf(“%d”,a); 第246页/共262页第二百四十七页,共262页。2、指针变量的加法(jif)和减法运算包括+ +和- -指针运算是地址的运算:取决于指针指向的数据类型(T)。 px+n, px-n 将指针从当前位置 向前或向后移动n个数据单位。pxn的结果为: pxnsizeof(T)px-py:两指针位置之间的数据个数,不是(b shi)地址差。px-py的结果为:( px-py) / sizeof(T) y= px+ y= ( px+ ),注意优先级和结合性y= + px y= ( + px) 问题:y= px+和y= (px)+的意义?int *p;p=p+1;第247页/共262页第二百四十八页,共262页。 指针变量引用 main( ) int a,b; pa a pa int *pa,*pb; &a 10 1000 10 a a=10; b=20; pb b pb pa=&a; pb=&b; &b 20 1002 20 b printf(“%d,%dn”,a,b); printf(“%d,%dn”,*pa,*pb); &、*、+、均是单目运算:结合性左 右 *&a 等价 a或*pa &*pa 等价 pa 或&a (*pa)+ 等价 a+ *(+pa) 等价 pa pa+1, *papa+pa是指向整型指针变量,增1表示(biosh)增加 2bytes.pf1+pf是指向实型指针变量,增1表示(biosh)增加 4bytes.pc1+pc是指向字符型指针变量,增1表示(biosh)增加 1byte. 第248页/共262页第二百四十九页,共262页。例1:输入a,b两个(lin )整数,按从大到小顺序输出 main ( ) int a,b,*pa,*pb,*p; pa a scanf(“%d,%d”,&a,&b); pa=&a; pb=&b; if (ab) p=pa; pa=pb; pb=p; pb b printf(“a=%d,b=%dn”,a,b); printf(“max=%d,min=%dn”,*pa,*pb); pa a在程序中若ab,则将两个(lin )指针变量的值交换,原pa a, 现在pa b(大数) pb b &a330&b&b330&a例1:输入a,b两个(lin )整数,按从大到小顺序输出 main ( ) int a,b,*pa,*pb,*p; pa a scanf(“%d,%d”,&a,&b); pa=&a; pb=&b; if (ab) p=pa; pa=pb; pb=p; pb b printf(“a=%d,b=%dn”,a,b); printf(“max=%d,min=%dn”,*pa,*pb); 在程序中若ab,则将两个(lin )指针变量的值交换,原pa a, 现在pa b(大数) pb b第249页/共262页第二百五十页,共262页。例例2 用函数用函数(hnsh)实现两数交换实现两数交换 void swap(int *pa, int *pb) int temp; temp=*pa; *pa=*pb; *pb=temp; main ( ) int a, b; int *pa1, *pb1; scanf(“%d,%dn”,&a, &b); pa1=&a; pb1=&b; if (a b) swap(pa1, pb1); printf(“%d,%d n”,a, b); &a&a&a&b&b&b&b&a33030330&b3&a参数传递函数(hnsh)中实现a bpa1 apb1 bpa1paa bpb1pbpa1papb1pbab第250页/共262页第二百五十一页,共262页。 例3:在函数中交换指针值。是不行的 void swap(int *pa, int *pb ) main( ) int a, b; int *p; /* 交换指针的值 int *pa,*pb; p=pa; 返回时,pa,pb scanf(“%d,%d”,&a, &b); pa=pb; 均释放(shfng),达不 pa1=&a; pb1=&b; pb=p; 到交换a,b的目 printf(“%d,%dn”,a,b); 的 */ if (ab) swap(pa1,pa2); printf(“%d,%dn”,a, b); void swap(int *pa, int *pb) int *p; /* 指针变量 p 未赋值,是随机值,可能会使系统不 *p=*p1; 正常 */ *p1=*p2; *p=*p2; 第251页/共262页第二百五十二页,共262页。例4 main( ) static int a25=1,2,3,4,5,6,7,8,9,10; int i, (*pa)5=a, *p; p=*pa+; /*先p *pa, 后pa pa+1指下一行*/ for (i=0; i5; i+) printf(“%d”, *p+); /* 输出第0行5个元素值 */ printf(“n”); p=*pa; for (i=0; i5; i+) printf(“%d”, *p+); /* 输出第1行5个元素值 */ 三、数组与指针 1、概念:数组名就是指针,是数组的首地址(dzh),是常量。 一维数组:int a10 二维数组:int b34a0 a1a2 a9:1000100210041010 b0+1 b0+2 b0+3 *(b+0)/b0 *(b+1)/b1 *(b+2)/b2 b第252页/共262页第二百五十三页,共262页。第i个元素: ai 第i行第 j列元素:bij第i个元素地址(dzh): &ai 第i行第 j列元素地址(dzh):&bij main( ) int a10, i; int *p; p=a; for (i=0; i10; i+) printf(“%u”, p+i); /* 每个元素首地址(dzh),与 printf(“%u”, &ai);等价 */ printf(“%d “, *(p+i); /* 每个元素值,与 printf(“%d”, ai);等价 */ 指针(zhzhn):main( ) static int b34=1,2,3,4,5,6,7,8,9,10,11,12; int *p, i; p=b0; /* 或 p=*(b+0) */ for(; pb0+12; p+) printf(“%u”,p); printf(“%d “,*p); 指针(zhzhn):第253页/共262页第二百五十四页,共262页。二维数组也可通过定义指向几个元素的一维数组指针变量(binling)来处理。 main( ) static int b34=1,2,3,4,5,6,7,8,9,10,11,12; int (*p)4; /* p是指向有四个元素一维数组 int i, j; 指针变量(binling),p+1指向下一行首地址 */ p=b; scanf(“%d,%d”,&i,&j); printf(“b%d%d=%dn”,i, j, *(*(p+i)+j); 对数组元素操作方式:用常规下标法,直观,速度慢 main( ) int a10;i; for (i=0;i10;i+); scanf(“%d:, &ai); printf(“n”); for (i=0;i10; i+) printf(“%d ”,ai); 用数组名访问元素(yun s),不直观,速度较快main( ) int a10,i; for(i=0;i10;i+) scanf(“%d”, a+i ); printf(“n”); for(i=0;i10;i+) printf(“%d ”, *(a+i) ) 第254页/共262页第二百五十五页,共262页。用指针用指针(zhzhn)变量指向元素变量指向元素,不直观不直观,但速度快但速度快main( ) int a10, i, *p; p=a; for (i=0; i10; i+) scanf(“%d”, p+i ); printf(“n”); for (i=0; i10; i+) printf(“%d ”, *(p+i) ); main( )int a10,i,*p; p=a; for (i=0;i10;i+, p+ ) scanf(“%d”, p ); printf(“n”); p=a; for (i=0;i10;i+, p+ ) printf(“%d ”, *p );main( ) int a10, i, *p; for (p=a; pa+10; p+) scanf(“%d”,p); printf(“n”); for (p=a; pa+10; p+) printf(“%d ”,*p);第255页/共262页第二百五十六页,共262页。例5:输入10个整数,将其中最小的与第一个数对换(du hun),最大数与最后 一个数对换(du hun).(函数中用指针处理)形参、实参均用数组名main( ) int num10, i; for (i=0; i10; i+) scanf(“%d”, &numi); maxmin(num); for (i=0; i10; i+) printf(“%d ”, numi);void maxmin(int array ) int *pmax, *pmin, *p; pmax=pmin=array; for (p=array+1; p *pmax) pmax=p; else if (*p *pmin) pmin=p; *p=array0; array0=*pmin; *pmin=*p; *p=array9; array9=*pmax; *pmax=*p;第256页/共262页第二百五十七页,共262页。方案方案(fng n)二:形参、实参均用指针二:形参、实参均用指针main( ) int num10, i; int *pnum; pnum=num; for (i=0; i10; +) scanf(“%d”, &numi); maxmin(pnum); for (i=0; i10; i+) printf(“%d ”, numi);void maxmin(int *pa) int *pmax, *pmin, *p; p=pmax=pmin=pa; for (; p *pmax) pmax=p; else if (*p*pmin) pmin=p; *p=*pa; *pa=pmin; *pmin=*p; *p=*(pa+9); *(pa+9)=*pmax; *pmin=*(p+9); 第257页/共262页第二百五十八页,共262页。四、字符数组与指针main( ) static char str1 =“I Love China!”; char *str=“I Love China!” ; /* 可不(k b)加static,此两句等价 */ char *ps; int i; for (i=0; str1i != 0; i+) printf(“%c”, str1i); /*下标处理 */ for (i=0; *(str+i) != 0; i+) printf(“%c”,*(str+i); ps=str; /* 指针处理 */ for (; *ps; ps+) printf(“%c”,*ps); .Io:strstr0/*(str+0)str1/*(str+1)str2/*(str+2)str3/*(str+3): L0第258页/共262页第二百五十九页,共262页。二 维字符(z f)数组(处理多个字符(z f)串)#include main( ) static char week 10=“ ”,“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “saturday”, “Sunday” ; int no; while (1) printf(“Enter week No:”); scanf(“%d”, &no); if (no 7) printf(“Input Error!”); continue; else printf(“%d-%sn”, no, weekno); printf(“Continue(Y/N)?”); if (getchar( )= =N | getchar( )= =n) break;MondayTuesdaywednesday:Week1 Week2 Week3 第259页/共262页第二百六十页,共262页。例6:用函数(hnsh)实现字符串复制形参、实参均用数组名:void copystr(char
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!