c++#学生平均成绩,学号排序

c语言求平均成绩的需要用到数组------char**[] []**

strcpy,即string copy(字符串复制)的缩写

思路:1.用数组输入成绩
2.用strcpy交换字符串
3.按照%d,%f输出一定的格式

#include<stdio.h>
#include<string.h>//识别后面的strcpy
void main(){
	int  j,k,i,n,max_pos;
	char student_num[20][15]={"190308010101","190308010102","190308010103","190308010104",
		                "190308010105","190308010106","190308010107","190308010108",
						"190308010109","190308010110","190308010111","190308010112",
						"190308010113","190308010114","190308010115","190308010116",
						"190308010117","190308010118","190308010119","190308010120"};
	int score[20][3]={{90,82,79},{67,56,99},{89,90,87},{99,65,79},{78,98,67},{65,86,89},
	{90,98,83},{78,75,74},{90,97,60},{68,69,54},{56,58,49},{37,48,50},{98,86,68},{95,65,63},
	{78,71,72},{99,98,100},{89,98,67},{45,76,87},{76,56,34},{68,89,96}};
	char name[20][10]={"刘强","李国强","周小帅","李莹莹","张德帅","张德武",
	     "范旭","朱媛媛","陈有良","李晓亮","欧阳阳","李胜正","卢本卫","陆建国",
	     "梁飞龙","冯小","郭炜炜","朱原章","田雪","刘子锤"};
	char t[15];
	float average[20],f;//定义平均成绩类型
	for(i=0;i<20;i++){//循环的次数为20次数
		average[i]=(float)((score[i][0]+score[i][1]+score[i][2])/3.0);//平均成绩=(第一列成绩+第二列成绩+第三列成绩)/3
}
for(i=0;i<20-1;i++){
		max_pos=i;//假设最大值的位置是i
	for(j=i+1;j<20;j++)
		if(average[j]>average[max_pos])
			max_pos=j;//如果j>i+1,则最大值是j
    	strcpy(t,student_num[i]);
	    strcpy(student_num[i],student_num[max_pos]);
		strcpy(student_num[max_pos],t);//第i行和第max_pos行 学号交换
	    strcpy(t,name[i]);
		strcpy(name[i],name[max_pos]);
		strcpy(name[max_pos],t);//交换姓名
    for(k=0;k<3;k++){
		n=score[i][k];
		score[i][k]=score[max_pos][k];
		score[max_pos][k]=n;
		f=average[i];
		average[i]=average[max_pos];
		average[max_pos]=f;
}//和k对应
}//和i对应
	printf("                                           Wolf小学12班数理化成绩统计\n");
	printf("\n");
	printf("            学 号               姓 名            数 学         物 理            化 学       平均成绩\n");
	printf("\n");
	for(i=0;i<20;i++)
	printf("%20s %16s %15d %13d %15d %13.2f\n",student_num[i],name[i],score[i][0],score[i][1],score[i][2],average[i]);
	}

在这里插入图片描述

说明:1.平均成绩保留到小数点后几位取决于f 前面的那个小数点。 在这里插入图片描述,此处的"2" 就是保留到第二位的意思。
2.大括号一定要用到恰到好处。我之前用错了,结果成绩之和除以三和后面的平均成绩不符合,原因就是for循环的不对。我一直以为是交换出错了,因为前面都对,后来发现是因为循环除了问题,当时的问题是不管是否符合for循环里的条件,程序都执行一遍,所以相当于做了无用功。
3.c语言出现一大堆错误不要紧,很有可能就只是一处有问题呢。比如我改了一下{}的位置,50多个错误瞬间消失,也算是对的起掉的头发了。

每日一句
坚持没结果是因为你没有复盘;

你必须一边奔跑,一边寻找路径;

不要用战术上的勤奋掩盖战略上的懒惰。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值