前言

🐨这一篇主要是讲那些老师可能不会讲,但是很多初学者都容易踩坑的地方
🤔 根据自己踩过的的坑整理了一下🤧



想要bug少,细节注意不能少~👈(゚ヮ゚👈)

一、整除问题

1️⃣第一种情况:整数相除,抹去小数位

 示例: 9/2=4  -9/2=-4
#include <stdio.h>

int main()
{
	float a;
	a=9/2;
	printf("%f",a);
}

在这里插入图片描述

#include <stdio.h>

int main()
{
	float a;
	a=-9/2;
	printf("%f",a);
}

在这里插入图片描述
分析:上面两个例子可看出在a已经为浮点数float的情况下,a=9/2;a=-9/2;等号后面的两个整数在运算完成后是按照int型来计算的,计算完成后的结过直接把小数位抹去,然后才赋值给a,转化为float类型

2️⃣第二种情况:被除数<除数,结果为0

   示例:1/2=0
#include <stdio.h>

int main()
{
	float a;
	a=1/2;
	printf("%f",a);
}

在这里插入图片描述

3️⃣第三种情况:分子分母有一个为浮点数,结果即为浮点数

注意像示例2这种,分子或者分母有多个数的,只要有一个为浮点数即可

示例1:1.0/2=0.5 1/2.0=0.5

示例2:a,b,c为int型 a=(2.0*b) /c

如何避免整数相除损失精度:👈(゚ヮ゚👈)
1.直接将整数保留一位小数(使得分子或是分母为浮点数即可)

  • 示例1
#include <stdio.h>

int main()
{
	float a;
	a=1.0/2;
	printf("%f",a);
}

在这里插入图片描述

#include <stdio.h>

int main()
{
	float a;
	a=1/2.0;
	printf("%f",a);
}

在这里插入图片描述

  • 示例2
#include <stdio.h>

int main()
{
	float a;
	int b,c;
	scanf("%d%d",&b,&c);
	a=2.0*b/c;
	printf("%f",a);
}

在这里插入图片描述

2.直接将分子或分母 强制转换为 浮点数类型

强制转换:(要转换的类型)(要转换的数) ——>如:(int)a 或(float)(a*b) 要转换的数只有一个的时候,第二个括号可以省略

示例:int a,b,c; a=(float)(2b)/c 或 a=2b/(float)c

#include <stdio.h>

int main()
{
	float a;
	int b,c;
	scanf("%d%d",&b,&c);
	a=(float)(2*b)/c;
	printf("%f",a);
}

在这里插入图片描述


二、求余运算

1.该运算只能作用于两个整数的运算,运算结果是两个整数的余数,结果为整数。
2.运算结果的符号与被除数的符号一致
5%2=1 -5%2=-1 5%-2=1
3.如果 被除数 小于 除数 ,结果为被除数
2%9=2


三、赋值运算

结合性:从右向左

赋值运算中的自动类型转换:
1.赋值后,左边的值被右边表达式的值替换
2.如果左右两边类型不一致,以左边变量的类型为准,将表达式值的类型转换为左边变量的类型

1️⃣复合赋值运算:

  • 结合性:从右向左
  • 注意:两个运算符中间不要有空格

第一列是复合赋值运算符,第二列分别等于其对应的第三列

+=a+=ba=a+b
-=a-=ba=a-b
*=a*=ba=a*b
%=a%=ba=a%b

2️⃣复合赋值运算练习:

例题:设有如下变量定义,计算表达式y+=i-=j*=++x的值

 int  i=3,j=5;
 float x=2.5,y=5.0;

计算步骤:

  • 计算++x
    y+=i-=j*=++x

    ++x等价于x=x+1
    x=3.5

  • 计算j*=++x
    y+=i-=j*=++x

    经过第一步计算变为:
    y+=i-=j*=x 此时x=3.5
    j=j*x
    等号右边j * 3.5=17.5 赋值给左边后:j=17
    (从右向左计算,因为j为int类型,所以小数部分就被抹去了)

  • 计算i-=j*=++x

    经过上一步计算变为:
    y+=i-=j
    i=i-j 此时j=17
    i=-14

  • 计算y+=i-=j*=++x
    y+=i-=j*=++x
    经过上一步计算变为:
    y+=i 此时i=-14
    y=y+i
    y=-9.0
    y是double型的,结果由-9变为-9.0


四、逻辑运算符的优先级和结合性

  • 优先级:
    !大于&&大于||

  • 结合性:
    逻辑非,右结合
    逻辑与、逻辑或,左结合

运算符的优先级:
!、++、- -、sizeof>算术运算符>关系运算符>&&、||>赋值运算符

问题:如何表达1<x<10?
1<x<10 ❌
x>1&&x<1 ✅


最后

(〒▽〒)由于本人能力有限以及是个小迷糊,如有错误或是不妥的地方,麻烦各位及时指出,以免我误导他人,多谢🥳

🕊️ 原 创 不 易 , 希 望 各 位 大 佬 支 持 一 下 \textcolor{orange}{原创不易,希望各位大佬支持一下}

👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{green}{点赞,你的认可是我创作的动力!}

⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{green}{收藏,你的青睐是我努力的方向!}

✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{green}{评论,你的意见是我进步的财富!}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐