C语言教学课件.ppt_第1页
C语言教学课件.ppt_第2页
C语言教学课件.ppt_第3页
C语言教学课件.ppt_第4页
C语言教学课件.ppt_第5页
已阅读5页,还剩286页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,C语言程序设计,2,教学内容,第一章C语言概述第二章算法第三章数据类型、运算符与表达式第四章最简单的C程序设计第五章选择结构程序设计第六章循环控制第七章数组第八章函数第九章预处理命令第十章指针第十一章结构体第十三章文件,3,前言,前言,一、计算机语言,1、机器语言2、汇编语言3、高级语言,4、高级语言向机器语言的过渡,机器指令的集合,符号化的机器语言,通用自然的算法语言,4,前言,二、程序与程序设计,完成某一功能的计算机指令的有序集合,1、程序,2、程序设计,设计、编制、调试程序的过程,5,3、程序设计的基本步骤,(1)分析问题,(2)确定解题思路和算法,(3)编制流程图,(4)编写源程序,(5)静态检查,(6)上机调试,(7)正式运行,前言,6,本章内容1.1C语言发展史1.2C语言特点1.3简单C程序分析,第一章C语言概述,返回,7,第一章C语言概述,第一章C语言概述,1.1C语言发展史,1960ALGOL60(AlgorithmicLanguage),198787ANSIC1990ISOC,1972C(取BCPL第二个字母),1970B(取BCPL第一个字母),1978标准C1983ANSIC,1967BCPL(BasicCombined,ProgrammingLanguage),跳转,8,第一章C语言概述,1.2C语言特点,1、简练、自由、结构化(32个关键字、9种控制语句),2、运算符丰富(附录)34种,3、数据结构丰富,4、可直接对硬件进行操作,5、目标程序质量高,6、可移植性好,9,第一章C语言概述,1.3简单C程序分析,例1.1打印(显示)一串字符。,运行结果:Thisisanexample.,/*example1.1*/main()printf(“Thisisanexample.n”);,10,第一章C语言概述,例1.2已知角度值45,求正弦值的2倍。,/*example1.2*/#include“math.h”main()floatx,y;x=45;y=2*sin(x*3.14/180);printf(“Y=%fn”,y);,运行结果:Y=1.413650,11,第一章C语言概述,例1.3已知三角形三边a,b,c,求面积。,/*example1.3*/#include“math.h”main()floata,b,c,p,s;scanf(“%f,%f,%f”,输入:4,5,6,输出:P=7.500000S=9.921567,12,第一章C语言概述,max(intx,inty)main()/*maxnumber*/intz;inta,b,c;if(xy)z=x;scanf(“%d,%d”,例1.4已知整数a,b,求其中的最大数。,13,第一章C语言概述,C程序结构,1、C程序由函数构成,C程序=,一个主函数(main函数)一个主函数+若干其他函数(子或库),TurboC有300多个,跳转,3、语句书写自由,后带分号“;”,4、可用/*/对C程序作注释,前一页,14,本章内容2.1算法的概念2.4算法的表示2.5结构化程序设计,第二章算法,返回,15,第二章算法,第二章算法,程序=数据结构+算法,程序=数据结构+算法+程序设计方法+语言工具和环境,数据结构:对数据的描述,算法:对操作的描述,#include“math.h”main()floatx,y;x=45;y=2*sin(x*3.14/180);printf(“Y=%fn”,y);,16,例如:1+2+3+100=5050或100+1+99+2+98+49+51+50=100+49*100+50=5050,第二章算法,2.1算法的概念,算法:为解决一个问题而采取的方法和步骤。,17,第二章算法,2.4算法的表示(用流程图表示算法),起止框,处理框,判断框,输入/出框,流程线,连接点,注释框,18,第二章算法,例2.1计算265的平方根,顺序结构,NS图,19,第二章算法,例2.2打印X的绝对值,分支结构,NS图,X=0,yn,打印x打印-x,20,第二章算法,例2.3计算1到100的和,循环结构,ib否则,判断e3的值,其值非0执行语句3;否则,.判断em的值,其值非0执行语句m;否则,执行语句n,85,第五章逻辑运算和判断选取控制,例5.1从键盘输入两个整型数,输出最大数。,main()inta,b;scanf(“%d,%d”,86,第五章逻辑运算和判断选取控制,例5.1从键盘输入两个整型数,输出最大数。,main()inta,b;scanf(“%d,%d”,87,第五章逻辑运算和判断选取控制,例5.2输入两个整型数,按大小输出。,main()inta,b,temp;scanf(“%d,%d”,88,第五章逻辑运算和判断选取控制,例5.3输入互不相等的三个数,按从小到大顺序输出它们。,分析:设已知的三个数为a,b,c。(1)可直接通过逻辑表达式和条件语句设计程序。(2)可通过条件语句和互换变量值设计程序,即经过处理后使:abc,89,第五章逻辑运算和判断选取控制,方法(1):,main()floata,b,c;scanf(“%f%f%f”,90,第五章逻辑运算和判断选取控制,方法(2):,main()floata,b,c,t;scanf(“%f%f%f”,91,例5.4求一元二次方程ax2+bx+c=0的解,第五章逻辑运算和判断选取控制,92,第五章逻辑运算和判断选取控制,#includemain()floata,b,c,d,x1,x2;scanf(“%f%f%f”,93,第五章逻辑运算和判断选取控制,例5.5某运输公司吨公里基本运费为p,根据距离s的远近计费标准如下:s250km没有折扣250s5002%折扣500s10005%折扣1000sy?x:y;printf(“max=%d”,z);或printf(“max=%d”,xy?x:y);或xy?printf(“%d”,x):printf(“%d”,y);,举例:,(2)ab?a:b+1等价于ab?a:(b+1)而不是(ab?a:b)+1(3)ab?a:cd?c:d等价于ab?a:(cd?c:d)(4)xy?1:5.6表达式的值的类型取高的(5)ch=(ch=A,102,第五章逻辑运算和判断选取控制,5.4switch语句,103,第五章逻辑运算和判断选取控制,三、break语句,使流程跳出switch结构,终止switch语句的执行。,104,第五章逻辑运算和判断选取控制,例5.7用switch语句设计“例5.5运费程序”,跳转,s1d=01s2d=0.22s4d=0.054s8d=0.088s12d=0.112sd=0.15,105,第五章逻辑运算和判断选取控制,main()floatp,w,s,d,f;intc;scanf(“%f”,case4:,case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;case12:d=.15;break;f=p*w*s*(1-d);printf(“f=%15.2f”,f);,106,第五章作业,第111页5.3、5.5、5.7,上机调试作业,第111-112页5.6、5.7,第五章逻辑运算和判断选取控制,107,第五章逻辑运算和判断选取控制,习题5.5已知x,求分段函数值y,main()floatx,y;scanf(“%f”,程序1:,108,第五章逻辑运算和判断选取控制,main()floatx,y;scanf(“%f”,程序2:,109,第五章逻辑运算和判断选取控制,习题5.6,分析:设百分制成绩为x,成绩等级为y,110,第五章逻辑运算和判断选取控制,习题5.10,分析:设坐标为(x,y),高度为h设:a=(x-2)+(y-2)1b=(x+2)+(y-2)1c=(x+2)+(y+2)1d=(x-2)+(y+2)1,2,2,2,2,2,2,2,2,111,本章内容6.1概述6.2goto语句6.3while语句6.4do-while语句6.5for语句6.6循环的嵌套6.7几种循环的比较6.8break语句和continue语句,第六章循环控制,返回,112,第六章循环控制,第六章循环控制,C循环控制,if-goto循环(6.2)while循环(6.3)do-while循环(6.4)for循环(6.5),6.1概述,113,第六章循环控制,6.2goto语句及其构成的循环,一、goto语句,114,第六章循环控制,二、用法,1、与if语句联合使用构成循环,2、用来实现从多重循环体内转出,L1:if(e)循环体gotoL1;(当型循环),L2:循环体if(e)gotoL2;(直到型循环),115,第六章循环控制,例6.1求s=1+2+3+.+n的值。,main()inti=1,sum=0,n;scanf(“%d”,main()inti=1,sum=0,n;scanf(“%d”,116,第六章循环控制,6.3while语句“当型”循环,一、语句格式,while(e)循环体,二、执行过程(先判断后执行),当表达式e值为非0时,执行循环体,然后重复执行while语句;当e的值为0时,结束循环,执行后继语句。,单语句或复合语句,117,第六章循环控制,例6.2求s=1+2+3+.+n的值(用while循环n=100)。,main()inti=1,s=0,n;scanf(“%d”,main()inti=1,s=0,n;scanf(“%d”,118,第六章循环控制,6.4do-while语句“直到型”循环,一、语句格式,do循环体while(e);,二、执行过程(先执行后判断),先执行do后的循环体,然后判断表达式e的值,若为非0,重复执行循环体,直到while中的表达式e为0,结束循环。,单语句或复合语句,119,第六章循环控制,例6.3求s=1+2+.+n的值(用do-while循环n=100)。,main()inti=1,s=0,n;scanf(“%d”,main()inti=1,s=0,n;scanf(“%d”,120,第六章循环控制,6.5for语句及其构成的循环,二、执行过程,1、计算表达式1。2、判断表达式2。若非0,执行循环体,转3;否则,结束循环,转4。3、计算表达式3。转2。4、执行for语句的下一条语句。,121,第六章循环控制,三、说明,例6.4求s=1+2+.+n的值(用for循环n=100)。,main()inti,s=0,n;scanf(“%d”,122,第六章循环控制,2、for语句中的三个表达式均可省略注意:(1)分号不能省略。(2)应保证循环正确执行。,main()inti=1,s=0,n;scanf(“%d”,main()inti=1,s=0,n;scanf(“%d”,123,第六章循环控制,例6.5给一年级的小学生出10道100以内的加法练习题。,分析:1、出题2、回答3、判断对错,#include“stdlib.h”main()inti,x,y,z;randomize();for(i=1;i=10;i+)x=random(99);y=random(99);printf(“%d+%d=”,x,y);scanf(“%d”,思考:1、做对几题2、总成绩,#include“stdlib.h”main()inti,x,y,z;intcount=0,score=0;randomize();for(i=1;i=3)(注:一行打印3个数字),main()longi=1,j=1,k;intn;printf(“%8ld%8ld”,i,j);for(n=3;n=30;n+)k=i+j;printf(“%8ld”,k);if(n%3=0)printf(“n”);i=j;j=k;,125,第六章循环控制,例6.7求分数序列:1/2,2/3,3/5,5/8,8/13,13/21,.的前20项之和。,main()intk;floati=1,j=2,s=0;for(k=1;k=20;k+)s=s+i/j;j=i+j;i=j-i;printf(“sum=%10.6fn”,s);,126,第六章循环控制,1、循环的嵌套概念对各种循环结构是一样的,即某一循环的循环体内包含另一循环结构。,2、各种循环结构可以互相嵌套。,for-while嵌套for(;).while().,6.6循环的嵌套多重循环,127,第六章循环控制,1、各种循环结构可以互相替代,但不提倡使用用goto构成的循环。,2、在while和do-while语句构成的循环体中必须有使循环趋于结束的语句,如i+。,6.7几种循环的比较,3、在while和do-while语句构成的循环中,循环变量的初始化必须在循环之前完成。,4、在while、do-while和for语句构成的循环中,可以用break和continue跳出或结束本次循环,128,第六章循环控制,6.8break语句和continue语句,一、break语句,1、用来跳出switch结构。,2、用来跳出当前循环。,循环,break;,129,第六章循环控制,例6.8利用公式2/6=1-2+2-2+3-2+4-2+.求的近似值,直到最后一项的值小于10-8为止。,#include“math.h”main()longi=1;doublepi=0;while(i*i=1e8)pi=pi+1.0/(i*i);i+;pi=sqrt(6.0*pi);printf(“pi=%10.6fn”,pi);,6.9程序举例,130,第六章循环控制,例6.8利用公式2/6=1-2+2-2+3-2+4-2+.求的近似值,直到最后一项的值小于10-8为止。,#include“math.h”main()longi;doublepi=0;for(i=1;i=1e8)break;pi=pi+1.0/(i*i);pi=sqrt(6.0*pi);printf(“pi=%10.6fn”,pi);,131,第六章循环控制,例6.9打印100以内个位数为6,且能被3整除的数。,main()inti,j;for(i=0;i=9;i+)j=i*10+6;if(j%3!=0)continue;printf(%d,j);,可以省略,132,第六章循环控制,例6.10写出下列程序的运行结果。,main()inti,j,a=0;for(i=0;i2;i+)for(j=0;j4;j+)if(j%2)break;a+;a+;printf(%dn,a);,133,第六章循环控制,例6.11打印99表。,1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81,134,第六章循环控制,例6.11打印99表。,main()inti,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(“%d*%d=%-3d”,j,i,i*j);printf(n);,135,第六章循环控制,例6.12百鸡百钱问题。公鸡一只5元,母鸡一只3元,小鸡三只1元,用100元买一百只鸡,问公鸡、母鸡、小鸡各多少只?,设:公鸡x只、母鸡y只、小鸡z只列等式:x+y+z=10015*x+9*y+z=300,136,第六章循环控制,例6.12百鸡百钱问题。,main()intx,y,z;for(x=1;x=20;x+)for(y=1;y=33;y+)for(z=1;z1e-6);printf(“%fn”,x1);,141,第六章作业,上机调试作业,第129页6.2,6.8,6.14,第129页6.2,6.4,6.6,6.8,第六章循环控制,142,本章内容7.1一维数组7.2二维数组7.3字符数组,第七章数组,返回,143,第七章数组,第七章数组,7.1一维数组,144,第七章数组,例:inta10;floatb5;定义一维整型数组a和实型数组ba数组中的元素是:a0,a1,a2,a3,a4,a5,a6,a7,a8,a9;b数组中的元素是:b0,b1,b2,b3,b4,145,第七章数组,例7.1求s=a1+a2+a10,main()inti;floats=0,a10;for(i=0;i10;i+)scanf(“%f”,146,第七章数组,四、一维数组的初始化,1、在定义数组时,给数组元素赋初值,例:inta6=1,2,3,4,5,6;,3、未赋初值的数组,各元素值不确定。,4、数组的大小由初始化的数据个数决定。例:inta=1,2,3;,5、数组中全部元素初始化为0。例:inta6=0;,147,第七章数组,例7.2求Fibonacci数列的前30项。(一行三个),main()longf30=1,1;inti;for(i=2;i30;i+)fi=fi-1+fi-2;for(i=0;i30;i+)if(i%3=0)printf(“n”);printf(“%8ld”,fi);,148,第七章数组,例7.3已知一组数(n个),找出其中最大者。,main()inti,n;floata20,max;scanf(“%d”,149,第七章数组,例7.3已知一组数(n个),找出其中最大者(及其位置)。,main()inti,n,position;floata20,max;scanf(“%d”,150,第七章数组,例7.4对任意10个数按从大到小排序。(选择法),main()floata10,t;inti,j,p;for(i=0;i10;i+)scanf(“%f”,151,第七章数组,例7.4对任意10个数按从大到小排序。(交换法),main()floata10,t;inti,j;for(i=0;ij,ij,157,第七章数组,main()inty1010,i,j;for(i=0;i10;i+)yi0=1;yii=1;for(i=2;i10;i+)for(j=1;j=i-1;j+)yij=yi-1j+yi-1j-1;for(i=0;i10;i+)for(j=0;j=i;j+)printf(“%5d”,yij);printf(“n”);,158,第七章数组,main()inty1111,i,j;for(i=1;i=10;i+)yi1=1;yii=1;for(i=3;i=10;i+)for(j=2;j=i-1;j+)yij=yi-1j+yi-1j-1;for(i=1;i=10;i+)for(j=1;j0)strcpy(string,str2);puts(string);,166,第七章作业,上机调试作业,7.6,7.10,7.13,第153页7.3,7.4,7.5,7.13,第七章数组,167,本章内容8.1概述8.2函数的定义8.3函数的调用8.4参数及函数值8.5函数的嵌套调用8.7数组作为函数参数8.8局部变量和全局变量8.9变量的存储类别,第八章函数,返回,168,第八章函数,第八章函数,8.1概述,main,d,e,f,g,h,i,j,k,l,m,a,b,c,169,第八章函数,函数,库函数自定义函数,无参函数有参函数,170,第八章函数,voidprint()printf(“*n”);main()inti,j;for(i=1;iy?x:y);main()floata,b,c,m;scanf(“%f,%f,%f”,例8.5求3个数中的最大数,183,第八章函数,8.5函数的嵌套调用,概念:在调用一个函数的过程中,又调用另一个函数,注:C语言不允许嵌套定义函数,main函数a函数b函数,调用a函数,结束,调用b函数,184,第八章函数,8.7数组作为函数参数,一、数组元素作函数实参与变量同(值传递),例:m=max(a5,a6);,185,第八章函数,#include“math.h”floatarea(floata,floatb,floatc)floatp,s;p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c);return(s);,例8.6已知10个三角形的三边长,求它们的面积。,186,第八章函数,main()floata10,b10,c10,s10;inti;for(i=0;i10;i+)scanf(“%f%f%f”,例8.6已知10个三角形的三边长,求它们的面积。,187,第八章函数,inttotal(charword)intcount=0,i=0;while(wordi)if(wordi=)count+;i+;return(count);,例8.7编写一个函数,求一段文字中包含空格的个数。,二、数组名作函数参数,188,第八章函数,main()charstring80;intspace;gets(string);space=total(string);printf(“Spacenumber:%d”,space);,例8.7编写一个函数,求一段文字中包含空格的个数。,189,第八章函数,voidsort(floata,intn)inti,j,k;floatt;for(i=0;iaj)k=j;t=ai;ai=ak;ak=t;,例8.8用选择法将n个数按从小到大排序。,190,第八章函数,main()inti,n;floata100;scanf(“%d”,例8.8用选择法将n个数按从小到大排序。,191,第八章函数,二、数组名作函数参数,1、实参、形参应同为数组名(或数组指针),2、实参、形参应同类型,3、实参、形参数组体积可不相同,4、在有些情况下形参数组可不指定大小,但不允许出现可调数组如:floatf(intn,floata)不允许写成:floatf(intn,floatan)(),5、数组参数的传递按“地址传递”,192,第八章函数,8.8、8.9变量的作用域和存储方式,变量分类,按生存期,按作用域,193,第八章函数,局部变量函数内部定义的变量(包括形参),全局变量函数之外定义的变量,作用域:本函数内,作用域:定义处以下的函数,8.8局部变量和全局变量,194,第八章函数,例8.9局部变量,floatf1(inta)inti,j;,main()intm,n;,charf2(intx,inty)inti,j;intk;i=k*k;,说明:1、m,n只在main中有效。2、不同函数中的同名变量互不干扰。3、形参是局部变量。4、复合语句中定义的变量仅在中。,195,第八章函数,例8.10全局变量,floatf1(inta)inti,j;,main()intm,n;,charf2(intx,inty)inti,j;,说明:1、增加了函数间数据联系渠道。2、尽量少用全局变量。(占用空间、函数通用性低、程序清晰性低)3、局变屏蔽外变。,charc1,c2;,intp=1,q=5;,196,第八章函数,例8.11求10个学生的平均分,最高分和最低分。(用函数实现),floatMax=0,Min=0;floataverage(floatarray,intn)inti;floatsum=array0;Max=Min=array0;for(i=1;iMax)Max=arrayi;elseif(arrayiMin)Min=arrayi;sum=sum+arrayi;return(sum/n);,10可有可无,197,第八章函数,例8.11求10个学生的平均分,最高分和最低分。用函数实现。,main()inti;floataver,score10;for(i=0;ib?a:b);main()inta=8;printf(“%d”,max(a,b);,199,第八章函数,1、用户存储区,程序区,静态存储区,动态存储区,2、静态存储方式程序运行期间分配固定的存储空间,3、动态存储方式程序运行期间动态分配存储空间,8.9变量的存储类别,200,第八章函数,一、局部变量的存储方式,局部变量,201,第八章函数,说明:,1、局部静态变量在编译时赋初值,自动变量赋初值在函数调用时进行。,3、局部静态变量在函数调用结束后保留其值。,2、局部静态变量只在其被定义的函数内有效。,202,第八章函数,intfac(intn)main()staticintf=1;inti;f=f*n;for(i=1;i形参的数据传递;return语句。2、全局变量。3、形参为指针。4、函数参数(形参或实参)为数组名或指针,跳转,228,第十章指针,voidfun(inta,intb,int*c,int*d)*c=a+b;*d=a-b;main()intx,y,z,w;scanf(“%d,%d”,例10.4输入a和b两个整数,求他们的和和差。,229,第十章指针,10.3数组的指针和指向数组的指针变量,数组的指针:数组首地址、数组第一个元素的地址(指针)注意:数组名代表数组首地址(是常量),数组元素的指针:数组元素的地址(首字节地址),230,第十章指针,一、指向数组元素的指针变量,1、定义与一般指针变量一致例:inta10,*p;,2、赋值将数组元素的地址赋给指针变量(1)利用赋值语句p=,231,第十章指针,二、通过指针引用数组元素,1、指向数组的指针变量与数组元素的对应若指针变量p=)若:p=)则:*(p+i)=*(a+i)=ai=pi,232,第十章指针,main()inta10,i;for(i=0;i10;i+)scanf(“%d”,例10.5数组的输入输出(1)下标法,233,第十章指针,main()inta10,i;for(i=0;i10;i+)scanf(“%d”,a+i);/*此处不能用a+*/printf(“n”);for(i=0;i10;i+)printf(“%d”,*(a+i);,(2)按数组名计算地址,234,第十章指针,main()inta10,*p,i;p=a;for(i=0;i10;i+)scanf(“%d”,p+);for(p=a;pa+10;p+)printf(“%d”,*p);,(3)指针变量法,235,第十章指针,main()inti,j,n;floata20,t,*p=a;scanf(“%d”,例10.6用指针方法对已知的n个数(n=20)按从小到大的顺序排序。,236,第十章指针,三、数组名作为函数的参数,实参数组,形参数组,按地址结合,实参数组名,形参数组名,实参数组首地址,形参数组首地址,按值传递,237,第十章指针,例8.7用选择法将n个数按从小到大排序,1、实参与形参都是数组名(第八章),voidsort(floata,intn)inti,j,k;floatt;for(i=0;iaj)k=j;t=ai;ai=ak;ak=t;,238,第十章指针,main()inti;floata10;for(i=0;i10;i+)scanf(“%f”,239,第十章指针,主函数不变,sort函数变为:,voidsort(float*p,intn)inti,j,k;floatt;for(i=0;i*(p+j)k=j;t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;,2、实参为数组名、形参为指针变量,240,第十章指针,main()inti;floata10,*p=a;for(i=0;i10;i+)scanf(“%f”,p+);p=a;sort(p,10);for(i=0;i10;i+)printf(“%f,”,*p+);,sort函数不变、主函数变为:,3、实参为指针变量、形参为数组名,241,第十章指针,1、实参与形参都是数组名(第八章),2、实参为数组名、形参为指针变量,3、实参为指针变量、形参为数组名,4、实参、形参都是指针变量,组合2的sort函数和3的主函数即可,注意:当实参为指针变量时,该指针变量应有确定的值,242,第十章指针,四、指向多维数组的指针和指针变量,1、二维数组的地址,设数组定义为:a34a0a00,a01,a02,a03a1a10,a11,a12,a13a2a20,a21,a22,a23,视a为一维数组名,ai为a数组元素,视ai为一维数组名,aij为ai数组元素,243,第十章指针,244,第十章指针,区分:简单变量名、一维数组名和二维数组名如:inta,b10,c1010;变量名赋值:a=5;a:0级指针一维数组元素赋值:*(b+i)=6;b:一级指针二维数组元素赋值:*(*(c+i)+j)=7;c:二级指针,245,第十章指针,地址:a数组首地址,即a00的地址a+0=a0第0行首地址=数组首地址a+i=ai第i行首地址=ai0的地址ai+j=*(a+i)+jaij的地址,注意:1)不能将*(a+i)+j写成*(a+i+j)或a+i+j2)*(ai+j)=*(*(a+i)+j)=aij3)对二维数组,*(a+i)代表地址。即a+i=ai=*(a+i)=int*p,i,j;p=*a;1)for(i=0;i12;i+)printf(“%d”,*p+);for(i=0;i12;i+)printf(“%d”,*(*a+i);3)for(i=0;i12;i+)printf(“%d”,pi);4)for(p=a0;pa0+12;p+)printf(“%d”,*p);5)for(i=0;i3;i+)for(j=0;j4;j+)printf(“%d”,*(p+i*4+j);,248,第十章指针,(2)指向一维数组的指针变量(或称为二维数组的二级指针变量)使指针变量指向二维数组的每一行,若:p指向a0,则:p+1指向a1;即:p的增值以一维数组长度为单位称p为行指针,249,第十章指针,指向一维数组的指针变量的定义类型符(*指针变量名)M,若p=a,则*(p+i)+j指向aij从而有:*(*(p+i)+j)=aij,例:int(*p)4;,指向一维数组的指针变量与数组元素的对应,250,第十章指针,3、多维数组的指针作函数参数(不作要求),例10.7(习题8.14p186、),分析:1)全局数组a10,b5存放每个学生的平均分数和每门课程的平均分数。2)函数aver1和aver2分别求上述平均分。,251,第十章指针,floata10,b5;voidaver1(p,n,m)float(*p)5;intn,m;floats;inti,j;for(i=0;in;i+)s=0;for(j=0;jm;j+)s=s+*(*(p+i)+j);ai=s/m;,252,第十章指针,voidaver2(p,n,m)float*p;intn,m;floats;inti,j;for(j=0;jm;j+)s=0;for(i=0;in;i+)s=s+*(p+i*m+j);bj=s/n;,253,第十章指针,main()floatscore105=;inti,j;aver1(score,10,5);aver2(*score,10,5);for(i=0;i10;i+)for(j=0;j5;j+)printf(“%8.1f”,scoreij);printf(“%10.2fn”,ai);for(j=0;j5;j+)printf(“%8.1f”,bj);,254,第十章指针,字符串的表示形式,1、用字符数组表示,10.4字符串的指针和指向字符串的指针变量,例:chars=“HappyNewYear!”;因数组名s代表数组首地址,则*(s+i)=si,255,第十章指针,2、用字符指针表示,例:char*s=“HappyNewYear!”;等价于:char*s;s=“HappyNewYear!”;注意:1、s不是字符串变量,是指针变量2、char*s;scanf(“%s”,s);是错误的3、s的使用方法同字符数组名,256,第十章指针,voidstringcopy(charto,charfrom)inti;for(i=0;fromi;i+)toi=fromi;toi=0;main()charstring1=“China.”,string280;stringcopy(string2,string1);puts(string2);,例10.8串拷贝举例,257,第十章指针,voidstringcopy(char*to,char*from)while(*from)*to=*from;to+;from+;*to=0;main()charstring1=“China.”,string280;stringcopy(string2,string1);puts(string2);,例10.8串拷贝举例,258,第十章指针,voidstringcopy(char*to,char*from)while(*from)*to+=*from+;*to=0;main()charstring1=“China.”,string280;stringcopy(string2,string1);puts(string2);,例10.8串拷贝举例,259,第十章指针,voidstringcopy(char*to,char*from)while(*to+=*from+)!=0);或voidstringcopy(char*to,char*from)while(*to+=*from+);main()charstring1=“China.”,string280;stringcopy(string2,string1);puts(string2);,例10.8串拷贝举例,260,第十章指针,第十章作业,第278页10.1、10.3、10.4、10.8,上机调试作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论