C语言学习 三、运算符与表达式

news2024/9/11 9:57:06

3.1 运算符分类

c语言提供了13种类型的运算符,如下所示:

(1)算术运算符(+ - * / %)

(2)关系运算符(> < == >= <= !=)

(3)逻辑运算符(!&& ||)

(4)位运算符(<< >> ~ | ^ &)

(5)赋值运算符(=及其扩展赋值运算符)

(6)条件运算符(?:)

(7)逗号运算符(,)

(8)指针运算符(*和&)(指针时用到)

(9)求字节运算符(sizeof)

(10)强制类型转换运算符((类型))

(11)分量运算符(.->)(结构体时用到)

(12)下标运算符([])(数组时用到)

(13)其他(如函数调用运算符())

3.2 算术运算符及其算术表达式

注意点:

  • 操作符/的两个操作数都是整型数时,执行整除运算,其他情况下执行浮点型数除法
  • %为取模运算符,它接收两个整型操作数,将左操作数除以右操作数,返回值为余数
  • 由算术运算符组成的式子称为算术表达式,表达式一定有一个值

【算数运算符代码实例】


#include <stdio.h>

int main() {
    //5*2=10 6/3=2 11%4=3
    //4+10-2+3=15
    int result = 4+5*2-6/3+11%4;
    printf("result=%d\n",result);//15
    return 0;
}

 3.3 关系运算符与关系表达式

注意:

  • 关系表达式的值只有真和假,对应为1真0假
  • 由于c语言中没有布尔类型,所以在c语言中0值代表假非0值即为真
  • 关系运算符优先级低于算数运算符。
  • 判断整型变量i是否等于3时,可以写成3==i;即把常量写在前面而把变量写在后面
  • 如果判断三个数是否相等,绝对不能写成if(5==5==5),这样无论何时都为假,因为首先5==5得到结果为1,然后1==5得到结果为0,若判断a,b,c是否相等,应写成a==b && b==c

【关系运算符使用】

#include <stdio.h>

//关系运算符,优先级小于算术运算符
int main() {
    int a;
    //使用while循环方便一直测试
    //只要while循环中为真就会一直进入循环
    //scanf匹配成功的时候返回值为1,使while循环为真
    while(scanf("%d",&a)){
        if(3<a && a<10){ //若写成(3<a<10)将一直循环下去,错误写法
            printf("a between 3 and 10\n");
        }else{
            printf("a is not between 3 and 10\n");
        }
    }
    return 0;
}

【运行效果截图】

【小结】

若是写成(3<a<10)在数学上是正确,但在程序中是错误的。

首先,3<a结果只有1或0两种,由于1和0都小于10,所以无论a值为多少,表达式始终为真。

因此在判断变量a是否大于3且同时小于10时,要写成 a>3 && a<10

3.4 逻辑运算符与逻辑表达式

注意:

  • 逻辑非! 的优先级高于算术运算符
  • 逻辑与&& 与 逻辑或|| 的优先级低于关系运算符
  • 逻辑表达式的值只有真和假,对应为1和0

【逻辑运算符使用】

#include <stdio.h>

//逻辑与&& 和 逻辑或|| 例子 logic  判断闰年
int main() {
    int year, i, j=1;
    //因需重复测试,所以用while循环
    while (scanf("%d", &year)) {
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            //是闰年
            printf("%d is leap year\n", year);
        } else {
            //不是闰年
            printf("%d is not leap year\n", year);
        }
    }
    //逻辑非!例子
    i = !!j; //自右至左,即先计算!j,再计算!(!j)
    printf("i value=%d\n", i); //1
    return 0;
}

【运行效果截图】

【逻辑与 和 逻辑或 短路运算案例】

#include <stdio.h>

//逻辑与&& 和 逻辑或|| 的短路运算
int main() {
    int i = 0;
    //当i为真时输出后面的printf,当i为假时不输出
    //当i为假时不会执行逻辑与后的表达式,称为短路运算
    i && printf("Hello, World!\n");

    //i && printf("Hello, World!\n");等价于下面的if语句
    if(i){
        printf("Hello, World!\n");
    }

    //逻辑或|| 的短路运算,当i为真时不会执行后面的表达式
    i = 1;
    i|| printf("Hello, World!\n");
    return 0;
}

【运行效果截图】

【小结】

  • 逻辑与短路运算:当前一个表达式为时,后面的表达式不会得到执行
  • 逻辑或短路运算:当前一个表达式为时,后面的表达式不会得到执行

3.5 赋值运算符

注意:

  • 左值:放在赋值运算符左边的,为左操作数,只有变量可以成为左值

【例】

a = b + 25;

  • 右值:放在赋值运算符右边的东西

【错误演示】

#include <stdio.h>

int main() {
    int a = 1,b = 2;
    //错误演示
    b + 25 = a;
    return 0;
}

【报错】

error: lvalue required as left operand of assignment

复合赋值运算符

是一种缩写形式,可以对变量的赋值操作变得更加简洁

【例】

iNum = iNum + 5;    //对变量iNum进行赋值操作,值为变量本身与一个整型常量5相加的结果

【使用复合语句】

iNum += 5;

 【加后赋值与乘后赋值的用法】

#include <stdio.h>

int main() {
    int iNum, iResult;
    iNum = 10;
    iResult = 3;

    iNum += 5; //等价于 iNum = iNum + 5 = 10+5=15
    iResult *= iNum; //等价于 iResult = iResult * iNum = 3*15=45
    printf("iNum=%d\n", iNum); //15
    printf("iResult=%d\n", iResult); //45
}

【运行结果】

 3.6 求字节运算符sizeof

注意:

  • sizeof不是函数
  • sizeof用于求常量变量所占空间的大小
  • sizeof结果的单位是 字节

【求字节运算符例子】

#include <stdio.h>

//sizeof运算符(求字节运算符)
int main() {
    int i = 0;
    printf("i size is %d\n", sizeof(i));//4
    return 0;
}

【运行结果】

【小结】

运行结果为i size is 4,可以得知整型变量所占空间大小是4字节

3.7 课时作业

  • 课时3作业1

描述:判断某个年份是不是闰年,如果是闰年,输出“yes”,否则输出“no”

输入:输入一行,只有一个整数x(0<=x<=10000)

输出:只有一行字符

闰年的判断:可以被4整除同时不能被100整除,或者可以被400整除

【课时3作业1代码】

#include <stdio.h>

//课时3作业1
//判断某个年份是不是闰年,如果是闰年,输出“yes”,否则输出“no”
//输入:输入一行,只有一个整数x(0<=x<=10000)
//输出:只有一行字符
//闰年的判断:可以被4整除同时不能被100整除,或者可以被400整除
int main() {
    int year;
    scanf("%d",&year);
    if(year%4==0&&year%100!=0||year%400==0){
        printf("yes\n");
    }else{
        printf("no\n");
    }
    return 0;
}

【运行结果】

  •  课时3作业2

描述:读取一个整型数,字符,浮点数,分别到变量i,j,k中,然后将i,j,k直接相加并输出,小数点后保留两位小数,不用考虑输入的浮点数的小数部分超过了两位。

输入:一个整形数,字符,浮点数

输出:i,j,k三个变量的求和值

【课时3作业2代码】

#include <stdio.h>

//课时3作业2
//读取一个整型数,字符,浮点数,分别到变量i,j,k中,然后将i,j,k直接相加
// 并输出,小数点后保留两位小数,不用考虑输入的浮点数的小数部分超过了两位
//输入:一个整形数,字符,浮点数
//输出:i,j,k三个变量的求和值
int main() {
    int i;
    char j;
    float k;
    scanf("%d %c%f",&i,&j,&k);
    printf("%0.2f\n",i+j+k);
    return 0;
}

//%0.2f 不限制浮点数输出的整体长度  %5.2f也行:即小数点前的数字无规定

【运行结果】

【小结】

输出时要控制格式,混合输入中每次在%c之前需要加一个空格

整型数、字符、浮点数可以直接相加运算

同时输入3个数的读取顺序

3.8 c语言运算符优先级表

 说明:

  • 同一优先级运算符,运算次序由结合方向所决定
  • 优先级简记: ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 解析CSV文件 使用Matplotlib绘图

数据存储在CSV文件中&#xff0c;使用Matplotlib实现数据可视化。 CSV文件&#xff1a;comma-separated values&#xff0c;是在文件中存储一系列以‘&#xff0c;’分隔的值。 例如&#xff1a;"0.0","2016-01-03","1","3","20…

【Pt】新建项目时的设置

新建项目时需要在如下界面做一些设置。 一、模板与文件 模板通常选择“PBR - Metallic Roughness Alpha-blend” 文件可以选择fbx&#xff0c;abc&#xff0c;obj等格式的三维模型文件 二、项目设置 2.1 文件分辨率 指的是在软件中的预览效果&#xff0c;分辨率越高预览效果…

链动3+1模式 全新升级 解决小号和断代问题!!!

随着数字经济的蓬勃发展&#xff0c;市场竞争愈演愈烈&#xff0c;传统的商业模式显得捉襟见肘&#xff0c;难以满足企业快速发展的需求。在这种背景下&#xff0c;一种创新的商业模式——“链动31”应运而生&#xff0c;以其独特的玩法和优势&#xff0c;引领着市场发展的新方…

HEVC的编码结构

编码单元划分 CTU/CTB CTU(Coding Tree Unit)和CU组成了一个四叉树的层级结构,CTU的尺寸为64 x 64,32 x 32,16 x 16,一个CTU可以分为一个或四个CTU,对标H264的MB。 CU/CB CU/CB(Coding Unit/Coding Block),CU为亮度和色度编码单元的统称,CB特指某一个分量的的编码…

网络编程:数据库

一、作业 1> 创建一个工人信息库&#xff0c;包含工号&#xff08;主键&#xff09;、姓名、年龄、薪资。 2> 添加三条工人信息&#xff08;可以完整信息&#xff0c;也可以非完整信息&#xff09; 3> 修改某一个工人的薪资&#xff08;确定的一个&#xff09; 4> …

帅帅密码管理系统使用教程

在这个账号满天飞的大环境&#xff0c;密码太多&#xff0c;又容易遗忘&#xff0c;又不方便管理&#xff0c;存在记事本上&#xff0c;又担心泄漏。帅帅密码管理系统就是帮助你解决以上烦恼&#xff0c;用来帮助个人或团队管理众多的登陆密码&#xff0c;能够快速的查询、新增…

布隆过滤器原理介绍和典型应用案例

整理自己过去使用布隆过滤器的应用案例和理解 基本介绍 1970年由布隆提出的一种空间效率很高的概率型数据结构&#xff0c;它可以用于检索一个元素是否在一个集合中&#xff0c;由只存0或1的位数组和多个hash算法, 进行判断数据 【一定不存在或者可能存在的算法】 如果这些…

广告创意的魔力:争议与诱惑并存

《广告创意的魔力&#xff1a;争议与诱惑并存》 一、广告的创意魅力之源 广告创意是广告行业的灵魂&#xff0c;它决定着广告能否在浩瀚的信息海洋中脱颖而出&#xff0c;抓住受众的注意力。优秀的广告创意往往能够打破常规&#xff0c;用新颖、独特、有趣的手法表达广告主题…

D55125ADA A型漏电保护芯片,适用于 110V⁓220V(50/60Hz)电压,可应用于 新能源充电桩(充电枪)、智能空开(智能微断开关)等工业产品

一、应用领域 新能源充电桩&#xff08;充电枪&#xff09;、智能空开&#xff08;智能微断开关&#xff09;等工业产品&#xff0c;以及电热水器、电烤箱、电烤炉等小家电产品。 二、功能介绍 D55125ADA 是一款高性能 CMOS 漏电保护器专用电路。芯片内部包含稳压电源、放大电路…

C是用什么语言写出来的?

C是用什么语言写出来的? C语言的起源和发展是一个迭代过程&#xff1a; 1. 最初的C语言编译器的开发始于对B语言的改进。B语言是由Ken Thompson设计的&#xff0c;它是基于BCPL语言简化而来的。在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 C语言的…

文件IO(代码案例: 文件复制, 指定目录查找文件, 指定目录查找内容)

文件复制 进行普通文件的复制 使用操作字节流的对象操作文件 // 文件复制 public class Main {public static void main(String[] args) throws IOException {// 输入两个路径, 源路径, 目的路径Scanner scanner new Scanner(System.in);System.out.println("请输入拷贝文…

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.Chip(操作块组件)

操作块&#xff0c;用于搜索框历史记录或者邮件发送列表等场景。 说明&#xff1a; 该组件从API Version 11开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 Chip Chip({options:ChipOptions}) 装饰器类型&#xff1a;Builde…

springboot网站开发-诡异的static/images读取故障

springboot网站开发-诡异的static/images读取故障!我在本地环境测试代码&#xff0c;一切正常。可以读取到该路径下的图片模板&#xff0c;正常生成图片存储在本地D盘下面的文件夹。但是改成服务器linux环境后就不行了。打包发布后&#xff0c;死活读取不到图片模板。 这个故障…

JavaScript高级(十三)---ES6中Set,map

ES6 Set 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&#xff1a;Set、Map&#xff0c;以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构&#xff0c;可以用来保存数据&#xff0c;类似于数组&a…

python家政服务系统flask-django-php-nodejs

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低家政公司的运营人员成本&#xff0c;实现了家政服务的标准化、制度化、程序化的管理&#xff0c;有效地防止了家政服务的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地…

TDP1000泰克TDP1000差分探头

181/2461/8938产品概述&#xff1a; 高速串行标准中使用的差分信令要求非常精确的检测。泰克差分探头能够提供业界领先的带宽和信号保真度&#xff0c;可确保您能洞察每一个细节。我们的 TriMode™ 架构 使您可以从一个DUT连接点上完成差分、单端和共模测量&#xff0c;进而简…

C语言经典算法-5

文章目录 其他经典例题跳转链接26.约瑟夫问题&#xff08;Josephus Problem&#xff09;27.排列组合28.格雷码&#xff08;Gray Code&#xff09;29.产生可能的集合30.m元素集合的n个元素子集 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. …

JMeter如何监控服务器资源?

jmeter是一个基于Java的开源性能测试工具&#xff0c;它可以用来测试静态和动态的资源&#xff0c;例如Web应用、数据库、FTP服务器等。如果要在进行压力测试的同时&#xff0c;监控服务器的CPU、内存、磁盘、网络等资源的使用情况&#xff0c;需要使用一些插件或工具来实现。 …

【STL基础】vector、stack、queue、list、pair、map、unordered_map、set、unordered_set(详细讲解)

vector、list、pair、unordered_map、unordered_set、stack、queue 参考文章&#xff1a; &#xff08;1&#xff09;【apollo】泛型编程 与 STL &#xff08;2&#xff09;c stack用法 入门必看 超详细 &#xff08;3&#xff09;C中queue的用法&#xff08;超详细&#xff0c…

使用 SCL 给 Centos7.6 升级 GCC 版本

使用 SCL 给 Centos7.6 升级 GCC 版本 什么是 SCL背景安装 SCL安装工具集启用环境devtoolset 与 gcc 版本对应参考文献 什么是 SCL SCL 软件集是为了给 RHEL / CentOS 用户提供一种方便、安全的安装和使用应用程序和运行时环境的多个&#xff08;而且可能是更新的&#xff09;…