{
struct node{
int data; struct node *next
} *head,*p , a,b,c; int j;
a.data=10; b.data=20; c.data=30;
b.next=&c; c.next=&a; a.next=0; head=&b; p=head->next;
printf(\
}
动态申请一个结点空间:p=( struct node*)malloc(sizeof(struct node)),然后才能执行:p->data=…;p->next=…; 可以利用指针生成动态数组空间,例如: int *p;
p=(int *)malloc(sizeof(int)); /*申请一个int空间*/
p=(int *)malloc(2*sizeof(int)); /*申请2个连续的int空间,实现动态一维数组*/
p=(int *)calloc(2, sizeof(int)); /*申请2个连续的int空间,实现动态一维数组*/
模块五:文件
C语言中的文件的组成及分类:
C中的文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 C文件打开的方式:
基本方式: r(只读) w(只写)、a(追加)
后面可以加上+表示可读可写(注意,如果打开一个新文件可读可写,则一定是w+;如果打开一个旧文件可读可写,则一定是r+)、加上b表示打开二进制文件,否则默认是对文本文件操作 注意:
文件的操作步骤:
(1) 定义FILE*文件指针,一个文件对应一个指针
(2) 利用文件指针打开文件fp=fopen(文件名,打开方式),注
意文件名要用双引号括起,并且路径之间用\\\\,打开方式也要用双引号括起
(3) 进行文件读写操作,一般用fgetc(fp)来从已有文件中获
取一个字符,用fputc(c, fp)向fp所对应的文件中写入一个字符,该操作往往要用循环条件控制执行。 用fwrite和fread实现数据块的读写,这在内存变量为结构体类型时特别有用,例如: struct node {
int x,y;
}s[10]={{2,3},{1,8}}; int i;
FILE *fp=fopen(“c:\\\\ABC.dat”,wb); fwrite(s,sizeof(struct node),10,fp); ?
则可以实现一次将s数组的10个结构体元素写入到文件ABC.dat中,以上还可以用下面的语句实现写入: ① fwrite(s,10*sizeof(struct node),1,fp); ②for (i=0;i<10;i++)
fwrite(s+i, sizeof(struct node),1,fp); (4) 文件操作完成后要用fclose(fp)关闭文件。 (5) 判断一个旧文件是否结束,常用的有两种方式:
!feof(fp)或((c=fgetc(fp))!=EOF)
练习:下面程序的功能是? #include
FILE *fp; char ch;
if ( (fp=fopen(\ {
printf(\ exit(0); }
while(!feof(fp)) { ch=fgetc(fp); putchar(ch); }
fclose(fp); } 思考:
(1)如果需要逆序在屏幕上显示原文件的内容,上述程序如何修改?
(2)若将文件c:\\aaa.txt原样复制到D盘下作为bbb.txt,程序该如何修改?
(3)若只将文件c:\\aaa.txt中的字母复制到D盘下作为bbb.txt,程序该如何修改?
(4)若将文件c:\\aaa.txt中的字母都转变为小写字母复制到D盘下作为bbb.txt,程序该如何修改?
(5)若将文件c:\\aaa.txt连接到D:\\ccc.txt后面,程序应该如何修改?