編寫程序,輸入並保存5名學生的信息,計算出平均分,再按照成績從高到低的順序輸出他們的信息。學生信息包括:學號、姓名、成績。學號不超過10位,姓名不超過20個字符,成績和學均成績均爲雙精度實數

利用結構體求解此題
此題乍一看,很簡單。但是小編今天干這道題的時候,卻踩遍了所有的坑,特寫此文以記之。
此題思路如下:首先創建一個結構體,接下來對結構體賦值,求結構體成員分數的平均值,依據平均值對結構體排序,輸出結構體。整個過程就是這樣,但是小編每一個坑都踩了。
接下來一一記之:

#include <stdio.h>

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
效果如下:
在這裏插入圖片描述
整個寫代碼的過程就是下面這個樣子。在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
翻車日記,謹以此文以記之。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章