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多个错误瞬间消失,也算是对的起掉的头发了。
每日一句
坚持没结果是因为你没有复盘;
你必须一边奔跑,一边寻找路径;
不要用战术上的勤奋掩盖战略上的懒惰。