结构体和链表例题

1、初学结构体

题目描述

请用标准数据类型创建结构体,用于描述一个人的信息,结构体包括三个成员,分别为姓名、性别、3门课的成绩

输入要求

输入为三行。第一行输入人的姓名(可能包含空格);第二行为一个字母,代表性别;第三行为3个整数,表示3门课的成绩。假设输入的数据都是在有效范围内的

输出要求

输出三行,分别对应输入的三行信息,成绩之间用空格间隔,最后一个数据后面也有空格

输入样例

Peter Chen

m

98 78 70

输出样例

Peter Chen

m

98 78 70

代码示例

#include<stdio.h>
typedef struct student
{
	char name[20];
	char gender;
	int score[3];
}STU;
int main()
{
	STU s;
	int i;
	gets(s.name);
	scanf("%c",&s.gender);
	for(i=0;i<3;i++)
	{
		scanf("%d",&s.score[i]);
	}
	puts(s.name);
	printf("%c\n",s.gender);
	for(i=0;i<3;i++)
	{
		printf("%d ",s.score[i]);
	}
	printf("\n");
	return 0;
}

2、结构体的嵌套

题目描述

做个简单的结构体嵌套吧。设计结构体,包含学生姓名、性别、出生日期。其中出生日期又包含年、月、日三部分信息。

输入要求

输入学生姓名、性别、出生日期

输出要求

输入学生姓名、性别、出生日期

输入样例

Susan Wang

f

1992 7 26

输出样例

Susan Wang

f

1992 7 26

代码示例:

#include<stdio.h>
typedef struct Data
{
	int y;
	int m;
	int d;
}data;
typedef struct student
{
	char name[20];
	char gender;
	struct Data date;
}STU;
int main()
{
	STU s;
	gets(s.name);
	scanf("%c",&s.gender);
	scanf("%d %d %d",&s.date.y,&s.date.m,&s.date.d);
	puts(s.name);
	printf("%c\n",s.gender);
	printf("%d %d %d\n",s.date.y,s.date.m,s.date.d);
	return 0;
}

3、计算总分

题目描述

利用结构数组处理多个学生信息。给定若干个学生的信息,假设学生信息包括学号、姓名、3门课的成绩,计算每个学生的总分,并按要求进行输出

输入要求

先输入一个整数n,表示有n个学生的信息

输出要求

输出每个学生的学号、姓名以及总分。每个学生的信息占据一行

输入样例

3

1101

peter chen

90 91 92

1102

susan wang

87 88 89

1103

anney li

86 85 84

输出样例

1101 peter chen 273

1102 susan wang 264

1103 anney li 255

代码示例

#include<stdio.h>
typedef struct student
{
	int id;
	char name[20];
	int score[3];
	int sum;
}stu;
int main()
{
	stu s[100];
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&s[i].id);
		getchar();
		gets(s[i].name);
		for(j=0;j<3;j++)
		{
			scanf("%d",&s[i].score[j]);
		}
	}
	for(i=0;i<n;i++)
	{
		s[i].sum=0;
		for(j=0;j<3;j++)
		{
			s[i].sum+=s[i].score[j];
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%d %s %d\n",s[i].id,s[i].name,s[i].sum);
	}
	return 0;
}

4、候选人得票统计

题目描述

CoCo班级缺少一个生活委员,班主任组织了一次班委补选,有5个候选人参加(分别是Chen,Li,Qian,Wang,Zhang),参加投票的同学有10人,每张选票上只能写一个人的名字。请设计程序统计每一位候选人的得票结果。

输入要求

输入10张选票上的姓名,每张选票上只有一个名字

输出要求

输出5个候选人的得票。票数为0的也要输出

输入样例

Li

Li

Wang

Chen

Qian

Zhang

Zhang

Chen

Li

Zhang

输出样例

Chen:2

Li:3

Qian:1

Wang:1

Zhang:3

代码示例:

#include<stdio.h>
#include<string.h>
#define N 5
struct person
{
	char name[10];
	int count;
};
struct person leader[N]={"Chen",0,"Li",0,"Qian",0,"Wang",0,"Zhang",0};
int main()
{
	int i,j,cnt;
	char leader_name[10];
	for(i=0;i<10;i++)
	{
		scanf("%s",leader_name);
		for(j=0;j<5;j++)
		{
			if(strcmp(leader_name,leader[j].name)==0)
			{
				leader[j].count++;
			}
		}
	}
	for(i=0;i<5;i++)
		printf("%s:%d\n",leader[i].name,leader[i].count);
	return 0;
}

5、最高分与平均分

题目描述

CoCo读初三了,每月都有月考,这个你懂得。班主任杜老师想知道学生这次月考的考试情况。已知班上共42人参加考试,考试科目有3门(语文,数学,英语)。现杜老师从中任意抽取n个人的考试成绩情况,杜老师想知道这n个人3门课的最高分与平均分,麻烦你帮她一下。

输入要求

第一行输入一个整数n,接下来n行,每行输入学生姓名(不超过10个字符,名字内不包含空格),再依次输入该学生的语文,数学,英语成绩,分数范围[0,100]

输出要求

输出有三行,每行两个数(最高分与平均分),保留一位小数,三行依次代表语文,数学,英语

输入样例

3

Peter 78 85 67

Susan 89 69 90

Alice 76 83 91

输出样例

89.0 81.0

85.0 79.0

91.0 82.7

代码示例

#include<stdio.h>
typedef struct 
{
	char name[20];
	double sc[3];
}STU;
STU s[42];
int main()
{
	int n,i,j;
	double max[3]={-1,-1,-1},ave[3]={0},sum;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",s[i].name);
		for(j=0;j<3;j++)
		{
			scanf("%lf",&s[i].sc[j]);
		}
	}
	for(j=0;j<3;j++)
	{
		sum=0;
		for(i=0;i<n;i++)
		{
			sum+=s[i].sc[j];
			ave[j]=sum/n;
		}
	}
	for(i=0;i<n;i++)
	{
		int t;
		for(j=0;j<3;j++)
		{
			if(max[j]<s[i].sc[j])
			{
				t=s[i].sc[j];
				s[i].sc[j]=max[j];
				max[j]=t;
			}
		}
	}
	for(j=0;j<3;j++)
	{
		printf("%.1f %.1f\n",max[j],ave[j]);
	}
	return 0;
}