您的位置:首页 > 编程语言 > C语言/C++

C语言第十四回合:结构体大集合

2014-11-24 14:03 204 查看
C语言第十四回合:结构体大集合

 

【学习目标】

1.        结构体

2.        结构体数组

3.        结构体指针

 

 

结构体:是数据结构类型,把有内在联系的不同类型的数据统一成一个整体,使它们相互关联。是变量的集合,可以单独使用其的成员。

 

  A:结构体的定义

    使用关键字:struct

   struct 结构体名 

{

    类型标识符  成员名1;

    类型标识符  成员名2;

     ……

};     //分号一定不能省

PS:  

(1)结构定义并不预留内存,结构体变量的定义才引起存储分配

(2)  结构体成员的数据类型可以是C语言的基本数据类型,也可以是数组和指针类型。还可以是自定义类型,成员的排列不分先后次序

(3)结构体名是合法命名的标识符

(4)结构定义仅描述了一个结构的形式。要在程序里使用结构,需要声明结构变量。

 

 

struct stu
{
int     num;         //编号
char    name[ 15 ]; //姓名
char    sex[ 10 ];  //性别
int     age;         //年龄
double  score;      //分数
};  //分号不可少

//使用typedef定义结构体的别名
typedef struct stu
{
int     num;         // 编号
char    name[ 15 ]; //姓名
char    sex[ 10 ];  //性别
int     age ;        //年龄
double  score;      //分数
} struct_name; //分号不可少
//struct_name是该结构体的别名,
//可以使用此别名定义结构体变量,也可以使用struct stu定义


B: 结构体变量的初始化

//结构体的使用

#include <stdio.h>

//结构体的定义
//定义学生的结构
struct students
{
char    name[ 15 ]; //姓名
char    sex[ 8 ];  //性别
int     age;       //年龄
double  score;     //成绩
} //定义变量stu1,并初始化
stu1= { "张三", "男", 23, 99.0 }; //注意:这个分号必须要!!!

int main( void )
{
//结构变量的定义
//定义结构体变量stu2,并初始化【两种初始化都可以】
struct students stu2={ "李四", "男", 22, 90 };

//打印结构体内容
printf ( "姓名 性别 年龄 成绩\n" );
printf( "%s%s   %d  %.1lf\n", stu1.name, stu1.sex, stu1.age, stu1.score );
printf( "%s%s   %d  %.1lf\n", stu2.name, stu2.sex, stu2.age, stu2.score );

return 0;
}


 

C:结构体内容的输入和输出

//结构体的使用

#include <stdio.h>

//结构体的定义
//定义学生的结构
struct students
{
char    name[ 15 ]; //姓名
char    sex[ 8 ];  //性别
int     age;       //年龄
double  score;     //成绩
}; //注意:这个分号必须要!!!

int main( void )
{
//结构变量的定义
//定义结构体变量stu
structstudents stu;

//结构体内容的输入
printf( "输入:\n姓名性别 年龄 成绩\n" );
//name和sex就是首元素首地址,所以不用取地址符,而age和score是变量
scanf("%s %s %d %lf", stu.name, stu.sex, &stu.age, &stu.score );

//打印结构体内容,%后跟数字,如果不懂,请看《C语言第一回合》
printf("\n%s %5s %5s %5s\n","姓名","性别","年龄", "成绩" );
printf("%s %5s %5d %5.1lf\n", stu.name, stu.sex, stu.age, stu.score );

return 0;
}


运行结果:

 


D:结构体数组

  结构体数组:就是结构体作为类型定义数组变量。这和结构体变量很相同,结构体数组不过是多个结构体变量的集合。

#include<stdio.h>

// 定义结构体
typedefstruct st
{
int    number;
char   name[ 15 ];
char   sex[ 10 ];
int    age;
double score;
}students;  //students是整个结构体的别名

int main(void )
{
int i= 0;

//定义结构体数组,可以使用struct st定义,也可使用其的别名students
struct st stu1[ 2 ];   //方式一
students stu[ 2 ];      //方式二

printf( "依次输入编号、姓名、性别、年龄、分数:\n" );
for( i= 0; i< 2; i++ )
{
scanf( "%d %s %s %d %lf", &stu[ i ].number,stu[ i ].name,stu[ i ].sex, &stu[ i ].age, &stu[ i ].score );
}

printf( "\n打印学生信息:\n" );

printf( "%s %5s %5s %5s%5s\n", "编号", "姓名", "性别", "年龄", "分数" );

for( i= 0; i< 2; i++ )
{
printf( "%4d %5s %5s %5d%6.1lf", stu[ i ].number, stu[ i ].name, stu[ i ].sex, stu[ i ].age, stu[i ].score );
printf( "\n");
}

return 0;
}


运行结果:

 


E:结构体指针

跟上面的都一样,只不过结构体指针的访问除了用运算符“.”(点)访问,还可用指向运算符“->”访问(位置还是和用‘.’访问的位置一样)。

#include <stdio.h>

// 定义结构体
typedef struct st
{
int     number;
char    name[ 15 ];
char    sex[ 10 ];
int     age;
double  score;
}students; //students是整个结构体的别名

int main( void )
{
inti= 0;

//定义结构体数组,可以使用struct st定义,也可使用其的别名students
struct st stu[ 2 ];   //结构体数组
students *ptr= NULL;         //结构体指针

ptr= stu;  //指向数组首地址

printf( "依次输入编号、姓名、性别、年龄、分数:\n" );
for(i= 0; i< 2; i++ )
{   //使用数组形式访问
scanf( "%d %s %s %d %lf",&ptr[ i].number, ptr[ i ].name, ptr[ i ].sex, &ptr[ i ].age, &ptr[i ].score );

}

printf("\n打印学生信息:\n" );

printf("%s %5s %5s %5s %5s\n", "编号", "姓名","性别", "年龄", "分数" );

for(i= 0; i< 2; i++ )
{
printf("%4d %5s %5s %5d %6.1lf", ptr ->number, ptr ->name,ptr->sex, ptr ->age, ptr->score );
ptr++;
printf("\n" );
}

return 0;
}


运行结果:



F:结构体嵌套

  结构体嵌套:就是在结构体中用另一个结构体(已经存在的结构体)去定义变量

//定义了两个结构体,birthday嵌套在stud中使用
#include <stdio.h>

struct birthday  //定义出生年月的结构体
{
intday;
intmonth;
intyear;
};
// 定义结构体
typedef struct stud
{
charname[ 15 ];
charsex[ 10 ];
structbirthday birth;  //结构体嵌套
}students; //students是整个结构体的别名

int main( void )
{
inti= 0;

//定义结构体数组,可以使用structstud定义,也可使用其的别名students
struct stud stu[ 2 ];   //结构体数组

printf( "依次输入姓名、性别、年月 日:\n" );
for(i= 0; i< 2; i++ )
{
scanf( "%s %s %d %d %d", stu[ i].name, stu[ i ].sex, &stu[ i ].birth.year, &stu[ i ].birth.month,&stu[ i ].birth.day );
}

printf("\n打印学生信息:\n" );

printf("%s %5s %5s %5s %5s\n", "姓名", "性别","年", "月", "日" );

for(i= 0; i< 2; i++ )
{
printf("%s %5s %5d %5d %5d", stu[ i ].name, stu[ i ].sex, stu[ i].birth.year, stu[ i ].birth.month, stu[ i ].birth.day );
printf("\n" );
}

return 0;
}


运行结果:

 

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

转载时保留原文的链接http://oursharingclub.joinbbs.net和http://blog.csdn.net/mirrorsbeyourself
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: