/*定义学生结构体属性:姓名,年龄,分数,输入姓名密钥
查找密钥是否出现,存在则输出所有信息,否则提示查找失败
要求:使用类型胡枝子f
1,定义函数连续在堆区申请空间
2,定义函数循环输入
3,定义函数实现输出
3,定义函数实现查找
4,释放空间*/
#ifndef __HEY_H__
#define __HEY_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char name[20];
int age;
float score;
}stu_u;
stu_u* requestspace(int num);
void Input(stu_u*p,int num);
void Output(stu_u*p,int num);
void see(stu_u*p,int num);
void freespace(stu_u**p);
#endif
#include"key.c"
int main(int argc, const char *argv[])
{
int num;
printf("输入学生的个数");
scanf("%d",&num);
stu_u*p=requestspace(num);
Input(p,num);
Output(p,num);
see(p,num);
freespace(&p);
return 0;
}
#include"key.h"
stu_u* requestspace(int num)
{
stu_u*p=malloc(num*sizeof(stu_u));
if(NULL==p){
printf("申请空间失败");
return NULL;
}
return p;
}
void Input(stu_u*p,int num)
{
for(int i=0;i<num;i++){
printf("输入姓名");
scanf("%s",(p+i)->name);
printf("输入年龄");
scanf("%d",&(p+i)->age);
printf("输入分数");
scanf("%f",&(p+i)->score);
}
}
void Output(stu_u*p,int num)
{
for(int i=0;i<num;i++){
printf("姓名%s年龄%d分数%.1f",(p+i)->name,(p+i)->age,(p+i)->score);
}
}
void see(stu_u*p,int num)
{
char key[20];
printf("按照姓名查找");
scanf("%s",key);
for(int i=0;i<num;i++){
if((strcmp(key,(p+i)->name))==0)
{
printf("姓名%s年龄%d分数%.1f",(p+i)->name,(p+i)->age,(p+i)->score);
}
}
}
void freespace(stu_u**p)
{
free(*p);
*p=NULL;
}
/*有若干个学校人员的信息,包括学生和教师.其中
学生的数据包括:姓名、性别、职业S/S.分数.
教师的数据包括:姓名、性别、职业t/T.职务.
要求用同一个表格来处理以上数据.
1,定义函数在堆区申请空间n
结构Bp=(struct B)malloc(size of(StructB)*n);
2,定义函数实现录入学校人员信息
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间*/
#ifndef __STUTEA_H__
#define __STUTEA_H__
#include<stdio.h>
#include<stdlib.h>
#define N 2
typedef union {
float score;
char occupation[20];
}kind_t;
typedef struct{
char name[20];
char sex;
char work;
kind_t people;
}school;
school* space(int n);
void insert(school *p,int n);
void Output(school *p,int n);
float average(school*p,int n);
int teacher(school*p,int n);
void freesapce(school**p);
#endif
#include"stutea.c"
int main(int argc, const char *argv[])
{
school*L=space(N);
insert(L,N);
Output(L,N);
printf("输入平均值%.1f\n",average(L,N));
printf("老师的个数%d\n",teacher(L,N));
freesapce(&p);
return 0;
}
#include"stutea.h"
school* space(int n)
{
school*p=(school*)malloc(n*sizeof(school));
if(p==NULL){
printf("申请空间失败");
return NULL;
}
return p;
}
void insert(school *p,int n)
{
for(int i=0;i<n;i++){
printf("输入姓名");
scanf("%s",(p+i)->name);
printf("输入性别");
getchar();
scanf("%c",&((p+i)->sex));
printf("输入职业");
getchar();
scanf("%c",&((p+i)->work));
getchar();
if((p+i)->work=='S'||(p+i)->work=='s'){
printf("输入分数");
scanf("%f",&((p+i)->people.score));
}
else if((p+i)->work=='T'||(p+i)->work=='t'){
printf("输入职务");
scanf("%s",(p+i)->people.occupation);
}
else{
printf("输入错误,请重新输入");
return;
}
}
}
#if 1
void Output(school *p,int n)
{
for(int i=0;i<n;i++){
if((p+i)->work=='S'||(p+i)->work=='s'){
printf("姓名%s性别%c职业%c分数%.1f\n",(p+i)->name,(p+i)->sex,(p+i)->work,(p+i)->people.score);
}
else if((p+i)->work=='T'||(p+i)->work=='t'){
printf("姓名%s性别%c职业%c职务%s\n",(p+i)->name,(p+i)->sex,(p+i)->work,(p+i)->people.occupation);
}
else{
printf("打印错误");
return;
}
}
}
#endif
float average(school*p,int n)
{
int sum=0;
int count=0;
for(int i=0;i<n;i++){
if((p+i)->work=='s'||(p+i)->work=='S'){
sum+=(p+i)->people.score;
count++;
}
}
return (float)sum/count;
}
int teacher(school*p,int n)
{
int count=0;
for(int i=0;i<n;i++){
if((p+i)->work=='t'||(p+i)->work=='T'){
count++;
}
}
return count;
}
void freesapce(school**p)
{
free(*p);
*p=NULL;
}