C语言基础全解:细说每个知识点

目录

1. 进制转换方法

1.1 二进制转十进制

1.2 十进制转二进制

1.3 二进制转八进制

1.4 二进制转十六进制

1.5 八进制转二进制

1.6 十六进制转二进制

2. 进制简介

特别注意

C语言基础元素概览

1. 关键字分类

1.1 存储类型关键字

1.2 数据类型关键字

1.3 构造类型关键字

1.4 控制结构关键字

1.5 其他关键字

2. 运算符

2.1 算术运算符

2.2 逻辑运算符

2.3 位运算符

2.4 条件运算符

2.5 赋值运算符

练习:水仙花

变量与常量

3. 变量格式与分类

3.1 变量声明格式

3.2 数据类型分类

3.3 全局变量与局部变量

输入与输出

4. 输出格式说明

4.2 垃圾字符处理

4.3 输入操作

特别注意:垃圾字符处理

控制流程结构

5. 分支语句

5.1 if...else

5.2 if...else if...else

5.3 switch

6. 循环语句

6.1 for 循环

6.2 while 循环

6.3 do...while 循环

6.4 死循环

7. 循环控制语句

7.1 break

7.2 continue


进制转换详解

1. 进制转换方法
1.1 二进制转十进制
  • 例子110101 = 2^0 + 2^2 + 2^4 + 2^5 = 53
  • 方法: 对于每一位,如果该位是1,则计算2的该位置次方的值并累加。
1.2 十进制转二进制
  • 例子53 = 32 + 16 + 4 + 1 = 0011 0101
  • 方法: 将数字拆分为2的幂次方的组合。
1.3 二进制转八进制
  • 例子110101 = 065
  • 方法: 每三位二进制数转换为一位八进制数(使用421规则)。
1.4 二进制转十六进制
  • 例子00110101 = 0x35
  • 方法: 每四位二进制数转换为一位十六进制数(使用8421规则)。
1.5 八进制转二进制
  • 例子065 = 110101
  • 方法: 同二进制转八进制的逆过程。
1.6 十六进制转二进制
  • 例子0x65 = 0011 0101
  • 方法: 同二进制转十六进制的逆过程。
2. 进制简介
  • 二进制: 使用10表示的数制。
  • 八进制: 前面通常加0,用以区分其他进制。
  • 十进制: 日常生活中常用的阿拉伯数字系统。
  • 十六进制: 前缀通常是0x,用于表示计算机系统中的数据。
特别注意
  • 十六进制和八进制直接转换: 直接在两者之间转换没有简单的一对一映射方法,通常需要先转换为二进制作为中介。

C语言基础元素概览

1. 关键字分类
1.1 存储类型关键字
  • static
  • auto
  • extern
  • register
1.2 数据类型关键字
  • int
  • char
  • float
  • short
  • long
  • double
  • signed
  • unsigned
1.3 构造类型关键字
  • struct
  • union
  • enum
1.4 控制结构关键字
  • 选择结构:
    • if
    • if else
    • if else if
  • 循环结构:
    • for
    • while
    • do...while
1.5 其他关键字
  • void
  • typedef
  • const
  • volatile (防止编译器优化)
  • return
  • sizeof
2. 运算符
2.1 算术运算符
  • 加法: +
  • 减法: -
  • 乘法: *
  • 除法: /
  • 取模: %
  • 自增: ++
  • 自减: --
2.2 逻辑运算符
  • 与运算: &&
  • 或运算: ||
  • 非运算: !
2.3 位运算符
  • 位与: &
    • 所有位全为1才为1,否则为0
  • 位或: |
    • 只要有一个位为1,则结果为1
  • 异或: ^
    • 相同位为0,不同位为1
  • 按位取反: ~
    • 如 ~(-14) 结果为 -15
  • 右移: >>
    • 右移几位,在左边补0
  • 左移: <<
    • 左移几位,在右边补0
2.4 条件运算符
  • (条件式 ? 表达式1 : 表达式2)
    • 示例:(a < b) ? a : b
2.5 赋值运算符
  • +=
  • -=
  • *=
  • /=
  • %=

特别注意:

  • % 用于取余,仅适用于整数。
  • ++a 先自增后使用,a++ 先使用后自增。
  • 示例:int a = 5; int b = ++a; // b=6
    • int a = 5; int b = a++; // b=5

%的例子:

      判断个十百千位int a = 2345;int b = a/1000;printf("千位是:%d\n",b);int c = a/100%10;printf("百位是:%d\n",c);int d = a/10%10;printf("十位是:%d\n",d);int e = a%10;printf("个位是:%d\n",e);
练习:水仙花
    int n, a, b, c;for(n=100;n<1000;n++){a = n / 100;b = n % 100 /10;c = n % 100 %10;if(pow(a,3)+pow(b,3)+pow(c,3) == n){printf("%d\n",n);}}

变量与常量

3. 变量格式与分类
3.1 变量声明格式
  • 格式: 存储类型 数据类型 变量名
    • 示例int a;
3.2 数据类型分类
  • 整型intshortlong
  • 字符型char
  • 浮点型floatdouble
3.3 全局变量与局部变量
  • 区别:
    • 作用域: 全局变量在所有函数中都可访问;局部变量只在其定义的函数或代码块中可见。
    • 生命周期: 全局变量在整个程序运行期间存在;局部变量在其所在函数调用结束后销毁。
    • 存储地址: 全局变量存储在静态区;局部变量存储在栈中。
    • 初值: 全局变量默认初始化为0;局部变量不自动初始化,除非明确指定。
    • 定义位置: 全局变量定义在所有函数外部;局部变量定义在函数内部或代码块内。

输入与输出

4. 输出格式说明
  • %d: 整型
  • %c: 字符
  • %f: 浮点型
  • %s: 字符串
  • %p: 地址
  • %#0: 八进制
  • %#0x: 十六进制
  • %-m.n: 格式化输出
  • %e: 指数形式
4.2 垃圾字符处理
  • getchar(): 读取并丢弃一个字符,常用于清除输入缓冲区中的多余字符,如空格、换行等。
  • 用途: 在读取数值后,清除输入流中的空白字符,避免影响后续输入。
4.3 输入操作
  • scanf(): 格式化输入函数,用于读取用户从键盘输入的数据。
    • 格式scanf("%类型", &变量名); 或者直接使用数组名。
  • getchar(): 读取并返回一个字符的ASCII码值。
    • 功能: 从标准输入设备(如键盘)读取一个字符。
    • 参数: 无。
    • 返回值: 输入字符的ASCII码值。
特别注意:垃圾字符处理
  • 在进行多次输入时,前一次输入的结束符(如换行符)可能残留在输入缓冲区中,影响下一次输入。使用getchar()scanf()的特定方式可以清除这些“垃圾”字符。
  // while (1)// {//     int i = 0;//     int j;//     int num1 = 0;//     int age = 18;//     char a;//     for (i = 1; i <= 3; i++)//     {//         printf("请猜一个数�?:\n");//         scanf("%d", &j);//         if (j == age)//         {//             printf("猜对�?");//             break;//         }//         else//         {//             printf("�?%d次输入错误\n", i);//             num1++;//         }//     }//     if (num1 == 3)//     {//         printf("请问你是否还像继�??(继续请按Y或y,退出请按N或n)\n");//         getchar();//  注意垃圾字符!//         scanf("%c", &a);//         if (a == 'Y' || a == 'y')//         {//             continue;//         }//         else if (a == 'N' || a == 'n')//         {//             break;//         }//     }//     return 0;// }

控制流程结构

5. 分支语句
5.1 if...else
  • 语法:
    C
    1if (条件表达式) {
    2    // 条件为真时执行的代码
    3} else {
    4    // 条件为假时执行的代码
    5}
5.2 if...else if...else
  • 语法:
    C
    1if (条件表达式1) {
    2    // 条件1为真时执行的代码
    3} else if (条件表达式2) {
    4    // 条件2为真时执行的代码
    5} else {
    6    // 上述条件都不满足时执行的代码
    7}
5.3 switch
  • 语法:
    C
    1switch (表达式) {
    2    case 常量表达式1:
    3        // 当表达式的值等于常量表达式1时执行的代码
    4        break;
    5    case 常量表达式2:
    6        // 当表达式的值等于常量表达式2时执行的代码
    7        break;
    8    default:
    9        // 当上述case都不匹配时执行的代码
    10}
6. 循环语句
6.1 for 循环
  • 语法:
    C
    1for (初始化表达式; 条件表达式; 更新表达式) {
    2    // 循环体
    3}
6.2 while 循环
  • 语法:
    C
    1while (条件表达式) {
    2    // 循环体
    3}
    • 注意: 条件表达式为非零值时,循环将继续。
6.3 do...while 循环
  • 语法:
    C
    1do {
    2    // 循环体
    3} while (条件表达式);
6.4 死循环
  • 示例:
    C
    1while (true) {
    2    // 无限循环体
    3}

C

1for (;;) {
2    // 无限循环体
3}
7. 循环控制语句
7.1 break
  • 功能: 立即终止当前循环,跳转至循环之后的代码。
7.2 continue
  • 功能: 跳过本次循环剩余的部分,立即开始下一次迭代。

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

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

相关文章

25.【C语言】循环结构之for 上

1.基本使用 类比while 在while循环中&#xff0c;有三个不可或缺的部分&#xff1a;初始化&#xff0c;判断部分&#xff0c;调整部分 int i 0;//初始化 while (i < 10)//判断部分 {……i;//调整部分 }三个部分太分散&#xff0c;用for循环可集为一体&#xff0c;简洁 …

使用shell脚本实现DM8开机自动启动

编写shell脚本 #!/bin/bashsu -dmdba >>EOF cd /home/dmdba/dmdbms/bin ./DmServiceDMTEST start echo "dm start ... " EOF注意&#xff1a;DmServiceDMTEST每个服务器设置的不一样&#xff0c;根据实际进行更换 授权脚本可执行权限 chmod -x /dmdata/dmse…

Kotlin中的关键字

Kotlin 中的关键字可分为几个大类&#xff1a; 声明/定义关键字&#xff1a; class&#xff1a;用于定义类interface&#xff1a;用于定义接口object&#xff1a;用于声明对象&#xff0c;Kotlin中实现单例模式的关键字fun&#xff1a;用于声明函数var&#xff1a;用于声明可变…

目标检测精度提升秘籍:算法优化策略全解析

标题&#xff1a;目标检测精度提升秘籍&#xff1a;算法优化策略全解析 目标检测是计算机视觉领域的核心技术之一&#xff0c;广泛应用于视频监控、自动驾驶、医疗成像等领域。然而&#xff0c;提升目标检测算法的准确性是一个持续的挑战。本文将深入探讨如何优化目标检测算法…

web学习笔记(七十九)

目录 1.全局共享数据的用法 2.小程序的本地持久化存储 3.小程序获取头像和用户昵称 4.如何实现进入页面就隐藏TabBar 1.全局共享数据的用法 小程序中的全局数据再app.js文件中声明&#xff0c;app本来就是小程序给我们配置的全局文件&#xff0c;因此在app.js文件中声明的…

数据结构第12节 有向图

有向图&#xff08;Directed Graph 或 Digraph&#xff09;是一种图数据结构&#xff0c;其中的边具有方向性。这意味着在一个有向图中&#xff0c;边可以被视为箭头&#xff0c;箭头从一个顶点指向另一个顶点&#xff0c;表示从起点到终点的单向关系。有向图的这种特性使得它在…

搭建互联网医院实战:从源码到在线问诊APP的全流程开发

今天&#xff0c;笔者将讲述在线问诊APP的全流程开发&#xff0c;帮助开发者理解和掌握搭建互联网医院的核心技术和步骤。 一、需求分析与设计 需求分析包括明确目标用户、功能需求、性能需求等。设计阶段则包括系统架构设计、数据库设计和前后端界面设计等。 1.目标用户&…

最小权顶点覆盖问题-优先队列分支限界法-C++

问题描述: 给定一个赋权无向图 G(V,E)&#xff0c;每个顶点 v∈V 都有一个权值 w(v)。如果 U⊆V&#xff0c;U⊆V&#xff0c;且对任意(u,v)∈E 有 u∈U 或 v∈U&#xff0c;就称 U 为图 G 的一个顶点覆盖。G 的最小权顶点覆盖是指 G 中所含顶点权之和最小的顶点覆盖。对于给定…

提取重复数据

直接上控制台代码&#xff1a; Module Module1Sub Main()Console.WriteLine("请输入数据&#xff0c;以""&#xff0c;""相隔&#xff1a;")Dim str As String Console.ReadLineDim result From x In str.Split(",")Group By x Int…

NTP协议格式解析

1. NTP时间戳格式 SNTP使用在RFC 1305 及其以前的版本所描述标准NTP时间戳的格式。与因特网标准标准一致&#xff0c; NTP 数据被指定为整数或定点小数&#xff0c;位以big-endian风格从左边0位或者高位计数。除非不这样指定&#xff0c;全部数量都将设成unsigned的类型&#…

用python做DDL的静态分析

最近在用python做DDL SQL的分析&#xff0c;用的是simple_ddl_parser1.5.1。遇到了一些问题&#xff0c;记录一下。 simple_ddl_parser能解析多种数据库的DDL语句&#xff0c;我要处理的是mysql的DDL&#xff0c;发现有些mysql的写法还是不支持&#xff1a; 在表层面不支持使用…

Android Graphics 显示系统 - 监测、计算FPS的工具及设计分析

“ 在Android图像显示相关的开发、调试、测试过程中&#xff0c;如何能有效地评估画面的流畅度及监测、计算图层渲染显示的实时FPS呢&#xff1f;本篇文章将会提供一种实用、灵巧的思路。” 01 设计初衷 面对开发测试中遇到的卡顿掉帧问题&#xff0c;如何在复现卡顿的过程中持…

大模型AIGC转行记录(一)

自从22年11月chat gpt上线以来&#xff0c;这一轮的技术浪潮便变得不可收拾。我记得那年9月份先是在技术圈内讨论&#xff0c;然后迅速地&#xff0c;全社会在讨论&#xff0c;各个科技巨头、金融机构、政府部门快速跟进。 软件开发行业过去与现状 我19年决定转码的时候&…

代码随想录算法训练营第四十五天| 300.最长递增子序列、 674. 最长连续递增序列、 718. 最长重复子数组

300.最长递增子序列 题目链接&#xff1a;300.最长递增子序列 文档讲解&#xff1a;代码随想录 状态&#xff1a;不会&#xff0c;递推状态的时候只想着如何从dp[i-1]推导dp[i]&#xff0c;没想过可能需要枚举dp[0-i] 思路&#xff1a; 找出所有比自己小的数字的dp[j],在这些dp…

【K8s】【问题排查】k8s只能本地服务器访问服务,其他节点无法访问服务

出现原因&#xff1a; 问题描述&#xff1a;k8s部署服务之后&#xff0c;只能在Pod所在的节点通过node ip 对外暴露的端口请求&#xff1b;无法使用CLUSTER-IP端口访问。也不能在其他Node节点通过Pod所在的节点通过node ip 对外暴露的端口请求&#xff1b; 主机名与IP对应情况&…

随着人工智能与机器学习的广泛应用,Java 如何有效地与深度学习框架进行集成,以实现更智能的应用开发?

Java作为一种广泛使用的编程语言&#xff0c;在人工智能和机器学习领域也有着一定的应用。Java可以通过与深度学习框架的集成来实现更智能的应用开发&#xff0c;以下是一些方法&#xff1a; 使用Java的深度学习框架&#xff1a;Java有一些针对深度学习的框架&#xff0c;如DL4…

SpringBoot 实现视频分段播放(通过进度条来加载视频)

需求&#xff1a;现在我本地电脑中有一个文件夹&#xff0c;文件夹中都是视频&#xff0c;需要实现视频播放的功能。 问题&#xff1a;如果通过类似 SpringBoot static 文件夹的方式来实现&#xff0c;客户端要下载好完整的视频之后才可以播放&#xff0c;并且服务端也会占用大…

秋招突击——7/5——设计模式知识点补充——适配器模式、代理模式和装饰器模式

文章目录 引言正文适配器模式学习篮球翻译适配器 面试题 代理模式学习面试题 装饰器模式学习装饰模式总结 面试题 总结 引言 为了一雪前耻&#xff0c;之前腾讯面试的极其差&#xff0c;设计模式一点都不会&#xff0c;这里找了一点设计模式的面试题&#xff0c;就针对几个常考…

计算机图形学入门24:材质与外观

1.前言 想要得到一个漂亮准确的场景渲染效果&#xff0c;不只需要物理正确的全局照明算法&#xff0c;也要了解现实中各种物体的表面外观和在图形学中的模拟方式。而物体的外观和材质其实就是同一个意思&#xff0c;不同的材质在光照下就会表现出不同的外观&#xff0c;所以外观…

代理模式的实现

1. 引言 1.1 背景 代理模式&#xff08;Proxy Pattern&#xff09;是一种常用的设计模式&#xff0c;它允许通过一个代理对象来控制对另一个对象的访问。在面向对象编程的框架中&#xff0c;代理模式被广泛应用&#xff0c;尤其在Spring框架的AOP&#xff08;面向切面编程&am…