首页 > 代码库 > C语言第十四回合:结构体大集合

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

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://codingit.howbbs.comhttp://blog.csdn.net/mirrorsbeyourself

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