C语言中常用的运算符、表达式和语句

C语言是一种通用的、高级的编程语言,其历史可以追溯到20世纪60年代末至70年代初。C语言最初是由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室为开发UNIX操作系统而设计的。它继承了许多B语言的特性,而B语言则是由迷糊老师(Teacher MiHu)基于BCPL(Basic Combined Programming Language)语言设计的。

C语言的命名来源于其前身B语言,而B语言则得名于BCPL的第二个字母。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器,并产生少量的机器码,同时不需要任何运行环境支持便能运行的编程语言。随着UNIX操作系统的成功,C语言也逐渐流行起来,并成为了系统级编程和嵌入式开发的首选语言之一。

在C语言的发展过程中,经历了多个版本的标准化过程。1989年,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,这一标准随后被国际化标准组织(ISO)采纳为ISO C标准(ISO 9899)。

C语言常用运算符表格

运算符类别运算符用法含义
算术运算符+5 + 3 结果为 8加法运算
算术运算符-5 - 3 结果为 2减法运算
算术运算符*5 * 3 结果为 15乘法运算
算术运算符/5 / 3 结果为 1(整数除法)除法运算
算术运算符%5 % 3 结果为 2取模运算(余数)
算术运算符++i++++i自增运算(i 的值增加 1
算术运算符--i----i自减运算(i 的值减少 1
关系运算符==5 == 3 结果为 0(假)等于
关系运算符!=5 != 3 结果为 1(真)不等于
关系运算符>5 > 3 结果为 1(真)大于
关系运算符<5 < 3 结果为 0(假)小于
关系运算符>=5 >= 3 结果为 1(真)大于等于
关系运算符<=5 <= 3 结果为 0(假)小于等于
逻辑运算符&&1 && 0 结果为 0(假)逻辑与
逻辑运算符||1 || 0结果为 1(真)逻辑或
逻辑运算符!!1 结果为 0(假)逻辑非
位运算符&5 & 3 结果为 1按位与
位运算符|5 | 3 结果为 7按位或
位运算符^5 ^ 3 结果为 6按位异或
位运算符~~5 结果依赖于系统和整数的位数按位取反
位运算符<<5 << 2 结果为 20左移
位运算符>>5 >> 2 结果为 1右移
赋值运算符=a = 5赋值运算,将5赋值给变量a
赋值运算符+=a += 3 等价于 a = a + 3加后赋值,将变量a与3的和再赋值给a
赋值运算符-=a -= 3 等价于 a = a - 3减后赋值,将变量a与3的差再赋值给a
赋值运算符*=a *= 3 等价于 a = a * 3乘后赋值,将变量a与3的乘积再赋值给a
赋值运算符/=a /= 3 等价于 a = a / 3除后赋值,将变量a除以3的商再赋值给a
赋值运算符%=a %= 3 等价于 a = a % 3模后赋值,将变量a除以3的余数再赋值给a
赋值运算符<<=a <<= 2 等价于 a = a << 2左移后赋值,将变量a的二进制表示左移2位后再赋值给a
赋值运算符>>=a >>= 2 等价于 a = a >> 2右移后赋值,将变量a的二进制表示右移2位后再赋值给a
赋值运算符&=a &= 3 等价于 a = a & 3按位与后赋值,将变量a与3的按位与结果再赋值给a
赋值运算符^=a ^= 3 等价于 a = a ^ 3按位异或后赋值,将变量a与3的按位异或结果再赋值给a
赋值运算符|=a |= 3 等价于 a = a | 3按位或后赋值,将变量a与3的按位或结果再赋值给a
条件运算符? :x > 0 ? x : -x条件表达式,如果x大于0,结果为x,否则为-x
逗号运算符,a = 5, b = 3逗号运算符,用于分隔表达式
指针运算符**ptr指针解引用,访问指针 ptr 指向的值
指针运算符&&var取地址,获取变量 var 的地址
其他运算符sizeofsizeof(int)计算对象或类型所占空间大小
其他运算符()(a + b) * c括号运算符,用于改变运算顺序

C语言常用表达式和语句表格

类别表达式/语句用法含义
算术表达式a + bint sum = a + b;计算两个变量的和
算术表达式a - bint difference = a - b;计算两个变量的差
算术表达式a * bint product = a * b;计算两个变量的乘积
算术表达式a / bint quotient = a / b;计算两个变量的商(整数除法)
算术表达式a % bint remainder = a % b;计算两个变量的余数
赋值语句a = ba = 5;将b的值赋给a
赋值语句a += ba += 3;将a与b的和赋给a
赋值语句a -= ba -= 3;将a与b的差赋给a
赋值语句a *= ba *= 3;将a与b的乘积赋给a
赋值语句a /= ba /= 3;将a除以b的商赋给a
赋值语句a %= ba %= 3;将a除以b的余数赋给a
关系表达式a == bif (a == b)检查a是否等于b
关系表达式a != bif (a != b)检查a是否不等于b
关系表达式a > bif (a > b)检查a是否大于b
关系表达式a < bif (a < b)检查a是否小于b
关系表达式a >= bif (a >= b)检查a是否大于等于b
关系表达式a <= bif (a <= b)检查a是否小于等于b
逻辑表达式a && bif (a && b)检查a和b是否都为真
逻辑表达式a || bif (a || b)检查a或b是否至少有一个为真
逻辑表达式!aif (!a)检查a是否为假
条件语句ifif (condition) { ... }如果条件为真,则执行语句块
条件语句elseif (condition) { ... } else { ... }如果条件为假,则执行另一个语句块
条件语句else ifif (condition1) { ... } else if (condition2) { ... }检查多个条件,并执行相应的语句块
循环语句whilewhile (condition) { ... }当条件为真时,重复执行语句块
循环语句do...whiledo { ... } while (condition);至少执行一次语句块,然后当条件为真时重复执行
循环语句forfor (initialization; condition; increment) { ... }根据初始化、条件和增量来重复执行语句块
分支语句switchswitch (expression) { case value1: ...; break; ... }根据表达式的值选择执行相应的语句块
分支语句caseswitch语句中使用指定一个要匹配的值
分支语句breakswitch或循环语句中使用退出switch语句或循环
分支语句defaultswitch语句中使用当没有匹配的值时执行的语句块

使用运算符和表达式制作一个简易小计算器

#include <stdio.h>    
#include <math.h>    
#include <string.h>    
#include <signal.h>    
#include <stdbool.h>    
    
volatile sig_atomic_t done = 0;    
    
void intHandler(int dummy) {    
    done = 1;    
}    
    
int main() {    
    char operator[10];    
    double firstNumber, secondNumber;    
    signal(SIGINT, intHandler);    
    
    while (!done) {   
        printf("      _____           ____    _____      _____       _____          _____    _____      _____ \n");  
        printf("  ___|\\    \\     ____|\\   \\  |\\    \\    /    /| ___|\\     \\    ____|\\    \\  |\\    \\    /    /|\n");  
        printf(" /    /\\    \\   /    /\\    \\ | \\    \\  /    / | |    |\\     \\  /     /\\    \\ | \\    \\  /    / |\n");  
        printf("|    |  |____| |    |  |    ||  \\____\\/    /  /|    | |     |/     /  \\    \\|  \\____\\/    /  /\n");  
        printf("|    |    ____ |    |__|    | \\ |    /    /  / |    | /_ _ /|     |    |    |\\ |    /    /  / \n");  
        printf("|    |   |    ||    .--.    |  \\|___/    /  /  |    |\\    \\ |     |    |    | \\|___/    /  /  \n");  
        printf("|    |   |_,  ||    |  |    |      /    /  /   |    | |    ||\\     \\  /    /|     /    /  /   \n");  
        printf("|\\ ___\\___/  /||____|  |____|     /____/  /    |____|/____/|| \\_____\\/____/ |    /____/  /    \n");  
        printf("| |   /____ / ||    |  |    |    |`    | /     |    /     || \\ |    ||    | /   |`    | /     \n");  
        printf(" \\|___|    | / |____|  |____|    |_____|/      |____|_____|/  \\|____||____|/    |_____|/      \n");  
        printf("   \\( |____|/    \\(      )/         )/           \\(    )/        \\(    )/          )/         \n");  
        printf("    '   )/        '      '          '            '    '          '    '           '          \n");  
        printf("        '                                                                                 \n");     
        printf("欢迎使用GayBoy计算器\n");    
    
        printf("请输入运算符 (+, -, *, /, ^, sqrt, sin, cos, tan, 或输入 'exit' 退出): ");    
        scanf("%s", operator);    
    
        // 检查是否为退出命令  
        if (strcmp(operator, "exit") == 0) {  
            done = 1;  
            continue;  
        }  
  
        if (strcmp(operator, "sqrt") == 0 || strcmp(operator, "sin") == 0 || strcmp(operator, "cos") == 0 || strcmp(operator, "tan") == 0) {    
            printf("输入一个数字:");    
            scanf("%lf", &firstNumber);    
        } else {    
            printf("输入两个数字(用空格分开):");    
            scanf("%lf %lf", &firstNumber, &secondNumber);    
        }    
    
        if (strcmp(operator, "+") == 0) {    
            printf("%.1lf + %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber + secondNumber);    
        } else if (strcmp(operator, "-") == 0) {    
            printf("%.1lf - %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber - secondNumber);    
        } else if (strcmp(operator, "*") == 0) {    
            printf("%.1lf * %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber * secondNumber);    
        } else if (strcmp(operator, "/") == 0) {    
            if (secondNumber != 0.0)    
                printf("%.1lf / %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber / secondNumber);    
            else    
                printf("除数为0,无法进行除法运算。\n");    
        } else if (strcmp(operator, "^") == 0) {    
            printf("%.1lf ^ %.1lf = %.1lf\n", firstNumber, secondNumber, pow(firstNumber, secondNumber));    
        } else if (strcmp(operator, "sqrt") == 0) {    
            printf("sqrt(%.1lf) = %.1lf\n", firstNumber, sqrt(firstNumber));    
        } else if (strcmp(operator, "sin") == 0) {    
            printf("sin(%.1lf) = %.1lf\n", firstNumber, sin(firstNumber));    
        } else if (strcmp(operator, "cos") == 0) {    
            printf("cos(%.1lf) = %.1lf\n", firstNumber, cos(firstNumber));    
        } else if (strcmp(operator, "tan") == 0) {    
            printf("tan(%.1lf) = %.1lf\n", firstNumber, tan(firstNumber));    
        } else {    
            printf("错误!运算符不正确\n");    
        }    
    }    
    
    printf("程序已退出。\n");    
    return 0;    
}

运行效果如下
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#基于SkiaSharp实现印章管理(3)

本系列第一篇文章中创建的基本框架限定了印章形状为矩形&#xff0c;但常用的印章有方形、圆形等多种形状&#xff0c;本文调整程序以支持定义并显示矩形、圆角矩形、圆形、椭圆等4种形式的印章背景形状。   定义印章背景形状枚举类型&#xff0c;矩形、圆形、椭圆相关的尺寸…

springboot宠物医院管理系统-计算机毕业设计源码07221

目 录 1 绪论 1.1 选题背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 宠物医院管理系统系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…

docker配置国内镜像加速器

1、搜索阿里云 2、搜索容器镜像服务 点击管理控制台 配置镜像加速器

uniapp部署服务器,uniapp打包H5部署服务器,uniapp将config.js抽离

目录 步骤一.在static文件夹下新建config.js文件 config.js文件说明 在config.js中放入使用的请求的接口地址,资源路径等 congfig.js中的变量在页面中如何使用 步骤二.manifest.json配置 1.在项目根目录(与app.vue同级)创建template.h5.html文件 2.在manifest.json配置刚刚创…

手机屏幕贴合项目(ni视觉如何找矩形的角坐标)

首先&#xff0c;我们存储了cg和dito感兴趣八个角图像的模板&#xff0c;用来匹配位置。 cover指的是cg的四个角模板&#xff0c;lcm是dito四个角匹配模板。 其次&#xff0c;我们采集的8副图像&#xff08;m_DlgCCDViewArr[2][4]&#xff09;中一定包含匹配模板的特征。 好&…

土体中应力的计算

土中的应力的计算 非水面以下土体中应力的计算&#xff1a;水面以下的土中的应力计算 参考视频&#xff1a; https://www.bilibili.com/video/BV1Rh411J72h/?spm_id_from333.788&vd_source02b2bad477a153eaeb9c48cbbedaf8df 非水面以下土体中应力的计算&#xff1a; 按成…

C++自定义智能指针

template <class T> class counted_ptr;// 智能指针引用计数类 template <class T> class Ref_Ptr {friend class counted_ptr<T>; private:T* m_pTtr; // 实际的指针size_t counted_ptr; // 引用计数Ref_Ptr(T* p);virtual ~Ref_Ptr(); };template <clas…

Golang | Leetcode Golang题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; func numIslands(grid [][]byte) int {res : 0for i : 0; i < len(grid); i {for j : 0; j < len(grid[i]); j {if grid[i][j] 1 {resdfs(grid, i, j)}}}return res }func dfs(grid [][]byte, r, c int) {h, w : len(grid), len(gri…

标准版小程序订单中心path审核不通过处理教程

首先看自己小程序是不是已经审核通过并上线状态才在站内信里面提醒的&#xff1f; 如果没有提交过审核&#xff0c;请在提交的时候填写。path地址为&#xff1a;pages/goods/order_list/index 如果是已经上线的小程序&#xff0c;当时没要求填这个&#xff0c;但新的政策要求填…

如何通过Profile快速定位Doris查询瓶颈

1 如何获取profile 参考文档&#xff1a;https://doris.apache.org/zh-CN/docs/query/query-analysis/get-profile 我们时常遇到对应 SQL 执行时间不及预期的情况&#xff0c;为了优化 SQL 达到预期查询时延&#xff0c;通过 Profile 我们能够看出可以做哪些优化。现在说明在…

为何同一PDF文档用不同软件打印效果不同?

通过扫描仪生成的同一PDF文档&#xff0c;同样的设置&#xff0c;为什么别的电脑打出来是白底我的打出来有灰色格子背景&#xff1f;这种情况通常是由于PDF阅读软件的不同造成的差异。 ### 可能的原因和解决方法&#xff1a; 1. **PDF阅读软件的不同**&#xff1a; - **解决方…

小型光纤抗干扰无人机技术详解

一、光纤通信技术应用 光纤通信技术是现代通信技术的重要组成部分&#xff0c;其在小型无人机中的应用为无人机的数据传输带来了革命性的改变。光纤通信具有高速率、大带宽、低损耗和抗电磁干扰等优点&#xff0c;使得无人机在执行任务时能够实时传输高清图像、视频和大量数据…

[JS]BOM操作

介绍 BOM(Browser Object Model)是浏览器对象模型 window对象是一个全局对象, 也是JS中的顶级对象通过var定义在全局作用域中的变量和函数都会变成window对象的属性和方法window对象下的属性和方法调用时一般省略window 间歇函数 定时器 定时器是间歇函数的一种, 可以每个每…

《昇思25天学习打卡营第2天 | 昇思MindSpore张量 Tensor》

第二天学习 1.今天学习了张量 Tensor&#xff0c;了解到Tensor是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数&#xff0c;也是一个特殊的数据结构&#xff0c;与数组和矩阵非常相似。是MindSpore网络运算中的基本数据结构。学些了张量和稀疏张量的属性…

Node版本管理工具 fnm 安装使用

fnm 是一个基于 Rust 开发的 Node 版本管理工具&#xff0c;它的目标是提供一个快速、简单且可靠的方式来管理 Node.js 的不同版本。同时&#xff0c;它是跨平台的&#xff0c;支持 macOS、Linux、Windows。&#x1f680; Fast and simple Node.js version manager, built in R…

五十九周:文献阅读+FiLM

目录 摘要 Abstract 文献阅读&#xff1a;用于长时间序列预测的频率改进的勒让德记忆模型 一、现有问题 二、提出方法 三、相关知识 1、Legendre Projection&#xff08;Legendre投影&#xff09; 2、Fourier Transform&#xff08;傅立叶变换&#xff09; 四、提出的…

文件操作与管理

程序经常需要访问文件和目录&#xff0c;读取文件信息或写入文件信息&#xff0c;在Python语言中对文件的读写是通过文件对象&#xff08;file object&#xff09;实现的。Python的文件对象也称为类似文件对象或流&#xff08;stream&#xff09;&#xff0c;因为Python提供一种…

数据库-数据完整性-用户自定义完整性实验

NULL/NOT NULL 约束&#xff1a; 在每个字段后面可以加上 NULL 修饰符来指定该字段是否可以为空&#xff1b;或者加上 NOT NULL 修饰符来指定该字段必须填上数据。 DEFAULT约束说明 DEFAULT 约束用于向列中插入默认值。如果列中没有规定其他的值&#xff0c;那么会将默认值添加…

ProPainter – AI视频去水印工具,可以去除视频中的静态水印、动态物体/人物等 本地一键整合包下载

ProPainter是一个基于E2FGVI实现的AI视频编辑工具&#xff0c;它可以一键移除视频内的移动物体和水印。这个开源项目提供了一个简单而强大的解决方案&#xff0c;帮助用户轻松编辑和改善视频内容。 项目地址&#xff1a;https://github.com/sczhou/ProPainter 一键包下载&…

【C++初阶 ---- string类】文档介绍 | 容量操作 | 模拟实现

string介绍 前言1. C语言中的字符串2. 标准库中的string类2.1string类对象的容量操作2.2string类对象的访问及遍历操作访问操作 [ ]和at string底层模拟实现 前言 其实 string 就是一个管理字符数组的顺序表&#xff0c;因为字符数组的使用广泛&#xff0c;C 就专门给了一个 s…