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.com和http://blog.csdn.net/mirrorsbeyourself

时间: 2024-11-07 16:21:09

C语言第十四回合:结构体大集合的相关文章

C语言--&gt;(十四)结构体、宏、编译

知识点: 1.结构体 struct 2.typedef关键字 3.宏的定义 4.宏与函数的区别 5.文件包含和多文件编译 6.条件编译 ===========================结构体 思考:如果现在希望保存一个学生的信息,姓名,身高,年龄,地址,该如何保存 char name[64]; float height; int age; char addr[64]; 1.什么是结构体 struct 结构体指的是一种数据结构,是c语言中复合数据类型的一 种多种不同数据类型的集合 2.结构体

广商14级软件工程分数:第十四回合

目录 第一回合 第二回合 第三回合 第四回合 第五回合 第六回合 第七回合 第八回合 第九回合 第十回合 第十一回合 第十二回合 第十三回合 第十四回合 ? ? ? ? ? 题目 http://www.cnblogs.com/MissDu/p/5548544.html ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 评分规则 博客进度条作业截至时间为:每周日下午六点 要求: 列出博客数量和代码数量以及学到的知识点,表格参见:http://www.cnblogs

C#6.0语言规范(十四) 枚举

一个枚举类型是一个独特的值类型(值类型)声明一组命名的常量. 这个例子 1 enum Color 2 { 3 Red, 4 Green, 5 Blue 6 } 声明了一个名为枚举类型Color与成员Red,Green和Blue. 枚举声明 枚举声明声明了一个新的枚举类型.枚举声明以关键字开头enum,并定义枚举的名称,可访问性,基础类型和成员. 1 enum_declaration 2 : attributes? enum_modifier* 'enum' identifier enum_bas

逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合 2.在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类. 3. 结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 高级代

苹果新的编程语言 Swift 语言进阶(十四)--扩展

Swift语言的扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能.        扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名字.        扩展能够为已存在类型:     1)增加计算属性和计算静态属性:     2)定义新的实例方法和类型方法:     3)提... 请转移到此位置继续阅读,谢谢! 苹果新的编程语言 Swift 语言进阶(十四)--扩展 苹果新的编程语言 Swift 语

C++语言学习(十四)——C++类成员函数调用分析

C++语言学习(十四)--C++类成员函数调用分析 一.C++成员函数 1.C++成员函数的编译 C++中的函数在编译时会根据命名空间.类.参数签名等信息进行重新命名,形成新的函数名.函数重命名的过程通过一个特殊的Name Mangling(名字编码)算法来实现.Name Mangling算法是一种可逆的算法,既可以通过现有函数名计算出新函数名,也可以通过新函数名逆向推导出原有函数名.Name Mangling算法可以确保新函数名的唯一性,只要命名空间.所属的类.参数签名等有一个不同,那么产生的

程序猿之---C语言细节29(#define宏大小、空结构体大小、柔性数组不知道你见过没)

主要内容:#define宏大小.空结构体大小.柔性数组 一.#define宏大小 见例子 二.空结构体大小 根编译器有关 三.柔性数组 不常用,可看看 #include <stdio.h> #define N 4 #define STR "abcd" int main() { struct student { }stu; printf("N = %d\n", sizeof(N)); printf("num 5 memery = %d\n&quo

C语言库函数大全及应用实例十四

原文:C语言库函数大全及应用实例十四                                       [编程资料]C语言库函数大全及应用实例十四 函数名: strset 功 能: 将一个串中的所有字符都设为指定字符 用 法: char *strset(char *str, char c); 程序例: #i nclude #i nclude int main(void) { char string[10] = "123456789"; char symbol = 'c'; p

【C语言天天练(十)】结构体

引言:数据经常以成组的形式存在.在C中,使用结构可以把不同类型的值存放在一起. 结构的声明有两种 1.struct SIMPLE{ int a; char b; float c; };然后用标签SIMPLE去声明结构体变量. 2.typedef struct{ int a; char b; float c; }Simple;然后用Simple去声明结构体变量.此时Simple是个类型名,而不像上面的SIMPLE是个标签. 结构成员可以是标量.数组.指针甚至是其他结构. 结构成员的直接访问用点操作