运算符及表达式+基本语句和函数使用的详细讲解

news2024/10/6 8:30:12

运算符及表达式

运算符及表达式

在C语言中,运算符是用于执行特定操作的符号,而表达式则是由运算符和操作数组成的式子。

1) 运算符
运算符的目数
  • 单目运算符:只需要一个操作数,如 !(逻辑非)、++(自增)、--(自减)、&(取地址)等。
  • 双目运算符:需要两个操作数,如 +(加法)、-(减法)、*(乘法)、/(除法)、%(取余)等。
  • 三目运算符(条件运算符):需要三个操作数,如 ? :
运算符的优先级与结合性

运算符的优先级决定了表达式中运算的顺序,而结合性则决定了当多个相同优先级的运算符出现时,如何确定运算顺序。例如,乘法(*)和除法(/)的优先级高于加法和减法,而乘法和除法从左到右结合。

赋值运算符与赋值表达式
  • 赋值运算符=,用于将右侧的值赋给左侧的变量。
  • 赋值表达式:如 a = b + c;,这是一个赋值表达式,其值就是赋值操作的结果(即 b + c 的值)。
算术运算符及算术表达式
  • 算术运算符+-*/%
  • 算术表达式:由算术运算符和操作数组成的表达式,如 a + b * c
自增(++)、自减(–)运算符及表达式
  • 自增运算符++,用于将变量的值加1。
  • 自减运算符--,用于将变量的值减1。
  • 前置与后置++a(先加后使用)和 a++(先使用后加)的区别。
关系运算符及关系表达式
  • 关系运算符>>=<<===!=
  • 关系表达式:用于比较两个操作数的大小或是否相等,结果是一个布尔值(真或假)。
逻辑运算符及逻辑表达式
  • 逻辑运算符!(逻辑非)、&&(逻辑与)、||(逻辑或)。
  • 逻辑表达式:用于组合多个关系表达式,并返回一个布尔值。
逗号运算符与逗号表达式
  • 逗号运算符,,用于将多个表达式组合成一个表达式。
  • 逗号表达式的操作数求值顺序:从左到右依次求值,整个逗号表达式的值是最后一个操作数的值。
2) C语言中合法的表达式,表达式的求值
  • 合法的表达式:符合C语言语法规则的表达式都是合法的。
  • 表达式的求值:根据运算符的优先级和结合性,以及操作数的值,计算表达式的值。
3) 表达式的数据类型,及表达式运算中操作数类型的自动转换与强制类型转换
  • 表达式的数据类型:取决于运算符和操作数的类型。例如,a + b 的类型通常是 ab 类型的公共类型(或更宽的类型)。
  • 自动类型转换(也称为隐式类型转换):当操作数的类型不同时,编译器会尝试将它们转换为公共类型。例如,在 int a = 3.5; 中,3.5 会被自动转换为 int 类型。
  • 强制类型转换(也称为显式类型转换):使用类型转换运算符 () 来强制将一个类型的值转换为另一个类型。例如,(float)aa 的值转换为 float 类型。在进行强制类型转换时,可能会丢失精度或发生其他不可预见的行为,因此应谨慎使用。

基本语句和函数使用的详细讲解

1. 顺序结构语句

  • 表达式语句:最简单的语句,用于执行赋值、函数调用等操作。
  • 空语句:仅包含一个分号的语句,不执行任何操作。
  • 复合语句:用花括号括起来的一组语句,可以视为一个单独的语句块。
代码案例:
#include <stdio.h>

int main() {
    int a = 5;       // 表达式语句
    printf("%d\n", a); // 表达式语句(函数调用)
    ;               // 空语句
    {               // 复合语句开始
        int b = 10;
        printf("b = %d\n", b);
    }               // 复合语句结束
    return 0;
}

2. 选择结构语句

  • if 语句:如果条件为真,则执行一段代码。
  • if…else 语句:如果条件为真,执行一段代码,否则执行另一段代码。
  • if…else…if 语句:多个条件判断,根据满足的条件执行相应的代码块。
  • switch 语句:根据表达式的值,选择执行多个代码块中的一个。
代码案例:
#include <stdio.h>

int main() {
    int number = 2;
    
    if (number == 1) {
        printf("Number is 1\n");
    } else if (number == 2) {
        printf("Number is 2\n");
    } else {
        printf("Number is not 1 or 2\n");
    }
    
    int day = 3;
    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        default:
            printf("Other day\n");
    }
    
    return 0;
}

3. if嵌套

if语句内部可以嵌套另一个if语句,用于处理更复杂的条件逻辑。

代码案例:
#include <stdio.h>

int main() {
    int a = 5;
    int b = 10;
    
    if (a > 2) {
        if (b > 8) {
            printf("Both conditions are true\n");
        } else {
            printf("Only first condition is true\n");
        }
    } else {
        printf("None of the conditions are true\n");
    }
    
    return 0;
}

4. 循环结构语句

  • while 循环:当条件为真时,重复执行一段代码。
  • do…while 循环:至少执行一次代码块,然后检查条件,如果条件为真,则重复执行。
  • for 循环:一种更紧凑的循环结构,通常用于已知循环次数的情况。
代码案例:
#include <stdio.h>

int main() {
    int i = 0;
    
    // while 循环
    while (i < 5) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    
    i = 0;
    // do...while 循环
    do {
        printf("%d ", i);
        i++;
    } while (i < 5);
    printf("\n");
    
    // for 循环
    for (int j = 0; j < 5; j++) {
        printf("%d ", j);
    }
    printf("\n");
    
    return 0;
}

5. 循环嵌套(二重循环)

一个循环内部包含另一个循环,通常用于处理二维数组或进行复杂的迭代。

代码案例:
#include <stdio.h>

int main() {
    for (int i = 0; i < 3; i++) { // 外层循环
        for (int j = 0; j < 3; j++) { // 内层循环
            printf("(%d, %d) ", i, j);
        }
        printf("\n");
    }
        return 0;
}

6. 辅助控制语句

continue 语句

continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。它不会终止循环,而是重新开始下一次迭代。

break 语句

break 语句用于立即终止循环或switch语句。在循环中,break 语句会跳过当前循环的剩余部分,并继续执行循环之后的代码。

代码案例
#include <stdio.h>

int main() {
    int i;

    // 使用continue语句跳过偶数
    for (i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");

    // 使用break语句在找到5时终止循环
    for (i = 0; i < 10; i++) {
        if (i == 5) {
            break;
        }
        printf("%d ", i);
    }
    printf("\n");

    return 0;
}

7. 标准函数的使用

数学函数:math.h
  • fabs():计算浮点数的绝对值。
  • pow():计算一个数的幂。
  • sqrt():计算一个非负数的平方根。
输入输出函数:stdio.h
  • printf():格式化输出函数。
  • scanf():格式化输入函数。
字符串函数:string.h
  • strlen():计算字符串的长度(不包括终止字符’\0’)。
  • strcmp():比较两个字符串。
  • strcpy():复制一个字符串到另一个字符串。
  • strcat():连接两个字符串。
代码案例
#include <stdio.h>
#include <math.h>
#include <string.h>

int main() {
    // 数学函数使用
    double num = -5.5;
    double abs_num = fabs(num);
    double power = pow(2, 3);
    double sqrt_num = sqrt(9);
    printf("fabs(%f) = %f\n", num, abs_num);
    printf("pow(2, 3) = %f\n", power);
    printf("sqrt(9) = %f\n", sqrt_num);

    // 字符串函数使用
    char str1[50] = "Hello, ";
    char str2[] = "World!";
    char str3[100];
    strcpy(str3, str1);
    strcat(str3, str2);
    printf("Concatenated string: %s\n", str3);
    printf("Length of str2: %zu\n", strlen(str2));

    // 输入输出函数使用
    int a;
    printf("Enter an integer: ");
    scanf("%d", &a);
    printf("You entered: %d\n", a);

    return 0;
}

在使用 strlen() 函数时,返回的类型是 size_t(在C语言中是一个无符号整数类型),因此在 printf 中使用
%zu 格式化说明符来输出它。这是C99标准引入的,如果你的编译器不支持C99或更高版本,你可能需要将其转换为 unsigned int 并使用 %u

在这里插入图片描述
在这里插入图片描述

(✪ω✪)Fight!!(o-)
(๑>₃<)۶ 一心向学

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

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

相关文章

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…

1992-2023年各省产业结构升级、产业结构高级化数据(含原始数据+计算过程+计算结果)(无缺失)

1992-2023年各省产业结构升级、产业结构高级化数据&#xff08;含原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;1992-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;国内生产总值、第一产业增加值、第二产业增加值、第三产业增加值、第一…

N32G031 ADC初始化

目录 1. ADC初始化概述 2. ADC初始化详细步骤 2.1 ADC配置 2.2 ADC初始化函数调用 2.3 DMA配置&#xff08;可选&#xff09; 3. 初始化结果验证 4. 注意事项 ADC采样注意事项 1. ADC初始化概述 在N32G031单片机中&#xff0c;ADC的初始化是确保ADC模块能够正常工作的…

上海计算机考研避雷,25考研慎报

上大计算机一直很热 408考研er重来没有让我失望过&#xff0c;现在上大的专业课是11408&#xff0c;按理说&#xff0c;这个专业课的难度是很高的&#xff0c;但是408er给卷出了新高度&#xff0c;大家可以去上大官网看看今年最新的数据&#xff0c;我也帮大家统计了24年最新的…

图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)

文章目录 非锐化掩模 (Unsharp Masking)拉普拉斯滤波器 (Laplacian Filter)效果对比总结 在图像处理中&#xff0c;锐化操作用于增强图像的边缘和细节&#xff0c;使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模&#xff08;Unsharp Masking&#xff09;和拉普拉斯滤波…

药品销售管理系统带万字文档药店管理系统java项目药店商城网站

文章目录 药品销售管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 药品销售管理系统 一、项目演示 药品销售管理系统 二、项目介绍 系统角色&#xff1a;管理…

【Python】深入了解 AdaBoost:自适应提升算法

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 &#x1f3b5; 薛凯琪《找到天使了》 在机器学习的领域中&#x…

学会这8点小技巧,让你公众号永不断更!

最近在带大家玩公众号 IP 写作&#xff0c;如何才能保持日更&#xff0c;是很多新手小白常问的问题&#xff0c; 这里我给大家总结了8点小技巧&#xff0c;分享给大家&#xff0c;让你的公众号写作&#xff0c;能够永远不断更&#xff01; 1&#xff0c;尽量早点做 &#xff0c…

Linux、Windows安全加固

为了减少系统被黑客入侵&#xff0c;对操作系统的安全加固是网络安全和主机安全必不可少的一部分。 一、Linux安全加固 1.不使用默认的ssh端口&#xff0c;修改默认ssh22端口号 sudo vim /etc/ssh/ssh_config 去掉#注释&#xff0c;修改端口号并保存 2.关闭不必要的系统服务…

对不起了,QQ和微信,我选择用它!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 每当我们需要在电脑和手机之间传输文件、在学习和工作时与朋友/同事传输文件&#xff0c;相信大多都会使用微信或者QQ。 但是在分享一些软件apk等安装包时&#xff0c;微信和QQ会将其…

牛客 第二十届西南科技大学ACM程序设计竞赛(同步赛):祖玛

题目描述 wzy 在玩一种很新的祖玛。 给定一个仅包含 小写字母 的字符串 sss , sss 由 mmm 个不同的小写字母组成&#xff0c;每个字母代表一种小球&#xff0c;在消去时会获得 相应 的分数&#xff1a; 两个及以上 相同的小球相碰就会消失&#xff08;在发射小球前因为无相碰&…

PyTorch计算机视觉入门:测试模型与评估,对单帧图片进行推理

在完成模型的训练之后&#xff0c;对模型进行测试与评估是至关重要的一步&#xff0c;它能帮助我们理解模型在未知数据上的泛化能力。本篇指南将带您了解如何使用PyTorch进行模型测试&#xff0c;并对测试结果进行分析。我们将基于之前训练好的模型&#xff0c;演示如何加载数据…

DIVE INTO DEEP LEARNING 36-49

文章目录 36. Data augmentation36.1 Training with enhanced data36.2 Enhancement measures36.3 Data augmentation summary 37. Fine tuning37.1 Fine tuning Introduce37.2 Fine tuning Step37.3 Fine tuning summary 38. Object detection38.1 Object detection38.2 Edge …

设计模式之工厂方法模式(Factory Method Pattern)

目录 1.1、前言1.2、工厂方法模式简介1.2.1、工厂方法模式的主要特点1.2.2、工厂方法模式的主要结构1.2.3、使用工厂方法模式的好处 1.3、SpringBoot中那些场景使用了工厂方法模式1.4、日常工作中那些业务场景可以使用工厂方法模式1.5、工厂方法模式实战&#xff08;以某商场一…

Windows系统下使用gvim配置LaTeX快速书写环境

0 前言 小白近来读到这样一篇文章&#xff1a;How I’m able to take notes in mathematics lectures using LaTeX and Vim&#xff0c;这位学数学的小哥&#xff0c;通过使用vim和 LaTeX \LaTeX{} LATE​X在整个本科学习期间&#xff0c;共记下了1700多页的数学公式笔记&…

C/C++ Adaline自适应线性神经网络算法详解及源码

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

C++11参数包...Args

以list中的包装器做介绍 包装器是由一个类模板接收后存储在统一的...Args中 标准格式 说明&#xff1a;...Args就是参数包的类型 实例&#xff1a; //参数包 void Show() {cout <<"结束" << endl; }template<class T,class ...Args> void Show(T…

跟着刘二大人学pytorch(第---13---节课之RNN高级篇)

文章目录 0 前言0.1 课程视频链接&#xff1a;0.2 课件下载地址&#xff1a; 1 本节课任务描述模型的处理过程训练循环初始化分类器是否使用GPU构造损失函数和优化器每个epoch所要花费的时间遍历每个epoch时进行训练和测试记录每次测试的准确率加入到列表中 具体实现&#xff0…

哇塞,超好吃的麻辣片,一口就爱上

最近&#xff0c;我发现了一款让人欲罢不能的美食——食家巷麻辣片&#xff01;&#x1f60d; 一打开包装&#xff0c;那浓郁的麻辣香气就扑鼻而来&#xff0c;瞬间刺激着我的嗅觉神经。&#x1f603;食家巷麻辣片的外观色泽鲜艳&#xff0c;红通通的一片&#xff0c;看着就特…

Verilog综合出来的图

Verilog写代码时需要清楚自己综合出来的是组合逻辑、锁存器还是寄存器。 甚至&#xff0c;有时写的代码有误&#xff0c;vivado不能识别出来&#xff0c;这时打开综合后的schematic简单查看一下是否综合出想要的结果。 比如&#xff1a;误将一个always模块重复一遍&#xff0c;…