C程序设计(第五版)谭浩强 著——第四章 选择结构程序设计 书后题答案

1.什么是算数运算?什么是关系运算?什么是逻辑运算?

算数运算即“四则运算”,是加法、减法、乘法和除法的统称。
关系运算是将两个数值进行比较,判断其比较的结果是否符合给定的条件。
在逻辑运算中有与、或、非三种基本逻辑运算。

2.C语言中如何表示真和假?系统如何判断一个量的真和假?

0代表假,1代表真
0代表假,非0代表真

3.写出下面各逻辑表达式的值。设a=3,b=4,c=5。
(1)a+b>c&&b==c
(2)a||b+c&&b-c
(3)!(a>b)&&!c||1
(4)!(x=a)&&(y=b)&&0
(5)!(a+b)+c-1&&b+c/2

(1)0
(2)1
(3)1
(4)0
(5)1

4.有3个整数a,b,c,由键盘输入,输出其中最大的数。

#include<stdio.h>
void main()
{
    int a,b,c,max;
    scanf("%d%d%d",&a,&b,&c);
    max=(a>=b)?a:b;
    (max>=c)?printf("max=%d\n",max):printf("max=%d\n",c);
}

在这里插入图片描述
5.从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是整数,则输出其整数部分)。要求在输出数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。

#include<stdio.h>
#include<math.h>
void main()
{
    double n,t;//t用于计算平方根
    int res;
    printf("请输入一个小于1000的正数:\n");
    scanf("%lf",&n);
    while(n<=0||n>=1000)
    {
        printf("输入的数据不符合规定,请重新输入数据!\n");
        scanf("%lf",&n);
    }
    t=sqrt(n);//计算平方根
    res=(int)t;//取整数部分
    printf("%d\n",res);
    //printf("%2.0lf\n",t);保留两位整数部分
}

在这里插入图片描述
6.有一个函数:
y=x(x<1);y=2x-1(1<=x<10);y=3x-11(x>=10)
写程序,输入x的值,输出y相应的值。

#include<stdio.h>
void main()
{
    float x,res;
    printf("请输入x的值:");
    scanf("%f",&x);
    if(x<1)
        res=x;
    else if(x>=1&&x<10)
        res=2*x-1;
    else
        res=3*x-11;
    printf("y=%f",res);
}

在这里插入图片描述
7.有一函数:
y=-1(x<0);y=0(x=0);y=1(x>0)
有人编写了以下两个程序,请分析它们是否能实现题目要求。不要急于上机运行程序,先分析两个程序的逻辑,画出它们的流程图,分析它们的运行情况。然后,上机运行程序,观察和分析结果。

(1)
#include<stdio.h>
int main()
{
	int x,y;
	printf("enter x:");
	scanf("%d",&x);
	y=-1;
	if(x!=0)
		if(x>0)
			y=1;
	else
		y=0;
	printf("x=%d,y=%d\n",x,y);
	return 0;
}
(2)
#include<stdio.h>
int main()
{
	int x,y;
	printf("enter x:");
	scanf("%d",&x);
	y=0;
	if(x>=0)
		if(x>0) y=1;
	else y=-1;
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

在这里插入图片描述

两个程序都不能实现题目的要求。原因:书写不规范,else和最近的if配对导致结果错误。

8.给出一百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’。90分以上为’A’,80 ~ 89分为’B’,70 ~ 79分为’C’,60 ~ 69分为’D’,60分以下为’E’。

#include<stdio.h>
void main()
{
    int grade;
    scanf("%d",&grade);
    if(grade>=90&&grade<=100)
        printf("%c",'A');
    else if(grade>=80)
        printf("%c",'B');
    else if(grade>=70)
        printf("%c",'C');
    else if(grade>=60)
        printf("%c",'D');
    else
        printf("%c",'E');
}

在这里插入图片描述
9.给一个不多于5位的正整数,要求:
(1)求出他是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字。

#include<stdio.h>
void main()
{
    char a[5];//用于存放每位数字
    int count=0;//用于记录数字的位数
    printf("请输入一个不多于5位的正整数:");
    for(int i=0;i<5;i++)
    {
        a[i]=getchar();
        if(a[i]>='0'&&a[i]<='9')
            count++;
        else//当输入不是数字字符时,跳出循环
            break;
    }
    printf("数据为%d位数\n",count);
    printf("分别输出每一位数字:");
    for(int i=0;i<count;i++)//分别输出每一位数字
    {
        printf("%c ",a[i]);
    }
    printf("\n");
    printf("逆序输出每一位数字:");
    for(int i=count-1;i>=0;i--)//逆序输出每一位数字
    {
        printf("%c ",a[i]);
    }
}

在这里插入图片描述
10.企业发放的奖金根据利润提成。利润I低于或等于100 000元的,奖金可提成10%;利润高于100 000元,低于200 000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7. 5%;200000<I≤400000时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;400000<<I≤600000元时,高于400000元的部分按3%提成;600000<1≤1000000时,高于600000元的部分按1.5%提成;I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
要求:
(1) 使用if语句编写程序。
(2) 使用switch语句编写程序。

#include<stdio.h>
void main()
{
    float I,p;//p为奖金
    printf("请输入当月利润I:");
    scanf("%f",&I);
    if(I<=10000&&I>0)
        p=0.1*I;
    else if(I<=200000)
        p=10000+(I-100000)*0.075;
    else if(I<=400000)
        p=10000+7500+(I-200000)*0.05;
    else if(I<=600000)
        p=10000+7500+10000+(I-400000)*0.03;
    else if(I<=1000000)
        p=10000+7500+10000+12000+(I-600000)*0.015;
    else
        p=10000+7500+10000+12000+6000+(I-1000000)*0.01;
    printf("应发奖金总数=%f\n",p);
}
#include<stdio.h>
void main()
{
    int grade;//等级
    float I,p;//p为奖金
    printf("请输入当月利润I:");
    scanf("%f",&I);
    grade=(int)I/100000;
    switch(grade)
    {
        case 0:
            p=0.1*I;
            break;
        case 1:
            p=10000+(I-100000)*0.075;
            break;
        case 2:
        case 3:
            p=10000+7500+(I-200000)*0.05;
            break;
        case 4:
        case 5:
            p=10000+7500+10000+(I-400000)*0.03;
            break;
        case 6:
        case 7:
        case 8:
        case 9:
            p=10000+7500+10000+12000+(I-600000)*0.015;
            break;
        default:
            p=10000+7500+10000+12000+6000+(I-1000000)*0.01;
    }
    printf("应发奖金总数=%f\n",p);
}

在这里插入图片描述

11.输入4个整数,要求按由小到大的顺序输出。

#include<stdio.h>
void main()
{
    int a[4],t;//t为中间变量
    for(int i=0;i<4;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=0;i<3;i++)//冒泡法
    {
        for(int j=i+1;j<4;j++)
        {
            if(a[j]<a[i])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    printf("由小到大的顺序为:");
    for(int i=0;i<4;i++)
    {
        printf("%d ",a[i]);
    }
}

在这里插入图片描述

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

#include<stdio.h>
#include<math.h>
void main()
{
    double x,y,a,b,d;//ab为两点之间的横坐标纵坐标之差 d为两点之间的距离
    printf("请输入坐标x、y的值:");
    scanf("%lf%lf",&x,&y);
    a=fabs(x)-2;
    b=fabs(y)-2;
    d=sqrt(a*a+b*b);
    if(d<=1.0)
        printf("高度为10m\n");
    else
        printf("高度为0\n");
}

在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值