第一篇:C语言用指针和链表读写文件
#include
#include
#include
#include
#define MAXLEN_OF_KEYWORD 50
#define MAXLEN_OF_KEYWORDTYPE 30
char i,ch[5];
struct KeyWordBox
{
char Name[MAXLEN_OF_KEYWORD];
intId;
char Type[MAXLEN_OF_KEYWORDTYPE];//该单词的类型struct KeyWordBox *next;//指针
};
void write();
void read();
void main()
{
write();
read();
}
void write()
{
char *FileName=“FileName.txt”;
KeyWordBox transport;
memset(&transport,0,sizeof(struct KeyWordBox));
FILE *out=NULL;
FILE *test=NULL;
test=fopen(FileName,“a”);
if(test==NULL)
{
out=fopen(FileName,“w”);
printf(“ 1 continue,0 exitn”);
i=getchar();
while(i=='1')
{
printf(“请输入关键字n”);
scanf(“%s”,transport.Name);
printf(“请输入IDn”);
scanf(“%d”,&transport.Id);
printf(“请输入Typen”);
scanf(“%s”,transport.Type);
fwrite(&transport,sizeof(struct KeyWordBox),1,out);
printf(“ 1 continue,0 exitn”);
scanf(“%c”,&i);
}
fclose(out);
}
else
{
out=fopen(FileName,“a”);
printf(“ 1 continue,0 exitn”);
scanf(“%c”,&ch);
//i=getchar();
//while(i=='1')
while(strcmp(ch,“1”)==0)
{
printf(“请输入关键字n”);
scanf(“%s”,transport.Name);
printf(“请输入IDn”);
scanf(“%d”,&transport.Id);
printf(“请输入Typen”);
scanf(“%s”,transport.Type);
fwrite(&transport,sizeof(KeyWordBox),1,out);
printf(“ 1 continue,0 exit.n”);
scanf(“%s”,ch);
}
fclose(out);
}
}
void read()
{
char *FileName=“FileName.txt”;
KeyWordBox *Head=NULL,*q=NULL;
KeyWordBox *Body=NULL;
KeyWordBox *p=NULL;
FILE *in=NULL;
in=fopen(FileName,“r”);
if(in==NULL)
{
printf(“can't open the file!n”);
exit(0);
}
else
{
Head=(struct KeyWordBox*)malloc(sizeof(struct KeyWordBox));Head->next =NULL;
}}q=Head;while(!feof(in)){Body=(struct KeyWordBox*)malloc(sizeof(struct KeyWordBox));Body->next=NULL;fread(Body,sizeof(struct KeyWordBox),1,in);if(feof(in)){q->next=NULL;break;}q->next=Body;q=Body;printf(“%st%dt%sn”,Body->Name,Body->Id,Body->Type);} fclose(in);p=Head->next;while(p!=NULL){printf(“%st%dt%sn”,p->Name,p->Id,p->Type);p=p->next;}
第二篇:C语言指针实习
实习七:指针实习
一、实习目的
姓名:尹思智
学号:2012014413
完成日期:2013年4月
1.由键盘输入10个整数,将它们从小到大排序 2.将10个字符串(设其长度小于30)排序。
3.找出二维数组(设4行5列)中的最大数及其位置。
4.从键盘输入一串字符,从下标为m的字符开始,取出n个字符(m和n从键盘输入),形成一个新字符串 5.实现字符串的拷贝
6.编写一程序,将一个字符串反序存放。
二、实习步骤
1.由键盘输入10个整数,将它们从小到大排序 #include scanf(“%d”,p);for(i=0;i<10;i++)for(p=a;p if(*p>*(p+1)) { t=*p; *p=*(p+1); *(p+1)=t;} for(p=a;p printf(“%d ”,*p);} 2、将10个字符串(设其长度小于30)排序 #include str[i]=cty[i];printf(“输入十个字符串:n”);for(i=0;i<10;i++) gets(cty[i]);for(i=0;i<9;i++){ k=i; for(j=i+1;j<10;j++) if(strcmp(str[k],str[j])>0) k=j; temp=str[k]; str[k]=str[i]; str[i]=temp;} printf(“排序后:n”);for(i=0;i<10;i++) printf(“%sn”,str[i]);} 2.将10个字符串(设其长度小于30)排序。 3.找出二维数组(设4行5列)中的最大数及其位置。 4.从键盘输入一串字符,从下标为m的字符开始,取出n个字符(m和n从键盘输入),形成一个新字符串 5.实现字符串的拷贝 6.编写一程序,将一个字符串反序存放。 三、实习总结 学号:__________ 姓名:__________ 班级:__________ 日期:__________ 指导教师:__________ 成绩:__________ 实验五 指针 一、实验目的1、掌握指针的概念、会定义和使用指针变量 2、掌握指向数组的指针变量 3、掌握字符串指针的使用 二、实验内容 1、输入3个字符串,按由小到大的顺序输出。(习题10.2) 2、写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(习题10.6) 3、完善程序,要求使用函数功能:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。 #include #include long fun(char *p) { 填写程序 } void main() { char s[6]; long n; printf(“Enter a string:n”); gets(s); n=fun(s); printf(“%ldn”,n); } 一、三、实验步骤与过程 第一┆范文网www.xiexiebang.com整理该文章,版权归原作者、原出处所有...四、程序调试记录 C语言链表的概念 在*中采用了动态分配的办法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点。当然用结构数组也可以完成上述工作,但如果预先不能准确把握学生人数,也现金网96y.org就无法确定数组大小。而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。 用动态存储的方法可以很好地解决这些问题。有一个学生就分配一个结点,无须预先确定学生的准确人数,某学生退学,可删去该结点,并释放该结点占用的存储空间。从而节约了宝贵的内存资源。另一方面,用数组的方法必须占用一块连续的内存区域。而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现。即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。 可在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。这样一种连接方式,在数据结构中称为链表。 下图为最一简单链表的示意图。 图中,第0个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号num,姓名name,性别sex和成绩score等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。 例如,一个存放学生学号和成绩的结点应为以下结构: struct stu{ int num; int score; struct stu *next; } 前两个成员项博彩娱乐棋牌q07i5.org组成数据域,后一个成员项next构成指针域,它是一个指向stu类型结构的指针变量。 链表的基本操作对链表的主要操作有以下几种: 建立链表; 结构的查找与输出; 插入一个结点; 删除一个结点。 C语言函数指针变量 在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为函数指针变量。 函数指针变量定义的一般形式为: 类型说明符(*指针变量名)();其中类型说明符表示现金网96y.org被指函数的返回值的类型。(* 指针变量名)表示*后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。例如: int(*pf)(); 表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。 本例用来说明用指针形式实现对函数调用的方法。 int max(int a,int b){ if(ab)return a; else return b; } main(){ int max(int a,int b); int(*pmax)(); int x,y,z; pmax=max; printf(input two numbers:n); scanf(%d%d,x,y); z=(*pmax)(x,y); printf(maxmum=%d,z); } 从上述程序可以看出用,函数指针变量形式调用函数的步骤如下: 先定义函数指针变量,如后一程序中第9行 int(*pmax)();定义 pmax为函数指针变量。 把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max; 用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y); 调用函数的一般形式为:(*指针变量名)(实参表) 使用函数指针变量还应注意以下两点: 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而博彩娱乐棋牌q07i5.org函数指针的移动是毫无意义的。 函数调用中(*指针变量名)的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。第三篇:C语言实验报告《指针》
第四篇:C语言链表的概念
第五篇:C语言函数指针变量