《大学计算机基础实验教程(C语言版)》解析
《大学计算机基础实验教程(C语言版)》东北大学出版社
源代码解析
作者:
辽宁工业大学 电子202 宋家盛制作
如有错误,请告知:jff_16@163.com
注:
- 解析为增加代码的可读性均使用函数实现
- 代码均可在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类型(双精度浮点型可理解为小数)
强制转换可能会造成数据存储或运算的一些问题,可以了解一下,不推荐使用
*/
}