【无标题】

作业:

定义学生结构体属性:姓名,年龄,分数,输入姓名key查找key是否出现,存在则输出所有信息,否则提示查找失败要求:使用typedef

1,定义函数连续在堆区申请空间2,定义函数循环输入

3,定义函数实现输出

3,定义函数实现查找

4,释放空间

main.c
#include "head.h"
int main(int argc, const char *argv[])
{
    int n=0;
    printf("请输入申请的空间");
    scanf("%d",&n);
    point p=SPACE(n);
    Input(p,n);
    Output(p,n);
    SEARCH(p,n);
    free(p);
    p=NULL;
    if(NULL==p)
    {
        printf("释放成功");

    }
    else 
    printf("未成功");
    return 0;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include<stdlib.h>
typedef struct
{
    char name[10];
    int age;
    int score;

}JIE,*point;
point SPACE(int n);
void Input(point p,int n);
void SEARCH(point p,int n);
void Output(point p,int n);
#endif

test.c

#include "head.h"
point SPACE(int n)
{
    point p=(point)malloc(sizeof(JIE)*n);
        if(p==NULL)
        {
            return NULL;
        }
        else
            return p;
}
void Input(point p,int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {
        printf("输入姓名\n");
        scanf("%s",(p+i)->name);
        printf("输入年龄\n");
        scanf("%d",&(p+i)->age);
        printf("输入分数\n");
        scanf("%d",&(p+i)->score);

    }
}
void Output(point p,int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {

            printf("%s %d %d\n",(p+i)->name,(p+i)->age,(p+i)->score);
        
    }
}
void SEARCH(point p,int n)
{
    int i=0;
    char *q[1];

    scanf("%s",q[0]);
    int count=0;

    for(i=0;i<n;i++)
    {
        if(strcmp(q[0],(p+i)->name)==0)
        {
                    count++;
                    printf("姓名:%s 年龄:%d 分数:%d\n",(p+i)->name,(p+i)->age,(p+i)->score);

        }
    }
    if(count)
    {
        printf("查找完成,有%d个信息\n",count);
    

    }
    else
        printf("查无此人");

}

有若干个学校人员的信息,包括学生和教师。其中 学生的数据包括:姓名、性别、职业s/S、分数。 教师的数据包

括:姓名、性别、职业t/T、职务。 要求用同一个表格来处理以上数据。

1,定义函数在堆区申请空间n

struct B *p= (struct B * )malloc(sizeof(struct B)* n );

2,定义函数实现录入学校人员信息

3,定义函数输出学校人员信息

4,定义函数计算学生平均成绩

5,定义函数计算老师的个数

main.c
#include "head.h"
int main(int argc, const char *argv[])
{
    int n=2 ;
    struct B *p=SPACE(n);
    Input(p,n);
    Output(p,n);
int sum=avege(p,n);
    printf("学生分数平均值为%d",sum);
GESHU(p,n);
    
    return 0;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
 struct B
{
    char name[10];
    char sex;
    char occu;
    union
    {
        int score;
        char duty[10];
    };
};
struct B *SPACE(int n);
void Input(struct B *p,int n);
void Output(struct B *p,int n);
int  avege(struct B *p,int n);
void GESHU(struct B *p,int n);
#endif

test.c

#include "head.h"
#include <stdlib.h>
struct B*SPACE(int n)
{
    
    struct B *p=(struct B *)malloc(sizeof(struct B)*n);
    if(p==NULL)
        return NULL;
    else
        return p;
}
void Input(struct B *p,int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {
        printf("输入名字\n");
        scanf("%s",(p+i)->name);
getchar();        
        printf("输入性别\n");

        scanf("%c",&(p+i)->sex);
        getchar();
        printf("输入职业\n");
    
        scanf("%c",&(p+i)->occu);
        //getchar();
        if(((p+i)->occu)=='s')
        {
            printf("输入学生分数\n");
            scanf("%d",&(p+i)->score);
        }
        else
        {
            printf("输入老师职务\n");
            scanf("%s",(p+i)->duty);
            
        }
    }
}
void Output(struct B *p,int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {
        printf("姓名%s  ",(p+i)->name);
        printf("性别%c\t",(p+i)->sex);
        printf("职业%c\t",(p+i)->occu);
        if((p+i)->occu=='s')
        {
            printf("分数%d\n",(p+i)->score);
        }
        if((p+i)->occu=='t')
        {
            printf("职务%s\n",(p+i)->duty);
        }
    }
}
int  avege(struct B *p,int n)
{
    int i=0;int sum=0;
    int count=0;
    for(i=0;i<n;i++)
    {
        if((p+i)->occu=='s')
        {
            sum+=((p+i)->score);
            count++;
        }
    }
    return sum/count;
}
void GESHU(struct B *p,int n)
{
    int i=0;int sum=0;
    int count=0;
    for(i=0;i<n;i++)
    {
        if((p+i)->occu=='t')
        {
                        count++;
        }
    }
    printf("有%d位老师\n",count);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值