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

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.mrgr.cn/news/55367.html

相关文章:

  • ANSYS Workbench纤维混凝土3D
  • Plug-and-Play Diffusion Features for Text-Driven Image-to-Image Translation
  • 【exceljs】纯前端如何实现Excel导出下载和上传解析?
  • 安全见闻笔记
  • 内网穿透很简单
  • 深入理解new Function
  • 中电金信重磅发布《金融数据安全治理白皮书》
  • 百度地图引入个性化样式,加载时出现大片白块的解决办法
  • 数据中心母线槽测温监控装置的优势和如何选型
  • Java 创建图形用户界面(GUI)组件详解之下拉式菜单(JMenu、JMenuItem)、弹出式菜单(JPopupMenu)等
  • 协议 MQTT
  • 国产操作系统的介绍与试用
  • 【ios】使用TestFlight将app分发给测试人员(超详细)
  • 微信小程序实现canvas电子签名
  • intel和AMD突然联姻,这操作给我看傻了
  • 移除Microsoft Edge浏览器“由你的组织管理“提示的方法
  • springboot图书馆座位预约系统-计算机毕业设计源码85670
  • Vue 变量关键字,var、let 和 const区别
  • 工业物联网网关的概述及工作原理-天拓四方
  • 怎么修改文件的创建日期?操作详细的5个超简单方法
  • RHCE的学习(3)
  • 【C++】哈希 Hash
  • 私域电商新纪元:消费增值模式引领业绩飞跃
  • stable diffusion WEBUI Brief summary
  • MATLAB深度学习工具箱——建议收藏!
  • CMA软件评测机构内部审核核查点清单,如何选择内审方法?