C语言~输入5个学生的学号,成绩,按成绩排序(升序),查找90分以上的

刚刚学了结构体,布置了作业,编写下列功能函数:
1,输入5个学生的学号、成绩,
2,按成绩排序(升序),
3,查找成绩90分以上。并输出2,3的结果。

代码:

#include<stdio.h>

struct student

{

int num,score[3],age;

char name[20];

float aver;

}stu[1000];

main()

{

int i,j,n;

struct student temp;

/*注意:变量temp的类型与数组stu的元素类型为相同结构体的时候,才可交换两个结构体数组元素,所以此处需要定义temp的类型*/

printf("请输入学生人数:\n");

scanf("%d",&n);

printf("请按顺序输入名字、学号、年龄、分数:\n");

for(i=0;i<n;i++)

{

scanf("%s",&stu<i>.name);

scanf("%d",&stu<i>.num);

scanf("%d",&stu<i>.age);

for(j=0;j<3;j++)

scanf("%d",&stu<i>.score[j]);

}

for(i=0;i<n;i++)

{int sum=0;

for(j=0;j<3;j++)

sum+=stu<i>.score[j];

stu<i>.aver=sum/3.0;

}

for(i=0;i<n-1;i++)/*利用冒泡排序法按平均分高低排序*/

{for(j=0;j<n-i-1;j++)

{

if(stu[j].aver>stu[j+1].aver)

{temp=stu[j];/*此处交换的应当是数组元素,而不是平均分*/

stu[j]=stu[j+1];

stu[j+1]=temp;

}

}

}

printf("学生信息如下(姓名、学号、年龄、成绩、平均分):\n");

for(i=0;i<n;i++)

{

printf("%s%d%d",stu<i>.name,stu<i>.num,stu<i>.age);

for(j=0;j<3;j++)

printf("%d",stu<i>.score[j]);

printf("%.2f\n",stu<i>.aver);

}

}

扩展资料:

头文件#include<stdio.h>中

stdio.h是stand input&output的缩写,意思是标准输入输出头文件。凡是用到标准输入输出函数,就要调用该头文件。

查看stdio.h目录下包含哪些函数:主要有文件访问、二进制输入/输出、格式化和非格式化输入/输出、文件定位、错误处理、文件操作等。

具体打开自己的VS安装目录,找到include文件夹,打开include夹下面的stdio.h文件即可查看

(C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcpackages\IntelliSense\iOS\OSS\musl-1.1.10\include)

常用标准输入输出函数:

scanf()从屏幕格式输入

printf()格式输出到屏幕

getchar()从屏幕得到一个字符

putchar()字符输出到屏幕

gets()从屏幕得到一个字符串

puts()字符串输出到屏幕

fscanf()从磁盘格式输入

fprintf()格式输出到磁盘

fgetc()从磁盘得到一个字符

fputc()字符输出到磁盘

fgets()从磁盘得到一个字符串

fputs()字符串输出到磁盘

#号是预处理语句,表明在编译之前预先进行处理。

.h是header file的缩写,表面这是一个头文件。

include是文件包含命令,后面跟着引号""或者尖括号<>,意思是将引号或尖括号内指定的文件包含到本程序中,成为本程序的一部分,而包含的文件通常是由系统提供的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02

帮你现写的一个:

#include <stdio.h>
#define N 5
typedef struct student
{
     int id;  //学号
     float score; //成绩
}stu;
void ReadDat(stu a[],int n);//录入学生信息
void jsSort(stu a[],int n); //按成绩排序
void WriteDat(stu a[],int n);//输出学生信息
void main()
{
     stu s[N];
     ReadDat(s,N);
     jsSort(s,N);
     WriteDat(s,N);
}

void ReadDat(stu a[],int n)
{
     printf("下面开始录入学生信息!\n\n");
     for(int i=0;i<n;i++)
     {
          printf("请输入第%d个学生的学号:",i+1);
          scanf("%d",&a[i].id);
          printf("请输入第%d个学生的成绩:",i+1);
          scanf("%f",&a[i].score);
     }
}
void jsSort(stu a[],int n)
{
     int i,j;
     for(i=0;i<n-1;i++)
     {
          for(j=i+1;j<n;j++)
          {
               if(a[i].score>a[j].score)
               {
                    stu temp = a[i];
                    a[i]=a[j];
                    a[j]=temp;
               }
          }
     }
}
void WriteDat(stu a[],int n)
{
     stu b[N];
     int cnt = 0;
     printf("所有学生按成绩由低到高排序如下:\n");
     printf("学号\t成绩\n");
     for(int i=0;i<n;i++)
     {
          printf("%d\t%.1f\n",a[i].id,a[i].score);
          if(a[i].score >= 90)
          {
               b[cnt]=a[i];
               cnt++;
          }
     }
     printf("90分以上的学生共有%d个,他们的信息如下:\n",cnt);
     printf("学号\t成绩\n");
     for(i=0;i<cnt;i++)
     {
          printf("%d\t%.1f\n",b[i].id,b[i].score);
     }
}

运行结果如下:

追问

虽然第一步看起来有点麻烦 不过对着呢 谢了!

本回答被提问者采纳
第2个回答  2014-06-15
struct student
{
    char szName[100];
    int score;        // 成绩

    // 等号重载
    student operator=(student &st)
    {
        sprintf(szName, st.szName);

        score = st.score; 

        return *this;
    }
};

int main()
{
    const  int stuCount = 5;
    student stuArray[stuCount];


    printf("姓名 成绩:\n");

    for (int i = 0; i < stuCount; i++)
    {

        scanf("%s %d", 
            stuArray[i].szName, 
            &stuArray[i].score);
    }

    // 排序
    for (int i = 0; i < stuCount; i++)
    {
        for (int j = 0; j < stuCount - i -1; j++)
        {
            if (stuArray[j + 1].score < stuArray[j].score)
            {
                student stu = stuArray[j];
                stuArray[j] = stuArray[j + 1];
                stuArray[j + 1] = stu;
            }
        }
    }

    printf("排序后的学生信息如下: \n");

    for (int i = 0; i < stuCount; i++)
    {
        printf("%s %d\n", stuArray[i].szName, stuArray[i].score);
    }

    printf("90分以上的学生信息如下: \n");
 
    for (int i = 0; i < stuCount; i++)
    {
        if (90 <= stuArray[i].score)
        {
            printf("%s %d\n", stuArray[i].szName, stuArray[i].score);
        }
    }

    return 0;
}

运行结果如下:


欢迎采纳!

追问

不好意思 你可能没有看清楚,是学号,成绩,不是姓名成绩。不过还是谢了

追答

你不过弱的这么很,把姓名改成学号不就行了

第3个回答  2014-06-15

邮箱是多少呀?十分钟后发给你

追问

都采纳了,不好意思,麻烦你了,感谢啊