最佳答案
1. 引言
直方圖是一種統計圖表,用於表示數據分佈情況。在C言語中,繪製直方圖可能經由過程多種方法實現,包含利用標準庫函數、圖形庫或自定義函數。本文將介紹如何在C言語中繪製直方圖,並供給一些入門級的函數跟技能。
2. 直方圖的基本不雅點
在繪製直方圖之前,我們須要懂得一些基本不雅點:
- 數據集:直方圖所表示的數據集。
- 組數:將數據集分別為多少組。
- 組距:每組數據的範疇。
- 頻數:每組數據中數據的數量。
3. 利用標準庫函數繪製直方圖
C言語的標準庫函數中並不直接繪製直方圖的函數,但我們可能利用printf
函數來繪製簡單的直方圖。
以下是一個利用printf
函數繪製直方圖的示例代碼:
#include <stdio.h>
#define MAX_WORD_LENGTH 20
#define MAX_WORDS 100
void printHistogram(int wordLengths[], int length) {
int i, j;
for (i = 0; i < length; i++) {
printf("%2d: ", i + 1);
for (j = 0; j < wordLengths[i]; j++) {
printf("*");
}
printf("\n");
}
}
int main() {
int wordLengths[MAX_WORD_LENGTH] = {0};
int words[MAX_WORDS];
int wordCount, i;
// 假設我們有一個包含單詞的數組
char wordsStr[] = "hello world this is a simple example";
char *wordPtr = wordsStr;
// 統計單詞長度
while (*wordPtr) {
if (*wordPtr == ' ') {
wordCount++;
wordPtr++;
} else {
words[wordCount]++;
while (*wordPtr && *wordPtr != ' ') {
words[wordCount]++;
wordPtr++;
}
}
}
// 統計每個長度的單詞數量
for (i = 0; i < wordCount; i++) {
if (words[i] <= MAX_WORD_LENGTH) {
wordLengths[words[i] - 1]++;
}
}
// 打印直方圖
printHistogram(wordLengths, MAX_WORD_LENGTH);
return 0;
}
4. 利用圖形庫繪製直方圖
假如你須要更複雜的圖形後果,可能利用圖形庫如SDL、OpenGL等來繪製直方圖。
以下是一個利用SDL庫繪製直方圖的示例代碼:
#include <SDL.h>
#include <stdio.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
void drawHistogram(SDL_Renderer *renderer, int histogram[], int max) {
int i, x, y, width, height;
for (i = 0; i < max; i++) {
width = SCREEN_WIDTH / max;
height = histogram[i] * SCREEN_HEIGHT / 100;
x = i * width;
y = SCREEN_HEIGHT - height;
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderFillRect(renderer, &SDL_Rect{x, y, width, height});
}
}
int main() {
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
int histogram[10] = {0, 2, 5, 7, 3, 6, 4, 8, 2, 1};
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow("Histogram", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
drawHistogram(renderer, histogram, 10);
SDL_RenderPresent(renderer);
SDL_Delay(5000);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
5. 總結
本文介紹了如何在C言語中繪製直方圖,包含利用標準庫函數跟圖形庫。這些技能可能幫助你開端利用C言語停止圖形編程,並進一步摸索更高等的圖形處理技巧。