返回:C/C++ 内功心法(入门篇)- 目录
3. 学习编程的预备知识
编程是一项有一定门槛的知识,在对计算机的软硬件不够了解的前提下学习编程,会事倍功半。因此,在开始正式讲编程知识之前,本节课先提一些基础要求。
上网
基于网络的 QQ 聊天、淘宝购物、支付宝付款等等,不再多说。着重说这几点:
百度搜索。常规内容的搜索都离不开百度。但是,要学会鉴别搜索结果中的广告与垃圾。
必应搜索。在全球范围内检索资料的不二选择,尤其是在英文网站检索编程相关问题,更是离不开必应搜索。
学会搜索“官方网站”。网上各种资料有真有假有新有旧,最靠谱的,是官方网站的资讯。比如要下载 EasyX ,比较推荐的做法是搜索“EasyX 官网”,然后在官网里面找到所需的下载。
学会鉴别“官方网站”。并不是所有搜到的“官网”都是官方网站。网络中有各种钓鱼网站,做的很
...
返回:C/C++ 内功心法(入门篇)- 目录
1. C/C++ 的历史及特点
有关计算机的历史、C 语言的历史、C++ 的历史,以及各自有什么特点,甚至哪年谁谁谁发明了什么等等,请自行网上搜索。
2. 编程思维
乔布斯说过:“每个人都应该学习编程,因为它会教给你如何思考。”
从厨神的故事开始
我相信每个人对“编程”这个词都有自己的认识。我从一个小故事说起吧。
有个厨神,开了一下小饭店,人们非常喜欢吃他做的菜。
但是厨神也有累的时候,也有生病的时候,也有带着孩子出去玩的时候,这时候虽然有其他厨师烧菜,但顾客的满意度会下降。并且大厨也没有三头六臂,饭店的规模始终无法扩大。
所幸厨神的孩子是学编程的,给支了这么一招:让厨神将菜谱全部写出来,调料全部量化,炒菜过程标准化,整理出一份“超级菜谱”。这样,其他厨师按照这个“超级菜谱”烧的菜,能达到厨神的九成水准,这已经能满足绝大多数顾客的口味了。
然后饭店继续招聘厨师,以这个“超级菜谱”培训新
...
返回:C/C++ 内功心法(入门篇)- 目录
C/C++内功心法(入门篇)- 目录
前言
这是一本学习编程的书。
注意,本书学习的是编程,不是 C/C++ 语法,不是 Linux 使用,不是怎样配置编译器,不是学习 C/C++ 标准。我们学习的,只是编程。之所以先强调这点,是因为目前许多同学学习编程的时候,方向都偏了。如果你学习编程学了很久都不得门而入,不妨看看本书。
本书会根据读者的反馈一直在线更新。所以,谢绝转载,没有意义,反倒会给网络留下许多内容陈旧的垃圾。
如果你有更好的建议,欢迎分享给我 yw80@qq.com。
如果你觉得写的还不错,可以通过捐助鼓励下我们:https://go.easyx.cn/donate。
目录
第一章 绪论
1. C/C++ 的历史及特点
2. 编程思维
3. 学习编程的预备知识
4. 解惑
...
透明贴图,是指贴图时某些部分是完全透明的或半透明的。
本文介绍多种透明贴图的方案,包括:
- 指定透明色贴图(基于 Windows API 函数 TransparentBlt)
- 指定透明色贴图(基于直接操作显示缓冲区)
- 使用三元光栅操作实现透明贴图
- 根据 png 的 alpha 信息实现半透明贴图(基于 Windows API 函数 AlphaBlend)
- 根据 png 的 alpha 信息实现半透明贴图(基于直接操作显示缓冲区)
各种方法各有利弊,大家可以根据自己的需求选择。
1. 指定透明色贴图(基于 Windows API 函数 TransparentBlt)
这是最简单的透明贴图方法。
该方法要求图片素材的透明部分为纯色,因此建议使用 gif 或 png 格式的图片素材。如果使用 jpg 格式的图片素材,那么由于 jpg 的有损压缩,会造成边缘颜色有微小差异,与指定的透明色并不完全相同,从而导
...
平时常用的图片格式有 bmp、jpg(jpeg)、gif、png 等。其中,bmp 是无损压缩,文件体积比较大,通常都会用其他格式来代替 bmp。所以本文着重讲 jpg、gif、png 三种格式。
首先必须要提到的是:修改图片扩展名并不会修改图片格式。图片格式,是图片各像素点的组织方式,不同的格式有不同的文件头和压缩算法等。而扩展名,仅仅是一个格式的标识,方便人们辨识格式。只修改扩展名,会造成图片文件的标识与内容不符,影响图片加载。因此,必须通过绘图软件将图片保存为相应格式。
图片格式的区别
jpg 适合保存照片这类颜色丰富、图案复杂的图像,使用有损压缩。尤其在保存简单颜色的图像时,有损压缩会使颜色边缘出现“不干净”的问题。
gif 适合保存颜色简单、内容简单的图像,使用无损
...
在大家写程序的时候,经常会遇到“按任意键继续”这样的功能。网上能找到的方法主要有两种:
- 使用 _getch() 语句
- 使用 system("pause") 语句
现在挨个说说。
_getch()
_getch() 功能是从控制台输入一个字符(控制台不显示该输入),是 conio.h 里面声明的一个函数。
所以 _getch() 很好的实现了“按任意键继续”的功能。
system("pause")
system 的功能是通过控制台执行一个命令,是 stdlib.h 里面声明的一个函数。
该函数需要一个字符串指针参数表示命令。这里,"pause" 就是 system 函数将要执行的命令。
pause 命令的功能,可以在控制台 cmd.exe 下输入 pause /? 查看,可以看到,pause 的功能是:暂停并显示信息“Press any key to
...
目标
- 求解两个日期相差的天数。
- 获取每个月的天数。
代码 1
该算法先根据年月日求出该日期距离 0001年1月1日 的总天数,然后两个天数直接相减,即可求出相差的天数。
先贴出来代码:
// 计算日期差
// 编译环境:VS2017,C++ 语言
//
#include <stdio.h>
// 计算从 0001-1-1 起的天数
int countdays(int y, int m, int d)
{
if (m < 3) y--, m += 12;
return 365 * y + (y >> 2) - y / 100 + y / 400 + (153 * m - 457) / 5 + d - 306;
}
int main()
{
// 输入目标日期
int year, month, day;
scanf_s("%d-%d-%d",
...
有些同学遇到这样的问题,打开 EasyX 的帮助文档 EasyX_Help.chm 之后,发现所有的内容点击后都是空白的,就像下面这样:
这是由于 Windows 的安全机制造成的,当你从网上直接下载一个 chm 文件,或者用 Windows 资源管理器从压缩包里面解压出来 chm 文件,都会被 Windows 认为目标文件不够安全,然后默认被锁定。
所以,只需要简单解锁就可以了。
这样做:右击 EasyX_Help.chm 文件,在属性页中,会看到底部的“安全”一项,“解除锁定”没有勾选,如下图:
只需要简单的勾选“解除锁定”,然后点击确定,就可以正常浏览 chm 文件了。
常见的屏幕分辨率很奇怪,为什么总用一些不零不整的数字?比如以前最常见的分辨率是 640 x 480,当初为什么这么设计?
因为这个分辨率运算速度比较快,人也相对比较好记。
大家知道,屏幕上的每一个点,都会对应内存中的一个位置。比如 640x480@256色,表示每个点占用一个字节,整个屏幕有 640 x 480 = 300k 个点,占用 300KB 内存。屏幕的每一个像素的保存,在内存中是线性存储结构。在屏幕上的坐标 (x, y) 画一个点,就相当于在对应内存偏移 y * 640 + x 的位置赋值。
PS:在这篇文章中有一段代码,可以实践一下通过内存赋值来直接画点:https://codebus.cn/yangw/fast-putpixel
每绘制一个点,都需要执行一次乘法和一次加法运算。所有的绘图操作都需要调用画点函数,因此提高画点的效率,将会提升所有绘图操作的速度。
现在我们将计算内存偏移量的算法修改一下:
d = y * 640 +
...
(以下代码在 VC 下通过)
控制台窗口是有输入缓冲区的,当你按键后程序没有来得及处理,系统会将按键缓存,等到程序获取按键的时候,系统会把缓冲区里面之前的按键返回。
例如这个程序:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
int main()
{
printf("延时 5 秒钟。请在 5 秒钟内随便按键。\n");
Sleep(5000);
printf("延时结束。刚才您按下的按键是:\n");
while (_kbhit())
{
char c = _getch();
printf("%c", c);
};
return 0;
}
请自己执行一下前面的程序,在 5 秒延时内随便按键,等到延时结束,可以看到程序可以读出刚才的按键。
...