1期末考试相关题型读程序(程序的运行结果或功能)填空写程序知识点包括今天所讲内容在内的所有课堂上讲的内容2本讲内容结构体结构体类型定义的方法结构体变量的引用结构体数组文件文件的打开与关闭文件的读写31、结构体基本数据类型int、float、char…构造数据类型数组(各元素属于同一类型)但是很多时候,需要将不同类型的数据组成一个整体,以便于使用。这些组合在一个整体中的数据是相互联系的,如下图。10010LIFun18M90Wuhannumnameagesexscoreaddr4structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};10010LIFun18M90Wuhannumnameagesexscoreaddr这样一种结构的定义:•struct关键字声明结构体类型时使用。它向系统声明这是一个“结构体类型”。•定义的一般形式struct结构体名{成员列表};•成员列表中各个成员在定义时都应该进行类型的声明•structstudent是一个类型名,它和基本数据类型int、float、char等一样,都可以用来定义变量。51.1结构体变量的定义步骤:先定义结构体类型再定义结构体变量①structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};②structstudentstu1,stu2;inta,b与普通变量的定义一样6stu1、stu2变量stu1和stu2都为structstudent类型的变量,即它们具有structstudent的结构10011Wangli20F67Chengdunumnameagesexscoreaddr10012Lijun19M80Beijingstu1stu2思考:这样结构的数据在内存中占多少个字节?71.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);}“.”成员运算符81.3结构体数组一个结构体变量可以存放一组数据(如学生的学号、姓名、成绩等数据),如果在应用的过程中需要50个学生的数据进行处理,显然要用数组,这就是结构体数组。结构体数组的定义先定义结构体类型再定义结构体数组(与普通数组的定义相同)9例:求3个学生各自成绩的平均分,并输出//先定义结构体#includestdio.hstructstudent{charnum[6];//学号charname[15];//姓名intscore[2];//2门课成绩floatavr;//平均分};10voidmain(){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;//求学生平均分}11for(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);}121.4小节关于结构体变量定义的方法详见11.2章节关于结构体变量初始化的方法详见11.4章节认真阅读教材11.1~11.5章节内容132、文件2.1文件概述文件(file)一般指存储在外部介质上数据的集合根据数据的组织形式,文件可分为:ASCII文件(文本文件,.txt)存放字符的ASCII码二进制文件存放字符的二进制编码在此之前,所有的输入、输出都是以终端为对象,即从键盘输入,运行结果输出到终端在应用的过程中,常需要将运行的结果(最终数据或中间数据)保存起来,以后需要时再读入内存。这就需要用到磁盘文件。142.2文件类型指针每个被使用的文件都在内存中占用一个区,用来存放文件的相关信息(如文件的名字、状态及文件的当前位置等)。这些信息都存放在一个结构体变量FILE中。详见P33113.2此结构体类型由系统定义;通过文件指针变量能够找到与他相关的文件,从而进行文件的读写等操作。152.3文件的打开与关闭文件的打开(fopen函数)其调用方式通常为FILE*fpfp=fopen(文件名,使用文件方式)文件的关闭(fclose函数)fclose(文件指针)fclose(fp);详见P333162.4文件的读写fputc函数把一个字符写到文件上去fgetc函数从指定的文件读入一个字符fread函数从文件读一个数据块fwrite函数写一个数据块到文件fscanf函数fprintf函数注意:各函数的使用格式详见教材13.4fscanf、fprintf函数与scanf和printf相仿,都是格式化读写函数,只是对象不同,前者为文件,后者为终端172.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);//关闭文件}18补充:宏定义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+1*n)z=2*(N*Y(3+1));则z=?19P34813.413.6