【C语言督学训练营 第十九天】关于C语言语法的一些补充

news2024/11/30 11:46:36

文章目录

  • 1.条件运算符与逗号运算符
  • 2.自增自减运算符
  • 3.位运算
  • 4.switch do-while补充
  • 5.二维数组&二级指针
  • 6.总结

1.条件运算符与逗号运算符

条件运算符是C语言中唯一的一种三目运算符。三目运算符代表有三个操作数;双目运算符代表有两个操作数,如逻辑与运算符就是双目运算符;单目运算符代表有一个操作数,如逻辑非运算符就是单目运算符.运算符也称操作符。三目运算符通过判断问号之前的表达式的真假,来确定整体表达式的值,如下例所示,如果a>b为真,那么三目表达式整体的值为a,所以max的值等于a,如果 a>b为假,那么三目表达式整体的值为b,所以max的值等于b。

#include <stdio.h>
int main() {
int a,b,max;
	while(scanf("%d%d",&a,&b))
	{
		max=a>b?a:b;
		//a和b中较大的那个数是
		printf(""max=%d\n",max);
	}
return 0;
}

逗号运算符的优先级最低,我们需要掌握的是,逗号表达式的整体值是最后一个表达式的值.请看下面实例

#include <stdio.h>
int main(){
int i,j;
i=10;
j=1;
	if(i,j-1)//并不会进入f,逗号表达式整体的值是最后一个表达式的值
	{
		printf("If ecute\n");
	}
	//逗号表达式的常见使用场景,for 的表达式1初始化多个变量用的较多
	for(i=O,j=1;i<10;i++)
	{
	}
return 0;
}

2.自增自减运算符

自增、自减运算符和其他运算符有很大的区别,因为其他运算符除赋值运算符可以改变变量本身的值外,不会有这种效果.自增、自减就是对变量自身进行加1、减1操作,那么有了加法和减法运算符为什么还要发明这种运算符呢?原因是自增和自减来源于B语言,当时KenThompson和 Dennis M.Ritchie (C语言的发明者)为了不改变程序员的编写习惯,在C语言中保留了B语言中的自增和自减.因为自增、自减会改变变量的值,所以自增和自减不能用于常量!
下面是一段关于自增的程序。自增与取值运算符在408初试的时候不考,个别学校自命题可能会考
在这里插入图片描述
值得注意的是前置++与后置++,这两者虽然均是++,但是在实现的效果上截然不同,是因为两者底层实现原理不同。下面对二者进行了重载,可以看出重载后的效果与++i,i++一样。

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
class A{
    int n;
    public:
    A(int n):n(n){}
    int get();
    friend A& operator++(A &a);
    friend A operator++(A &a,int b);
};
A& operator++(A & a)
{
     a.n++;
     return  a;
}
A   operator++(A&a,int b)
{
    return   A(a.n++);
}
int A::get()
{
    return n;
}
int main()
{
     A a=5;
     (++(++a))++;
     cout<<a.get()<<endl;
     A b=a++;
     cout<<b.get()<<" "<<a.get()<<endl;
     system("pause");
     return 0;
}

3.位运算

位运算符<<、>>、~、I、^、&依次是左移、右移、按位取反、按位或、按位异或、按位与。

位运算符只能用于对整型数据进行操作:

  • 左移:高位丢弃,低位补0,相当于乘以2.工作中很多时候申请内存时会用左移,例如要申请1GB大小的空间,可以使用malloc(1<<30).
  • 右移:低位丢弃,正数的高位补О(无符号数我们认为是正数),负数的高位补1,相当于除以2.移位比乘法和除法的效率要高,负数右移,对偶数来说是除以2,但对奇数来说是先减1后除以2.例如,-8>>1,得到的是-4,但-7>>1得到的并不是-3而是-4.另外,对于-1来说,无论右移多少位,值永远为-1。
  • 异或:相同的数进行异或时,结果为0,任何数和О异或的结果是其本身。
  • 按位取反:数位上的数是1变为0,0变为1。
  • 按位与和按位或:用两个数的每一位进行与和或。

这里所提到的左移右移均指算术位移。还有一种逻辑位移,逻辑位移左移右移空缺的部位均补0。

#include <stdio.h>
//位运算符
int main() {
    short i = 5;//short是整型,是2个字节的整型,int 是4个字节
    short j;
    j=i << 1;//一个变量移动以后自身不会变化
    printf("j=%d\n", j);//左移是乘2,结果为10
//    i=-8;
    j = i >> 1;
    printf("j=%d\n", j);//右移是除2,结果是2
    printf("-----------------\n");
    i = 0x8011;
    unsigned short s = 0x8011;//在short前加unsigned
    unsigned short r = 0;
    j = i >> 1;//对i右移,对有符号数进行右移
    r = s >> 1;//对s右移,对无符号数进行右移
    printf("j=%d,r=%u\n", j, r);//结果是不一样的
    printf("-----------------\n");
    //接下来来看  按位与,按位或,按位异或,按位取反
    i = 5, j = 7;
    printf("i & j=%d\n", i & j);
    printf("i | j=%d\n", i | j);
    printf("i ^ j=%d\n", i ^ j);
    printf("~i=%d\n", ~i);
    return 0;
}

异或运算符有两个特性,一是任何数和零异或得到的是自身,两个相等的数异或得到的是零,通过这两个特性,我们可以完成下面的题目,在一堆数中找出出现1次的那个数,下面代码实现的功能是筛选出只出现过一次的数字。

#include <stdio.h>

int main() {
    int i;
    int arr[5] = { 8 ,5, 3, 5, 8 };
    int result = 0;
    for(i=0;i<5;i++)
    {
        result=result^arr[i];//异或满足交换律
    }
    printf("%d\n", result);//输出为3
    return 0;
}

4.switch do-while补充

下面这两个作为了解(其实我感觉二级指针用的挺顺手,指针真是一个好东西!!!)
如果一个case语句后面没有break语句、那么程序会继续匹配下面的case常量表达式.
在这里插入图片描述

#include <stdio.h>
//switch 日期升级
int main()
{
    int mon,year;
    while(scanf("%d%d",&year,&mon))
    {
        switch (mon)
        {
            case 2:printf("mon=%d is %d days\n",mon,28+(year%4==0&&year%100!=0||
                                                        year%400==0));break;
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:printf("mon=%d is 31days\n",mon);break;
            case 4:
            case 6:
            case 9:
            case 11:printf("mon=%d is 30days\n",mon);break;
            default:
                printf("error mon\n");
        }
    }
    return 0;
}

在这里插入图片描述

#include <stdio.h>

int main() {
    int i=1,total=0;
    do{
        total+=i;
        i++;
    }while(i<=100);//必须有分号,否则编译不通
    printf("total=%d\n",total);
    return 0;
}

5.二维数组&二级指针

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

6.总结

到这里C语言涉及到的语法差不多也就结束了,虽然在大一大二的时候学习过几门编程语言,也写过一些代码,但是王道的C语言训练营还是坚持看了下来,自我感觉训练营讲解的C语言知识点没有那么全面,但是这也让我知道了408初试大概率会考哪些内容,我应该把重点放在哪里,应该把时间集中在哪里。后面还有4天就要结束督学营阶段的学习任务了,下一步就开始408的数据结构 冲!!!


在这里插入图片描述

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

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

相关文章

传统工厂不再使用蓝牙LoRa而选择使用星斗1号之原因详解

物联网技术在不断发展的同时&#xff0c;化工企业对安全生产的重视也在逐渐增强。 在传统工厂进行安全管理数字化转型前&#xff0c;蓝牙Lora是其最为常用的化工人员定位技术&#xff0c;也曾广泛应用于工厂设备监控、数据传输、人员管理等。 然而&#xff0c;定位技术升级&a…

linux driver probe deferral 机制

1. 背景介绍 在偶然的一次实验中(具体是pinctrl实验)&#xff0c;我发现有些平台的pincontroller驱动起得很晚&#xff0c;而pinctrl client驱动却起得很早&#xff0c;在设备驱动模型中probe之前又会进行管脚复用的相关设置&#xff0c;按照常理来讲&#xff0c;这就产生了某…

前端工程中的设计模式应用

本文旨在系统性介绍一下23种设计模式&#xff0c;给出通俗易懂的案例、结构图及代码示例&#xff0c;这也是我自身学习理解的过程。或许其中的几种设计模式写的并不是很清晰明了易懂&#xff0c;更详细的可根据提到的参考文献进行深入学习。 什么是设计模式 设计模式这个概念是…

Python 算法基础篇之字符串操作:索引、切片、常用方法

Python 算法基础篇之字符串操作&#xff1a;索引、切片、常用方法 引言 1. 字符串的概念和创建2. 字符串的索引3. 字符串的切片4. 字符串的常用方法 a ) 查找子字符串 b ) 替换子字符串 c ) 拆分和连接字符串 总结 引言 字符串是一种常见的数据类型&#xff0c;在 Python 中对…

又整新活,新版 IntelliJ IDEA 有点东西!

作为一个经常使用IntelliJ IDEA来写代码的老用户&#xff0c;每次对于JetBrains软件的更新都是非常关注的。 这不最近这段时间&#xff0c;JetBrains连发了多个软件的EAP版本&#xff1a; 同时JetBrains的官博中也宣布了一个重要的新特性&#xff0c;那就是&#xff1a; 在所…

X.509数字证书的基本原理

一、前言 数字证书是现代互联网中个体间相互信任的基石。 如果没有了数字证书&#xff0c;那么也就没有了各式各样的电商平台以及方便的电子支付服务。 数字证书是网络安全中的一个非常重要组成部分。如果要学好网络安全&#xff0c;那么必须充分理解它的原理。 目前我们所…

keepalived 实现双机热备

文章目录 一、说明二、概念解释三、环境准备四、操作过程五、验证 一、说明 我们经常听说 nginx keepalived 双机热备&#xff0c;其实在这里&#xff0c;双机热备只是利用 keepalived 实现两个节点的故障切换&#xff0c;当主节点挂了&#xff0c;备用节点顶上&#xff0c;保…

深入浅出关于网易邮箱开启smtp服务教程

各平台邮箱开启SMTP服务教程 一、QQ邮箱 &#xff08;服务器地址&#xff1a;smtp.qq.com&#xff09; 第一步&#xff1a;复制https://mail.qq.com/ 登录QQ邮箱后电击左上角设置&#xff0c;如图&#xff1a; 第二步&#xff1a;点击进入“帐户”页面 &#xff0c;如图&…

CodeLocator简单使用(AndroidStudio中点击布局元素确认对应view信息)快速接手陌生项目利器

对于陌生项目的一些改动或重构需求时&#xff0c;如果可以在APP点点就能确定知道当前管理哪个activity或fragment必然是省去了很多去代码里搜来搜去的时间。在社群讨论中发现这款AS插件:CodeLocator ,虽然有2年没更新了 今天也试一试看看是否有帮助。 首先下载最新版本的插件&…

通过OSG实现对模型的日照模拟

1. 加载模型 通过OpenSceneGraph加载一个倾斜摄影的场景模型数据&#xff1a; #include <iostream> #include <Windows.h>#include <osgViewer/Viewer> #include <osgDB/ReadFile>using namespace std;int main() {string osgPath "D:/Data/Da…

Appium自动化测试知识点

一、App环境搭建 1、安装jdk&#xff0c;配置jdk环境变量 2、Android SDK环境安装 3、Appium server安装 4、模拟器的安装&#xff08;夜神模拟器&#xff09; 5、安装appium-python-client Python第三方库 二、App自动化测试原理 如何通过代码操作不同操作系统&#xff08;…

基于Dubbo分布式网上售票系统

一、项目介绍 民航售票是一个高度依赖信息业的行业。但在机票销售的管理和规范这方面上存在着很多各种各样的问题。例如订票是客运行业中的一个最基本的业务,表面上看,它只是机票站业务的一个简单的部分,但是它涉及到管理与客户服务等多方面,关系到民航公司能否正常运作。…

log4j--动态打印日志文件到指定文件夹

文章目录 log4j--动态打印日志文件到指定文件夹1、添加Maven依赖2、配置文件 log4j.properties3、编写日志打印工具类 LogUtil4、工具类调用 log4j–动态打印日志文件到指定文件夹 1、添加Maven依赖 <!-- log4j日志相关坐标 --><dependency><groupId>org.s…

无虚拟 DOM 版 Vue 进行到哪一步了?

前言 就在一年前的 Vue Conf 2022&#xff0c;尤雨溪向大家分享了一个非常令人期待的新模式&#xff1a;无虚拟 DOM 模式&#xff01; 我看了回放之后非常兴奋&#xff0c;感觉这是个非常牛逼的新 feature&#xff0c;鉴于可能会有部分人还不知道或者还没听过什么是 Vue 无虚…

哈佛“聘请”AI担任导师,主讲教授:别全信它的,学生应“批判性地思考”

就在人们为AI聊天机器人的利弊争论不休时&#xff0c;哈佛宣布了一个重磅决定&#xff1a;将利用类似ChatGPT的聊天机器人来帮助授课了。 负责的还是计算机系的旗舰项目 —— 计算机科学导论&#xff0c;也就是著名的 CS50。借助机器人导师&#xff0c;哈佛的 CS50 项目将拥有…

Python、Selenium实现问卷星自动填写(内含适配个人问卷的方法)

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Py…

有哪些好用的远程传输大文件的软件

随着网络技术的日益进步和普及&#xff0c;大文件远程传输已经成为了人们生活和工作中必不可少的一部分。然而&#xff0c;在远程传输大文件的过程中&#xff0c;经常会遇到传输速度慢、容易受到干扰等问题&#xff0c;因此需要一款高效、稳定、安全的大文件远程传输软件来解决…

CCF真题练习:202209-1如此编码

题目背景 某次测验后&#xff0c;顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字&#xff0c;小 P 同学不禁陷入了沉思…… 题目描述 已知某次测验包含 n 道单项选择题&#xff0c;其中第 i 题&#xff08;1≤i≤n&#xff09;有 个选项&#xff0c;…

【Vue 面试题10道】我好像之前想过要写,不过之前JavaScript面试题比较多,就暂时略过了,这些应该几乎把常问的都包括了

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; 前端面试题 开发工具&#xff1a;Vs Code 本题针对 Vue2 这些几乎把常用的都包括了&#xff0c;问别的就没意思了&#xff0c;毕竟工作拧螺丝嘛 我都好久不用Vue了&#xff0c;不过用了React再回看Vue感觉好简单啊… 其…

数据库性能优化中的查询优化

数据库性能优化中的查询优化 概述 在数据库应用中&#xff0c;查询操作是最常见的操作之一。查询优化是数据库性能优化的关键一环&#xff0c;通过对查询语句和查询执行计划的优化&#xff0c;可以显著提高数据库系统的性能和效率。本文将介绍查询优化的相关知识&#xff0c;…