编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。学号不超过10位,姓名不超过20个字符,成绩和学均成绩均为双精度实数

利用结构体求解此题
此题乍一看,很简单。但是小编今天干这道题的时候,却踩遍了所有的坑,特写此文以记之。
此题思路如下:首先创建一个结构体,接下来对结构体赋值,求结构体成员分数的平均值,依据平均值对结构体排序,输出结构体。整个过程就是这样,但是小编每一个坑都踩了。
接下来一一记之:

#include 

int main()
{
	struct stu
	{
		long int number;
		char *name[80];       //1.此处使用的指针的形式一定记得下面输出的时候加 & 2.且如果这个
							  //数组的空间太小输出的时候会一直显示烫烫,数组太小没有\0,会引起烫烫
		double score;
	}team[5],lie[5];
	int i = 0,j = 0;
	double sum = 0.0;
	/* 3.输入的时候记得格式一致,double采用%lf long int 采用%ld 字符串采用%s */
	for(i = 0;i < 5;i++ )
	{
		scanf("%ld %s %lf",&team[i].number,&team[i].name,&team[i].score);
	}
	for(i = 0; i < 5; i++ ) 
	{
		sum += team[i].score;
	}
	printf("The Average=%-5.1f\n",sum/5.0);
	/* 冒泡排序法依据输入的成绩进行排序 */
	for(i = 0; i < 4; i++ )
	{
		for(j = 0; j < 5 - 1 - i ;j++)
		{
			/* 4.寻找中间变量替换的时候记得格式一致
			               结构体采用结构体的格式 */
			if(team[j].score<team[j+1].score)
			{
				lie[j] = team[j];
				team[j] = team[j+1];
				team[j+1] = lie[j];
			}
		}
	}

	for(i = 0;i < 5;i++ )
	{
		/* 5.输出姓名的时候我们采用的指针变量,记得使用 & */
		printf("%-9d%-10s%-5.1lf\n",team[i].number,&team[i].name,team[i].score);
	}
}

输入相应同学的信息:
201701 zhao 85.4
201702 qian 96.5
201703 sun 65.4
201704 li 86.3
201705 zhou 65.9
效果如下:
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。学号不超过10位,姓名不超过20个字符,成绩和学均成绩均为双精度实数_第1张图片
整个写代码的过程就是下面这个样子。在这里插入图片描述
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。学号不超过10位,姓名不超过20个字符,成绩和学均成绩均为双精度实数_第2张图片
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。学号不超过10位,姓名不超过20个字符,成绩和学均成绩均为双精度实数_第3张图片
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。学号不超过10位,姓名不超过20个字符,成绩和学均成绩均为双精度实数_第4张图片
编写程序,输入并保存5名学生的信息,计算出平均分,再按照成绩从高到低的顺序输出他们的信息。学生信息包括:学号、姓名、成绩。学号不超过10位,姓名不超过20个字符,成绩和学均成绩均为双精度实数_第5张图片
翻车日记,谨以此文以记之。

你可能感兴趣的:(C语言,c语言,指针)