作业1.
有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
head.h
#ifndef N
#define N
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct person{
char name[32];
char sex;
char job;
union
{
double socre;
char position[32];
};
}per, *p_per;
p_per create(int n);
void input(p_per,int );
void output(p_per,int );
void my_student(p_per, int);
void my_ter(p_per, int);
p_per my_free(p_per p);
#endif
main.c
#include"head.h"
int main(int argc, const char *argv[])
{
int n;
printf("请输入需要录入的人员数量:");
scanf("%d",&n);
p_per t=create(n);//申请堆区的空间
input(t,n);//录入学校人员信息
output(t,n);//输出学校人员信息
my_student(t,n);//计算 学生 平均成绩
my_ter(t, n);//计算 老师 的个数
t=my_free(t);//释放存储空间
return 0;
}
test.c
#include"head.h"
/*
* function: 堆区申请空间
* @param [ in]
* @param [out]
* @return 堆区首地址
*/
p_per create(int n){
p_per p=(p_per)malloc(sizeof(per)*n);
if(p==NULL)
return NULL;
return p;
}
/*
* function: 录入学校人员信息
* @param [ in] 数组首地址
* @param [out]
* @return 数组的首地址
*/
void input(p_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("%lf", &(p+i)->socre);
}else{
printf("请输入职务:");
scanf("%s", (p+i)->position);
}
}
}
/*
* function: 输出学校人员信息
* @param [ in] 数组的首地址,数组个数
* @param [out]
* @return 数组的首地址
*/
void output(p_per p,int n){
printf("姓名:\t性别:\t 职业:\t成绩/职务:\n");
for(int i=0; i<n;i++){
if((p+i)->job == 's' || (p+i)->job=='S'){
printf("姓名:%s\t性别:%c\t 职业:%c\t成绩:%.2lf\n",(p+i)->name, (p+i)->sex,(p+i)->job,(p+i)->socre);
}else{
printf("姓名:%s\t性别:%c\t 职业:%c\t职务:%s\n",(p+i)->name, (p+i)->sex,(p+i)->job,(p+i)->position);
}
}
}
/*
* function: 计算学生平均成绩
* @param [ in]
* @param [out]
* @return 空
*/
void my_student(p_per p, int n){
double sum=0.0; //总分
int k=0; //用于计算学生的人数
double aver=0.0; //平均分
for(int i=0; i<n;i++){
if((p+i)->job == 's' || (p+i)->job=='S'){
k++;
sum+=(p+i)->socre;
}
}
aver= 1.0*sum/k;
printf("学生的平均成绩:%.2lf\n", aver);
}
/*
* function: 计算老师的人数
* @param [ in]
* @param [out]
* @return
*/
void my_ter(p_per p, int n){
int k=0;//用于计算老师的人数
for(int i=0; i<n;i++){
if((p+i)->job == 't' || (p+i)->job=='T'){
k++;
}
}
printf("老师的人数为:%d位\n", k);
}
/*
* function: 释放存储空间
* @param [ in]
* @param [out]
* @return 空指针
*/
p_per my_free(p_per p){
if(p==NULL) return NULL;
free(p);
p=NULL;
return p;
}
```c
在堆区申请5个连续的存储空间,实现车辆信息的输入(品牌,颜色,价格)
头文件
#ifndef HEAD_C
#define HEAD_C
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
typedef struct CAR{
char name[32];
char color[20];
int price;
}car, *c_car;
c_car create();//申请5个连续的堆区空间
void input(c_car );
c_car bubble(c_car );
void output(c_car);
c_car my_free(c_car);
#endif
main.c
int main(int argc, const char *argv[])
{
c_car t=create();
input(t);
t=bubble(t);
output(t);
t=my_free(t);
return 0;
}
test.c
#include"head.h"
c_car create(){
c_car t=(c_car)malloc(sizeof(car)*5);
if(t==NULL) return NULL;
return t;
}
void input(c_car t){
for(int i=0; i<5; i++){
printf("请输入车辆的品牌:\n");
scanf("%s", (t+i)->name);
printf("请输入车辆的颜色:\n");
scanf("%s", (t+i)->color);
printf("请输入车辆的价格:\n");
scanf("%d", &(t+i)->price);
}
}
c_car bubble(c_car t){
for(int i=1;i<5;i++){
for(int j=0; j<5-i;j++){
if((t+j)->price > (t+j+1)->price){
car temp=*(t+j);*(t+j)=*(t+j+1);*(t+j+1)=temp;
}
}
}
return t;
}
void output(c_car t){
for(int i=0; i<5;i++){
printf("品牌:%s\t颜色:%s\t价格:%d\n", (t+i)->name, (t+i)->color, (t+i)->price );
}
}
c_car my_free(c_car t){
if(t==NULL) return NULL;
free(t);
return NULL;
}