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

4.8 人体CPU干烧题

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

题目概述:

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

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

  • 低于或等于10 0000 元时,奖金可提 10%;
  • 利润大于 10 0000 元,小于 20 0000 元(10 0000<I≤20 0000)时
    • 低于 10 0000 元的部分按 10%提成
    • 高于 10 0000 元的部分,可提成 7.5%
  • 利润大于 20 0000元,小于或等于40 0000 元(20 0000<I≤40 0000)时
    • 低于 20 0000 元的部分仍上述办法提成(下同)。
    • 高于 20 0000 元的部分按 5%提成。
  • 利润大于 40 0000 元,小于或等于 60 0000 元(40 0000<I≤60 0000)时
    • 高于 40 0000 元的部分按 3%提成。
  • 利润大于 60 0000 元,小于或等于 100 0000 元(60 0000<I≤100 0000)时
    • 高于60 0000 元的部分按 1.5%提成
  • 利润大于 100 0000 时,超过 100 0000 元的部分按 1%提成

从键盘输人当年利润 I,求应发奖金总数。

要求:

(1)用if语句编程序;

(2)用switch语句编程序。

野鸡有话说:

代码难度:⭐

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

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

代码如下:

switch形式的计算

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
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 <stdio.h>
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.塔以外无建筑物。现输入任一点的坐标。求该点的建筑高度(塔外的高度为零).

在这里插入图片描述

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
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图:
在这里插入图片描述

代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
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;
}

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

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值