c语言基础程序——经典100道实例(二)


前面 52 题可以看下 《c语言基础程序——经典100道实例。》

c语言基础程序——经典100道实例

        • 053,按位异或 ^
        • 054,取数右端4~7位
        • 055,按位取反~
        • 056,画圆形
        • 057,画直线
        • 058,画矩形
        • 059,画椭圆
        • 060,混合画图
        • 061,杨辉三角形
        • 062,画点
        • 063,画曲线
        • 064,画扇形
        • 065,画爱心

053,按位异或 ^

题目: 学习使用按位异或 ^。

问题分析: 按位异或有 4 种情况,相同的为 0 ,不同的为 1 。

  • 0 ^ 0=0;
  • 0 ^ 1=1;
  • 1 ^ 0=1;
  • 1 ^ 1=0;
/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include<stdio.h>void printBinary(int num) {// 打印二进制for (int i = 31; i >= 0; i--) {int bit = (num >> i) & 1;printf("%d", bit);if (i % 8 == 0)// 每8个加一个空格printf(" ");}printf("\n");
}int main() {int a = 17, b = 13;printf("整数 a 的值是:%d,二进制表示如下:\n", a);printBinary(a);printf("整数 b 的值是:%d,二进制表示如下:\n", b);printBinary(b);int xor = a ^ b;printf("a 和 b 按位 ^ 的值是:%d,二进制表示如下:\n", xor);printBinary(xor);return 0;
}

运行结果:

整数 a 的值是:17,二进制表示如下:
00000000 00000000 00000000 00010001
整数 b 的值是:13,二进制表示如下:
00000000 00000000 00000000 00001101
a 和 b 按位 ^ 的值是:28,二进制表示如下:
00000000 00000000 00000000 00011100
054,取数右端4~7位

题目: 取一个整数 a 从右端开始的 4~7 位。

问题分析: 假设最右边的是第 1 位,步骤如下:

1,先使 a 右移 3 位(右边的3为舍弃,后面从第4位开始截取)

2,设置一个低 4 位全为 1,其余全为 0 的数,因为 -1 的二进制全是 1 ,可以让它左移 4位,然后取反。

3,将上面二者进行 & 运算即可。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include<stdio.h>void printBinary(int num) {// 打印二进制for (int i = 31; i >= 0; i--) {int bit = (num >> i) & 1;printf("%d", bit);if (i % 8 == 0)// 每8个加一个空格printf(" ");}printf("\n");
}int main() {int a, b, c;printf("请输入整数:\n");scanf("%d", &a);printf("数字 a 的二进制是:\n");printBinary(a);a >>= 3;// 往右移3位// -1 的二进制都是 1 ,即……1111111,左移4位变成……1110000b = (-1) << (7 - 4 + 1);b = ~b;// 取反变成……0001111,前面都是 0 。c = a & b;// 截取 a 的四位。printf("数字 a 右边的4到7位是:\n", c);printBinary(c);return 0;
}

运行结果:

请输入整数:
206
数字 a 的二进制是:
00000000 00000000 00000000 11001110
数字 a 右边的4到7位是:
00000000 00000000 00000000 00001001
055,按位取反~

题目: 学习使用按位取反~。

问题分析: 二进制中 0 变成 1 ,1 变成 0 。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include<stdio.h>void printBinary(int num) {// 打印二进制for (int i = 31; i >= 0; i--) {int bit = (num >> i) & 1;printf("%d", bit);if (i % 8 == 0)// 每8个加一个空格printf(" ");}printf("\n");
}int main() {int a = 203;printf("a 的二进制表示如下:\n");printBinary(a);a = ~a;printf("a 按位取反之后的二进制表示如下:\n");printBinary(a);return 0;
}

运行结果:

a 的二进制表示如下:
00000000 00000000 00000000 11001011
a 按位取反之后的二进制表示如下:
11111111 11111111 11111111 00110100
056,画圆形

题目: 画圆形。

问题分析: 这里是通过windows.h头文件来绘制圆,圆的绘制在WindowProc函数中。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>// 窗口过程函数,处理窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc; // 设备上下文句柄,用于绘制PAINTSTRUCT ps; // 绘制结构,包含绘制所需的信息RECT rect; // 矩形区域,用于定义圆的位置和大小switch (uMsg) {case WM_PAINT: // 窗口需要重绘时发送的消息hdc = BeginPaint(hwnd, &ps); // 准备绘制// 矩形的左上角(100, 100),右下角(300, 300)SetRect(&rect, 100, 100, 300, 300);// 使用Ellipse函数绘制圆Ellipse(hdc, rect.left, rect.top,rect.right, rect.bottom);EndPaint(hwnd, &ps); // 结束绘制break;case WM_DESTROY: // 窗口被销毁时发送的消息PostQuitMessage(0); // 发送退出消息,结束应用程序break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该圆由 \"公众号:数据结构和算法\" 绘制", // 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

057,画直线

题目: 画直线。

问题分析: 这里是通过windows.h头文件来绘制直线,直线的绘制在WindowProc函数中。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>// 窗口过程函数,处理窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc; // 设备上下文句柄,用于绘制PAINTSTRUCT ps; // 绘制结构,包含绘制所需的信息switch (uMsg) {case WM_PAINT: // 窗口需要重绘时发送的消息hdc = BeginPaint(hwnd, &ps); // 准备绘制// 使用MoveToEx设置直线的起点,然后使用LineTo绘制到终点MoveToEx(hdc, 50, 50, NULL); // 起点坐标(50, 50)LineTo(hdc, 400, 300);        // 终点坐标(400, 300)EndPaint(hwnd, &ps); // 结束绘制break;case WM_DESTROY: // 窗口被销毁时发送的消息PostQuitMessage(0); // 发送退出消息,结束应用程序break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制", // 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

058,画矩形

题目: 画矩形。

问题分析: 同上,也是使用windows.h头文件来绘制。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>// 窗口过程函数,处理窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc; // 设备上下文句柄,用于绘制PAINTSTRUCT ps; // 绘制结构,包含绘制所需的信息switch (uMsg) {case WM_PAINT: // 窗口需要重绘时发送的消息hdc = BeginPaint(hwnd, &ps); // 准备绘制// 使用Rectangle函数绘制矩形// 矩形的左上角(100, 100)和右下角(400, 300)的坐标Rectangle(hdc, 100, 100, 400, 300);EndPaint(hwnd, &ps); // 结束绘制break;case WM_DESTROY: // 窗口被销毁时发送的消息PostQuitMessage(0); // 发送退出消息,结束应用程序break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

059,画椭圆

题目: 画椭圆。

问题分析: 同上。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>// 窗口过程函数,处理窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc; // 设备上下文句柄,用于绘制PAINTSTRUCT ps; // 绘制结构,包含绘制所需的信息switch (uMsg) {case WM_PAINT: // 窗口需要重绘时发送的消息hdc = BeginPaint(hwnd, &ps); // 准备绘制// 使用Ellipse函数绘制椭圆// 椭圆的左上角(50, 50)和右下角(200, 150)的坐标Ellipse(hdc, 50, 50, 200, 150);EndPaint(hwnd, &ps); // 结束绘制break;case WM_DESTROY: // 窗口被销毁时发送的消息PostQuitMessage(0); // 发送退出消息,结束应用程序break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

060,混合画图

题目: 混合画图,画三角形,矩形,圆,扇形,椭圆,和五边形

问题分析: 同上

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>
#include <math.h>#define PI 3.14159// 定义PI的值为3.14159// 窗口过程函数,处理窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc; // 设备上下文句柄,用于绘制PAINTSTRUCT ps; // 绘制结构,包含绘制所需的信息POINT points[5]; // 五角星的顶点数组double radius = 100.0; // 五角星的半径double angle = 0.0; // 初始角度(以弧度为单位)int offsetX = 200; // 五角星中心的X坐标int offsetY = 300; // 五角星中心的Y坐标switch (uMsg) {case WM_PAINT: // 窗口需要重绘时发送的消息hdc = BeginPaint(hwnd, &ps); // 准备绘制// 绘制矩形Rectangle(hdc, 50, 50, 200, 150);// 绘制椭圆(作为圆的特例)Ellipse(hdc, 250, 50, 400, 150);// 绘制三角形points[0].x = 500;points[0].y = 50;points[1].x = 650;points[1].y = 150;points[2].x = 500;points[2].y = 250;Polygon(hdc, points, 3);// 计算五角星的顶点坐标for (int i = 0; i < 5; i++) {points[i].x = (int) (offsetX + radius *cos(angle + i * (2 * PI / 5)));points[i].y = (int) (offsetY - radius *sin(angle + i * (2 * PI / 5)));}// 绘制五角星Polygon(hdc, points, 5);// 绘制扇形(使用Pie函数)// 注意:Pie函数绘制的是一个由两条半径和一个圆弧围成的区域Pie(hdc, 450, 300, 600, 450, 450, 300, 580, 300);EndPaint(hwnd, &ps); // 结束绘制break;case WM_DESTROY: // 窗口被销毁时发送的消息PostQuitMessage(0); // 发送退出消息,结束应用程序break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

061,杨辉三角形

题目: 打印出杨辉三角形(要求打印出10行)。

问题分析: 杨辉三角形,每一行除了最左边和最右边以外,每个值都等于正上面和左上角的和,如下所示。

1
1    1
1    2    1
1    3    3    1
1    4    6    4    1
/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <stdio.h>#define N 10int main() {int a[N][N];// 每一行最左边和最右边都是 1 。for (int i = 0; i < N; i++) {a[i][0] = 1;a[i][i] = 1;}// 其他位置每个值等于都等于正上面和左上角的和for (int i = 2; i < N; i++)for (int j = 1; j < i; j++)a[i][j] = a[i - 1][j - 1] + a[i - 1][j];for (int i = 0; i < 10; i++) {for (int j = 0; j <= i; j++)printf("%-5d", a[i][j]);// 每个数字占5格,且左对齐printf("\n");// 每一行打印完之后要换行}return 0;
}

运行结果:

1
1    1
1    2    1
1    3    3    1
1    4    6    4    1
1    5    10   10   5    1
1    6    15   20   15   6    1
1    7    21   35   35   21   7    1
1    8    28   56   70   56   28   8    1
1    9    36   84   126  126  84   36   9    1
062,画点

题目: 画点

问题分析: 无。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>
#include <stdlib.h>
#include <time.h>// 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc;PAINTSTRUCT ps;COLORREF color;int x, y;int numPoints = 1000; // 要绘制的点的数量switch (uMsg) {case WM_PAINT:hdc = BeginPaint(hwnd, &ps);// 设置随机种子srand((unsigned int) time(NULL));// 循环绘制点for (int i = 0; i < numPoints; i++) {// 生成随机坐标(假设窗口大小为400x300)x = rand() % 400;y = rand() % 300;// 生成随机颜色color = RGB(rand() % 256, rand() % 256,rand() % 256);// 在随机位置绘制点SetPixel(hdc, x, y, color);}EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

063,画曲线

题目: 画一条贝塞尔曲线。

问题分析: 无。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>
#include <time.h>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc;PAINTSTRUCT ps;POINT bezierPoints[4]; // 贝塞尔曲线的四个控制点switch (uMsg) {case WM_PAINT:hdc = BeginPaint(hwnd, &ps);// 设置贝塞尔曲线的控制点bezierPoints[0].x = 50;bezierPoints[0].y = 200; // 起始点bezierPoints[1].x = 150;bezierPoints[1].y = 50;  // 第一个控制点bezierPoints[2].x = 250;bezierPoints[2].y = 200; // 第二个控制点bezierPoints[3].x = 350;bezierPoints[3].y = 350; // 终止点// 绘制贝塞尔曲线PolyBezier(hdc, bezierPoints, 4);EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 600, 450, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述

064,画扇形

题目: 画扇形。

问题分析: 无。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>
#include <math.h>// 窗口过程函数,处理窗口的消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {HDC hdc; // 设备上下文句柄,用于绘制PAINTSTRUCT ps; // 绘制结构,包含绘制所需的信息switch (uMsg) {case WM_PAINT: // 窗口需要重绘时发送的消息hdc = BeginPaint(hwnd, &ps); // 准备绘制// 绘制扇形(使用Pie函数)// 注意:Pie函数绘制的是一个由两条半径和一个圆弧围成的区域Pie(hdc, 50, 100, 300, 250, 50, 100, 280, 100);EndPaint(hwnd, &ps); // 结束绘制break;case WM_DESTROY: // 窗口被销毁时发送的消息PostQuitMessage(0); // 发送退出消息,结束应用程序break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 600, 400, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:

在这里插入图片描述

065,画爱心

题目: 画爱心

问题分析: 无。

/*** Created by 公众号:数据结构和算法* Copyright wansuanfa.com All rights reserved.*/#include <windows.h>
#include <math.h>#define WIDTH 800
#define HEIGHT 600// 定义绘制窗口的回调函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam) {PAINTSTRUCT ps;HDC hdc;switch (uMsg) {case WM_PAINT:hdc = BeginPaint(hwnd, &ps);// 设置画笔颜色为红色HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));HGDIOBJ oldPen = SelectObject(hdc, hPen);// 画爱心MoveToEx(hdc, WIDTH / 2, HEIGHT / 2, NULL);for (double t = 0; t < 2 * 3.14159; t += 0.01) {int x = (int) (16 * sin(t) * sin(t) * sin(t)* 20 + WIDTH / 2);int y = (int) (-(13 * cos(t) - 5 * cos(2 * t)- 2 * cos(3 * t) - cos(4 * t))* 20 + HEIGHT / 2);LineTo(hdc, x, y);}// 恢复画笔SelectObject(hdc, oldPen);DeleteObject(hPen);EndPaint(hwnd, &ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}
}// WinMain函数,Windows应用程序的入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {WNDCLASS wc = {0}; // 窗口类结构体,用于注册窗口类// 设置窗口类参数wc.lpfnWndProc = WindowProc; // 窗口过程函数wc.hInstance = hInstance; // 当前实例句柄wc.lpszClassName = "MyWindowClass"; // 窗口类名wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // 背景画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 光标wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口风格// 注册窗口类RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, // 扩展风格"MyWindowClass", // 窗口类名"该直线由 \"公众号:数据结构和算法\" 绘制",// 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, 1000, 800, // 位置和大小NULL, // 父窗口NULL, // 菜单hInstance, // 实例句柄NULL // 附加数据);ShowWindow(hwnd, nCmdShow); // 显示窗口UpdateWindow(hwnd); // 更新窗口MSG msg; // 消息结构体,用于接收消息// 消息循环while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg); // 翻译消息DispatchMessage(&msg); // 分发消息}return (int) msg.wParam; // 返回消息参数
}

运行结果:
在这里插入图片描述


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

剩余部分可以在百度网盘下载:
链接: https://pan.baidu.com/s/1FXhdXvC7VkwWA9fQtOpHFA?pwd=6666
提取码: 6666

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

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

相关文章

Git上传命令汇总

进入企业&#xff0c;每日需要上传执行用例记录到gitlab平台上&#xff0c;本文记录了常用git上传命令&#xff0c; 并用github演示。 1、本地建立分支&#xff0c;克隆远程仓库 在gitlab中&#xff0c;每个人需要创建自己的分支&#xff0c;一般以自己的名字命名&#xff0c;…

FineReport 页面设置

点击菜单栏中的「模板>页面设置」&#xff0c;弹出页面设置对话框&#xff0c;就可以对当前 sheet 进行页面设置&#xff0c;一个报表的每个 sheet 页面设置可以不同&#xff1a; 1 方向 指纸张方向&#xff0c;通常与打印结合使用。A4 纸横向预览效果和纵向预览效果 2、…

HCIP-HarmonyOS Application Developer 习题(十四)

&#xff08;多选&#xff09;1、HarmonyOs为应用提供丰富的Al(Artificial Intelligence)能力&#xff0c;支持开箱即用。下列哪些是它拥有的AI能力? A、通用文字识别 B、词性标注 C、实体识别 D、语音播报 答案&#xff1a;ABCD 分析&#xff1a; AI能力简介二维码生成根据开…

为什么软件维护成本比软件的开发成本高?

很多项目的软件维护成本比软件的开发成本高出很多 一、需求变更频繁 业务需求变化 随着市场环境的变化和业务的发展&#xff0c;客户的需求可能会不断调整和改变。例如&#xff0c;企业的业务模式发生调整&#xff0c;需要软件系统增加新的功能模块或对现有功能进行重大修改…

为什么一条Java命令,JVM就可以执行Java程序了(串联JVM面试知识点)

文章目录 前言从面试题说起JVM做了哪些事&#xff1f;“翻译”的工作不仅仅“翻译” JVM 各部件如何协同工作&#xff1f;类加载器先工作执行引擎开始工作执行引擎工作模式Main方法什么时候被执行&#xff1f; 运行时数据区域开始工作线程私有的空间大名鼎鼎的堆内存 就这么一直…

FineReport 条件属性

条件属性主要指&#xff1a;给报表的属性添加条件&#xff0c;当满足该条件时&#xff0c;对属性的属性值进行修改&#xff0c;从而达到改变报表样式的目的。 条件属性共有 12 种&#xff0c;分别是&#xff1a;颜色、字体、超级链接、形态、缩进、行高、分页、列宽、背景、边框…

Oracle 使用位图索引 Cost降低200倍! 探讨位图索引的利与弊

一.简介 位图索引&#xff08;Bitmap Index&#xff09; 是 Oracle 数据库中一种特殊类型的索引&#xff0c;适用于低基数&#xff08;Low Cardinality&#xff09;列&#xff0c;即那些列中可选值相对较少的情况下使用。它与常规的 B-tree 索引不同&#xff0c;位图索引通过位…

Columns Page “列”页面

“列”页提供了列管理工具&#xff0c;其中包括用于添加和删除列的按钮、显示绑定数据源中字段名称的列表框以及网格列、提供对所选列属性的访问的属性网格。 Columns 页面提供 Column properties &#xff08;列属性&#xff09;、Column options &#xff08;列选项&#xff…

【Git】远程操作-标签管理-多人协作

远程操作 分布式版本控制系统 概念理解 Git就像正在看的一本书。每当看完一章&#xff0c;可以将其保存起来&#xff0c;如果后面想修改或者查看以前自己看到哪里&#xff0c;随时可以翻看。Git就是帮助记录这些修改的工具&#xff0c;主要负责记录每次改动&#xff0c;就类似…

AnaTraf | 网络质量分析与DNS响应时间

http://www.anatraf.com 在当今的数字化时代&#xff0c;网络是任何企业正常运转的核心。而网络的质量直接影响着业务的连续性和用户体验。当网络性能不佳时&#xff0c;可能会导致网站加载缓慢、应用响应滞后&#xff0c;甚至影响企业的生产力。特别是在互联网世界中&#xf…

第三季度中国游戏市场收入创历史新高;京东物流与淘宝天猫达成合作;YouTube 上线“用相机拍摄”标签....|网易数智日报

第三季度中国游戏市场收入917.66亿&#xff0c;创历史新高 中国音数协游戏工委今日发布了最新的 2024 年第三季度中国游戏产业季度报告。 数据显示&#xff0c;2024 年第三季度中国游戏市场收入 917.66 亿元&#xff0c;环比增长 22.96%&#xff0c;同比增长 8.95%。 中国音…

【H2O2|全栈】JS入门知识(五)

目录 JS 前言 准备工作 数组API&#xff08;一&#xff09; API概念 数组常见API&#xff08;一&#xff09; arguments 作用域 概念 全局作用域 局部作用域 块级作用域 变量的作用域 作用域链 案例 预解析 概念 变量预解析 函数预解析 案例 对象 概念 …

【RTT-Studio】详细使用教程十七:FreeModbus通信--LCD

文章目录 一、简介二、Modbus通信三、LCD通信四、配置FreeModbus通信协议四、完整代码五、测试验证 一、简介 Modbus协议是一种用于工业控制的网络通讯协议&#xff0c;可以片面的理解为&#xff0c;Modbus协议一种机器与机器之间进行数据、信息传递的一种格式规范。   Modbu…

PostgreSQL的学习心得和知识总结(一百五十五)|[performance]优化期间将 WHERE 子句中的 IN VALUES 替换为 ANY

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

《MYSQL实战45讲 》 优化器如何选择索引?

SHOW VARIABLES LIKE long_query_time; set long_query_time0 优化器如何选择索引&#xff1f; 1.扫描的行数 估计出各个索引大致的要扫描的行数&#xff0c;行数越少&#xff0c;效率越高。 索引的基数也叫区分度&#xff0c;就是这个索引所在的字段上不同的值又多少个。优…

MySQL【知识改变命运】06

前言&#xff1a;在05这节数据结构里面&#xff0c;我们知道select * from 这个操作很危险&#xff0c;如果数据库很大&#xff0c;会把服务器资源耗尽&#xff0c;接下来提到的查询可以有效的限制返回记录 1&#xff1a;分页查询 分页查询可以有效控制一次查询出来的结果集的…

数据结构与集合源码

目录 一、数据结构 1.1 数据结构概念 1.2 研究对象 1.3 常见存储结构 1.3.1 数组 1.3.2 链表 1.单向链表 2.双向链表 1.3.3 二叉树 1.3.4 栈&#xff08;FILO&#xff0c;先进后出&#xff09; 1.3.5 队列&#xff08;FIFO&#xff0c;先进先出&#xff09; 二、集合…

基于卷积神经网络的蔬菜识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于卷积神经网络的蔬菜识别系统&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python&#xff0c;tkinter】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神…

Java设计模式梳理:行为型模式(策略,观察者等)

行为型模式 行为型模式关注的是各个类之间的相互作用&#xff0c;将职责划分清楚&#xff0c;使得我们的代码更加地清晰。 策略模式 策略模式太常用了&#xff0c;所以把它放到最前面进行介绍。它比较简单&#xff0c;我就不废话&#xff0c;直接用代码说事吧。 下面设计的…

软件架构之构件复用技术

简介 软件架构复用 在应用软件系统的开发过程中&#xff0c;通常包含以下几个关键阶段&#xff1a;需求分析、设计、编码、测试和维护。在这些阶段中&#xff0c;复用技术均可以得到有效应用。特别是&#xff0c;软件架构复用作为一种大粒度、高抽象级别的复用方式&#xff0…