结构体(例题详解)

#include<stdio.h>

//结构体:学生信息      (类型)

struct student
{
        char name[100];
        char sex;
        int score;
};
int FindKey(const struct student e[100],int left,int right,const int key)
{
printf("左%d 右%d %d\n",left,right,key);
        int mid;
        mid=(left+right)/2;
        if(left>right)
                return -1;
        if(e[mid].score==key)
                return mid;
        else if (key>e[mid].score)
                FindKey(e,mid+1,right,key);
        else if (key<e[mid].score)
                FindKey(e,left,mid-1,key);
}
void main ()
{
//定义数组: 类型 数组名[长度];
        struct student e[44]={{"lm",'m',99},{"tzw",'m',88},{"cs",'m',77},\
                              {"op",'w',66},{"szd",'m',55}};

//分配空间:
        //printf("%d\n",sizeof(e));//长度=44*108
//引用数组的元素:下标法a
        int i;
printf("---打印所有学生信息---\n");
        for(i=0;i<5;i++)
        printf("姓名:%s 性别:%c 成绩:%d\n",e[i].name,e[i].sex,e[i].score);
        printf("\n");
printf("---打印大于90分的学生信息---\n");
        for(i=0;i<5;i++)
                if(e[i].score>90)
        printf("姓名:%s 性别:%c 成绩:%d\n",e[i].name,e[i].sex,e[i].score);
        printf("\n");
printf("---打印最高分学生信息---\n");
        int listen;
        listen=0;
        for(i=0;i<5;i++)
                if(e[listen].score<e[i].score)
                        listen=i;
        printf("姓名:%s 性别:%c 成绩:%d\n",e[listen].name,e[listen].sex,e[listen].score);
        printf("\n");
printf("---查找人名字---\n");
        for(i=0;i<5;i++)
                if(strcmp(e[i].name,"lm")==0)
                        printf("姓名:%s 性别:%c 成绩:%d\n",e[i].name,e[i].sex,e[i].score);
        printf("\n");

printf("---成绩由高到低排序---\n");
        int j;
        struct student temp;
        for(i=1;i<5;i++)
        {
                j=i;
                temp=e[i];
                while(j>0 && temp.score>e[j-1].score)
                {
                        e[j]=e[j-1];
                        j--;
                }
                if(j!=i)
                {
                e[j]=temp;
                }
        }
        for(i=0;i<5;i++)
                printf("姓名:%s 性别:%c 成绩:%d\n",e[i].name,e[i].sex,e[i].score);
        printf("\n");
printf("---高于平均分的学生成绩---\n");
        int agv=0,zf=0;
        for(i=0;i<5;i++)
                zf+=e[i].score;
        agv=zf/5;
        printf("平均分:%d\n",agv);
        for(i=0;i<5;i++)
                if(e[i].score>agv)
                printf("姓名:%s 性别:%c 成绩:%d\n",e[i].name,e[i].sex,e[i].score);
        printf("\n");
printf("---查找某个分数---\n");
        int Q;
        Q=FindKey(e,0,4,88);
        if(Q<0)
                printf("没有查到\n");
        else
                printf("姓名:%s 性别:%c 成绩:%d\n",e[Q].name,e[Q].sex,e[Q].score);

}

猜你喜欢

转载自blog.csdn.net/cs13797778767/article/details/81121745