《大学计算机基础实验教程(C语言版)》解析实训3

《大学计算机基础实验教程(C语言版)》解析

《大学计算机基础实验教程(C语言版)》东北大学出版社
源代码解析
作者:
辽宁工业大学 电子202 宋家盛制作
如有错误,请告知:jff_16@163.com
注:

  1. 解析为增加代码的可读性均使用函数实现
  2. 代码均可在Visual Studio 2019与Code::Blocks上运行通过,若在VC++6.0不可通过请自行调试

实训3计算分段函数

/*
时间:2020.11.30
*/

#include<stdio.h>

void C3_1(void);
void C3_2(void);

int main(void)
{
    printf("C3-1:\n");

    C3_1();

    printf("\nC3-2:\n");

    C3_2();

    return 0;
}

void C3_1(void)
{
	int x;
	printf("Enter x:");
	scanf_s("%d", &x);
	if ((x%2) != 0)
    /*
        错误解析:
        if x%2!= 0  //error
        x%2是一个整体需用()括起来
    */
	{
		printf("奇数");
	}
	else
	{
		printf("偶数");
	}
}

void C3_2(void)
{
	int x;
	double y;
	printf("Enter:");
	scanf_s("%d", &x);
	if (x != 0)
	{
		y = 1.0 / x;           //第一种解法
		//y = 1 / (double)(x);	//第二种解法
	}
	else
	{
		y = 0;
	}
	printf("y = %.1lf\n", y);

        /*
        错误解析:
        error1:
        if(x != 0); //error
        因为分号的存在,该式等价于:
        if(x != 0)
        {
            ;
        }
        即该if执行了一个空语句

        error2:
        y = 1/x;    error
        因为,x为int类型,数字1也为int类型,所以(1/x)的结果为int类型
        例如:
        (3/2) = 1 而不等于1.5
        如果(3/2.0)则 = 1.5
        C语言在除法操作中最后的结果为两式中精度更高的表达式的精度
        (3/2.0)的精度为2.0的精度,即结果为一个浮点数(小数)
        而3/2的精度为整型的精度,即结果为一个整数,故(3/2) = 1


        浅谈强制类型转换:
        利用强制类型转换为本题的第二种解法
        语法:(类型)(表达式)
        作用:
        (double)(x)
        将表达式x的类型强制转换成前面double类型
        故1 / (double)(x) 此时 x原本为int类型被强制转换成了double类型(双精度浮点型可理解为小数)
        强制转换可能会造成数据存储或运算的一些问题,可以了解一下,不推荐使用
        */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值