#include
int a[100],i,n,k,*p; p=a;
for(i=0;i<100;i++) *(p+i)=i+1; n=100; i=k=0; while(n>1) {
if(*(p+i)!=0) k++;
if(k==3) {*(p+i)=0;k=0;n--;} i++;
if(i==100) i=0; }
while(*p==0) p++;
printf(\}
实验12 结构体、共用体与枚举
任务1 结构体、共用体与枚举构造数据类型的定义与使用
1.运行下面程序,熟悉结构体变量及指向结构体变量指针的使用。
#include
struct xs { int num;
char name[20]; float score;
}stu1={001,\ struct xs stu2,*p; stu2=stu1;
printf(\ p=&stu2;
printf(\}
运行结果为:
1 Zhang san 90.500000 1 Zhang san 90.500000
2.运行下面程序,并分析指向结构体数组的指针变量的使用,理解指针与结构体数组的关系及结构体成员的引用方式。
#include
char name[20]; char sex; int age;
}stu[3]={{10101,\ {10102,\ {10104,\
main( ) {
struct xs *p;
for(p=stu;p printf(\} 运行结果为: 10101 Li Lin M 18 10102 Zhang Fun M 19 10104 Wang Min F 20 思考:printf(\如用结构体数组元素的方式表示,该引用方式如何表示? 代码修改如下: #include char name[20]; char sex; int age; }stu[3]={{10101,\ {10102,\ {10104,\main( ) { struct xs *p; int i; for(i=0;i<3;i++) printf(\} 3.以下程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。函数fun( )的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 #include char name[10]; float score[3]; }; void fun(struct student a[], int n) { /**********found**********/ struct student t; int i, j; /**********found**********/ for (i=0; i< n-1 ; i++) for (j=i+1; j /**********found**********/ if (strcmp(a[i].name,a[j].name) > 0) { t = a[i]; a[i] = a[j]; a[j] = t; } } void main( ) { struct student s[4]={{10001,\95, 80, 88},{10002,\85, 70, 78},{10003,\ int i, j; printf(\ for (j=0; j<4; j++) { printf(\ for (i=0; i<3; i++) printf(\ printf(\ } fun(s, 4); printf(\ for (j=0; j<4; j++) { printf(\ for (i=0; i<3; i++) printf(\ printf(\ } } 4.下面程序通过对学生学号、姓名、出生年月信息的输入与输出,分析并理解指向结构体类型变量的正确使用方法,以及结构体嵌套定义。 #include int day,month,year; }; struct stu /*定义结构体*/ { char name[20]; long num; struct data birth; /*嵌套的结构体类型成员*/ } ; void main( ) /*定义main( ) 函数*/ { struct stu *xs; /*定义结构体类型指针*/ xs=(struct stu *)malloc(sizeof(struct stu)); /*为指针变量分配安全的地址*/ printf(\ scanf(\/*输入学生姓名、学号、出生年月日*/ scanf(\ scanf(\ printf(\打印输出各成员项的值*/ printf(\ xs->birth.month,xs->birth.day); } 运行结果如下: Input name,number,year,month,day: HanTingyu 22 1985 11 1 HanTingyu22 1985//11//1(书上多空了很多的空格) 5.验证下面程序,熟悉共用体变量的使用。 #include void main( ) { union ab t; t.a=0x1234; printf(\} 程序输出结果如下: t.a=1234 t.b[1]=12 t.b[0]=34 任务2 链表的定义与使用 给定程序中,函数fun( )的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为10、4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10。 请在程序的下划线处填入正确的内容并将下划线删除, 使程序得出正确的结果。 #include typedef struct node { int data; struct node *next; } NODE; void fun(NODE *h) { NODE *p, *q; int t; /**********found**********/ p = h->next ; while (p) { /**********found**********/ q = p->next ; while (q) { /**********found**********/ if (p->data > q->data) { t = p->data; p->data = q->data; q->data = t; } q = q->next; } p = p->next; } } NODE *creatlist(int a[]) { NODE *h,*p,*q; int i; h = (NODE *)malloc(sizeof(NODE)); h->next = NULL; for(i=0; i { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h->next == NULL) h->next = p = q; else { p->next = q; p = q; } } return h; } void outlist(NODE *h) { NODE *p; p = h->next; if (p==NULL) printf(\ else { printf(\ do { printf(\ while(p!=NULL); printf(\ } } main( ) { NODE *head; int a[N]= {0, 10, 4, 2, 8, 6 }; head=creatlist(a); printf(\ outlist(head); fun(head); printf(\ outlist(head); } 实验13 文件的使用 任务1 文件的读、写操作 1.建立一个名为abc的文件,并将从键盘输入的字符存入该文件,当键盘输入结束时关闭该文件,填空完成下面程序。 #include { FILE *fp; char ch; fp= fopen (\ \ ); do { ch=getchar ( ); fputc ( ch, fp); } while ( ch!= EOF); fclose (fp); } 2.从键盘输入一个以“#”为结束标志的字符串,将它存入指定的文件中,填空完成下面程序。 #include FILE *fp; char ch,fn[10]; printf(\ scanf(\ if( ( fp=fopen(fn,\)==NULL) { printf(\