有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业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<stdlib.h>
#include<stdio.h>
#include<string.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);
float Age(per *p,int n);
int sumTeacher(per *p,int n);per *free_space(per *p);
#endif
自定义文件
#include"head.h"
per *create(int n)
{
per *p =(per *)malloc(sizeof(per)*n);
if(p == NULL)
return NULL;
return p;
}
/*
* function: 输入
* @param [ in] 结构体指针 ,人数
* @param [out]
* @return 无返回值
*/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);
}
}
}/*
* function: 输出
* @param [ in] 结构体指针,人数
* @param [out]
* @return 无返回值
*/void output(per *p,int n)
{
for(int i = 0; i < n; i++)
{
if((p+i)->job == 's' || (p+i)->job == 'S')
{
printf("姓名:%s 性别:%c 职业:%c 分数:%.2f\n ",(p+i)->name,(p+i)->sex,(p+i)->job,(p+i)->score);
}
else
{
printf("姓名:%s 性别:%c 职业:%c 职务:%s\n ",(p+i)->name,(p+i)->sex,(p+i)->job,(p+i)->position);
}
}
}float Age(per *p,int n)
{
float sum = 0;
int count = 0;
for(int i = 0; i < n; i++)
{
if((p+i)->job == 's' || (p+i)->job == 'S')
{
sum += (p+i)->score;
count++;
}
}
return sum/count;}
int sumTeacher(per *p,int n)
{
int count = 0;
for(int i = 0; i < n; i++)
{
if((p+i)->job == 't' || (p+i)->job == 'T')
{
count++;
}
}
return count;
}per *free_space(per *p)
{
if(p == NULL)
return NULL;
free(p);
p = NULL;
return p;
}
主函数文件
#include"head.h"
/*typedef struct person
{
char name[20];
char sex;
char job;
union
{
float score;
char position[20];
};
}per;*/int main (int argc, const char *argv[])
{
int n;
printf("请输入您要录入几个人员\n");
scanf("%d",&n);
per *p = create(n);
//录入
input(p,n);
//输出
printf("输出\n");
output(p,n);
printf("学生的平均值为%.2f\n",Age(p,n));
printf("老师的个数为%d\n",sumTeacher(p,n));
p = free_space(p);return 0;
}
day2作业2:
在堆区申请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<stdio.h>
#include<string.h>
#include<stdlib.h>typedef struct Car
{
char brand[20];
char color[10];
float price;
}car;car *create(int n);
void input(car *p,int n);
void sort(car *p,int n);
void output(car *p,int n);
car *free_space(car *p);#endif
自定义函数
#include"head.h"
/*
* function: 申请5个连续的存储空间
* @param [ in]
* @param [out]
* @return 成功返回首地址
*/car *create(int n)
{
car *p = (car *)malloc(sizeof(car)*n);
if(p == NULL)
return NULL;
return p;
}/*
* function: 输入
* @param [ in] 指针 个数
* @param [out]
* @return
*/
void input(car *p,int n)
{
for(int i = 0; i< n; i++)
{
printf("请输入品牌:");
gets((p+i)->brand);
printf("请输入颜色:");
gets((p+i)->color);
printf("请输入单价:");
scanf("%f",&(p+i)->price);
getchar();
}
}
/*
* function: 对价格进行排序
* @param [ in] 结构体指针,个数
* @param [out]
* @return
*/void sort(car *p,int n)
{
car temp;
for(int i = 1; i < n; i++)
{
for(int j = 0; j < n-i; j++)
{
if((p+j)->price > (p+j+1)->price)
{
temp = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = temp;
}
}
}
}void output(car *p,int n)
{
for(int i = 0; i < n; i++)
{
printf("品牌:%s 颜色:%s 单价:%.2f\n",(p+i)->brand,(p+i)->color,(p+i)->price);
}
}car *free_space(car *p)
{
if(p == NULL)
return NULL;
free(p);
p = NULL;
return p;
}
主函数文件
#include"head.h"
int main (int argc, const char *argv[])
{
car *p = create(5);
input(p,5);
//排序
sort(p,5);
//输出
output(p,5);
p = free_space(p);
return 0;
}
输出结果: