作业1:有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
头文件
#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
{
int score;//分数
char post[30];//职务
};
}per,*p_per;
p_per create(int n);
void input(p_per p,int n);
void output(p_per p,int n);
double average(p_per p,int n);
void t_sum(p_per p,int n);
#endif
自定义函数
#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("请输入第%d个人的姓名:",i+1);
scanf("%s",(p+i)->name);
printf("请输入第%d个人的性别:",i+1);
getchar();
scanf(" %c",&(p+i)->sex);
printf("请输入第%d个人的职业:",i+1);
getchar();
scanf(" %c",&(p+i)->job);
if ((p+i)->job == 's' || (p+i)->job == 'S')
{
printf("请输入分数:");
scanf("%d",&(p+i)->score);
}else
{
printf("请输入职务:");
scanf("%s",(p+i)->post);
}
}
}
/*
* 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++)
{
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("%d\n",(p+i)->score);
}else
{
printf("%s\n",(p+i)->post);
}
}
}
/*
* function: 计算学生平均成绩
* @param [ in] 指针,总数量
* @param [out]
* @return 平均成绩
*/
double average(p_per p,int n)
{
int sum = 0;
int num = 0;
for (int i = 0; i<n ; i++)
{
if ((p+i)->job == 's' || (p+i)->job == 'S')
{
sum += (p+i)->score;
num++;
}
}
return (double)sum/num;
}
/*
* function: 计算老师的个数
* @param [ in] 指针,总数量
* @param [out]
* @return 无
*/
void t_sum(p_per p,int n)
{
int num = 0;
for (int i = 0; i<n ; i++)
{
if ((p+i)->job == 't' || (p+i)->job == 'T')
{
num++;
}
}
printf("老师的总数量为:%d\n",num);
}
主函数
#include"head.h"
int main(int argc, const char *argv[])
{
int num;//总数量
printf("请输入师生总数量:");
scanf("%d",&num);
//创建空间
p_per p_person = create(num);
//输入数据
input(p_person,num);
//输出学校人员信息
output(p_person,num);
//计算学生平均成绩
double ave = average(p_person,num);
printf("平均成绩为:%.2lf\n",ave);
//计算老师的个数
t_sum(p_person,num);
//释放空间
free(p_person);
p_person = NULL;
return 0;
}
作业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<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct CAR
{
char name[20];//品牌
char color[20];//颜色
int price;//价格
}car,*p_car;
p_car create(int n);
void input(p_car p,int n);
void output(p_car p,int n);
void price_sort(p_car p,int n);
#endif
自定义函数
#include"head.h"
/*
* function: 创建空间
* @param [ in] 需要创建的个数
* @param [out]
* @return 指针
*/
p_car create(int n)
{
p_car p= (p_car)malloc(sizeof(car)*n);
if (p == NULL)
{
return NULL;
}
return p;
}
/*
* function: 输入信息
* @param [ in] 指针,总数
* @param [out]
* @return 无
*/
void input(p_car p,int n)
{
for (int i = 0; i < n; i++)
{
printf("请输入第%d辆车的品牌:",i+1);
scanf("%s",(p+i)->name);
printf("请输入第%d辆车的颜色:",i+1);
scanf(" %s",(p+i)->color);
printf("请输入第%d辆车的价格:",i+1);
scanf("%d",&(p+i)->price);
}
}
/*
* function: 输出数据
* @param [ in] 指针,总数量
* @param [out]
* @return 无
*/
void output(p_car p,int n)
{
printf("品牌\t颜色\t价格\n");
for (int i = 0; i<n; i++)
{
printf("%s\t%s\t%d\n",(p+i)->name,(p+i)->color,(p+i)->price);
}
}
/*
* function: 对价格排序
* @param [ in] 指针,总数
* @param [out]
* @return 无
*/
void price_sort(p_car p,int n)
{
for (int i = 1; i < n; i++)
{
int count = 0;
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;
count++;
}
}
if (count == 0)
{
break;
}
}
}
主函数
#include"head.h"
int main(int argc, const char *argv[])
{
int num;//总数量
printf("请输入车辆总数量:");
scanf("%d",&num);
//创建空间
p_car p_c = create(num);
//输入数据
input(p_c,num);
//输出车辆信息
output(p_c,num);
//对价格排序
price_sort(p_c,num);
//输出数据
output(p_c,num);
//释放空间
free(p_c);
p_c = NULL;
return 0;
}