精华内容
下载资源
问答
  • 结构体数组的定义

    千次阅读 2019-08-28 11:38:20
    1、先定义结构体类型,再定义结构体数组 struct student { int num; char name[20]; char sex;...2、定义结构体类型同时定义结构体数组 struct student { int num; char name[20]; ...

    1、先定义结构体类型,再定义结构体数组

    struct student 
    {
        int num;
        char name[20];
        char sex;
        int age;
    };
    struct student stu[2];
    

    2、定义结构体类型的同时定义结构体数组

    struct student 
    {
        int num;
        char name[20];
        char sex;
        int age;
    }stu[2];
    

    3、省略结构体类型和变量名称

    struct 
    {
        int num;
        char name[20];
        char sex;
        int age;
    }stu[2];

     

    展开全文
  • 结构体数组 结构体数组格式:声明变量类型 数组名称[数组长度] //定义一个结构体数组名为a,它里面包含有5个元素,每一个元素都是一个结构体变量 Wor a[5]={}; ...

    结构体数组

    结构体数组的定义:

    结构体数组格式:声明变量类型 数组名称[数组长度]

    //定义一个结构体数组名为a,它里面包含有5个元素,每一个元素都是一个结构体变量
    Wor a[5]={};
    
    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void main(){
    	WOR a[3]=
    	{
    		{"0001","陈文杰","男",1200},
    		{"0001","张三丰","女",500},
    		{"0001","张四丰","女",1200}
    	}
    }
    

    对比记忆
    在这里插入图片描述

    结构体数组的输出

    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void main(){
    	WOR a[6]={
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200}, 
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	int i;
    	for(i=0;i<6;i++){
    		printf("%s,%s,%s,%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    	}
    }	
    

    在这里插入图片描述
    结构体对象中的a[i]就代表一个对象,它已经不再是一个值了
    所以我们应该用a[ii].成员名

    改进以上程序

    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void output(WOR a[],int n){//次函数是用来输出长度为n的工人数组的信息 
    	int i;
    	printf("工号\t姓名\t性别\t年龄\n"); 
    	for(i=0;i<6;i++){
    		printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    	}
    }
    void main(){
    	WOR a[6]={
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200}, 
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	output(a,6);
    }
    

    在这里插入图片描述

    结构体的应用

    案例一、

    1、编写一个函数,它的目的是为了输出所有性别为男的的职工信息
    算法分析:
    1)这个函数它不用返回值因为该函数是为了完成输出
    2)该函数要处理很多职工,就需要一个数组,数组的类型为职工类型
    注意:在C语言当中字符串不能直接比较是否相同,要通过strcmp这个函数来比较其两个字符串是否相同

    #include<stdio.h>
    #include<string.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void QueryWorker(WOR a[],int n){//次函数是用来输出长度为n的工人数组的信息 
    	int i;
    	printf("全部员工:\n"); 
    	printf("工号\t姓名\t性别\t年龄\n"); 
    	for(i=0;i<6;i++){
    		printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    	}
    	printf("所有男员工:\n"); 
    	printf("工号\t姓名\t性别\t年龄\n"); 
    	for(i=0;i<6;i++){
    		if(strcmp(a[i].sex,"男")==0){ 
    			printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    		} 
    	}
    	printf("所有女员工:\n"); 
    	printf("工号\t姓名\t性别\t年龄\n"); 
    	for(i=0;i<6;i++){
    		if(strcmp(a[i].sex,"女")==0){ 
    			printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    		} 
    	}
    }
    void main(){
    	WOR a[6]={ 
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200}, 
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	QueryWorker(a,6);
    }
    

    在这里插入图片描述
    2、能够输出指定性别的职工

    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void QueryBySex(WOR a[],int n,char b[]){//次函数是用来输出长度为n的工人数组的信息 
    	int i;
    	
    	printf("工号\t姓名\t性别\t年龄\n");  
    	for(i=0;i<6;i++){
    		if(strcmp(a[i].sex,b)==0){ 
    			printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    		} 
    	}
    	
    }
    void main(){
    	WOR a[6]={ 
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200}, 
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	char b[10];
    	printf("请输入您要查询的性别 :\n");
    	scanf("%s",b);
    	QueryBySex(a,6,b);
    }
    

    案例二、

    让用户输入一个工号,然后在一个结构体数组当中去查找有没有这个工人,如果有则输出这个工人的信息,如果没有则找不到此人

    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    
    void FindById(WOR a[],int n,char id[]){
    	//我们要访问数组里面每一个工人,如果发现了一个工人,就退出循环。如果找不到就输出找不到此人
    	int i;
    	for(i=0;i<n;i++){
    		if(strcmp(a[i].id,id)==0){//说明第i个工人就是我们要找的职工 
    			break;//强制终止循环 
    		}
    	} 
    	
    	//在退出循环之后,再来检查i与n的关系
    	if(i<n){//说明循环在中途就break,发现了职工 
    		printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    	} 
    	else//找不到职工 
    	{
    		printf("找不到此人");
    	}
    }
    
    void main(){
    	WOR a[6]={ 
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200},
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	char b[10];
    	printf("请输入您要查询的id :\n");
    	gets(b);
    	FindById(a,6,b);
    }
    

    在这里插入图片描述

    案例三、

    求出所有职工中最高工资那个职工的信息
    注意:这里有一个知识点:成员比较整体赋值

    #include<stdio.h> 
    #include<string.h>
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void max(WOR a[],int n){
    	WOR m=a[0];
    	int i;
    	for(i=0;i<n;i++){
    		if(m.pay<a[i].pay){//如果m的工资小于a[i]的工资,就把m赋值给a[i]
    			m=a[i];
    		}
    	}
    	printf("%s\t%s\t%s\t%d\n",m.id,m.name,m.sex,m.pay);
    	//假设第一个工人是最高工资的那个工人	 
    } 
    void main(){
    	WOR a[6]={ 
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",7000},
    		{"0003","张四丰","女",1200},
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	max(a,6);
    }
    

    在这里插入图片描述
    上方程序改进
    输出所有工资大于平均工资的职工
    1、必须要先求出平均
    2、在访问每一个职工,如果发现这个职工的工资要小于平均工资的话,就输出这个职工的信息。

    #include<stdio.h> 
    #include<string.h>
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void QueryByAver(WOR a[],int n){
    	int i;
    	float aver; 
    	int sum = 0; 
    	//求出总工资 
    	for(i=0;i<n;i++){
    		sum+=a[i].pay;
    	}
    	//求出平均工资aver 
    	aver =(float)sum/n;
    	printf("平均工资为%f\n",aver);
    	printf("大于平均工资为:\n");
    	//访问每一个职工 
    	for(i=0;i<n;i++){
    		if(a[i].pay>=aver){//如果发现职工的工资大于等于平局工资,就输出对应职工的信息 
    			printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    		}
    	}	
    }
    void main(){
    	WOR a[6]={ 
    		{"0001","陈文杰","男",3200},
    		{"0002","张三丰","女",7000},
    		{"0003","张四丰","女",1200},
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	QueryByAver(a,6);
    }
    

    在这里插入图片描述
    算法变换

    #include<stdio.h> 
    #include<string.h> 
    typedef struct stud{//定义了一个结构体  
    	char Id[10];//学号 
    	char Name[10];//姓名 
    	int China;//语文成绩
    	int Math;//数学成绩
    	int English;//英语成绩	 
    }STU;
    //编写一个函数,它的目的是为了输出所有学生的总分与平均分
    void fun(STU a[],int n){
    	int sum=0,i;
    	printf("学号\t姓名\t语文\t数学\t英语\t总分\t平局分\n"); 
    	//要访问里面的每一个学生 
    	for(i=0;i<n;i++){
    		//对于一个学生a[i]而言我们要来输出它的信息
    		printf("%s\t%s\t%d\t%d\t%d\t%d\t%.1f\n",
    		a[i].Id,a[i].Name,a[i].China,a[i].Math,a[i].English,
    		a[i].China+a[i].Math+a[i].English,
    		(a[i].China+a[i].Math+a[i].English)/3.0); 
    		sum = a[i].China+a[i].Math+a[i].English;
    	}
    } 
    void main(){
    	STU a[8]={
    	{"S1","张一军",127,150,100}, 
    	{"S2","张二军",75,85,89}, 
    	{"S3","张三军",67,58,86}, 
    	{"S4","张四军",120,101,87}, 
    	{"S5","张五军",136,100,82}, 
    	{"S6","张六军",141,52,83}, 
    	{"S7","张七军",125,85,81},  
    	{"S8","张八军",136,65,79}
    	};
    	fun(a,8);
    }
    

    在这里插入图片描述
    案例变换:
    注意字符串也不能够直接赋值,要通过一个函数来对字符串进行赋值
    strcpy:通过这个函数才可以给字符串进行赋值

    #include<stdio.h> 
    #include<string.h> 
    typedef struct stud{//定义了一个结构体  
    	char Id[10];//学号 
    	char Name[10];//姓名 
    	int China;//语文成绩
    	int Math;//数学成绩
    	int English;//英语成绩	 
    }STU;
    //编写一个函数,求出每一个学生的优秀科目,目的不是输出分数,而是要输出对应科目的名称
    void Perferct(STU a[],int n){
    	int sum=0,i;
    	char per[20];
    	int maxscore;//用来确保最优科目的分数 
    	//要输出标题 
    	printf("学号\t姓名\t语文\t数学\t英语\t最优秀科目\n"); 
    	//要访问里面的每一个学生,对于第i学生要确认它的最优科目名称(语文,数学,英语) 
    	//科目名称是字符串,所以要先定义一个字符串来确保保存最优科目名称
    	for(i=0;i<n;i++){
    		maxscore=a[i].China;//认为第i个学生的语文是最优秀的 
    		strcpy(per,"语文");
    		if(maxscore<a[i].Math){
    			maxscore = a[i].Math;
    			strcpy(per,"数学");
    		} 
    		if(maxscore<a[i].English){
    			maxscore = a[i].Math;
    			strcpy(per,"英语");
    		} 
    		printf("%s\t%s\t%d\t%d\t%d\t%s\n",
    		a[i].Id,a[i].Name,a[i].China,a[i].Math,a[i].English,per); 
    	} 
    } 
    
    void main(){
    	STU a[8]={
    	{"S1","张一军",127,150,100}, 
    	{"S2","张二军",75,85,89}, 
    	{"S3","张三军",67,58,86}, 
    	{"S4","张四军",120,101,87}, 
    	{"S5","张五军",136,100,82}, 
    	{"S6","张六军",141,52,83}, 
    	{"S7","张七军",125,85,81},  
    	{"S8","张八军",136,65,79}
    	};
    	Perferct(a,8);
    }
    

    在这里插入图片描述

    展开全文
  • 7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间。如下例所示: struct student stu_a[50]; // 声明长度为 50 的结构体...

    7.2 结构体数组的定义和引用

    当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间。如下例所示:

    struct student stu_a[50];        // 声明长度为 50 的结构体数组 stu_a

    引用结构体数组中元素的一般形式为:

    结构体数组名[n].成员名

    [] 符号的优先级与.符号相同,适用于自左向右结合性,所以运算时首先获得的是结构体数组的元素,然后再获得该元素的成员。如果该成员是数组,引用该成员数组元素的一般形式为:

    结构体数组名[n].成员名[n]。同理,如果该成员是结构体变量,引用形式为:结构体数组名[n].成员.子成员。依次类推,如何复杂的成员都可以被访问。如下例所示:

    #include <stdio.h>
    
    int main(void)
    {
    	struct student
    	{
    		char name[50];		// 姓名
    		char dept[50];		// 专业
    		long no;			// 学号
    		float score[4];		// 成绩
    	};
    
    	struct student stu_a[2] = {
    		"Tom", "Math", 2009001, 87.5, 70.5, 93, 91,
    		"Jerry", "Math", 2009002, 90, 78.5, 83.5, 66
    	};
    
    	int i;
    
    	for (i = 0; i < 2; i++)
    	{
    		printf("%8s %8s %ld %5.2f %5.2f %5.2f %5.2f\n",
    			stu_a[i].name,
    			stu_a[i].dept,
    			stu_a[i].no,
    			stu_a[i].score[0],
    			stu_a[i].score[1],
    			stu_a[i].score[2],
    			stu_a[i].score[3]
    		);
    	}
    }

    程序中声明了结构体数组 stu_a[],并在声明时用数据为其初始化。然后用 printf() 函数将结构体数组中的数据输出。

    转载于:https://www.cnblogs.com/52php/p/5681795.html

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

    千次阅读 2020-07-19 23:29:15
    2.结构体的定义 以学生的基本信息为例,包括四个变量:姓名、年龄、性别、学号。 (1)定义了一个结构体STU struct STU { char name[20]; int age; char sex; char num[20]; }; 定义结构体变量: struct STU stu...

    1.结构体
    结构体是用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
    2.结构体的定义
    以学生的基本信息为例,包括四个变量:姓名、年龄、性别、学号。
    (1)定义了一个结构体STU

    struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    };
    

    定义结构体变量:

    struct STU stu1,stu2;
    

    (2)定义了一个结构体STU的同时定义了两个结构体STU的变量stu2,stu3。

    struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }stu1,stu2;
    

    此时还可以继续定义STU结构体变量如:

    struct STU stu3;
    

    (3)定义没有给出该结构体的名称,直接定义结构体变量stu1,stu2后就不能再继续定义该类型的变量。

    struct
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }stu1,stu2;
    

    (4)在第一种结构定义的基础上加了关键字typedef,但是因为没有给出别名,直接用STU定义变量是不行的。如STU stu1,但struct STU stu1可行。

    typedef struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    };
    

    定义结构体变量:

    struct STU stu1,stu2;
    

    (5)第五种结构体定义在第四种结构体定义的基础上加上了别名stu1,可以用stu1定义STU的结构体变量,如stu1 stu2。用STU不能直接定义,需要在前面加struct,如struct STU stu3。

    typedef struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }stu1;
    

    定义结构体变量:

    stu1 stu2;
    struct STU stu3;
    

    (6)第六种结构体定义在第五种的基础上减去了结构体名,但是若是直接使用stu1来定义该结构体类型的变量也是可以的。如stu1 stu2。

    typedef struct
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }stu1;
    

    定义结构体变量:

    stu1 stu2;
    

    3.结构体数组
    (1)

    struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    };
    

    定义:
    struct STU stu[10];
    (2)使用typedef关键字1

    struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    };
    typedef struct STU stu[10];
    

    定义:
    stu a;
    (3)使用typedef关键字2

    typedef struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }stu[10];
    

    定义:
    stu a
    (4)使用typedef关键字3 省去结构体名

    typedef struct
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    }stu[10];
    

    定义:
    stu a

    展开全文
  • 【C语言】结构体数组的定义与使用

    千次阅读 2021-03-01 01:39:24
    一、定义结构体数组,并初始化 //首先声明结构体类型 struct students { char name[20]; int age; }; //定义结构体数组,并初始化 struct students stu[3]={"Allen",18,"Smith",19,"Grace",18}; 为了提高代码...
  • 结构体数组的定义和引用

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,214
精华内容 2,485
关键字:

结构体数组的定义