avatar
文章
91
标签
34
分类
6
首页
时间轴
标签
分类
音乐
图库
清单
  • 开发工具
  • 疑难解答
  • 烟草纲目
友链
关于
王总的博客
首页
时间轴
标签
分类
音乐
图库
清单
  • 开发工具
  • 疑难解答
  • 烟草纲目
友链
关于

王总的博客

【C语言】八进制
发表于2026-01-13|更新于2026-03-31|C语言|格式化输出•位运算•八进制
八进制先看题目:答案 :A以下是详细的解题步骤分析: 解题思路1. 理解变量赋值: 代码语句:char x = 040; 在 C 语言中,以数字 0 开头的数字表示八进制(Octal) 数。 我们需要先算出它的十进制值: 八进制 040 = $4 \times 8^1 + 0 \times 8^0 = 32$(十进制)。 所以,变量 x 此时存储的数值是十进制的 32 。 2. 执行位运算: 代码表达式:x << 1 这是左移运算符(Left Shift) ,将二进制位向左移动 1 位。 在数学上,左移 1 位等同于乘以 2: $32 \times 2 = 64$(十进制)。 或者从二进制角度看: 32 的二进制是 0010 0000 左移一位变成 0100 0000(即十进制的 64)。 3. 格式化输出: 代码语句:printf("%o\n", ...) 格式控制符 %o 表示以八进制 形式输出整数。 现在的运算结果是十进制的 64 ,我们需要将其转换回八进制: $64 \div 8 ...
【C语言】结构体
发表于2026-01-12|更新于2026-03-31|C语言|指针•结构体
结构体从4个阶段理解第一阶段:为什么要用结构体?想象一下,你要编写一个程序来管理学生信息 。每个学生有:姓名、年龄、分数。如果不使用结构体,你可能需要这样定义变量: 1234567char name1[20] = "Zhang San";int age1 = 18;float score1 = 85.5;char name2[20] = "Li Si";int age2 = 19;float score2 = 92.0; 痛点: 数据零散 :name1 和 age1 在逻辑上属于同一个人,但在代码中它们是毫无关系的独立变量。 管理困难 :如果有100个学生,你得定义300个变量,甚至建立3个独立的数组。一旦要通过函数传递一个学生的信息,你需要传3个参数。 解决方案: 我们需要一种机制,能够把不同类型的数据 (char, int, float)打包到一个“盒子”里。这个“自定义的盒子类型”,就是结构体(Structure) 。 第二阶段:结构体的定义与创建结构体的学习分为两步:先画图纸 (定义类型),再盖房子 (定义变量)。 1. ...
【C语言】二维数组地址
发表于2026-01-11|更新于2026-03-31|C语言|地址•二维数组•数组地址
二维数组地址一、思考答案: a 二、二维数组地址的表示方法假设我们定义了一个二维数组: 12int a[3][4]; // 3行4列,系统分配了 3*4=12 个连续的整数空间 第一层:行地址 (a) 含义 :a 被视为一个行指针 。它指向二维数组的第0行 (即把一整行看作一个单位)。 类型 :int (*)[4] (指向包含4个整数的数组的指针)。 步长(+1的效果) :如果你执行 a + 1,地址会跳过整整一行 (跳过 4 个 int,即 16 字节),直接指向第1行的起始位置。 第二层:列地址/首元素地址 (a[0] 或 *a) 含义 :a[0] 代表第0行的一维数组名 。数组名代表首元素地址。所以它指向第0行第0个元素 。 类型 :int * (指向单个整数的指针)。 步长(+1的效果) :如果你执行 a[0] + 1,地址只会跳过一个元素 (跳过 1 个 int,即 4 字节),指向 a[0][1]。 理解*a :a表示首行的地址,*a解地址解出来的就是这一行的元素,自然而然就来到的这一行的首地址 有: 12int a[3][4];int b[4]; ...
【C语言】自编strcmp的标准写法
发表于2025-12-31|更新于2026-03-31|C语言|字符串
自编strcmp的标准写法背景我自己写的strcmp函数比较笨,闹出笑话是小事,真的不会写才是大事所以我决定纠正一下: 代码实现:123456789101112131415// 自定义字符串比较函数int MyStrcmp(char *s, char *t) { // 当s和t指向的字符相等时,继续循环 while (*s == *t) { // 如果当前字符是结束符 '\0',说明两个字符串同时结束且完全相等 if (*s == '\0') { return 0; } // 指针后移,比较下一个字符 s++; t++; } // 循环结束说明遇到了不相等的字符,返回两者的差值 return *s - *t;} 巧妙地运用了指针,指针的移动反正非常标准,你就学吧
【C语言】写出最短的代码
发表于2025-12-30|更新于2026-03-31|C语言
写出最短的代码背景:今天我在学校练习系统里面遇到了一个实验题 123456(语言: C)第六章实验题:编写函数计算1-1/3+1/5-1/7+…的值,直至最后一项的绝对值<0.001提示:输出结果的最后两位是97输入:无输出提示:"result="输出格式:"%f" 代码实现我非要使用递归调用,这是我第一次写的代码: 123456789101112131415161718#include <stdio.h>#include <math.h>float Function() { static int count = 1, i = 1; i = (abs(i) + 2) * pow(-1, count++); if (fabs(1.0 / i) < 1e-3) { return 1.0 / i; } else { return 1.0 / i + Function(); }}int main(void) { printf("...
【C语言】指针的定义
发表于2025-12-30|更新于2026-03-31|C语言|指针
指针的定义定义一个指针:1char *p 1char*p 哪个写法正确?两个写法在语法上都是完全正确的。 编译器根本不在乎空格放在哪里,它甚至允许你写成 char*p(中间没空格)。但是,学习C语言,应该使用第一种写法: ✅ 推荐写法:char *p;为什么?这里有一个 C 语言中非常著名的**“视觉陷阱”** 。 1. 为什么 char* p 容易坑人?如果你习惯写 char* p,你的大脑会认为 char* 是一个整体(一种叫“字符指针”的数据类型)。当你只定义一个变量时,没问题: 1char* p; // 没问题,p 是指针 但是 ,当你一行定义两个变量时,陷阱就出现了: 1char* p, q; 你的直觉可能告诉你:p 和 q 都是指针。 实际情况是: p 是指针 (char *) q 仅仅是一个普通的字符 (char) 😱 因为在 C 语言的语法规则里,\* 号是跟变量名绑定的,不是跟类型名绑定的。 2. 为什么推荐 char *p ?这种写法更符合 C 语言的底层逻辑: 1char *p; 这句话的意思是:\*p 是一个 char。 (翻译...
【C语言】C语言规范
发表于2025-12-24|更新于2026-03-31|C语言
C语言规范一、花括号{}的省略 省略花括号的唯一核心原则 是: 核心原则:控制语句下方只有「一条语句」时当 if、else、for、while 或 do...while 的控制范围内只有紧随其后的第一条语句 时,花括号 {} 可以省略。 二、缩进(tab)影不影响运行完全不影响。在 C 语言中,换行符、空格、Tab(制表符) 统称为“空白字符”(Whitespace)。对于编译器(翻译代码给电脑听的程序)来说,这些全是透明的,它根本不在乎 。缩进(按 Tab)的核心作用是表现逻辑的层级关系 。 如果不缩进: 就像读一篇没有标点、没有段落的文章,你很难一眼看出来哪个 if 管着哪行代码,哪个括号匹配哪个括号。 缩进后: 你一眼就能看出:“哦,这行 printf 是属于 for 循环里面的子动作”。 坚持缩进: 虽然不影响运行,但一定要养成层级对齐的好习惯 。这是程序员的“脸面”。通常只要遇到 {,下一行就开始缩进(按一次 Tab)。遇到 },缩进就退回一级。使用自动格式化工具: 你不需要手动敲空格对齐。绝大多数写代码的软件都有“一键排版”功能: VS Code: 按 Shi...
【C语言】float和double的爱恨情仇
发表于2025-12-24|更新于2026-03-31|C语言|数据类型
float和double的爱恨情仇 特性 float (单精度) double (双精度) 内存占用 4 字节 (32 bit) 8 字节 (64 bit) 有效数字 约 6 ~ 7 位 约 15 ~ 16 位 精度评价 够用,但容易有误差 非常准 ,默认推荐 C语言写法 float x = 1.23f; double x = 1.23; 输入/输出 %f %lf (输入时必须用, 输出可用%f) 一、为什么是“约 6~7 位”?C 语言很严谨,但**“二进制”和“十进制”无法完美互译** 。底层逻辑: float 在计算机里有 23 个二进制位 用来存有效数字。 2 的 23 次方是 8,388,608。 你看,838万 这是一个 7 位数 。这意味着 float 能把大部分 7 位以内的整数分得清清楚楚。 但是,一旦超过这个范围,或者涉及到某些特定的小数,二进制位就不够用了。 比喻: 这就好比用“美元”去换“人民币”。 你有 1.00 美元。 汇率算下来可能是 7.234567… 元。 你能精确对应的只有前几位,后面总是会有换算产...
【C语言】屎山代码补救
发表于2025-12-24|更新于2026-03-31|C语言|递归
屎山代码补救我写过一个屎山代码 - Hexo,一直不愿意面对。这不要期末了吗,我找了 重庆没电大学 的C语言往年真题开始刷结果您猜怎么着,我碰见一个题目,恰好就是我屎山代码的解药!直接看吧: 123456789101112131415161718#include<stdio.h>void Fun(int x);void main() { int a = 12; printf("%d=", a); Fun(a);}void Fun(int x) { int i; for (i = 2; i < x; i++) { if (x % i == 0) { printf("%d * ", i); Fun(x / i); return; } } printf("%d", x);} 这个代码利用递归调用,很好地实现了质因数分解,仅仅只花了18行这里的return很有趣 😊,试试将return注释掉,运行一下看吧👉v...
【C语言】一维数组地址
发表于2025-12-23|更新于2026-03-31|C语言|地址•指针
一维数组地址一维背景123假设有int a[5],请问表示数组a中首元素的地址是什么?A: aB: &a 答案: a 深究数组地址:一、取地址运算符 &1int a; 如果 a 是一个 int 类型的变量,那么 &a 的结果类型是 int \*(读作:指向 int 的指针) 怎么理解 & 符号?你可以把它当成一个动作 。 a:代表“** 变量里的值**”(在这个房间里住着谁?)。 &a:代表“** 变量的地址**”(这个房间的门牌号是多少?)。 &a是一个地址,是什么类型的?是 int * 而不是 int虽然“地址”看起来像是一串数字(比如 6422300),在物理上它确实是个整数,但在 C 语言的规则里,它属于指针类型 。 二、怎么打印地址?用什么符号打印?新知识: %p就像用 %d 来打印整数(d ecimal),用 %f 来打印小数(f loat)一样: %p 是专门用来打印指针(Pointer)/地址 的占位符。 它有什么特别的? 如果你用 %d 打印地址,它会显示成一个很长很乱的负数或整数。而 ...
123…10
avatar
Wang Bo Sen
学无止境
文章
91
标签
34
分类
6
Follow Me
公告
正在完善中
最新文章
【Python】列表2026-03-31
【Python】判断,循环
【Python】判断,循环2026-03-31
【烟草纲目】黄鹤楼•软蓝
【烟草纲目】黄鹤楼•软蓝2026-03-30
VS Code 配置全指南:Python与C语言开发环境的底层逻辑与实践
VS Code 配置全指南:Python与C语言开发环境的底层逻辑与实践2026-03-25
【Python】数据类型与占位符2026-02-14
分类
  • C语言78
  • Python4
  • markdown1
  • 开发工具1
  • 文章4
  • 烟草纲目1
标签
八进制 动态内存分配 数据类型 二级指针 判断 数组地址 教程 结构体 宏定义 输入 递归 ascll码 头文件 自创 运算符 python 二维数组 静态变量 输入合法性校验 字符串 地址 位运算 占位符 VS Code 函数 指针 格式化输出 输出 环境配置 关键字 math.h 排序 循环 缓冲区
归档
  • 三月 2026 4
  • 二月 2026 2
  • 一月 2026 7
  • 十二月 2025 26
  • 十一月 2025 45
  • 十月 2025 5
  • 一月 2024 1
  • 四月 2007 1
网站信息
文章数目 :
91
本站总字数 :
96.5k
本站访客数 :
本站总浏览量 :
最后更新时间 :
文档
开发工具疑难解答烟草纲目
其他
音乐图库
框架
HexoButterfly
贊助
JerryC
© 2025 - 2026 By Wang Bo Sen|框架 Hexo 8.1.1|主题 Butterfly 5.5.4