day2__数据结构——作业题:学校人员统计(共用体)

1.

 main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	int n;
	printf("请输入需要几个人员的信息");
	scanf("%d",&n);
	person *p=space(n);
	input(p, n);
	output(p,n);
	average(p, n);
	sumteacher(p, n);
	p=free_(p);
	
	
	return 0;
}

fun.c

#include "head.h"
person *space(int n)
{
	person *p=(person *)malloc(sizeof(person)*n);
	if(p==NULL){
		return NULL;
	}
	return p;
}
void input(person *p,int n)
{
	for(int i=0;i<n;i++){
		printf("请输入%d人员的姓名",i+1);
		scanf("%s",(p+i)->name);
		printf("请输入%d人员的性别",i+1);

		scanf(" %c",&(p+i)->sex);
		printf("请输入%d人员的职业",i+1);
		scanf(" %c",&(p+i)->profession);
		if((p+i)->profession=='s'){
		printf("请输入%d人员的成绩",i+1);
		scanf("%f",&(p+i)->c.score);
			
		}
		else{
			
		printf("请输入%d人员的职务",i+1);
		scanf("%s",(p+i)->c.position);
		}
	}
}
void output(person *p,int n)
{
	printf("姓名\t性别\t职业\t职务(成绩)");
	for(int i=0;i<n;i++){
		if((p+i)->profession=='s')
	printf("%s\t %c \t %c \t%.2f",(p+i)->name,(p+i)->sex,(p+i)->profession,(p+i)->c.score);	
	
	else{
	printf("%s\t %c \t %c \t%s",(p+i)->name,(p+i)->sex,(p+i)->profession,(p+i)->c.position);	
		
	}
	}
}
void average(person *p,int n)
{
	int all=0,count=0;
	for(int i=0;i<n;i++){
		if((p+i)->profession=='s'){
		all+=(p+i)->c.score;
		count++;
		}

	}
		printf("学生的平均成绩为%d\n",all/count);
}
void sumteacher(person *p,int n)
{
	int sum=0;
	for(int i=0;i<n;i++){
		if((p+i)->profession=='t'){
			sum++;
		}
	}
	printf("老师数量为%d\n",sum);
}
person *free_(person *p)
{
	if(p==NULL){
		return NULL;
	}
	free(p);
	p=NULL;
	return p;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
typedef union 
{
	char position[20];
	float score;
}choice;
typedef struct 
{
	char name[20];
	char sex;
	char profession;
	choice c;

}person;

person *space(int n);
void input(person *p,int n);
void output(person *p,int n);
void average(person *p,int n);
void sumteacher(person *p,int n);
person *free_(person *p);

















#endif

2、商品名称、单价、数量

main.c

fun.c

#include "head.h"
ware * space(int n)
{
	ware *p=(ware *)malloc(sizeof(ware)*n);
	if(p==NULL){
		return NULL;
	}
	
	return p;
}
void input(ware *p ,int n)
{
	for(int i=0;i<n;i++){
		printf("请输入第%d个商品名称",i+1);
		scanf("%s",(p+i)->name);
		printf("请输入第%d个商品单价",i+1);
		scanf("%d",&(p+i)->price);
		printf("请输入第%d个商品的数量",i+1);
		scanf("%d",&(p+i)->sum);

	}
}
void all(ware *p,int n)
{
	int all=0,i=0;
	for(i=0;i<n;i++){
		all+=(((p+i)->price)*((p+i)->sum));
			
		
	}
	printf("商品总价格为%d\n",all);
}
void max(ware *p,int n)
{
	int i=0,max=0;
	ware s;
	for(i=0;i<n;i++){
		if((p+i)->price>max){
			max=(p+i)->price;
			s=*(p+i);	
		}
	}
	printf("%s是最贵的商品,单价是%d\n",s.name,max);
}
void lookup(ware *p,int n)
{
	int i=0;
	char a[20];
	ware s;
	printf("请输入想要查找的商品名称");
	scanf("%s",a);
	for(i=0;i<n;i++){
		
		if(strcmp(a,((p+i)->name))==0);{
			s=*(p+i);
		}
	}
		printf("%s\t%d\t%d\n",s.name,s.price,s.sum);
}
void mp(ware *p,int n)
{
	ware temp;
	int i=0,j=0;
	for(i=1;i<n;i++){
		for(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;
			}
		}
	}
	for(i=0;i<n;i++){
		printf("商品名称:%s\t商品价格:%d\t商品数量:%d\n",(p+i)->name,(p+i)->price,(p+i)->sum);

	}
}

ware * free_(ware *p)
{
	if(p==NULL)
	{
		return NULL;
	}
	free(p);
	p=NULL;
	return p;
}

 

 head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct 
{
	char name[20];
	int price;
	int sum;
}ware;
ware * free_(ware *p);

void mp(ware *p,int n);
void lookup(ware *p,int n);
void max(ware *p,int n);
void all(ware *p,int n);
void input(ware *p ,int n);
ware * space(int n);





#endif

3、字节长度(答案:32个字节)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值