《编程实习理论部分(2010)》由会员分享,可在线阅读,更多相关《编程实习理论部分(2010)(41页珍藏版)》请在金锄头文库上搜索。
1、自动化学院 朱胜利 2010年,编程实现理论部分,一.编程环境,Visual C+ 6.0 使用语言:C语言 创建控制台程序: File/New/Win32 console Application, location:选择工程地址,Project Name:填写工程名,OK! 选An Empty Project, Finish! OK! File/New/C+ Source File, File处填写源文件名,OK!,二. 我们的任务,编写控制台程序,将班级学生信息通过创建链表保存,可以添加、删除、查找某一学生的信息,显示所有学生的信息,信息保存到文件中,从文件中读出信息。,三. 理论部分,数
2、据的输入输出 一个字符: getchar( ):从终端(键盘)输入一个字符; putchar ( ) :在屏幕显示字符的值; 多个字符: scanf( ):输入多个数据; printf ( ) :在屏幕显示多个数据;,1.主函数的实现,文件头部添加: #include #include #include 三个技巧 printf、scanf、switch语句、while语句。 工程One;,变量与地址,程序中: int i; float k;,内存中每个字节有一个编号-地址,.,2000,2001,2002,2004,内存,0,2003,i,k,.,.,2000,2004,2006,2005,整
3、型变量i,10,变量pf,2001,2002,2003,2000,指针变量,变量的内容,程序: int i=10; int k=900; int *pf; pf =,900,指针:一个变量的地址。 指针变量:专门存放变量地址的变量。,指针,指针是分数据类型的; 指针即地址,前加*是地址所存放的值; 给指针赋地址:int *p; p= 指针是先赋值,后使用;,指针使用注意事项,main( ) int i=10; int *p; *p=i; printf(“%d”,*p); ,危险!,main( ) int i=10; int *p; p= ,指针变量必须先赋值,再使用,结构体 结构体是一种构造数
4、据类型 用途:把不同类型的数据组合成一个整体(自定义数据类型),struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或构造型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构 的组织形式,不分配内存,结构体类型的定义,结构体变量的定义,例 struct student int num; char name20; char sex; int a
5、ge; float score; char addr30; ; student st1, st2;,struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体变量的初始化,struct student int num; char name20; ; struct student stu; stu.num=109; strcpy(stu.name,“LinNing“); printf(“
6、num=%dt name=%sn“,stu.num,stu.name);,结构体变量的赋值,struct node int no; char name8; float eng,phy,math,ave; node *next; ;,由若干同类型结点用指针链接而成的数据结构。 链表由表头、结点与链尾三部组成。,链表的概念,建立链表:能够指定链表的节点的个数,用malloc开辟一块内存, scanf输入节点内容,将链表连接起来,返回head指针。,a,138*,Next,2000,b,133*,Next,2010,2000,head,b,133*,NULL,2020,链表的基本操作,a,138*,
7、Next,2000,P2-next=2010,2000,b,133*,Next,P1,2010,2000,head,head,a,138*,Next,P2,P1,2000,a,138*,Next,P2=P1,2000,b,133*,Next,P1,2010,2000,head,P2,显示链表,a,138*,Next,P=head,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,a,138*,Next,P=P-next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,a,138*,Next,P=P
8、-next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,void print( student *head) student *p; p=head; printf(“输出所有学生信息:n“); ? printf(“姓名:%s 电话:%dn“,p-name,p-age); p=p-next; ,删除一个节点,a,138*,Next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,输入一个学生姓名(?),根据姓名在链表中找,找到删除之。 int a=strcmp(p1-name, name),删
9、除头节点、尾节点、中间节点。,定义两个辅助工具,student指针:P1,P2.,a,138*,Next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,a,138*,Next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,P1=head,Head=P1-next,删除头节点,a,138*,Next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,P1=head,删除尾节点,P1=P1-next,P2=P1,P2-next=NULL Free(
10、P1),a,138*,Next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,P1=head,删除中间节点,P1=P1-next,P2=P1,P2-next=P1-next Free(P1),a,138*,Next,2000,b,133*,Next,2010,2000,head,b,135*,Next,2020,P1=head,struct student *del(struct student *head) struct student *p1, *p2; char name30; p1=head; while( (strcmp(p1-na
11、me,name)!=0) ,文件的操作,文件概述 件的打开和关闭 文件的读写 文件的定位,文件 (File),C语言中的文件 C语言把文件看作一个字节的序列 C语言对文件的存取是以字节为单位的 文本文件(ASCII文件) 按数据的ASCII形式存储 二进制文件 按数据在内存中的二进制形式存储,文件类型指针,FILE类型 保存被使用的文件的有关信息 所有的文件操作都需要FILE类型的指针 举例 FILE *fp;,文件的打开 (fopen函数),函数原型 FILE *fopen(char *filename, char *mode); 参数说明 filename:要打开的文件路径 mode :打
12、开模式 返回值 若成功,返回指向被打开文件的指针 若出错,返回空指针NULL(0),文件的打开模式,文件的打开举例,FILE *fp; if(fp=fopen(“11.txt“,“wb“)=NULL) printf(“can not open filen“); ,文件的关闭 (fclose函数),函数原型 int fclose(FILE *fp); 参数说明 fp:要关闭的文件指针 返回值 若成功,返回0 若出错,返回EOF(-1) 不用的文件应关闭,防止数据破坏丢失,文件的关闭举例,FILE *fp; char file=“D:USERSTUDENTS.DAT“; if (!(fp=fope
13、n(file, “rb+“) printf(“Open file %s error!n“, file); exit(0); . . fclose(fp);,feof函数,函数原型 int feof(FILE *fp); 参数 fp:文件指针 返回值 若文件结束,返回非零值 若文件尚未结束,返回0,文件的读写,输出数据块 fwrite(void *buffer,size,count, FILE *fp); 输入数据块 Fread(void *buffer,size,count,FILE *fp);,fwrite和fread函数举例,FILE *fp; int i; struct stud sNU
14、M; fp=fopen(“students.dat“,“rb+“); for (i=0; iNUM; i+) fwrite(s+i,sizeof(struct stud),1,fp); for (i=0; iNUM; i+) fread(s+i,sizeof(struct stud),1,fp); fclose(fp);,void save(struct stu *head) FILE *fp; struct student *p; if(fp=fopen(“11.txt“,“w“)=NULL) printf(“can not open filen“); exit(1); p=head; wh
15、ile(p!=NULL) fwrite(p,sizeof(struct student),1,fp); p=p-next; fclose(fp); ,文件的定位,文件位置指针 位置指针指向当前读写的位置 每次读写文件,位置指针都会相应移动 可以通过相关函数强制修改位置指针 相关函数 rewind函数,rewind函数,函数原型 void rewind(FILE *fp); 参数 fp:文件指针 功能 使文件位置指针重新返回文件开头,struct student *load() /把链表从文件中读入到新的链表中 struct student *p1,*p2,*head=NULL; FILE *fp; if(fp=fopen(“11.txt“,“rb“)=NULL) printf(“can not open filen“);exit(1); p1=(struct student *)malloc(sizeof(struct student); head=p1; while(!feof(fp) if(1!=fread(p1,sizeof(struct student),1,