(5)结构型及文件操作

//定义一个人的结构类,共含有4个成员
struct person
{
char name[10];
char sex;
int age;
float wage;
};
--------------------
struct student
{
long number;
char name[10];
char sex;
int age;
float score[3];
};
----------------------
struct birthday
{
int age;
int month;
int day;
};
----------------------------
struct person
{
char name[10];
char sex;
struct birthday bir;
float wage;
};
---------------------------------
=======================================================================




//用赋值的方式给学生结构型变量的所有成员赋值
#include<stdio.h>
#include<string>
struct student
{
long number;
char name[10];
char sex;
float score[3];
};
int main()
{
struct student x;
x.number=100001L;
strcpy(x.name,"zhao1");  //怎样给字符数组赋值
x.sex='f';
x.score[0]=89;
x.score[1]=94;
x.score[2]=86;
printf("number=%ld  name=%s  sex=%c\n",x.number,x.name,x.sex );
printf("score[0]=%.1f  score[1]=%.1f  score[2]=%.1f\n",x.score[0],x.score[1],x.score[2] );

return 0;
}


---------------------------------------------------------


//用赋值的方式给学生结构型变量的所有成员赋值
#include<stdio.h>
#include<string>


int main()
{
struct student
{
long number;
char name[10];
char sex;
float score[3];
}x;
x.number=100001L;
strcpy(x.name,"zhao1");  //怎样给字符数组赋值
x.sex='f';
x.score[0]=89;
x.score[1]=94;
x.score[2]=86;
printf("number=%ld  name=%s  sex=%c\n",x.number,x.name,x.sex );
printf("score[0]=%.1f  score[1]=%.1f  score[2]=%.1f\n",x.score[0],x.score[1],x.score[2] );

return 0;
}
----------------------------------------------------------------


//用赋值的方式给学生结构型变量的所有成员赋值
#include<stdio.h>
#include<string>


int main()
{
struct student
{
long number;
char name[10];
char sex;
float score[3];
}x={100001L,"zhao1",'f',{89,94,86}};

printf("number=%ld  name=%s  sex=%c\n",x.number,x.name,x.sex );
printf("score[0]=%.1f  score[1]=%.1f  score[2]=%.1f\n",x.score[0],x.score[1],x.score[2] );

return 0;
}


-----------------------------------------------------------------
//用赋值的方式给学生结构型变量的所有成员赋值
#include<stdio.h>
#include<string>


int main()
{
struct student
{
long number;
char name[10];
char sex;
float score[3];
};
struct student x={100001L,"zhao1",'f',{89,94,86}};//前面struct 加不加无所谓

printf("number=%ld  name=%s  sex=%c\n",x.number,x.name,x.sex );
printf("score[0]=%.1f  score[1]=%.1f  score[2]=%.1f\n",x.score[0],x.score[1],x.score[2] );

return 0;
}


-------------------------------------------------------------------






//嵌套结构型的程序设计
#include<stdio.h>
#include<string>
struct birthday
{
int year;
int month;
int day;
};
struct person1
{
char name[10];
char sex;
struct birthday bir;//前面加不加struct无所谓
float wage;


}x;


int main()
{
strcpy(x.name,"gu");
x.sex='f';
x.bir.year=1972;
x.bir.month=10;
x.bir.day=3;
x.wage=6880.0;

printf("name=%s  sex=%c  wage=%.1f\n",x.name,x.sex,x.wage);
printf("birthday=%4d.%2d.%2d\n",x.bir.year,x.bir.month,x.bir.day);


    return 0;
}


-------------------------------------------------------


//嵌套结构型的程序设计
#include<stdio.h>
#include<string>
struct birthday
{
int year;
int month;
int day;
};
struct person1
{
char name[10];
char sex;
struct birthday bir;//前面加不加struct无所谓
float wage;


}x={"gu",'f',{1972,10,3},6880.0};


int main()
{


printf("name=%s  sex=%c  wage=%.1f\n",x.name,x.sex,x.wage);
printf("birthday=%4d.%2d.%2d\n",x.bir.year,x.bir.month,x.bir.day);


    return 0;
}


------------------------------------------------------------------


//嵌套结构型的程序设计
#include<stdio.h>
#include<string>
struct birthday
{
int year;
int month;
int day;
};
struct person1
{
char name[10];
char sex;
struct birthday bir;//前面加不加struct无所谓
float wage;


};


int main()
{
person1 x={"gu",'f',{1972,10,3},6880.0};


printf("name=%s  sex=%c  wage=%.1f\n",x.name,x.sex,x.wage);
printf("birthday=%4d.%2d.%2d\n",x.bir.year,x.bir.month,x.bir.day);


    return 0;
}
-----------------------------------------------------------------


//嵌套结构型的程序设计
#include<stdio.h>
#include<string>
struct birthday
{
int year;
int month;
int day;
};
struct person1
{
char name[10];
char sex;
struct birthday bir;//前面加不加struct无所谓
float wage;


};


int main()
{
person1 x={"gu",'f',{1972,10,3},6880.0};//前面struct 加不加无所谓


printf("name=%s  sex=%c  wage=%.1f\n",x.name,x.sex,x.wage);
printf("birthday=%4d.%2d.%2d\n",x.bir.year,x.bir.month,x.bir.day);


    return 0;
}


======================================================================


//用指向结构型成员的指针变量来给成员赋值和输出成员的值
#include<stdio.h>
#include<string>


struct student2 
{
long number;
char name[10]; 
};
int main()
{
struct student2 x;
long *p_number;
char *p_name;
p_number=&x.number;
p_name=x.name;
*p_number=100001L;
strcpy(p_name,"zhao1");
printf("number=%ld  name=%s\n",*p_number,p_name);
return 0;
}


======================================================================


//结构型数组的定义和数组元素成员的引用


#include<stdio.h>
#include<string>
int main()
{
struct student2
{
long number;
char name[10];
}s[2];

long *p_number;
char *p_name;

p_number=&s[0].number;
p_name=s[1].name;
*p_number=100001L;
strcpy(p_name,"sun3");
printf("%ld   %s\n",s[0].number,s[1].name);
return 0;
}
=========================================================================




//指向结构型变量的指针变量的使用
#include<stdio.h>
#include<string>
int main()
{
struct student2
{
long number;
char name[10];
}x,*p=&x;


p->number=100001L;
strcpy((*p).name,"zhao1");
printf("number=%ld\n",(*p).number);
printf("name=%s\n",p->name);

return 0;
}
======================================================================


//union共用体类型内的成员共用相同的存储空间,
//共用体变量所占字节空间是其成员变量中所占字节个数最多的那个成员所占的空间,用sizeof测试
//共用体及成员变量的起始地址都相同


#include<stdio.h>
union data
{
int i;
char ch;
float f;
};


int main()
{
union data a,b,c;


a.i=1;
a.f=2.0;
a.ch='a';//成员最后一个赋值则该成员的值有效

printf("a.i=%d  a.f=%f  a.ch=%c\n",a.i,a.f,a.ch);//前面两个是无效的则输出的是垃圾值只有最后的值有效
printf("a的地址=%x\n a.i的地址=%x\n a.f的地址=%x\n a.ch的地址=%x\n",&a,&a.i,&a.f,&a.ch);//测试共用体及共用体成员的地址


printf("共用体union data所占空间为%d\n",sizeof(union data));//等于占字节最多的成员空间为4。


return 0;
}






=============================================================================
共用体类型数据的特点:


1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种,也就是说,每一瞬时只有一个成员起作用,其他成员不起作用。
2)不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,也不能在定义共用体变量时对它初始化。
3)不能把共用体变量作为函数参数,也不能是函数带回共用体变量,但可以使用指向共用体变量的指针。
4)共用体类型可以出现在结构体类型定义中,也可以定义共用体数组,反之,结构体也可以出现在共用体类型定义中,
数组也可以作为共用体的成员。
-----------------------------------------------------------
有学生和教师,学生的数据中包括:姓名,学号,性别,职业,班级。教师的数据包括:姓名,号码,性别,职业,
职务。可以看出,学生和教师所包含的数据是不同的,现要求把它们放到同一表格中。


num   name sex  jog  class或position


101   li    f   s      501
102   wang  m   t      prof
---------------------------------------------------------
#include<stdio.h>
struct record
{
int num;
char name[10];
char sex;
char job;//if job=s student;job=t teacher;
union
{
int banji;
char position[10];
}category;


}person[2];


int main()
{
for(int i=0;i<2;i++)
{
scanf("%d %s %c %c",
&person[i].num,&person[i].name,
&person[i].sex,&person[i].job);
if(person[i].job=='s')
scanf("%d",&person[i].category .banji);
else
scanf("%s",&person[i].category .position);
}
for(i=0;i<2;i++)
if(person[i].job=='s')
printf("%d %s %c %c %d\n",person[i].num,person[i].name,
person[i].sex,person[i].job,person[i].category.banji);
else
printf("%d %s %c %c %s\n",person[i].num,person[i].name,
person[i].sex,person[i].job,person[i].category.position);
}




=================================================================================

//枚举类型
//如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”是指将变量
//的值一一列举出来,变量的值只限于列举出来的值的范围内。


#include<stdio.h>


enum  weekday {sum, mon,twe,wed,thu,fri,sat};
//在C编译中,对枚举元素按常量处理,故称枚举常量,它们不是变量,不能对它们赋值。但可以判断比较。
//定义一个枚举类型 weekday 其值取上面7个值,sum,mon等7个值是整数常量分别从0到6
//不可以给他们赋值如:sum=0;错误。
//当给sum赋值7时则下面的数从7开始数下去,
int main()
{
enum weekday day,day1;//定义一个枚举类型变量day,当然其值取上面定义的7个
//day=2;day=sunday; 都错误。
day=twe,day1=sum;
//wed=9;错误。
printf("big=%d\n",(day>day1)?day:day1);//可以比较
return 0;


}

================================================================================


//typedef的使用
//用typedef可以声明各种类型名,但不能用来定义变量。
//用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。
//typedef与#define有相似之处。




#include<stdio.h>


typedef int INTTECHER;
typedef float HEAR;


typedef  struct 
{
int month;
int day;
int year;
}DATE;


typedef int ARR[10];//定义int型数组


typedef char *STRING;//定义char型指针


typedef int (*POINTER)(int,float)//定义指向函数的指针POINTER;




int main()
{
INTTACHER i,j;//int i,j;
HEAR  a,b;//float a,b;
DATE birthday;//
ARR a;//相当于int a[10];
STRING p1,p2;//char *p1,p2;
POINTER p3,p4;


return 0;
}

==============================================================================






===============================================================
//文件的读写
//(写字符函数)从键盘输入10个字符,写到D盘的根目录下名为“char1.txt”的文本文件


#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;//*号中间又空格都可以
int i;
char c;
if((fp=fopen("e:\\char1.txt","w"))==NULL)//文件不先建立也可以
{
printf("Can not open file!\n");
exit(0);
}
for(i=0;i<10;i++)
{
c=getchar();
fputc(c,fp);
}
fclose(fp);
return 0;
}


----------------------------------------------------------------------------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值