c语言 注:冒泡排序 双循环 外循环控制次数结构体的定义和使用,scanf输入注意 结构体类型中的元素类型为char不加&
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
#include<stdio.h>
#include<stdlib.h>
#define n 20
struct student{
char name[10];
int score;
};
void main()
{
struct student a[n];
int i, j;
struct student buf;
for(i=0;i<n;i++)
{
scanf("%s%d",a[i].name,&a[i].score);
}
for (i=0; i<n-1; ++i) //比较n-1轮
{
for (j=0; j<n-1-i; ++j) //每轮比较n-1-i次,
{
if (a[j].score < a[j+1].score)
{
buf = a[j];
a[j] = a[j+1];
a[j+1] = buf;
}
}
}
for(i=0;i<n;i++)
{
printf("%s,%d\n",a[i].name,a[i].score);
}
}
参考:
#include<stdio.h>
#define N 20 //定义输入学生的个数
struct student //定义学生结构体
{
char num[6] ;
char name[8] ;
int score[3] ;
float avr;
}stu[N];
void main()
{
int i,j,max,maxi,sum;
float average;
for(i=0;i<N;i++)
{
printf("请输入学生成绩 %d:\n",i+1); //输入每个学生的数据
printf("第:%d",i+1);
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("score %d:",j+1);
scanf("%d", &stu[i].score[j]);
}
}
average=0;
max=0;
maxi=0;
for(i=0;i<3;i++) //求平均数
{
sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{
max=sum;
maxi=i;
}
}
average/=N;
printf(" NO. name score1 score2 score3 average\n");
for(i=0;i<N;i++) //输出每个学生的信息
{
printf("%5s%8s",stu[i].num, stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("%8.2f\n",stu[i].avr);
}
printf("平均分=%7.2f\n",average);
printf("最高成绩是:%s,score total:%d.",stu[maxi].name,max);
}