收藏 分销(赏)

C语言教学课件:C语言期末考试复习资料.ppt

上传人:可**** 文档编号:10290610 上传时间:2025-05-17 格式:PPT 页数:122 大小:702.50KB
下载 相关 举报
C语言教学课件:C语言期末考试复习资料.ppt_第1页
第1页 / 共122页
C语言教学课件:C语言期末考试复习资料.ppt_第2页
第2页 / 共122页
点击查看更多>>
资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,2009,级,C语言期末复习大纲,2009,年,12,月,为了同学们集中精力复习,特编制了本大纲,大纲包含了需要牢牢掌握的基本概念和重点内容,.,考试的主要题型和分数分布,:,1,单项选择题,(20,小题,每题,2,分,共,40,分,),2,填空题,(,每空,1,分,共,30,分,),3,改错和看程序写结果,(,共,10,分,),4,编写和完成程序,(5,小题,每题,4,分,共,20,分,),第一章,C语言概述,第,1,章,C,语言概述,本章包含,4,项目重点内容,:,1,简单的,C,语言程序,#include,void main(),printf,(This is a C program.n);,2 VC+6.0,环境:,编辑,C,语言源程序 后缀是,.c,或,.,cpp,经过编译产生目标文件,后缀是,.,obj,再经过连接成为可执行文件,后缀 是,.exe,3 C,语言是结构化程序,有三种结构,(,1,)顺序结构;,(,2,)选择结构;,(,3,)循环结构;,4 C,语言是由函数组成的,其中必须有一个并且只有一个主函数,main,,程序的执行从,main,函数开始,到,main,函数结束,.,第二章,数据类型、运算符与表达式,C,的数据类型,C,语言提供了以下一些数据类型。,数据类型,构造类型,指针类型,空类型(,无值类型),void,枚举类型,enum,数组类型,结构类型,struct,联合类型,union,基本类型,整型,int,字符型,char,实型(浮点型),单精度实型,float,双精度实型,double,常量与变量,常量和符号常量,在程序运行过程中,其值不能被改变的量称为常量,常量区分为不同的类型:,整型,100,,,125,,,-100,,,0,实型,3.14,,,0.125,,,-3.1e3,字符型,a,057,,,x3c,字符串,“,a,”,“,a,b,”,,,”,1232,”,定义常数:,#define PI 3.1415926,#define N 20,变量命名的规定:,语言规定标识符,:,1,只能由字母、数字和下划线三种字符组成,;,(,注意不要混淆下划线,_,和杠号,(,减号),-),2,第一个字符必须为字母或下划线,;,3,不能使用关键字,.,例:,sum,,,_123,m123,Student_name1,12a,Jo-hn,¥,123,a#b,int,整型常量的表示方法,整型常量即整常数。在语言中,整常数,可用以下三种形式表示:,(1),十进制整数。,如:,123,-456,(2),八进制整数。以,0,开头的数是八进制数。,如:,0123,表示八进制数,123,,等于十进制数,83,0129,非法(每位,0-7,合法,),(3),十六进制整数。以,0 x,开头的数是,16,进制数。,如:,0 x123,,代表,16,进制数,123,等于十进制数,291,而,0 x12g,非法(每位,0-f,合法,),字符型数据,字符常量,(1),用,单引号,包含的单个字符,(2),用,单引号,包含的由,开始的转义字符,a,A,1,037,x2d,abc,,,“,a,”,,,082,x5g,字符串常量,字符串常量是一对,双引号,括起来的字符序列,.,合法的字符串常量,:,“,How do you do.,”,“,CHINA,”,,,“,a,”,,,“,$123.45,”,可以输出一个字符串,如,printf(,“,How,do you do.,”,),;,运算符简介,的运算符有以下几类:,(1),算术运算符(,+-*/%,),(2),关系运算符(,!,),(3),逻辑运算符(!,|,),(4),位运算符 (,|,),(5),赋值运算符(及其扩展赋值运算符),(6),条件运算符(?:),算术运算符和算术表达式,基本的算术运算符,:,(加法运算符或正值运算符如,:,、),(减法运算符或负值运算符,如,:,、),*,(乘法运算符。如,:,*),(除法运算符,如果是两边是整数则是求商),(求余运算符,两侧必须为整型数据,),自增、自减运算符,作用是使变量的值增或减,如,:,,(在使用之前,使,+1,或,-1),,(在使用之后,使,+1,或,-1),就是使用,i,的原值执行本条语句,而在执行下条语句前将,i+1,或,-1,int,m=5,n=10;,printf(%d,%dn,m+,-n,);,显示,5,9,若再有:,printf(,“,%dn,”,m,);,显示,6,赋值运算符,赋值符号,“,”,就是赋值运算符,它的作用是,将一个数据赋给一个变量,如,a=5;,(单等号),而,a=5,是判断,a,是否等于,5;,(双等号),如,int,a=3;,if(a,=2),为假,,而,if(a,=5),为真。,第三章,最简单的c程序设计-顺序程序设计,C,语句概述,C,语句概述,控制语句 完成一定的控制功能,1,if()else,条件,语句,6 break,间断语句,2,for(),循环,语句,7,switch(),开关语句,3,while(),循环,语句,8,goto,转向语句,4,do while();,循环,语句,9,return,返回语句,5,continue,继续,语句,格式输入与输出,(一),.,格式输出函数,函数作用:向终端(或系统隐含指定的输出设备)输出,若干个任意类型,的数据。,一般格式:,printf,(格式控制,输出表列),%d,:,以带符号的十进制形式输出整数,%o,:,以八进制无符号形式输出整数,%x,:,以十六进制无符号形式输出整数,格式输入与输出,%u,:,以无符号十进制形式输出整数,%c,:,以字符形式输出,只输出一个字符,%s,:,输出字符串,%f,:,以小数形式输出单,双精度数,隐含输出六位小数,%e,:,以指数形式输出实数,%g,:,选用,%f,或,%e,格式中输出宽度较短的一种格式,不输,出无意义的,0,格式输入与输出,用,printf,和,scanf,函数输出和输入数据。,#includevoid main(),int,a,b,c,;,scanf(,“,%d,%d,%d,”,&a,&b,&c,);,printf(,“,%d,%d,%dn,”,a,b,c,);,运行情况:,3,,,4,,,5 (,输入,a,b,c,的值,)3,,,4,,,5,(输出,a,b,c,的值),a,在内存中的地址,&,是地址运算符,在格式输入与输出中,格式控制是用双引号包括的,其中一般带有,%,d,%c,%f,%s,等各种对数据类型的要求,.,第四章,选择结构程序设计,关系运算符和关系表达式,1.,关系运算符及其优先次序,(,小于,),(,大于,),=(,大于或等于,),=(,等于,),!=(,不等于,),优先级相同(高),优先级相同(低),说明:,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符,关系运算符和关系表达式,2.,关系表达式,用关系运算符将两个表达式(可以是算术表达式或,关系表达式,逻辑表达式,赋值表达式,字符表达式),接起来的式子,称关系表达式,例:,ab,a+bb+c,(a=3)(b=5),a,b)(bb,”,的值为,“,真,”,,表达式的值为,1,。,C,语言中没有专用的逻辑值,,1,代表真,,0,代表假,逻辑运算符和逻辑表达式,1.,逻辑运算符及其优先次序,(1)&(,逻辑与,),(2)|(,逻辑或,),(3)!(,逻辑非,),优先次序:,逻辑非,!,算术运算符,关系运算符,逻辑与或,赋值运算符,或运算中有,1,,值为,1,,与运算中有,0,,值为,0,if,语句,2.If,语句的嵌套,在,if,语句中又包含一个或多个,if,语句称为,if,语句的嵌套。,形式:,if(),if(),语句,1,else,语句,2,else,if(),语句,3,else,语句,4,内嵌,if,if,语句,如,int,a=3,b=4,c=5;,if(a,b),a=,b,;b,=,c;c,=a;,那么,a,b,c,是,3,,,5,,,3,第,1,个,因为,a,b?a:b,;,min=(a,b)a:b,;,if,语句,例,:,输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,#include void main()char,ch,;,scanf(“%c,”,&,ch,);,ch,=,(A=,ch&ch,=Z)?(ch+32):ch;,printf(“%cn”,ch,);,/,注意,:,不能用,A=,ch,=Z,它永远为真,如果字符变量,ch,的值为大写字母,则条件表达式的值为(),即相应的小写字母。如果,ch,的值不是大写字母,则条件表达式的值为,即不进行转换。,几个典型的判断,:,判断大写字母:,if(,A,=c&c=,Z,),判断小写字母:,if(,a,=c&c=,z,),判断数字:,if(,0,=c&c=,9,),判断闰年:,if(year%4=0&year%100!=0)|year%400=0),注意:例如在判断数字中:,if(,0,=c&c=,9,),不可以没有,&,,也不能没有,即不能用,if(,0,=c=,9,),也不能用,if(0=c&c=9),但可以用,if(48=c&c=57),(想想为什么?),第五章,循环结构程序设计,用,while,语句实现循环,while,语句用来实现,“,当型,”,循环结构。,一般形式:,while(,表达式,),语句,当表达式为非,0,值时,执行,while,语句中的内嵌语句。其特点是,:,先判断表达式,后执行语句。,求正整数,m,和,n,的最大公约数和最小公倍数:,#include void main(),int,p,r,n,m,;,printf,(,请输入两个正整数,n,m,:);,scanf(%d,%d,&n,&m,);p=n*m;,while(m,!=0),r=,n%m,;n=m;m=r;,printf,(,它们的最大公约数为,:%,dn,n,);,printf(它们的最小公倍数为:%dn,p/n,);,其中用下面的辗转相除法求出最大公约数,n,while(m,!=0),r=,n%m,;n=m;m=r;,把它独立出来就是一个函数,int,hcf(int,m,int,n),int,r;,w,hile(m,!=0)r=,n%m,;n=m;m=r;,return(n);,用,p/n,得到,最小公倍数,用,do-while,语句实现循环,do-while,语句的特点,:,先执行循环体,然后判断循环条件是否成立。,一般形式,:,do,循环体语句,while(,表达式,),;,执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零,(,“,真,”,),时,返回重新执行循环体语句,如此反复,直到表达式的值等于,0,为止,此时循环结束。,例如,:,为了保证输入成绩的正确,可以使用语句,:,printf,(,请输入学生成绩,a(0-100):);,scanf(%d,&a,);,while(a100),printf(n,输入有误,请重输,:);,scanf(%d,&a,);,我们更简洁地用,do-while,语句,do,printf,(,“,请输入成绩,a,(,0-100,),:,”,);,scanf(,“,%d,”,&a,);,while(a,100);,注意,while(a,100);,的含义和,;,号,用,do-while,语句计算,10,!,i=1;s=1;do s=s*,i;i+;while(i,=10);,不是:,i=1;s=0;do s=s*,i;i+;while(i,=10);,也不是:,doi,=1;s=1;s=s*,i;i+;while(i,=10);,doi,=1;s=0;s=s*,i;i+;while(i,=10);,用,switch,语句实现,(,若,a,是整数,),按照考试成绩输出等级百分制分数段,switch(,a,/10),case 10:,case 9:grade=,A;break,;,case 8:grade=,B;break,;,case 7:grade=,C;break,;,case 6:grade=,D;break,;,default,:grade=E;,while,语句和用,do-while,语句的比较,:,while,是先判断条件,再决定是否执行,所以可能一次也不执行,;,do-while,是先执行再判断条件,决定是否还执行,所以至少执行一次,.,用,for,语句实现循环,C,语言中的,for,语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替,while,语句。,一般形式,:,for(,表达式,1,;表达式,2,;表达式,3),语句,注意,:,for,中用两个分号隔开,不能省略,;,for,只对其后第一个语句有效,如果要求对多条语句有效,必须用花括号括之成为复合语,;,for(),后通常没有分号,有分号将不执行任何语句,只执行自己的循环,;,下面是,用,for,语句,显示数组,a,中的最小值的程序,#include,void main(),int,a5=4,2,8,9,5,i,min;,min=a0;,for(i,=1;i,ai,)min=,ai,;,printf(%dn,min,);,break,语句和,continue,语句,break,语句,break,语句可以用来从循环体内跳出循环体,,即提前结束循环,.,一般形式:,break;,注意,:,break,语句只能用于循环语句或,switch,语句中。,continue,语句,作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次循环的判定,.,一般形式:,continue;,例 把,100,200,之间的不能被,3,整除的数输出。,#include void main(),int,n;for(n=100;n=200;n+)if(n%3=0)continue;,printf(%d,,,n);,注意是把能被,3,整除的跳过,.,不能用,n%3!=0,判断,m,是否素数。,#include#include void main(),int,m,,,i,,,k;,scanf(%d,,,k=,sqrt(m,);for(i=2;ik),printf(%d,is a prime number,n,,,m);else,printf(%d,is not a prime number,n,,,m);,也可以是,:,#include#include void main(),int,m,I,k,flag,=1;,scanf(%d,,,k=,sqrt(m,);for(i=2;i,字符串,2,,函数值为,1,。,(3),如果字符串,1str2),只能用,if(strcmp(str1,,,str2)0),6.,strlen,函数,其一般形式为:,strlen,(,字符数组,),strlen,是,测试字符串长度的函数。函数的值为字符串中的实际长度,(,不包括,0,在内,),。,例如:,char,str,10,=China;,printf(%d,,,strlen(str,);,输出结果不是,10,,也不是,6,,而是,5,即有效字符数,.,strlwr,(,字符串,),strlwr,函数,7.,strlwr,函数,其一般形式为:的作用是将字符串中大写字母换成小写字母。,8.,strupr,函数,其一般形式为:,strupr,(,字符串,),strupr,函数的作用是将字符串中小写字母换成大写字母。,使用字符串函数时,必须包括字符串函数库:,#include,我们可以不使用字符串函数编写程序:,例如,:,不使用,strcat,连接两个字符串;,不使用,strcpy,拷贝字符串;,不使用,strcmp,比较字符串;,不使用,strcpy,拷贝字符串,:,1,用数组,:,For(i,=0;i=strlen(s2);i+)S1i=s2i;,2,用指针,:p1=s1;p2=s2;,while(*p1+=*p2+);,寻找字符串尾:,while(s1i)i+;,i,就是字符串尾的下标,再拷贝就是连接。,第七章,函数,简单的,C,语言函数,#include,/*文件包含*/,void,main(),/*主函数*/,/*函数体开始*/,printf(,“,This is a C program.n,”,);,/*函数体语句*/,/*函数体结束*/,说明:,main是主函数名,void,是,函数类型,每个,C,程序是由若干函数组成的,其中必有一个并且只能有一个,主函数,main,(),每个,C,程序从,main,函数开始执行,到,main,函数,结束,即执行的是主函数的函数体,与主函数,main,在程序中的位置无关,;,是函数开始和结束的标志,不可省略,;,每个,C,语句以分号结束,;,在主函数中直接或间接调用其他函数;,使用标准输入出库,函数时,应写:,#include,使用数学库,函数和字符串函数时,应写:,#include,#include,一个函数由两部分组成,:,函数的首部:,例,1.3,中的,max,函数首部,int,max(int,x,int,y),函数体:,花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。,函数定义的一般形式,类型标识符,函数名,(形式参数表列),声明部分,语句部分,其中类型标识符是函数返回值的数据类型,如,:,int,char,float,double,等,也可以是无返回值,写为,void.,也可以没有形式参数表列,称为无参函数,.,例如:,int,max,(,int,,,int,),int,;,/*,函数体中声明部分*,?,;/*,函数体中语句部分*,return,();,/*,返回值*,/,函数参数和函数的值,形式参数和实际参数,形式参数:,函数名后面括弧中的变量名称为,“,形式参数,”,(简称,“,形参,”,),;,实际参数:,主调函数中调用一个函数时,函数名后面括弧中的参数,(,可以是一个表达式,),称为,“,实际参数,”,(简称,“,实参,”,),;,函数返回值:,return,后面的括弧中的值作为函数带回的值(称,函数返回值,)。,说明:,1.,函数的返回值是通过函数中的,return,语句获得的。,一个函数中可以有一个以上的,return,语句,执行到哪一个,return,语句,哪一个语句起作用。,函数的调用,对被调用函数的声明和函数原型,在一个函数中调用另一函数(即被调用函数)需要具备哪些条件呢?,1.,首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。,3.,如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面,应该在主调函数中对被调用的函数作声明,即写上函数的原型。,用函数首部加上,;,号表示函数声明,.,2.,如果使用库函数,还应该在本文件开头用,#include,命令将调用有关库函数时所需用到的信息,“,包含,”,到本文件中来。如,#include,#include,#include,函数调用的实例(求两整数的,最大公约数,):,#include,void main(),int,hcf(int,u,int,v,);,/,函数声明,int,u,v,h,;,scanf(%d,%d,&u,&v,);,h=,hcf(u,v,);,printf(%d,%d的最大公约数是:%dn,u,v,h,);,/,函数定义,int,hcf(int,u,int,v),/,函数首部,int,r;,while(v!=0),r=,u%v;u,=,v;v,=r;,return(u,);,局部变量和全局变量,局部变量,在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为,“,局部变量,”,。,全局变量,在函内定义的变量是,局部变量,而在函数外定义的变量称为外部变量,也称全局变量,.,静态局部变量是函数中保持最近值不释放的变量,在函数中用下面方式定义:,static,int,c=7;,考察静态局部变量的值,#include,void main,(),int,(,int,a,),;,,;,(;,),(,,();,int,(,int,),int,;,;,3,;,2,;,();,3,次调用函数,f,后,,c,的值是,9,第八章,指针,地址和指针的概念,内存区的每一个字节有一个编号,这就是,“,地址,”,。,如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。,一个变量的地址称为该变量的,“,指针,”,。,例如,地址,2000,是变量的指针。如果有一个变量专门用来存放另一变量的地址(即指针),则它称为,“,指针变量,”,。,指针和指针变量的定义:,指针变量的引用,注意,:,指针变量中只能存放地址(指针),,不要将一个整数(或任何其他非地址类型的数据),赋给一个指针变量。,例 通过指针变量访问整型变量,#include,void,main(),int,;,int,*p,;,;,p,;,/*,把变量的地址赋给,p*/,printf(,“,%d,%dn,”,a,*p);,对,“,”,和,“,*,”,运算符说明:,如果已执行了语句,p,那么:,那么,a,和*,p,是相同的值,所以,如果,a=3,;,Printf(,“,%d,%d,”,a,*p);,显示是,3,,,3,所以,如果,*,p=6,;,Printf(,“,%d,%d,”,a,*p);,显示是,6,,,6,指针变量作为函数参数,例,10.3,对输入的两个整数按大小顺序输出,#include,void main,(),void swap,(,int,*,,,int,*,),;,int,,;,int,*p,,*,p,;,scanf,(,,,,);,p,;,p2,;,if,(,),swap,(,p,,,p2,);,printf,(,,,,);,void swap,(,int,*,,,int,*,),int,temp,;,temp,*,1,;,*;,*,temp,;,下面的函数,:,void swap,(,int,a,,,int,b,),int,temp,;,temp,a,;,a=b,;,b=temp,;,/*,只在函数中交换了局部变量*,/,同样不可用函数:,void swap,(,int,*p,,,int,b,),或,void swap,(,int,a,,,int,*p,),只能用函数,void swap,(,int,*p1,,,int,*p2,),处理主调用函数中的变量,定义一个指向数组元素的指针变量的方法,例如:,int,a,10,*p,;,p=a;(a,是数组的首地址,注意,a,前没有地址符,),或,p=,虽然,a,和,p,都是地址,它们是不同的,:,a,是数组的首地址,一旦由系统分配,就是一个固定的值,;,而,p,是指针变量,是可以改变的,.,所以,a+,是错误的,而,p+,是正确的,.,指向数组元素的指针,10.,.,通过指针引用数组元素,如果,int,a6,*p=a;,引用一个数组元素,可以用:,()下标法,如,ai,形式;,()地址或指针法,如*,(,a+i,),或*,(,p+i,),注意,:a0-a5,合法,a6,非法,;,*(a)-*(a+5),合法,*(a+6),非法,;,*(p)-*(p+5),合法,*(p+6),非法,;,字符串与指针,字符串的表示形式,例 定义一个字符数组,对它初始化,,然后输出该字符串,#include,void main,(),char *s,abcdefg,;,printf,(,%,n,,,s,),;,输出,abcdefg,(1),用字符数组存放一个字符串,然后输出该字符串。,输出,cdefg,的语句是:,printf,(,%,n,,,s+2,);,s+2,是指针,输出,efg,的语句是:,printf,(,%,n,,,s+4,);,s+4,是指针,输出字符,f,的语句是:,printf,(,%,cn,,*,(s+5),);*,(s+5),是字符,注意:输出字符串用,%s,和指针;,输出字符用,%c,和*,(,指针,),指针运算与数据:,#include,void main(),int,a5=2,4,6,8,10,*p;p=a;,printf(%d,*(p+2);,printf(%d,*+p);,printf(%d,*p+);,printf(%dn,*+p);,显示,6,4,4,8,注意,1 p+2,没有改变,p,的值,;,注意,2 +p,和,p+,的区别,.,调用函数实现数组的相反顺序存放:,#include,void main(),void,inv(int,x,int,n);,/,函数声明,int,i,a10=3,7,9,11,0,6,7,5,4,2;,printf(The,original array:n);,for(i,=0;i10;i+),printf(%d,ai,);,printf(n,);,inv(a,10);,/,调用函数,printf(The,array has been inverted:n);,for(i,=0;i10;i+),printf(%d,ai,);,printf(n,);,/,用数组元素:,void,inv(int,x,int,n),int,temp,i,j,m,=(n-1)/2;,for(i,=0;i=,m;i,+),j=n-1-i;,temp=,xi;xi,=,xj;xj,=temp;,/,或用指针:,void,inv(int,*,x,int,n),int,*,p,temp,*i,*,j,m,=(n-1)/2;,i=,x;j,=x+n-1;p=,x+m,;,for(;i,=,p;i+,j,-),temp=*i;*i=*j;*j=temp;,这时函数声明要改成:,void,inv(int,*,x,int,n);,用选择法实现数组从大到小排序的函数:,void,sort(int,x,int,n),int,i,j,k,t,;,for(i,=0;in-1;i+),k=i;,for(j,=i+1;j,xk,)k=j;,if(k,!=i),t=,xi;xi,=,xk;xk,=t;,第九章,用户建立的数据类型-结构体,问题定义:,有时需要将不同类型的数据组合成一个有机,的整体,以便于引用。,如:,一个学生有学号,/,姓名,/,性别,/,年龄,/,地址等,int,num;,char name20;,char sex;,int,age;,char addr30;,声明一个结构体类型的一般形式为:,struct,结构体名,成员表列;,如:,struct,student,int,num;,char,name20;,char,sex;,int,age;,float,score;,char,addr30;,结构体名,类型名,成员名,定义结构体类型变量的方法,可以采取以下,3,种方法定义结构体类型变量:,先声明结构体类型再定义变量名,例如:,struct,student,student1,student2,;,|,结构体类型名 结构体变量名,定义了,student1,和,student2,为,struct,student,类型的变量,即它们具有,struct,student,类型的结构,.,图,9-2,student1,100101,ZhangXin,M 19 90.5 Shanghai,100102,WangLi,F 20 98 Beijing,student2,引用结构体变量中成员的方式为,结构体变量名,.,成员名,例如,,student1.num,表示,student1,变量中的,num,成员,即,student1,的,num(,学号,),项。可以对变量的成员赋值和运算,student1.num=10010,但不能用以下语句整体读入结构体变量,,例如:,scanf,(,%d,,,s,,,c,,,d,,,f,,,s,,,student1,);,结构体变量的地址主要用作函数参数,传递结构体变量的地址。,对结构体变量初始化,.,#include void main,(),struct,student,long,int,num,;,char name20;char sex,;,char addr20,;,a=10101,,,LiLin,,,M,,,123 Beijing Road,;,/*,对结构体变量,a,赋初值*,/,printf(No.:%ld,nname:%s,nsex:%c,naddress:%s,n,,,a.num,,,a.name,,,a.sex,,,a.addr,);,结构体数组,一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。,定义结构体数组,和定义结构体变量的方法相仿,只需说明其为数组即可。,例如:,struct,student,int,num;char name20;,char,sex;int,age;,float score;char addr30;,;,struct,student stu3;,以上定义了一个数组,stu,,,数组有个元素,均为,struct,student,类型数据。,结构体数组的初始化,与其他类型的数组一样,对结构体数组可以初始化。,例如:,struct,student,int,num;char name20,;,char sex,;,int,age,;,float score;char addr30,;,;,stu,2,10101,,,LiLin,,,M,,,18,,,87.5,,,103,BeijingRoad,,,10102,,,Zhang Fun,,,M,,,19,,,99,,,130 Shanghai Road,;,例 指向结构体变量的指针的应用,#include#include void main(),struct,studentlong num;char name20;char sex;float score;,struct,student s;,struct,student*p;p=,s.num,=89101;strcpy(s.name,”LiLin”);,s.sex,=,M;s.score,=89.5;,printf(No.:%ld,nname:%s,nsex:%c,nscore:%f,n,,,s.num,,,s.name,,,s.sex,,,s.score,);,printf(No.:%ld,nname:%s,nsex:%c,nscore:%f,n,,,(*p).num,,,(*,p).name,,,(*,p).sex,,,(*,p).score,);,定义指针变量,p,,,指向,struct,student,类型的数据,指向的结构体变量中的成员,9.3.2,指向结构体数组的指针,11.6.2,指向结构体数组的指针,例,9.4,指向结构体数组元素的指针的应用,#include,struct,student,int,num;char,name20;char,sex;int,age;,struct,student stu3=,10101,,,Li Lin,,,M,,,18,,,10102,,,Zhang Fun,,,M,,,19,,,10104,,,WangMing,,,F,,,20,;void main(),struct,student*p;,printf,(No.Name sex age,);,for,(,str,;,str,;,p,),printf(%5d%-20s%2c%4d,n,,,p-num,,,p-name,,,p-sex,,,p-age);,运行结果:,LiLin,18,Zhang Fun,19,WangMing,20,所以,s.num,(*,p).num,p-num,都表示学生,s,的学号,是正确的,.,而,(*,s).num,p.num,(*p)-num,p-.num,都是错误的!,常见错误举例,1,多写了分号,void main();,for(i,=0;i10;i+);,while(m,!=0);,2,把分号写成了逗号,for(i,=0,i10,i+);,3,写错了,&,scanf(,“,%d,”,a,);/,应该是,&a,,少了,&,gets(&str,);/,应该是,str,多了,&,4,缺少函数体前后的花括号,5,printf,scanf,中把双引号,”,写成,单引号,6,语句后缺少分号,c=,a+b,7,数据声明中把逗号写成分号:,把,int,a,b,c,;,写成:,int,a;b;c,;,
展开阅读全文

开通  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 

客服