c語言指法練習程式,C語言指法練習程式

時間 2021-12-19 13:08:28

1樓:度伊人網路董事長

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

#include "string.h"

從鍵盤獲得漢字的編碼

在中文windows下,預設編碼方式為gb2312, 每個漢字由兩個位元組組成。

函式的目的是:把這個漢字的高位元組寫入 pc1指向的位置,低位元組寫入 pc2指向的位置

int get_han_zi(unsigned char* pc1, unsigned char* pc2)

char buf[100];

printf("\n請輸入一個漢字:");

gets(buf);

if(strlen(buf) != 2) return -1;

*pc1 = buf[0];

*pc2 = buf[1];

if(*pc1 < 0xa1) return -2;

if(*pc2 < 0xa1) return -2;

return 0;}

從檔案(字形檔案hzk16)把字形裝入到一個32位元組的緩衝區 buf 中。

c1 是該漢字gb2312編碼的高位元組,c2是低位元組。

每個bit代表1個畫素點,16點陣的字模需要256個畫素點資訊,故需32位元組

位元組的排列與16點陣畫素的對應關係如下圖:

第0位元組 第1位元組

第2位元組 第3位元組

第14位元組 第15位元組

也就是說:每1行的16個點由2個位元組提供。順序是:從上到下,從左到右。

gb2312的編碼規則是:前一個位元組表示區號,後一個表示區中的偏移序號。

每個區有94個漢字。區號和序號的編碼都是從 0xa1開始(為了避免和西文衝突)

因此,已知某個漢字的編碼,就可以計算出檔案中所在的絕對位置。

void load_han_zi(unsigned char* buf, unsigned char c1, unsigned char c2)

int n = (c1 - 0xa1) * 94 + (c2 - 0xa1); // 計算在檔案中的位置

file* fp = fopen("hzk16.dat", "rb");

if(fp==null)

顯示漢字

buf: 從檔案中讀出的漢字字模資訊,32位元組,說明同上

italic: =1,如果要求斜體, =0 正常

kx: 水平放大率

ky: 垂直放大率

fill: 用於填充的字元

void show_han_zi(unsigned char* buf, int italic, int kx, int ky, char fill)

for(int i=0; i<16; i++)

int set_zoom_k(int* pk)

printf("請輸入放大率(1-4):");

char buf[100];

gets(buf);

int n = atoi(buf);

if(n<1 || n>4) return -1;

*pk = n;

return 0;

char get_fill_char()

for(;;){

printf("請輸入用於填充的字元");

char c = getch();

if(c>32 && c<125) return c;

int main(int argc, char* argv)

unsigned char han_zi_buf[32];  // 儲存16點陣漢字的字模

int font_italic = 0;

int font_kx = 1;  // 水平放大率

int font_ky = 1;  // 垂直放大率

char fill_char = '@';  // 填充字元

for(;;){

printf("\n----------------\n");

printf("1. 輸入一個漢字\n");

printf("2. 切換斜體\n");

printf("3. 設定水平放大\n");

printf("4. 設定垂直放大\n");

printf("5. 設定填充字元\n");

printf("6. 輸出到檔案a.txt\n");

printf("7. 退出\n");

printf("----------------\n");

printf("請選擇相應的數字\n");  char c = (char)getch();

switch(c){

case '1':

unsigned char c1;

unsigned char c2;

if(get_han_zi(&c1, &c2) != 0)

printf("\n輸入無效!\n");

else{

load_han_zi(han_zi_buf, c1, c2);

show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);

break;

case '2':

font_italic = (font_italic + 1) % 2;

show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);

break;

case '3':

if(set_zoom_k(&font_kx) !=0)

printf("\n輸入無效!\n");

else

show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);

break;

case '4':

if(set_zoom_k(&font_ky) !=0)

printf("\n輸入無效!\n");

else

show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);

break;

case '5':

fill_char = get_fill_char();

show_han_zi(han_zi_buf, font_italic, font_kx, font_ky, fill_char);

break;

case '6':

write_to_file(han_zi_buf, font_italic, font_kx, font_ky, fill_char);

break;

case '7':

exit(0);

break;

default:

printf("\n您的選擇無效!\n");

return 0;

建立如此檔名hzk16.dat

可以郵箱整套檔案發給你

c語言程式問題,C語言程式問題?

1.在你打算學習c語言之前,你要下一個狠狠地決心.因為許多電腦愛好者在學習c語言的過程中,都會遇到困難,從而沒有堅持到最後.只有你下定狠狠地決心,才能學會c語言,才能學好c語言.2.要想學習好c語言,就要學會細心,耐心.c語言程式的編寫需要非常細心,因為一個標點符號的錯誤,可能導致程式的無法執行.3...

請教一C語言程式,請教一C語言程式

include int main int max 255,min 255,maxi 0,maxj 0,mini 0,minj 0 for int i 0 i 4 i for int j 0 j 3 j if a i j min printf max d d n min d d n maxi,maxj...

c語言程式設計,如何編寫C語言程式

水土第一 我幫你寫,還需要嗎? 先上程式 include include include define max buf len 64 define year len 365 int main void double lowtempercity1 year len double hightemperc...