一、有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
1>定义函数在堆区申请空间n
struct B *p=(struct B *)malloc((sizeof B)* n);
2>定义函数实现录入学校人员信息
3>定义函数输出学校人员信息
4>定义函数计算学生平均成绩
5>定义函数计算老师的个数
6>释放存储空间
#ifndef __HEAD_H__
#define __HEAD_H__
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char name[20]; //定义姓名
char sex; //定义性别:'W'男,'M'女
char job; //定义职业
union //没有共用体名
{
float score; //定义学生分数
char position[20]; //定义教师职务
};
}people;
people *create(int n);
people *my_free(people *p);
#endif
//主函数
#include "head.h"
int main(int argc, const char *argv[])
{
int n;
printf("请输入录入人数:");
scanf("%d",&n);
people *p=create(n); //申请堆区空间
input(p,n);//录入学校人员信息
output(p,n);//输出学校人员信息
printf("教师人数:%d\n",count(p,n));//教师人数
return 0;
}
//存储自定义函数
#include "head.h"
//堆区申请空间
people *create(int n)
{
people *p=(people *)malloc(sizeof(people)*n);
if(p==NULL)
return NULL;
return p;
}
//录入学校人员信息
void input(people *p,int n)
{
for(int i=0;i<n;i++)
{
printf("请输入姓名\n");
scanf("%s",(p+i)->name);
printf("请输入性别\n");
scanf(" %c",&(p+i)->sex);
printf("请输入职业\n");
scanf(" %c",&(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
{
printf("请输入分数\n");
scanf(" %f",&(p+i)->score);
}
else
{
printf("请输入职务\n");
scanf(" %s",(p+i)->position);
}
}
}
//输出学校人员信息
void output(people *p,int n)
{
printf("姓名\t性别\t职业\t成绩/职务\n");
for(int i=0;i<n;i++)
{
printf("%s\t",(p+i)->name);
printf("%c\t",(p+i)->sex);
if((p+i)->job=='s'||(p+i)->job=='S')
{
printf("学生\t%.2f\n",(p+i)->score);
}
else
{
printf("老师\t%s\n",(p+i)->position);
}
}
}
//计算平均成绩
int count(people *p,int n)
{
float sum=0;
int cnt =0;
for(int i=0;i<n;i++)
{
if((p+i)->job=='s'||(p+i)->job=='S')
{
sum += (p+i)->score;
cnt++;
}
}
printf("学生的平均成绩为:%.2f\n",sum/cnt);
return n-cnt ;
}
//释放空间
people *my_free(people *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
二、在堆区申请5个连续的存储空间,实现车辆信息的输入(品牌,颜色,价格)
- 调用函数在堆区申请空间
- 调用函数实现输入
- 调用函数对价格排序
- 调用函数输出
- 释放堆区空间
//头文件 //宏定义 #ifndef __HEAD_H__ #define __HEAD_H__ #include<string.h> #include<stdio.h> #include<stdlib.h> typedef struct { char brand[20]; char color[20]; int price; }car; car * create(int n); void destroy(car *p); void input(car *p, int n); void output(car *p, int n); void price(car *p, int n); #endif
#include "head.h" int main(int argc, const char *argv[]) { car *p = create(5); input(p, 5); price(p, 5); output(p, 5); destroy(p); return 0; }
//存储自定义函数 #include "head.h" car *create(int n) { car *p = (car *)malloc(sizeof(car) * n); if (p == NULL) return NULL; return p; } void input(car *p, int n) { for (int i = 0; i < n; i++) { printf("正在录入第%d辆车信息\n", i + 1); printf("请输入车辆品牌:"); scanf("%s", (p + i)->brand); printf("请输入车辆颜色:"); scanf(" %s", (p+i)->color); printf("请输入车辆价格:"); scanf("%f", &(p+i)->price); } } void output(car *p, int n) { printf("品牌\t颜色\t价格\n"); for (int i = 0; i < n; i++) { printf("%s\t",(p+i)->brand); printf("%s\t",(p+i)->color); printf("%.2f\n",(p+i)->price); } } void price(car *p, int n) { for (int i = 1; i < n; i++) { for (int j = 0; j < n - i; j++) { if ((p + j)->price > (p + j + 1)->price) { car temp = p[j]; p[j] = p[j + 1]; p[j + 1] = temp; } } } } void destroy(car *p) { free(p); p = NULL; }