• 2021-04-14
    //指针与动态内存分配示例――单位人员信息管理

    //某单位职工基本情况表如表所示。由于职工众多,现计划开发一款软件以提高管理效率,要求先输入职工原始信息,计算出各人实发工资(=基本工资+奖金),再按职工编号升序排序后输出以方便查看。
    //请选择空白位置的全部正确答案
    #include
    #include
    #define N 300000
    int main()
    {
    struct info_type
    {
    int zgbh; //职工编号
    char bm[11]; //部门
    char xm[11]; //姓名
    char xb[3]; //性别
    char sfzh[19];//身份证号
    char zc[11]; //职称
    int jbgz; //基本工资
    int jj; //奖金
    int sfgz; //实发工资
    };
    int i,j,n;
    struct info_type *p;
    do//输入实际人数
    {
    printf("
    请输入职工总数(1--%d):",N);
    scanf("%d",&n);
    }while((n<1)||(n>N));
    //分配n+1份内存空间,每份大小为sizeof(struct info_type),多出的1份用于排序
    p=(struct info_type *)malloc((n+1)*sizeof(struct info_type));
    if(p==NULL)
    printf("
    内存空间的分配不成功!
    ");
    else//内存分配成功,进行后续操作
    {
    printf("请逐个输入职工信息(职工编号 部门 姓名 性别 身份证号 职称 基本工资 奖金):
    ");
    for(i=1;i<=n;i++)
    {
    printf("No.%d:",i);
    scanf("%d%s%s%s%s%s%d%d",&p[i].zgbh,p[i].bm,p[i].xm,p[i].xb,p[i].sfzh,p[i].zc,&p[i].jbgz,&p[i].jj);
    p[i].sfgz=p[i].jbgz+p[i].jj;
    }
    for(j=1;jp[i].zgbh)
    {
    ________
    }
    printf("
    职工基本信息表如下(按职工编号升序排列):
    ");
    for(i=1;i<=n;i++)
    printf("%10d%12s%12s%4s%20s%12s%6d%6d%6d
    ",p[i].zgbh,p[i].bm,p[i].xm,p[i].xb,p[i].sfzh,p[i].zc,p[i].jbgz,p[i].jj,p[i].sfgz);
    free(p);
    }
    system("pause");
    return 0;
    }