精华内容
参与话题
问答
  • 结构体数组的定义和引用

    千次阅读 2013-01-22 20:19:06
    /*  * 程序的版权和版本声明...* 文件名称:结构体数组的定义和引用.cpp  * 作 者:毛通  * 完成日期:2013 年 1月 22日  * 版 本 号:v1.0  * 对任务及求解方法的描述部分: 对候选人得票的统计程序 * 输

    /* 

    * 程序的版权和版本声明部分: 

    * Copyright (c) 2012, 烟台大学计算机学院 

    * All rights reserved. 

    * 文件名称:结构体数组的定义和引用.cpp 

    * 作   者:毛通 

    * 完成日期:2013 年 1月 22日 

    * 版 本 号:v1.0 

    * 对任务及求解方法的描述部分: 对候选人得票的统计程序

    * 输入描述:三个候选人的名称 十个票

    * 问题描述:设有3个候选人 ,最终只能有1个人当选为领导 。

                今有10个人参加投票 , 从键盘先后输入这10个人所投候选人的名字,
                要求最后输出各候选人得票结果 。

    * 程序输出:“每个候选人及其得票数” 

    * 问题分析:定义一个候选人结构体数组,包括十个元素,在每个元素中存放有关的数据

    * 算法设计:略

    */

    /*
    对候选人得票的统计程序
    设有3个候选人 ,最终只能有1个人当选为领导 。 今有10个人参加投票 , 从键盘先后输入这10个人所投候选人的名字,
    要求最后输出各候选人得票结果 。
    */ 
    
    # include <iostream>
    
    using namespace std;
    
    struct Person //结构体类型struct的声明
    {
    	char name [20] ;
    	int count ;
    };
    
    int main()
    {
    	Person leader [3] =  {"li",0,"zhang",0,"sun",0} ;//定义Person 类型的数组 ,内容为3个候选人的姓名和当前的得票数
    
    	int i,j ;
    
    	char leader_name[20] ;//投票人所选人的姓名
    
    	for (i=0 ; i<10 ; i++)
    	{
    		cin >> leader_name ;//先后输入十张票上所写的姓名 
    		for (j=0;j<3;j++)
    		{
    			if (strcmp(leader_name,  leader[j].name)==0) 
    				leader[j].count++;   
    		}//如果与某一候选人的姓名相同,就给他加一票
    	}
    	cout << endl;
    
    	for (i=0;i<3 ;i++)
    	{
    		cout << leader[i].name  << ":" << leader[i].count << endl;
    	}
    
    	return 0;
    }


     

     

    /*

    运行结果:

    */

    展开全文
  • C语言--结构体数组和结构体指针

    万次阅读 多人点赞 2018-08-16 21:06:49
    1.结构体数组 具有相同结构体类型的变量构成的数组,称为结构体数组。与普通数值型数组的不同之处在于每个数组元素都是一个结构体变量,它们都分别包含各个成员项。 定义结构体数组一般形式是 struct 结构体名 { ...

     结构体是我们自己定义的一种新的数据类型, 同样可以有结构数组和结构指针。 

    1.结构体数组

    具有相同结构体类型的变量构成的数组,称为结构体数组。与普通数值型数组的不同之处在于每个数组元素都是一个结构体变量,它们都分别包含各个成员项。

    • 定义结构体数组一般形式是
    struct 结构体名
    {
        成员列表
    }数组名[数组长度];
    
    或者:
    先声明一个结构体类型,然后再定义结构体数组
    
    结构体类型 数组名[数组长度];

    对结构体数组初始化的形式是在定义数组的后面加上:={初始表列};

    如:

    struct student S1[3]={"Li",0,"Zhang",2"Sun",3};

    结构体数组的应用举例

    输入三个学生的个人信息 包含学号 姓名和三门学科的成绩 
    输出平均成绩最高的学生的学号 姓名 各科成绩以及平均成绩 

    #include<stdio.h>
    
    
    struct Student
    {int num;
    char name[20];
    float score[3];
    float aver;
    };
    
    
    
    void input(struct Student stu[])
    {
        //input函数形参为结构体数组,实参为结构体指针。 
        int i;
        printf("请依次输入学生编号,姓名,三个科目成绩:\n");
        for (i=0;i<3;i++)
        {
            scanf("%d %s %f %f %f",&stu[i].num, &stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
            stu[i].aver = (stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
        }
    }
    
    struct Student max(struct Student stu[])
    {
        //max函数形参为结构体数组,实参为结构体指针。 
        int i,m=0;
        for (i = 0;i<3;i++)
        {
            if(stu[i].aver>stu[m].aver) m = i;
        }
        return stu[m];
    }
    
    void print(struct Student stud)
    {
    //print函数形参是结构体变量,实参是结构体变量(是结构体数组元素)。
        printf("成绩最高的学生:\n");
        printf("学号:%d\n 姓名:%s\n 三门成绩:%5.1f,%5.1f,%5.1f\n 平均成绩:%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);
        getchar();
    }
    
    int main()
    {
        
        struct Student stu[3];
        struct Student *p=stu;//定义结构体指针p,并初始化它让他指向结构体数组stu的首地址。
        input(p);//输入序号,姓名,成绩等数据,存入结构体数组中
        print(max(p));//比较平均成绩,得到平均成绩最大的那个数组
        getchar();
        getchar();
    //有些编译器在执行完程序后会自动关闭输出界面,俗称“闪退”,加上getchar();意思是等待用户从键盘输入
    //一个按键,这样可以解决闪退问题。
    
        return 0;
    }
    

    运行结果

    2.结构体指针

    所谓结构体指针就是指向结构体变量的指针,表示的是这个结构体变量占内存中的起始位置,

    如果把一个结构体变量的起始地址存放在一个指针变量中,那么,这个指针变量就指向该结构体变量。

    定义结构体变量的指针:

    //假设已有一个结构体名为Student
    struct Student *pStruct
    // 结构体类型 * 指针名;

    demo:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /*1.使用->引用结构体成员 */
    
    int main ()
    {
    
        struct Student
        {
            long num;
            char name[20]; 
            char sex;
            float score;
        };//student={"Girl",2017,'w',2};
        
    
        struct Student stu;//定义struct Student类型的变量stu
        struct Student *pStruct;//定义指向struct Student类型数据的指针变量pStruct
        pStruct = &stu; //pStruct指向stu
        stu.num=10101;
        strcpy(stu.name,"fan");//对结构体变量的成员赋值
        stu.sex='M';
        stu.score=88;
        printf("-----------the sudent's information----------\n");
        printf("NO.:%ld\nname:%s\nsex%c\nscore:%5.1f\n",stu.num,stu.name,stu.sex,stu.score);
    
        printf("\nNO.:%ld\nname:%s\nsex%c\nscore:%5.1f\n",(*pStruct).num,(*pStruct).name,(*pStruct).sex,(*pStruct).score);
    
        printf("\nNO.:%ld\nname:%s\nsex%c\nscore:%5.1f\n",pStruct->num,pStruct->name,pStruct->sex,pStruct->score);
    
    
        return 0;
    }

    (*pStruct).num中的(*pStruct)表示,*pStruct指向结构体变量,(*pStruct).num表示pStruct指向结构体变量中的成员num,注意括号不能省略,因为成员运算符“.”优先于“*”运算符。为了直观和使用方便,C语言允许把(*pStruct).num用pStruct->num来代替,上面的三种表达方式等价。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct Student //声明结构体类型Student
    {
    	int num;
    	char name[20]; 
    	char sex;
    	int age;
    };
    struct Student stu[5]=
    {
        {10101,"Zhou ping",'M',15},//定义结构体数组并初始化
        {10102,"Zhang ping",'M',15},
        {10103,"Liou fang",'F',16},
        {10104,"Cheng ling",'F',17},
        {10105,"Wang ming",'M',15}
    };
    
    int main()
    {
    	struct Student *ps;//定义指向struct Student结构体类型数据的指针变量
    	printf("No\tName\t\t\tSex\tage\t\n");
    	for(ps=stu;ps<stu+5;ps++)
    		printf("%d\t%s\t\t%c\t%d\t\n",ps->num,ps->name,ps->sex,ps->age);
    	return 0;
    }
    

    如果ps的初始值是stu,即指向stu的第一个元素,ps加1后就指向下一个元素。(++ps)->num和(ps++)->是不一样的

    在程序中,定义了Student结构类型的外部数组stu并作了初始化赋值。在main函数内定义ps为指向Student类型的指针。在循环语句for的表达式1中,ps被赋予stu的首地址,然后循环5次,输出stu数组中各成员值。
    应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。
        ps=&stu[1].sex;
    而只能是:
        ps=stu;(赋予数组首地址)
    或者是:
        ps=&stu[0];(赋予0号元素首地址)

    展开全文
  • 结构体&结构体数组

    万次阅读 多人点赞 2018-08-16 18:17:39
    1、结构体的定义 struct 结构体类型名 { 类型名 成员名; 类型名 成员名; …… }; 先声明结构体类型,再定义结构体变量名 声明结构体类型,不分配空间 定义结构体类型变量,就要分配内存空间 1)结构体被...

    1、结构体的定义

    struct 结构体类型名

    类型名 成员名;
    类型名 成员名;
    ……
    };

    先声明结构体类型,再定义结构体变量名

    声明结构体类型,不分配空间

    定义结构体类型变量,就要分配内存空间

    1)结构体被分配的内存空间

    struct student
    {
        int num;//4字节
        char name[20];//20字节
        char sex;//1字节,但因为内存对齐占4字节
        int age;//4字节
        double score;//8字节
        char addr[30];//30字节,内存对齐占32字节
    };
    int main()
    {
        struct student stu1,stu2;
        printf("%d\n",sizeof(stu1));
        return 0;
    }

    2)结构体的嵌套

    /*
    *copyright(c) 2018,HH
    *All rights reserved.
    *作 者:HH
    *完成日期:2018年8月15日
    *版本号:v1.0
    *
    *问题描述:结构体嵌套、赋值、输出
    *输入描述:;
    *程序输出:
    */
    
    #include<stdio.h>
    #include<string.h>
    struct date
    {
        int month;
        int day;
        int year;
    };
    struct student
    {
        int num;
        char name[20];
        char sex;
        struct date birthday;
        float score;
    };
    struct student1;
    struct student2={10002,"MaYun",'f',8,28,2000,99.9999};
    int main()
    {
        student1=student2;
        printf("%d\n",student1.num);
        printf("%s\n",student1.name);
        printf("%c\n",student1.sex);
        printf("%d\n",student1.date birthday.month);
        printf("%d\n",student1.date birthday.day);
        printf("%d\n",student1.date birthday.year);
        printf("%f\n",student1.score);
        return 0;
    }
    

    3)结构体的成员是数组

    /*
    *copyright(c) 2018,HH
    *All rights reserved.
    *作 者:HH
    *完成日期:2018年8月14日
    *版本号:v1.0
    *
    *问题描述:结构体输出
    *输入描述:;
    *程序输出:
    */
    
    #include<stdio.h>
    #include<string.h>
    struct student//自定义结构体
    {
        int num;//学号
        char name[10];//名字
        double score[3];//三科成绩
    };
    void print(struct student s)//自定义输出函数
    {
        printf("%ld %s\n",s.num,s.name);
        printf("%1f %1f %1f\n",s.score[0],s.score[1],s.score[2]);
    }
    
    int main()
    {
        struct student stu;
        stu.num=42001;
        strcpy(stu.name,"MaHuTeng");//字符串赋值函数,将字符串复制到数据项name中
        stu.score[0]=98,stu.score[1]=99,stu.score[2]=100;
        print(stu);
        return 0;
    }
    

    2、结构体数组

    定义:该数组的每个元素都是一个结构体。

    结构体数组的初始化及直接输出方法:

    /*
    *copyright(c) 2018,HH
    *All rights reserved.
    *作 者:HH
    *完成日期:2018年8月16日
    *版本号:v1.0
    *
    *问题描述:结构体数组的正确初始化及输出
    *输入描述:;
    *程序输出:
    */
    
    #include<stdio.h>
    #include<string.h>
    struct student
    {
        int num;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    };
    int main()
    {
        int i;
        struct student stu[3]={{10101,"LiuHu",'F',18,99.7,"beijing road"},{10102,"NaoDan",'M',17,99.8,"shanghai road"},{10103,"MaHuangTeng",'F',48,99.9,"shenzhen road"}};
        for(i=0;i<3;i++)
        {
           printf("%d %s %c %d %1f %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score,stu[i].addr);
        }
        return 0;
    }
    

    以下为自定义函数调用的方式实现结构体数组的输出:

    /*
    *copyright(c) 2018,HH
    *All rights reserved.
    *作 者:HH
    *完成日期:2018年8月16日
    *版本号:v1.0
    *
    *问题描述:结构体数组的正确初始化及输出(函数调用的方法)
    *输入描述:;
    *程序输出:
    *注意,数组地址传递容易出错
    */
    
    #include<stdio.h>
    #include<string.h>
    struct student
    {
        int num;
        char name[20];
        char sex;
        int age;
        float score;
        char addr[30];
    };
    struct student s[3];
    void print(struct student s[3])//自定义输出函数以供调用
    {
        int i;
        for(i=0;i<3;i++)
        {
            printf("%d %s %c\n",s[i].num,s[i].name,s[i].sex);
            printf("%d %1f %s\n",s[i].age,s[i].score,s[i].addr);
        }
    }
    int main()
    {
        struct student stu[3]={{10101,"LiuHu",'F',18,99.7,"beijing road"},{10102,"NaoDan",'M',17,99.8,"shanghai road"},{10103,"MaHuangTeng",'F',48,99.9,"shenzhen road"}};
        print(stu);//若此处写成print(stu[])则会报错expected expression before'print'
        return 0;
    }
    

    在此方法中,由于print()函数的定义

    print(stu)不会报错

    而print (stu[ ])会报错,

    数组名等价于等同于指向数组首元素的指针,stu[ ]代表的是数组,而stu代表指向的数组首地址的指针

    报错原因是,因为被调用函数的形参对象是数组名,而不是数组!

    展开全文
  • 结构体数组定义

    千次阅读 2018-08-07 22:06:32
    结构体数组  结构体数组的定义:具有相同结构体类型的结构体变量组成的数组  定义结构体数组的方法和定义结构体变量的方法类似。 eg: #include&lt;stdio.h&gt; #include&lt;string.h&gt; #...

    结构体数组
        结构体数组的定义:具有相同结构体类型的结构体变量组成的数组
       定义结构体数组的方法和定义结构体变量的方法类似。

    eg:

    #include<stdio.h>
    #include<string.h>
    #define N 10
    struct student
     {
    	int SID;
    	char name[N];
    	float score;
     } s2[2]; 
    
    int main()
    {
     int i;
     struct student s1[2]={{1,"s1",99},{2,"s2",88}};
     printf("  %d %s %.2f\n",s1[0].SID,s1[0].name,s1[0].score);
     int len=sizeof(s2)/sizeof(struct student);//求结构体数组长度
     for(i=0;i<len;i++)
     {
       printf("input sid\n");
       scanf("%d",&s2[i].SID);
       printf("input name\n");
       scanf("%s",s2[i].name);
       printf("input score\n");
       scanf("%f",&s2[i].score);
     }
    
     for(i=0;i<len;i++)
     {
       printf("  %d %s %.2f\n",s2[i].SID,s2[i].name,s2[i].score);
     }
     return 0;
    }

     

    结果:

    展开全文
  • c数组(结构体数组)定义与初始化

    万次阅读 2019-04-10 14:43:56
    c数组定义与初始化 int array[100];//长度100; int array[100] = {1,2,3,4,5,5,6}//定义时进行初始化 int * a =0 ;//a指向int数据 int* array = new int[100]//定义一个指向int类型数据的指针 int* array = new int...
  • 访问结构体数组的三种方法 在堆上建立结构体数组 Stu ** arrstu = malloc(sizeof(Stu*)*20); 赋值 Stu s1 = {"dai",20}; arrstu[0] = &s1; 一、下标加->法 连续的内存空间都可以使用[]方法访问空间 arrstu...
  • 结构体和结构体数组

    2020-03-14 11:14:21
    一组数组异质的数组,但自成整体的数据 结构体变量的定义方法: 先声明结构体类型,再定义变量类型。 声明结构体变量时不分配空间,在定义结构体变量时才分配内存空间。 例1 学校体育考试,Tom得了一个不错...
  • 结构体数组的定义

    2016-03-21 17:28:14
  • 结构体数组

    2017-09-10 19:18:31
    结构体数组 结构体数组相对于顺序表的优势在于可以用每个结点存储每个个体的信息,相对于链表的优势在于操作简便;结构体数组的劣势在于插入、删除操作占用资源过多,并且有时候无法分配足够的连续空间。  结构体...
  • 结构体数组

    千次阅读 多人点赞 2019-05-29 20:46:22
    结构体数组的定义与引用 一个结构体变量可以存放一个学生的一组信息,可是如果有10个学生?难道要定义10个结构体变量?,很明显不现实,这时就要使用数组。结构体中也有数组,称为结构体数组。他与前面讲过的数组...
  • C语言中的结构体数组

    万次阅读 多人点赞 2017-01-15 00:45:10
    C语言中的结构体数组1.结构体 数组概念 2. 结构体数组定义和初始化 3. 结构体数组的引用结构体数组的概念元素为结构体类型的数组称为结构体数组,在实际的应用过程中,经常使用结构体数组来表示具有相同数据结构...
  • 结构体数组

    万次阅读 2012-01-17 17:17:28
    5 结构体数组  一个结构体变量中可以存放一组数据(如一个学生的学号,姓名,成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组结构体数组与以前介绍过的数据值型数组不同之...
  • 结构体数组

    2017-04-08 17:20:12
    如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。 定义结构体数组...
  • 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子: struct stu{ char name[]; //姓...
  • Matlab-结构体数组的索引

    万次阅读 2017-01-03 12:53:48
    %% 结构体数组的索引 (Structure Array)% 注意:结构体的创建 与 矩阵/元胞数组 不同,元胞数组以元胞的方式进行储存,而结构体是以 fields 储存的(而不是以对象个数储存的) % 所以元胞数组创建时,提供元胞的...
  • 目前开发遇到一个问题,有一个动态库dll,需要传进去一个结构体数组,函数为 opt_api_init(InfoInitMarket* InitMarketInfo); 这个是结构体 typedef struct tagInfoInitMarket { char commID[COMMODITY_ID + 1]; ...
  • C语言结构体数组

    千次阅读 2018-09-11 13:04:50
    C语言结构体数组 结构体数组的概念 元素为结构体类型的数组称为结构体数组,在实际应用过程中,经常使用结构体数组来表示具有相同数据结构的一个群体。 struct student{  int xh;  char *name;  char *sex;...
  • 根据结构体数组中某一数据项对结构体数组排序

    千次阅读 多人点赞 2018-08-17 17:46:06
    /* ...*All rights reserved. ...*问题描述:输入结构体数组,并根据结构体中的某一数据项对整个结构体数组进行排序 *输入描述:; *程序输出: */ #include<stdio.h> #include<string.h> struc...
  • 结构体数组定义时初始化

    千次阅读 2019-05-29 21:02:11
    结构体数组的初始化与前面讲的数值型数组的初始化是一模一样的,数值类型数组初始化的方法需要注意的是在结构体数组的初始化中同样适用,因为不管是不是数值型数组还是结构体数组都是数组。 #include<stdio.h>...
  • 结构体数组

    2015-09-26 16:46:54
    简单的结构体数组定义和使用 #include struct student {  int num;  char name[20];  float score; }stu[3]={{10203,"李华",90},  {10204,"张梅",92},  {10205,"王军",98}}; main()

空空如也

1 2 3 4 5 ... 20
收藏数 200,301
精华内容 80,120
关键字:

结构体数组