• 小白C语言编程实战(22):结构体的应用


    这是《小白C语言编程实战》系列的第22篇。
    上一篇:小白C语言编程实战(21):折半(二分)查找


    题目

    某部门有n名销售员,假设n=5时他们的年终销售业绩如下表(单位:万元):

    姓名任务量完成量效益工资
    emp15035
    emp25048
    emp35018
    emp45042.5
    emp55060

    (1)先计算完成比例p,p=完成量/任务量,然后根据p计算每个人的效益工资,计算规则为:

    ① 当p<40%时,效益工资为0;

    ② 当40%≤p<80%时,超出40%的部分按8‰提成,即:效益工资=(完成比例-40%)× 8‰ ×任务量;(**注意!**8‰是指千分之八)

    ③ 当p≥80%时,超出部分按1%提成,即:效益工资=(完成比例-80%)×1%×任务量+40%×8‰×任务量 。

    (2)将这n个人按效益工资由高到低排序,输出排序后每个人的所有信息。

    提示和要求

    (1)销售员属于复杂数据对象,可以定义销售员结构体类型SalesPerson来表示销售员,并定义一个结构体数组存放这n位销售员的所有信息(姓名name、任务量task、完成量sales、效益工资bonus)。

    #define N 5
    struct SalesPerson {
    	char name[15];
    	float task,sales,bonus;
    } persons[N]= {
    	"emp1",50,35,0,
    	"emp2",50,48,0,
    	"emp3",50,18,0,
    	"emp4",50,42.5,0,
    	"emp5",50,60,0
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (2)输出每个人信息时采用下面格式:

    printf("%8s%8.0f%8.1f%8.4f\n",
           persons[i].name,
           persons[i].task,
           persons[i].sales,
           persons[i].bonus);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最终输出结果如下:

    emp5      50    60.0  0.3600
    emp2      50    48.0  0.2400
    emp4      50    42.5  0.1850
    emp1      50    35.0  0.1200
    emp3      50    18.0  0.0000
    
    • 1
    • 2
    • 3
    • 4
    • 5

    参考代码

    #include 
    #include 
    
    #define N 5
    struct SalesPerson {
    	char name[15];
    	float task,sales,bonus;
    } persons[N]= {
    	"emp1",50,35,0,
    	"emp2",50,48,0,
    	"emp3",50,18,0,
    	"emp4",50,42.5,0,
    	"emp5",50,60,0
    };
    
    // 选择排序: 对全局变量persons,按照效益工资由大到小进行排序 
    void sort() {
    	int i,j;
    	for(i=0;i<N;i++) {
    		for(j=i+1;j<N;j++) {
    			if(persons[i].bonus < persons[j].bonus) {
    				struct SalesPerson t = persons[i];
    				persons[i] = persons[j];
    				persons[j] = t;
    			}
    		}
    	}
    } 
    
    int main() {
    	int i;
    	//定义一个结构体指针变量 
    	struct SalesPerson *p;
    	for(i=0; i<N; i++) {
    		p = &persons[i];
    		float per = (*p).sales/(*p).task;
    		if(per >= 0.8) {
    			(*p).bonus = (((per-0.8)*0.01) + 0.4*0.008)*(*p).task;
    		} else if(per >= 0.4) {
    			(*p).bonus = (per-0.4)*0.008*(*p).task;
    		}
    	}
    	//选择排序
    	sort();
    	//输出 
    	for(i=0; i<N; i++) {
    		printf("%8s%8.0f%8.1f%8.4f\n",
    		       persons[i].name,
    		       persons[i].task,
    		       persons[i].sales,
    		       persons[i].bonus
    		      );
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    以太网基础学习(三)——UDP协议
    Redis -- 秒杀
    C++内存管理
    windows上安装MySQL Server.
    三分钟阿里云服务器全方位介绍(看一篇就够了)
    Visual Studio 2017多工程开发
    golang 结构体标签 -- struct tag (八)
    马来酰亚胺/碳碳双键表面/硫硅烷基团/金属硫蛋白修饰二氧化硅微球的性能与制备
    前端请求后台接口失败处理逻辑
    iphone怎么传数据到另一个手机,苹果如何转移数据到新手机,两台iphone怎么同步所有数据
  • 原文地址:https://blog.csdn.net/linysuccess/article/details/127596769