有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
1,定义函数在堆区申请空间n
struct B *p= (struct B * )malloc(sizeof(struct B)* n );
2,定义函数实现录入学校人员信息
for(int i=0;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);
}
}
- 3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间
头文件
#ifndef __HEAD_H__//防止重复定义
#define __HEAD_H__
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct person
{
char name[20];
char sex;
char job;
union
{
float score;
char position[20];
};
}per;
per *create(int n);
void Input(per *p,int n);
void Output(per *p,int n);
void Avg(per *p,int n);
void Num(per *p,int n);
per *free_space(per*p);
#endif
主函数
#include "head.h"
int main(int argc, const char *argv[])
{
int n;
printf("请输入的人员人数: \n");
scanf("%d",&n);
per *p=create(n);
Input(p,n);
Output(p,n);
Avg(p,n);
Num(p,n);
p=free_space(p);
return 0;
}
自定义函数
#include "head.h"
//在堆区申请空间
per *create(int n)
{
per*p=(per *)malloc(sizeof(per)* n);
if(p==NULL)
return NULL;
return p;
}
//录入学校人员信息
void Input(per *p,int n)
{
for(int 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(per *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("姓名:%s\t性别:%c\t职业:%c\t",(p+i)->name,(p+i)->sex,(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
printf("分数:%.2f\n",(p+i)->score);
else
printf("职务:%s\n",(p+i)->position);
}
}
void Avg(per *p,int n)
{
int i;
int count=0;
float sum=0;
for(i=0;i<n;i++)
{
sum+=(p+i)->score;
count++;
}
printf("平均分是:%.2f\n",sum/count);
}
void Num(per *p,int n)
{
int count=0;
int i;
for(i=0;i<n;i++)
{
if((p+i)->job=='t'||(p+i)->job=='T')
count++;
}
printf("共有%d个教师",count);
}
per *free_space(per*p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
在堆区申请5个连续的存储空间,实现车辆信息的输入(品牌,颜色,价格)
1>调用函数在堆区申请空间
2>调用函数实现输入
3>调用函数对价格排序
思路:和正常的冒泡是一样的
注意点:
1>if(条件) 条件是价格的比较 (p+j)->price (p+j+1)->price
2> 交换的是整个车的信息
例如: (p+j)表示整个车的地址
*(p+j)表示整个车的信息
交换的是*(p+j) 和*(p+j+1) 对应的整体信息
3> 注意中间变量t的类型,应该是结构体类型
4>调用函数输出
5>释放堆区空间
头文件
#ifndef __HEAD_H__
#define __HEAD_H__
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct car
{
char name[20];
char color[10];
int price;
}car,*p_car;
p_car create();
void input(p_car p);
void sort(p_car p);
void output(p_car p);
p_car free_space(p_car p);
#endif
主函数
#include"head.h"
int main(int argc, const char *argv[])
{
//在堆区申请结构体空间
p_car p= create();
//输入车辆的信息
input(p);
//按价格排序
sort(p);
//输出车辆信息
output(p);
//释放空间
p=free_space(p);
return 0;
}
自定义函数
#include"head.h"
p_car create()
{
p_car p=(p_car)malloc(sizeof(car)*5);
if(p==NULL)
return NULL;
return p;
}
//输入车辆的信息
void input(p_car p)
{
for(int i=0;i<5;i++)
{
printf("请输入车辆的品牌: ");
scanf("%s",(p+i)->name);
printf("请输入车辆的颜色: ");
scanf("%s",(p+i)->color);
printf("请输入车辆的价格: ");
scanf("%d",&(p+i)->price);
printf("\n");
}
}
//按价格排序
void sort(p_car p)
{
int i,j;
car t;
for(i=1;i<5;i++)
for(j=0;j<5;j++)
if((p+j)->price>(p+j+1)->price)
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
//输出车辆信息
void output(p_car p)
{
for(int i=0;i<5;i++)
printf("%s\t%s\t%d\n",(p+i)->name,(p+i)->color,(p+i)->price);
}
//释放空间
p_car free_space(p_car p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}