C语言结构体文件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1本讲内容结构体结构体类型定义的方法结构体变量的引用结构体数组文件文件的打开与关闭文件的读写21、结构体基本数据类型int、float、char…构造数据类型数组(各元素属于同一类型)但是很多时候,需要将不同类型的数据组成一个整体,以便于使用。这些组合在一个整体中的数据是相互联系的,如下图。10010LIFun18M90Wuhannumnameagesexscoreaddr3structstudent{charnum[5];charname[20];charsex;intage;floatscore;charaddr[30];};10010LIFun18M90Wuhannumnameagesexscoreaddr这样一种结构的定义:•struct关键字声明结构体类型时使用。它向系统声明这是一个“结构体类型”。•定义的一般形式struct结构体名{成员列表};•成员列表中各个成员在定义时都应该进行类型的声明•structstudent是一个类型名,它和基本数据类型int、float、char等一样,都可以用来定义变量。41.1结构体变量的定义步骤:先定义结构体类型再定义结构体变量①structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};②structstudentstu1,stu2;inta,b与普通变量的定义一样5stu1、stu2变量stu1和stu2都为structstudent类型的变量,即它们具有structstudent的结构10011Wangli20F67Chengdunumnameagesexscoreaddr10012Lijun19M80Beijingstu1stu2思考:这样结构的数据在内存中占多少个字节?61.2结构体变量的引用#includestdio.hvoidmain(){structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1;//结构体变量的定义scanf(%d,%s,%c,%d,%f,%s,&stu1.num,&stu1.name,&stu1.sex,&stu1.age,&stu1.score,&stu1.addr);printf(%d,%s,%c,%d,%f,%s\n,stu1.num,stu1.name,stu1.sex,stu1.age,stu1.score,stu1.addr);}“.”成员运算符71.3结构体数组一个结构体变量可以存放一组数据(如学生的学号、姓名、成绩等数据),如果在应用的过程中需要50个学生的数据进行处理,显然要用数组,这就是结构体数组。结构体数组的定义先定义结构体类型再定义结构体数组(与普通数组的定义相同)8例:求3个学生各自成绩的平均分,并输出//先定义结构体#includestdio.hstructstudent{charnum[6];//学号charname[15];//姓名intscore[2];//2门课成绩floatavr;//平均分};9voidmain(){inti,j,sum;structstudentstu[3];//结构体数组,3个学生for(i=0;i3;i++){printf(stuNo:);scanf(“%s”,&stu[i].num);//输入学生学号printf(name:);scanf(“%s”,&stu[i].name);//输入学生姓名sum=0;for(j=0;j2;j++){printf(score%d,j+1);scanf(“%d”,&stu[i].score[j]);//输入学生2门课的成绩sum+=stu[i].score[j];}stu[i].avr=sum/2.0;//求学生平均分}10for(i=0;i3;i++)//输出各学生的信息printf(%s%s%d%d%d%f\n,stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);}111.4小节关于结构体变量定义的方法详见11.2章节关于结构体变量初始化的方法详见11.4章节认真阅读教材11.1~11.5章节内容122、文件2.1文件概述文件(file)一般指存储在外部介质上数据的集合根据数据的组织形式,文件可分为:ASCII文件(文本文件,.txt)存放字符的ASCII码二进制文件存放字符的二进制编码在此之前,所有的输入、输出都是以终端为对象,即从键盘输入,运行结果输出到终端在应用的过程中,常需要将运行的结果(最终数据或中间数据)保存起来,以后需要时再读入内存。这就需要用到磁盘文件。132.2文件类型指针每个被使用的文件都在内存中占用一个区,用来存放文件的相关信息(如文件的名字、状态及文件的当前位置等)。这些信息都存放在一个结构体变量FILE中。详见P33113.2此结构体类型由系统定义;通过文件指针变量能够找到与他相关的文件,从而进行文件的读写等操作。142.3文件的打开与关闭文件的打开(fopen函数)其调用方式通常为FILE*fpfp=fopen(文件名,使用文件方式)文件的关闭(fclose函数)fclose(文件指针)fclose(fp);详见P333152.4文件的读写fputc函数把一个字符写到文件上去fgetc函数从指定的文件读入一个字符fread函数从文件读一个数据块fwrite函数写一个数据块到文件fscanf函数fprintf函数注意:各函数的使用格式详见教材13.4fscanf、fprintf函数与scanf和printf相仿,都是格式化读写函数,只是对象不同,前者为文件,后者为终端162.5文件读写举例#includestdio.h//将一组数据写入temp.txt文件中voidmain(){FILE*fp;//定义文件指针inti,score[10]={90,3,40,50,20,100,98,34,70,85};if((fp=fopen(“temp.txt”,“w+”))==NULL)//文件打开成功如否判断{printf(error\n);exit(0);}for(i=0;i10;i++)fprintf(fp,“%d”,score[i]);//将数据输出到文件中fclose(fp);//关闭文件}17补充1:宏定义P2049.1不带参数宏定义#define标示符字符串用一个指定的标示符来代表一个字符串。e.g.#definePI3.14.159带参数的宏定义#define宏名(参数表)字符串e.g.#defineS(a,b)a*b…area=S(3,2);则area=6;思考:#defineN3#defineY(n)(2*N+2*n)z=2*(N*Y(3+1));则z=?18补2:指针作为函数的参数函数参数包括实参和形参,两者的类型要一致,可以是指针类型。如果实参是某个变量的地址,相应的形参就是指针。intmain(void){inta=1,b=2;int*pa=&a,*pb=&b;voidswap1(intx,inty),swap2(int*px,int*py),swap3(int*px,int*py);swap1(a,b);printf(“Aftercallingswap1:a=%db=%d\n”,a,b);a=1;b=2;swap2(pa,pb);printf(“Aftercallingswap2:a=%db=%d\n”,a,b);a=1;b=2;swap3(pa,pb);printf(“Aftercallingswap3:a=%db=%d\n”,a,b);return0;}调用哪个函数,可以交换main()中变量a和b的值?19例swap1()a12bx12y21swap1(a,b);voidswap1(intx,inty){intt;t=x;x=y;y=t;}20例swap2()swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}abpxpy12值传递,地址未变,但存放的变量的值改变了2121例swap3()swap3(&a,&b);voidswap3(int*px,int*py){int*pt;pt=px;px=py;py=pt;}abpxpy12值传递,形参指针的改变不会影响实参22指针作为函数参数的应用swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}要通过函数调用来改变主调函数中某个变量的值:(1)在主调函数中,将该变量的地址或者指向该变量的指针作为实参(2)在被调函数中,用指针类型形参接受该变量的地址(3)在被调函数中,改变形参所指向变量的值abpxpy1221Aftercallingswap1:a=1,b=2Aftercallingswap2:a=2,b=1Aftercallingswap3:a=1,b=223作业阅读教材p22910.3节数组与指针内容,要求掌握;复习本讲以前所学的知识

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功