当前位置: 首页 > news >正文

一、C++上岸教程—C语言基础

一、介绍

进行软件开发之前,首先要知道软件开发,所依赖的基础,开发环境,以及编程语言,对于编程语言大体上可以分为如下两类:

1、编译型语言:C/C++, java 等,此类语言,均需要编译生成可执行文件(也就是软件)

2、解释性语言:python,javascript,php等,此类语言依赖代码解释器解析执行。

历史由来:C 语言诞生于 1972 年,由美国贝尔实验室的丹尼斯・里奇(Dennis Ritchie)在开发 UNIX 操作系统的过程中设计出来。当时,为了让 UNIX 系统具有更好的可移植性(之前的操作系统大多用汇编语言编写,移植困难),需要一种高级语言来替代汇编语言。

C语言,可以用来开发嵌入式软件,操作系统,游戏后台开发,数据库管理开发等;

二、前期准备

这里采用vscode + mingw的编译运行环境,可以参考如下博客配置环境:

VS Code 配置 C/C++ 编程运行环境(保姆级教程)_vscode配置c++环境-CSDN博客https://blog.csdn.net/qq_42417071/article/details/137438374

代码注释符号介绍

// “//” 双斜杠这一行为注释行,是单行注释符号 /* 这里为注释包含行,可以跨多行注释 */

一行语句介绍用分号 ";"

{}:括号包起来的一段语句,为一个代码段

本节代码仓库:

cPart1 · CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/master/cPart1

开始之前对本节内容有个大概认识如下:

三、第一个程序

hello.c

#include<stdio.h>

int main()
{
    printf("Hello world\n");
    return 0;
}

执行结果显示如下:

四、变量常量与类型

数据类型:

(常用:bool/char/int/float/double)

1、布尔类型(bool): true/false;

2、字符类型:(char 有符号字符型,表数范围-128 - +127)和unsigned char(无符号字符型,表数范围0 - 255),用来表示一个字符数据,都占一个字节(1Byte=8bit)存储空间;

3、整型:

3.1、短整型:short(短整型,表数范围-32768 ~ +32767)和unsigned short(无符号短整型,表数范围0 ~ 65535)都占2Byte;

3.2、整型:int(整型,表数范围-21.47亿 ~ +21.47亿)和unsigned int(无符号整型,表数范围0 ~ +42亿)都占4Byte

3.3、长整型:long在大多数 32 位系统中,占用 4 个字节(32 位)的内存空间,表数范围跟int一致;但是在64位系统中占用 8 个字节,范围(-2^63 ~2^63 - 1);

4、浮点型:float(单精度浮点型,占4Byte,表数范围+10^-38 - +10^38和-10^38 - -10^-38)和double(双精度浮点型,占8Byte,表数范围+10^-308 - +10^308和-10^308 - -10^-308)

5、void(空类型,即不确定类型,通常作为类型占位符使用)

如下代码:

#include <stdio.h>
#include <stdbool.h> // 引入bool类型

#define PI1  3.14  // 宏定义

int main()
{
    bool b = true;  // 布尔类型

    char c = 'a';   // 字符

    short s = 1;    // 短整型

    int i = 10;     // 整型

    long l = 100;   // 长整型

    float f = 0.1;  // 单精度浮点数

    double d = 8.8; // 双精度浮点数

    const int cst = 999;    // 常量
    "aaaa"; // 字符串常量

    return 0;
}

这里数据后接着的字符表示的是变量;

变量

变量:可变的量,存放在内存中

变量命名规则:

1.要为C语言合法标识符(由字母、数字和下划线构成,并且不能以数字开头)

2.不能和关键字(有特殊意义的标识符)同名

C语言是大小写敏感的语言,即在C语言中,大小写不同的两个标识符会被认为是两个不同的标识符

常量:一旦定义就不能改变的量

定义常量的两种方式:使用define预处理命令或const关键字

字面常量:

'a'为字符型常量

"abcd"为字符串常量

五、运算符表达式

根据运算功能分类:

算术运算符:+,-,*,/,%(模运算符),++(自增运算符),--(自减运算符) 自增运算符分为前置自增和后置自增两种,自减运算符也一样

赋值运算符:=,+=, -=

关系运算符:,>=,!=,运算结果是一个布尔(逻辑)值,即真或假

逻辑运算符:!(逻辑非),&&(逻辑与),||(逻辑或)

条件运算符: ?:

位运算符:~(按位取反),&(按位与),|(按位或),^(按位异或)

cBase.c

#include <stdio.h>
#include <stdbool.h> // 引入bool类型

#define PI1  3.14  // 宏定义

int main()
{
    bool b = true;  // 布尔类型

    char c = 'a';   // 字符

    short s = 1;    // 短整型

    int i = 10;     // 整型

    long l = 100;   // 长整型

    float f = 0.1;  // 单精度浮点数

    double d = 8.8; // 双精度浮点数

    const int cst = 999;    // 常量
    "aaaa"; // 字符串常量

    // 算术运算符
    i = s + l;      

    i = l - s;

    i = s*l;

    i = l/s;

    int r = i % s;  // 取余,就是i 数据除以 s数据的余数;

    ++i;
    s++;
    --i;
    s--;

    // 赋值运算符
    i+=s;

    i-=s;

    // 关系运算符
    b = (i > s);
    printf("i = %d, s = %d, b = %d\n", i, s, b);// 这里的%d,是控制符,表示控制整型数据输出

    bool b1 = (l < i);
    printf("l = %d, i = %d, b1 = %d\n", l, i, b1);

    bool b2 = (s >= l);
    printf("l = %d, s = %d, b2 = %d\n", l, s, b2);

    bool b3 = (s <= l);
    printf("l = %d, s = %d, b3 = %d\n", l, s, b3);

    bool b4 = (s != l);
    printf("l = %d, s = %d, b4 = %d\n", l, s, b4);

    // 逻辑运算符
    b3 = b && b2;
    printf("b3 = %d\n", b3);  // 逻辑与:全真即真

    b3 = b1 || b2;
    printf("b3 = %d\n", b3);  // 逻辑或:有真则真

    b3 = !b3;
    printf("b3 = %d\n", b3);  // 逻辑非

    // 位运算符  转换成二进制数,进行左移右移,取反,异或等操作,常用于嵌入式设备中,控制某个状态的迁移
    s = s << 1;
    printf("s = %d\n", s);
    
    s = s << 2;
    printf("s = %d\n", s);

    s = s >> 3;
    printf("s = %d\n", s);
    
    // 条件运算符, 条件成立,输出 l >i 否则输出 l < i
    l > i ? printf("l > i\n"):printf("l < i\n");
    return 0;
}

六、流程控制

流程控制相当于程序执行的执行路径, 执行流程均可嵌套,建议,不要嵌套层数,不要超过三层,否则会影响代码的执行效率。

1、分支控制

1.1、if 语句

1.2、switch case

2、循环控制

2.1、for

2.2、while

2.3 、do while

cContrl.c

#include <stdio.h>
#include <stdbool.h> // 引入bool类型

void main()
{
    int i = 4;
    int j = 8;

    if(i < j)
    {// i < j 条件成立执行括号内代码
        i += j;
        printf("i < j , i = %d, j = %d\n", i, j);
    }

    if(i < j)
    {
        i = j-i;
        printf("1 i < j , i = %d, j = %d\n", i, j);
    }
    else 
    {
        ++i;
        printf("i > j , i = %d, j = %d\n", i, j);
    }

    if(i < j)
    {
        i = j-i;
        printf("2 i < j , i = %d, j = %d\n", i, j);
    }
    else if(i == 13)
    {
        ++i;
        printf("i = %d, j = %d\n", i, j);
    }
    else{
        printf("i > j , i = %d, j = %d\n", i, j);
    }

    switch(j)
    {// break的作用是跳出当前执行代码段
        case 1:
        {
            printf("j == 1");
        }
        break;

        case 2:
        {
            printf("j == 2");
        }
        break;

        case 8:
        {
            printf("j == 8");
        }
        break;

        default:
        break;
    }

    // 循环语句
    int sum = 0;
    for (int a = 1; a <= 5; a++) {
    sum += a;
    }
    printf("sum = %d\n", sum);

    int s = 1;
    int sum1 = 0;
    while (s <= 10) {
        sum1 += i;
        s++;
    }
    printf("1 到 10 的整数和为:%d\n", sum);

    int num = 20;
    do {
        if (num % 2 == 0) {
            printf("%d 是偶数。\n", num);
        } else {
            printf("%d 不是偶数。\n", num);
        }
        num--;
    } while (num > 0);
    return ;
}

代码运行输出:

相关文章:

  • CentOS 7 IP 地址设置保姆级教程
  • playbin之Source插件加载流程源码剖析
  • 2024_BUAA数据结构上机题解分享
  • 03.03 QT
  • Android开发Android调web的方法
  • Feign 深度解析
  • 火语言RPA--PDF提取表格
  • 详解LSM树
  • matlab 包围盒中心匹配法实现点云粗配准
  • 【Elasticsearch】Set up a data stream 创建data stream
  • AIP-158 分页
  • Leetcode 215 数组中的第K个最大元素
  • 一、计算机等级考试——标准评分
  • Leetcode 37: 解数独
  • 【数据分析】复杂实验,通过正交表组合来进行实验设计
  • 安全渗透测试的全面解析与实践
  • 虚拟机ip配置
  • 网页制作11-html,css,javascript初认识のCCS样式列表(上)
  • 【Azure 架构师学习笔记】- Azure Databricks (14) -- 搭建Medallion Architecture part 2
  • Vue 3 中 unref 的作用与 Vue Router currentRoute 的知识
  • 马上评|扩大高速免费救援范围,打消出行后顾之忧
  • 中国代表:美“对等关税”和歧视性补贴政策严重破坏世贸规则
  • 夜读丨春天要去动物园
  • 首开股份:一季度净利润亏损约10.79亿元,签约金额63.9亿元
  • 媒体:酒店、民宿临时毁约涨价,怎么管?
  • 年轻人的事业!6家上海人工智能企业畅想“模范生”新征程