零基础C语言入门009——算术运算符,运算符的优先级和结合性表

本文介绍了C语言中的算术运算符,包括加减乘除和求余,强调了除法对整数和浮点数的不同处理。此外,解释了运算符的目数概念,以及表达式的优先级和结合性规则。同时,讨论了类型转换,特别是编译器如何自动转换不同类型的运算数,并展示了如何强制转换数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C 语言通过提供大量的运算符来支持我们对数据进行处理,前边我们将一个值存放到变量中,使用的是赋值运算符。

C 语言中最常用的运算符——算数运算符。
在这里插入图片描述
这里有几点要跟大家说一下:

因为键盘上没有乘号和除号两个按键,所以用星号(*)和斜杠(/)代替,这几乎是潜规则了。
对于整数间的除法是采取直接舍弃小数部分的方式,而不是什么四舍五入噢。而且被除数不能为零。

#include<stdio.h>
int main(void)
{
	printf("%d\n", 5 / 3);
	system("pause");
	return 0;
}

对于浮点数间的除法则能获得一个相对逼近结果的值(如果除不尽或位数特别多的话)。
百分号(%)在这里是表示求余数的意思,但求余运算符要求两边的操作数都要是整数,其结果也是整数。

何谓“目”?

大家可能看到有些运算符后边写双目,有些写单目,那么什么是目呢?
我们把被运算符作用的运算对象称之为操作数,比如 1 + 2,那么 1 和 2 就是被加法运算符(+)作用的两个操作数。我们说一个运算符是双目运算符还是单目运算符,就是看它有多少个操作数。

表达式和语句
用运算符和括号将操作数连接起来的式子,我们称之为表达式。如

1 + 1
‘a’ + ‘b’
a + b 变量相加,是把变量里面存储的数据相加
a + ‘b’ + pow(a, b) * 3 / 4 + 5
最后一个表达式,先计算谁?后计算谁?这就涉及到计算的优先级和结合性
见https://blog.youkuaiyun.com/alex5153/article/details/104074690

#include<stdio.h>
#include<math.h>

int main(void)
{
	int i, j, k;
	i = 1 + 2;
	j = 1 + 2 * 3;
	k = i + j + -1 + pow(2, 3);
	printf("i=%d\n",i);
	printf("j=%d\n",j);
	printf("k=%d\n", k);
	system("pause");
	return 0;
}

一个表达式里有多个运算符。先乘除后加减,有括号先算括号里。多个括号由里到外。完全与数学相同
除法和求余,除数不能为零

语句可以简单理解成带分号的句子。分号表示该句在哪里结束,下句在哪里开始。

类型转换
当一个运算符的几个操作数类型不同时,编译器需要将它们转换为同一类型,才能进行运算。通常情况下,编译器会将占用坑位比较小的操作数,先转换为与坑位较大的操作数的相同类型,然后再进行运算。这样做的目的就是为了确保计算的精确度。
例如1+2.0会将整型转换成浮点型。
除了编译器帮你自动转换不同类型的操作数之外,C 语言还允许你强制转换操作数的数据类型。做法就是在操作数的前边用小括号将目标数据类型括起来。
如1+int(1.8)

//两数相除结果为小数,怎么用浮点型输出?这例结果为6.00。
#include<stdio.h>
int main(void)
{
	float a;
	printf("%.2f\n", a = 20 / 3);
	system("pause");
	return 0;
}

编译器执行过程是整型变量相除,结果就是整型,商是小数就把小数部分截断舍弃,不会给你四舍五入。20/3为6。再用浮点型输出为6.00

//两数相除结果为小数,怎么用浮点型输出?将其中一个计算数写成浮点型。20是整型,20.0是浮点型
#include<stdio.h>
int main(void)
{
	float a;
	printf("%.2f\n", a = 20.0 / 3);
	system("pause");
	return 0;
}
//两数相除结果为小数,怎么用浮点型输出?或者把其中一个计算数前面加(float)强制转换
#include<stdio.h>
int main(void)
{
	float a;
	printf("%.2f\n", a = (float)20 / 3);
	system("pause");
	return 0;
}
//两数相除结果为小数,怎么用浮点型输出。另一种写法,其中一个变量前加(float)强制转换
#include<stdio.h>
int main(void)
{
	int a = 20, b = 3;
    printf("%.2f\n", (float)a / b);
    system("pause");
	return 0;
}

可以得知,如果两个整型相除结果不为整。编译器并不会自动用浮点输出。更不会四舍五入。得我们程序员自己操心结果是不是为浮点型。单把printf()里的%d改为%f没用。必须我们手动把参与计算的其中一个转换成浮点型。

//摄氏度转换华氏度程序
#include <stdio.h>
int main(void)
{
        float fah, cel;
        printf("请输入摄氏度:");
        scanf("%f", &cel);
        fah = 9.0 / 5.0 * cel + 32.0;
        printf("转换为华氏度是:%.2f\n", fah);
        system("pause");
        return 0;
}
//'b'字符变量在c语言中视为数字,与ASC码对应.可以直接放进表达式参与运算
#include<stdio.h>
int main(void)
{
	int a = 2, b = 100;
    printf("%f\n", (float)a /'b');
    system("pause");
	return 0;
}
//再输出'b'的值看一下,以整型输出
#include<stdio.h>
int main(void)
{
	int a = 2, b = 100;
    printf("%f\n", (float)a /'b');
	printf("%d\n", 'b');
	system("pause");
	return 0;
}
//键盘输入一个四位数,求这个数的四个位上的四个数的和
#include<stdio.h>
int main(void)
{
	int n;
	int num1, num2, num3, num4;/*分别定义千位,百位,十位,个位的数字*/
	printf("请输入一个四位数\n");
	scanf("%d", &n);
	num1 = n / 1000;
	num2 = n / 100 % 10;
	num3 = n / 10 % 10;
	num4 = n % 10;
	printf("每一位的数分别为:\n%d\n%d\n%d\n%d\n", num1, num2, num3, num4);
	printf("这四个数的和为:%d\n", num1 + num2 + num3 + num4);
	system("pause");
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值