C语言学习日志0001

发布于:2022-10-13 ⋅ 阅读:(330) ⋅ 点赞:(0)

鄙人C语言小白一枚,踩了很多坑,在此记录,愿能帮其他小白避避雷。

一.四舍五入

鄙人在做C语言练习题时,常常会在数据的”四舍五入“上出现问题。

1.需不需要四舍五入?

C语言取整常见两种情况:

1)整数除法运算时会自动取整

2)控制浮点型输出的小数点位数

那么问题来了,二者的进位情况是什么样的呢?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a=5,b=3;
    double c=5.0,d=3.0;
    printf ("%d\n",a/b);
    printf ("%f\n",c/d);
    printf ("%.0f\n",c/d);
    printf ("%.2f\n",c/d);
    return 0;
}

 

 

 我们不难看出

1)整型相除时会直接舍弃掉小数部分。

2)而浮点数进行除法运算时,会根据保留的位数进行四舍五入。

2.其他的四舍五入的办法?

比如我现在通过计算得到了一个浮点型数据,但我并不想直接输出,而是需要让它四舍五入后参与后续运算,该怎么做呢?

网上有很多方法,但作为小白我还是推荐这个方法:

(int)(num+0.5)

由于类型转换时会自动舍弃小数部分,所以可以直接加上0.5后进行判断。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a=5,b=3,c=2;
    printf("%d\n",(int)(a/b+0.5));
    printf("%d\n",(int)(a/c+0.5));
}

运行结果如下:

 这样就实现了对浮点数的四舍五入。

二.整型与浮点型的加减与大小比较

对于不少人来说,这貌似是常识性问题,但我相信在这里犯迷糊的人肯定不止我一个。

1.整型和浮点型可以直接加减吗?

答案是:可以。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a=5.5;
    int b=3;
    printf("%d\n",a+b);
    printf("%f\n",a+b);
}

输出结果如下:

 这里就涉及到自动类型转换的问题。

1)有浮点型参与运算得到的结果一定是浮点型;

2)占位符不可以进行类型转换;

3)低优先级会被高优先级同化。

数据优先级:double>float>int>char

接下来以这三个标准来进行分析上述代码。

Ⅰ.因为有浮点型参与了运算(无论加减乘除),所以结果被自动转换成了浮点型

Ⅱ.由于占位符无法进行数据类型转换,数据类型不同,输出异常。

Ⅲ.而"%lf"对应浮点型,可以正常输出。

2.整型和浮点型可以比较大小吗?

答案仍然是:可以。

可以简单理解在比较大小时整型被扩展成了浮点型。但注意尽量不要这样比较,因为浮点型会存在精度误差,即计算机无法准确存储浮点型。

三.取出数字中的各位数

这是个没什么用的小。。。技巧?

“%10”可以理解为取出最后一位数

“/10”可以理解为去除最后一位数

例如

1234%10 就是拿出4;

1234/10就是去掉4,剩下的数就是123.

这只是因为我前期老是不懂取余以及除法操作才想出来的笨法。。。

饭后闲话

实话实说,C语言入门我真的感觉不容易,我是大学之前完全没接触过C语言,身边很多C语言大佬都表示C语言怎么怎么简单好学,可能确实是因为我太菜了吧(悲)。学校的课程进度飞快,很多细节根本不讲,所以我真的就是在一点点做题去摸索,犯了无数低级的错误,但我还是一直坚持着,并且默默的记录着自己犯错误的那些小点,希望能帮帮那些和我一样从入门就感觉困难的萌新吧~愿我们一起努力,干掉C语言!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到