结构体数组

案例引入

Description

有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)

Input Format

学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。

Output Format

各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)

输入数据 1


2
1 blue 90 80 70
b clan 80 70 60

输出数据 1


85 75 65
1 blue 90 80 70

#include <stdio.h>

//思路1、结构体数组+字符串数组 

struct data{
	char stu[100];//字符串数组是为了存字符串
	char name[100];
	int a;
	int b;
	int c;
	
};


int main()
{
	int n;
	scanf("%d",&n);
	struct data p[n];         //结构体数组是为了存n个学生 
	int i;
	for( i=0 ; i<n ; i++ )
	{
		scanf("%s %s %d %d %d", &p[i].stu ,&p[i].name,&p[i].a,&p[i].b,&p[i].c);
	}
	int sum1 =0 ;
	int sum2 = 0;
	int sum3 =0 ;
	for( i=0 ; i<n ; i++ )
	{
		sum1 += p[i].a;
		sum2 += p[i].b;
		sum3 += p[i].c; 
	}
	printf("%.f %.f %.f\n" ,(double) sum1/n ,(double) sum2/n,(double) sum3/n);
	int j;
	int max[3]={0} ; 
	for (i=0 ; i<n ; i++ )
	{
		if( max[0] < p[i].a ){
			max[0] = p[i].a; 
		}
		if( max[1] < p[i].b ){
			max[1]= p[i].b;
		}	 
		if( max[2]< p[i].c ){
			max[2]= p[i].c;
		}
	}
	int numberx=0;
	for( i =0 ;i<3; i++)
	{
		if( numberx <max[i])
		{
			numberx= max[i];
		}
	}
	for( i=0 ;i<n ; i++)
	{
		if( numberx == p[i].a ){
			printf("%s %s %d %d %d\n", p[i].stu ,p[i].name,p[i].a,p[i].b,p[i].c);
		}		

		if( numberx == p[i].b ){
			printf("%s %s %d %d %d\n", p[i].stu ,p[i].name,p[i].a,p[i].b,p[i].c);
		}		
		
		if( numberx == p[i].c ){
			printf("%s %s %d %d %d\n", p[i].stu ,p[i].name,p[i].a,p[i].b,p[i].c);
		}		
	}	

	
	return 0;
}

1、int 输入

#include <stdio.h>
struct data {
	int year;
	int month ;
	int day;
};
int main()
{
	struct data today[5];
	for(int i=0 ; i<5 ;i++)
	{
		scanf("%d%d%d",&today[i].year,&today[i].month,&today[i].day );
	}
	for(int i=0 ; i<5 ;i++ )
	{
		printf("%d-%d-%d\n",today[i].year,today[i].month,today[i].day );
	}
}

2、字符输入

#include <stdio.h>
struct data {
	char year;
	char month ;
	char day;
};
int main()
{
	struct data today[2];
	for(int i=0 ; i<2 ;i++)
	{
		scanf("%c%c%c",&today[i].year,&today[i].month,&today[i].day );  //还读空格和转行符注意
	}
	for(int i=0 ; i<2 ;i++ )
	{
		printf("%c-%c-%c\n",today[i].year,today[i].month,today[i].day );
	}
}

abccdf
a-b-c
c-d-f

3、字符串输入

#include <stdio.h>
struct data {
	char year[100];
	char month[100] ;
	char day[100];
};
int main()
{
	struct data today[2];
	for(int i=0 ; i<2 ;i++)
	{
		scanf("%s %s %s",&today[i].year,&today[i].month,&today[i].day );
	}
	for(int i=0 ; i<2 ;i++ )
	{
		printf("%s-%s-%s\n",today[i].year,today[i].month,today[i].day );
	}
}


asa jio ji
oko oon os
    
asa-jio-ji
oko-oon-os

4、结构体,二维数组区别

#include <stdio.h>
#include <string.h>

int main(){
//   char a[2][6] = { "hello", "world" } ; //能存n个最大长度为m-1 的字符串
    char a[2][6];                                   //m-1是因为\0占一个是字符
	for(int i=0 ;i<2; i++)
	{
  		for( int j=0 ;j<6;j++ )
		{
		    scanf("%c", &a[i][j]);  
		}
    }									    
    for(int i=0 ;i<2; i++)
	{
  		for( int j=0 ;j<6;j++ )
		{
		    printf("%c",a[i][j]);  
		}
    }
    return 0;
}

hello world
hello world

实质就是,数组的数组,结构体数组+字符串数组,

同二维数组,float = a[5] [12]; 表示,主数组有5个元素a[5][12],每个元素是内含12个元素的数组 a[5][12]

不过,不同的是

1、二维数组存的,两个数组全是一个类型,

int a[2] [3];就只能存数字,

 

char a[2] [5] ;就只能存字符,指的是,存字符的数组

 

2、结构体数组+字符数组

 

其实和二维数组实质一样,只是,输入会变简单,并且重要的是,重要的是,重要的事情说三遍:

1、二维数组输入时一定要知道,要输入副字符数组的大小,即要知道输入字符串的大小,这个就很难了,

用sizeof都不行,因为输入时,后面会自动补位,从而导致错误,

二维数组存进去的是 字符 char[] = { 'h', 'e', 'l', 'l', 'o' };

2、反之亦然,结构体数组,输入输出变简单,不用遍历字符数组,字符串大小也不用知道

结构体数组存进去的是 字符串 char = "hello";

 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值