C语言程序与设计第四版课后习题 - 第四章(二)

4.8 人体CPU干烧题

前言:后面这三题之所以独立出来是感觉这三题是数学题,本人数学实力有限,所以这三题代码部分基本上都出自于官方教材的课后习题答案部分。

题目概述:

企业发放的奖金根据企业的当年利润决定。

当利润(以 I表示) ****

  • 低于或等于10 0000 元时,奖金可提 10%;
  • 利润大于 10 0000 元,小于 20 0000 元(10 0000
  • 低于 10 0000 元的部分按 10%提成
  • 高于 10 0000 元的部分,可提成 7.5%
  • 利润大于 20 0000元,小于或等于40 0000 元(20 0000
  • 低于 20 0000 元的部分仍上述办法提成(下同)。
  • 高于 20 0000 元的部分按 5%提成。
  • 利润大于 40 0000 元,小于或等于 60 0000 元(40 0000
  • 高于 40 0000 元的部分按 3%提成。
  • 利润大于 60 0000 元,小于或等于 100 0000 元(60 0000
  • 高于60 0000 元的部分按 1.5%提成
  • 利润大于 100 0000 时,超过 100 0000 元的部分按 1%提成
  • 从键盘输人当年利润 I,求应发奖金总数。

    要求:

    (1)用if语句编程序;

    (2)用switch语句编程序。

    野鸡有话说:

    代码难度:⭐

    理解题目难度:⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

    PS:本题我搞了一下午都没看懂,放弃了,所以下面的答案不是我写的,是课本配套的习题解答,给你们研究研究

    代码如下:

    switch形式的计算

    #define _CRT_SECURE_NO_WARNINGS 1
    #include 
    int main()
    {
    	long i = 0;
    	double bonus, bon1, bon2, bon4, bon6, bon10;
    	int branch = 0;
    	bon1 = 100000 * 0.1;
    	bon2 = bon1 + 100000 * 0.075;
    	bon4 = bon2 + 200000 * 0.05;	
    	bon6 = bon4 + 200000 * 0.03;
    	bon10 = bon6 + 400000 * 0.015;
    
    	printf("请输入利润i:");
    	scanf("%ld", &i);
    
    	branch = i / 100000;
    
    	if (branch > 10)
    		branch = 10;
    	switch (branch)
    	{
    		case 0:
    			bonus = i * 0.1;
    			break;
    		case 1:
    			bonus = bon1 + (i - 100000) * 0.075;
    			break;
    		case 2:
    		case 3:
    			bonus = bon2 + (i - 200000) * 0.05;
    			break;
    		case 4:
    		case 5:
    			bonus = bon4 + (i - 400000) * 0.03;
    			break;
    		case 6:
    		case 7:
    		case 8:
    		case 9:
    			bonus = bon6 + (i - 600000) * 0.015;
    			break;
    		case 10:
    			bonus = bon10 + (i - 1000000) * 0.01;
    	}
    
    	printf("奖金是:%10.2f\n",bonus);
    
    	return 0;
    }
    

    if形式的计算

    #define _CRT_SECURE_NO_WARNINGS 1
    #include 
    int main()
    {
    	long i = 0;
    	double bonus, bon1, bon2, bon4, bon6, bon10;
    	bon1 = 100000 * 0.1;
    	bon2 = bon1 + 100000 * 0.075;
    	bon4 = bon2 + 100000 * 0.05;	//这里是错的??为什么跟上面的不一样??
    	bon6 = bon4 + 100000 * 0.03;
    	bon10 = bon6 + 400000 * 0.015;
    
    	printf("请输入利润i:");
    	scanf("%ld", &i);
    
    	if (i <= 100000)
    		bonus = i * 0.1;
    	else if (i <= 200000)
    		bonus = bon1 + (i - 100000) * 0.075;
    	else if (i <= 400000)
    		bonus = bon2 + (i - 200000) * 0.05;
    	else if (i <= 600000)
    		bonus = bon4 + (i - 400000) * 0.03;
    	else if (i <= 1000000)
    		bonus = bon6 + (i - 600000) * 0.015;
    	else
    		bonus = bon10 + (i - 1000000) * 0.01;
    
    	printf("奖金是:%10.2f\n",bonus);
    
    	return 0;
    }
    

    4.9 圆塔问题

    题目概述:

    有 4 个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为 1,见图 4.14。这 4 个塔的高度为10m.塔以外无建筑物。现输入任一点的坐标。求该点的建筑高度(塔外的高度为零).

    C语言程序与设计第四版课后习题 - 第四章(二)_第1张图片

    代码如下:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include 
    int main()
    {
    	int h = 10;
    	float x1 = 2;
    	float y1 = 2;
    	float x2 = -2;
    	float y2 = 2;
    	float x3 = -2;
    	float y3 = -2;
    	float x4 = 2;
    	float y4 = -2;
    	float x, y, d1, d2, d3, d4;
    
    	scanf("%f,%f", &x, &y);
    
    	d1 = (x - x1) * (x - x1) + (y - y1) * (y - y1); 
    	d2 = (x - x2) * (x - x2) + (y - y2) * (y - y2); 
    	d3 = (x - x3) * (x - x3) + (y - y3) * (y - y3); 
    	d4 = (x - x4) * (x - x4) + (y - y4) * (y - y4);
    
    	
    	if (d1 > 1 && d2 > 1 && d3 > 1 && d4 > 1) 
    		h = 0; 
    	printf("该点高度为%d\n", h);
    
    	return 0;
    }
    

    本题其实就是让你算该点到每个中心点的距离,只要点在塔外那么就是0,只要在塔内就是10.

    4.10 求ax2 + bx + c = 0方程的解

    题目概述

    根据代数知识,应该有以下几种可能:

    • a=0,不是二次方程,而是一次方程
    • b2-4ac=0,有两个相等的实根
    • b2-4ac>0,有两个不等的实根
    • b2-4ac<0,有两个共扼复根。
    • 请画出 N-S 流程图,并据此编写程序,程序应能处理上面 4 种情况。运行程序时,分别给出不同的 a、b、c 值,相应于上面 4 种情况,分析输出结果。

    N-S图:
    C语言程序与设计第四版课后习题 - 第四章(二)_第2张图片

    代码如下:
    #define _CRT_SECURE_NO_WARNINGS 1
    #include 
    #include 
    int main()
    {
    	float a, b, c, disc, x1, x2, realpart, imagpart; 
    	printf("please enter a,b,c:"); 
    	scanf("%f,%f,%f", &a, &b, &c); 
    	printf("The equation ");
    	if (fabs(a) <= 1e-6)
    		printf("is not a quadratic\\n"); 
    	else
    	{
    		disc = b * b - 4 * a * c;
    		if (fabs(disc) <= 1e-6)
    			printf("has two equal roots:%8.4f\n", -b / (2 * a));
    		else if (disc > 1e-6)
    		{
    			x1 = (-b + sqrt(disc)) / (2 * a);
    			x2 = (-b - sqrt(disc)) / (2 * a);
    			printf("has distinct real roots:%8.4f and 68.4fn", x1, x2);
    		}
    		else
    		{
    			realpart = -b / (2 * a);
    			imagpart = sqrt(-disc) / (2 * a);
    			printf("has complex roots:\n");
    			printf("%8.4f+%8.4fi\n", realpart, imagpart);
    			printf("%8.4f-%8.4fi\n", realpart, imagpart);
    
    		}
    	}
    	return 0;
    }
    

    本题答案亦出自教材课后习题的代码。

    你可能感兴趣的:(c语言,开发语言)