有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
1,定义函数在堆区申请空间n
struct B *p= (struct B * )malloc(sizeof(struct B)* n );
2,定义函数实现录入学校人员信息
在输入分数或者职务是,需要判断职业。
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间
//头文件
#ifndef __HEAD1_H__
#define __HEAD1_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char name[10];
char sex;
char job;
union
{
float score;
char position[10];
};
}B,*per;
B *space(int n);
void input(B *p,int n);
void output(B *p,int n);
void ave(B *p,int n);
void COUNT(B *p,int n);
B *free_space(B *p);
#endif
//主函数
#include "head1.h"
int main(int argc, const char *argv[])
{
int n=4;
B *p=space(n);
input(p,n);
output(p,n);
ave(p,n);
COUNT(p,n);
p=free_space(p);
return 0;
}
//功能函数
#include "head1.h"
B *space(int n)
{
B *p=(B *)malloc(sizeof(B)*n);
if(p==NULL)
return NULL;
return p;
};
void input(B *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("请输入姓名:");
scanf("%s",(p+i)->name);
printf("请输入性别:");
scanf(" %c",&(p+i)->sex);
printf("请输入职业:");
scanf(" %c",&(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
{
printf("请输入分数:");
scanf(" %f",&(p+i)->score);
}
else
{
printf("请输入职务:");
scanf("%s",(p+i)->position);
}
}
}
void output(B *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("姓名\t性别\t职业\t");
if((p+i)->job=='s')
{
printf("分数\n");
printf("%s\t",(p+i)->name);
printf("%c\t",(p+i)->sex);
printf("%c\t",(p+i)->job);
printf("%.2f\n",(p+i)->score);
}
else if((p+i)->job=='t')
{
printf("职务\n");
printf("%s\t",(p+i)->name);
printf("%c\t",(p+i)->sex);
printf("%c\t",(p+i)->job);
printf("%s\n",(p+i)->position);
}
}
}
void ave(B *p,int n)
{
int i,sum=0,count=0;
float average;
for(i=0;i<n;i++)
{
if((p+i)->job=='s')
{
sum+=(p+i)->score;
count++;
}
}
average=sum/count;
printf("学生的平均成绩:%.2f\n",average);
}
void COUNT(B *p,int n)
{
int i,count=0;
for(i=0;i<n;i++)
{
if((p+i)->job=='t')
{
count++;
}
}
printf("老师个数:%d\n",count);
}
B *free_space(B *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
结果:
定义商品结构体:名称,单价,个数
1,定义函数在堆区申请空间
2,定义函数实现输入
3,计算商品总价格4,计算最贵的商品信息
5,输入一个商品名称,查找单价信息,实现商品按单价排序
7
,释放空间
//头文件
#ifndef __HEAD1_H__
#define __HEAD1_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct goods
{
char name[10];
float price;
int cnt;
}gs;
gs *space(int n);
void input(gs *p,int n);
void sum(gs *p,int n);
void expen(gs *p,int n);
void search(gs *p,int n);
void sort(gs *p,int n);
gs *free_space(gs *p);
#endif
//主函数
#include "head1.h"
int main(int argc, const char *argv[])
{
int n=3;
gs *p=space(n);
input(p,n);
sum(p,n);
expen(p,n);
sort(p,n);
search(p,n);
//sort(p,n);
p=free_space(p);
return 0;
}
linux
//功能函数
#include "head1.h"
gs *space(int n)
{
gs *p=(gs *)malloc(sizeof(gs)*n);
if(p==NULL)
return NULL;
return p;
};
void input(gs *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("请输入名称:");
scanf("%s",(p+i)->name);
printf("请输入单价:");
scanf("%f",&(p+i)->price);
printf("请输入个数:");
scanf("%d",&(p+i)->cnt);
}
}
void sum(gs *p,int n)
{
int i;
float s=0;
for(i=0;i<n;i++)
{
if((p+i)->price)
{
s+=(p+i)->price;
}
}
printf("商品总价为%.2f\n",s);
}
void expen(gs *p,int n)
{
int i,max_i=0;
float e;
e=p->price;
for(i=0;i<n;i++)
{
if(e<(p+i)->price)
{
e=(p+i)->price;
max_i=i;
}
}
printf("最贵的商品名称为%s\t单价为%.2f\t个数为%d\n",(p+max_i)->name,e,(p+max_i)->cnt);
}
void search(gs *p,int n)
{
int i;
float pri;
gs s;
printf("请输入查找的商品:");
scanf("%s",s.name);
for(i=0;i<n;i++)
{
if(!strcmp(s.name,(p+i)->name))
{
printf("------");
pri=(p+i)->price;
}
}
printf("商品%s的单价为%.2f\n",s.name,pri);
}
void sort(gs *p,int n)
{
int i,j;
gs t;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if((p+j)->price>(p+j+1)->price)
{
printf("------\n");
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for(i=0;i<n;i++)
{
printf("名称\t单价\t个数\n");
printf("%s\t%.2f\t%d\n",(p+i)->name,(p+i)->price,(p+i)->cnt);
}
}
gs *free_space(gs *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
结果:
typedef struct{
int a;short b;float c;double d;int(*p)[3];};
字长结果:32