可以在C语言中画表格吗?

栏目:资讯发布:2023-11-08浏览:2收藏

可以在C语言中画表格吗?,第1张

1、graphicsh里可以画直线,矩形,有了他们,画个表格还不是小意思,矩形函数的表达式吧~记住,在graphicsh头文件里。

2、例程:

#include<stdioh>

#include<stringh>

char S[100][1000]={' '};//声明表为全局变量

int s1=0;

void chart(int n,int a[],int m);

int main()

{

int n;

int M1[40]={0},M2[40]={0},M3[40][100]={0};

int i,j,k,k1,k2,max=0,col,l;

char s[30][1000];

scanf("%d",&n);

getchar();//注意,必须得有这个来接收回车符

//

for(i=0;i<n;i++)

gets(s[i]);

//求最大列数

for(i=0;i<n;i++)

{

l=strlen(s[i]);

for(j=0;j<l;j++)

{

if(s[i][j]==',')

M1[i]++;

}

if(M1[i]>max)

{

max=M1[i];

}

}

col=++max;

//求每列最大宽度 //1先求每个单元的长度,赋给M3[i][j]中

for(i=0;i<n;i++)

{

l=strlen(s[i]);

k=0;

for(j=0;j<l;j++)

{

if(s[i][j]!=',')

{

M3[i][k]++;

}

if(s[i][j]==',')

k++;

} //for2

}//for1

//2找每列最大的赋予M2[]

for(j=0;j<col;j++)

{

max=0;

for(i=0;i<n;i++)

{

if(M3[i][j]>max)

max=M3[i][j];

}

M2[j]=max;

}

//表格

chart(n,M2,col);

//输入数据

for(i=0;i<n;i++)

{

k1=0;

k2=0;

k=0;

l=strlen(s[i]);

for(j=0;j<l;j++)

{

S[2i+1][k2+1]=s[i][j];

if(s[i][j+1]==',')

{

k1=k1+M2[k]+1;

k2=k1;

k++;

j++;

}

else

k2++;

}

}

//输出表格

for(i=0;i<=2n;i++)

{

for(j=0;j<s1;j++)

printf("%c",S[i][j]);

printf("\n");

}

return 0;

}

void chart(int n,int a[],int m)//行数 每列的最大长度数组

{

int i,j,k;

int s;

s1=m+1;

for(i=0;i<m;i++)

s1+=a[i];

for(i=0;i<=2n;i++)

{

//输出奇数行

if(i%2==0)

{

s=0;

k=0;

for(j=0;j<s1;j++)

{

if(j==s)

{

S[i][j]='+';

s+=a[k];

s++;

k++;

}

else

S[i][j]='-';

}//for

} //if

//输出偶数行

else

{

s=0;

k=0;

for(j=0;j<s1;j++)

{

if(j==s)

{

S[i][j]='|';

s+=a[k];

s++;

k++;

}

}

}

} //for

}

需要有一个画直线的库函数供使用。以下讲思路。

定义点的类型为具有二维坐标,比如 struct point { double x; double y;} 之类。

定义多边形的类型为元素是点的线性表,比如链表 struct polygon { struct point p; struct polygon next; },

需要能按顺序访问各个点,并需要提供insert函数以做插入点操作。

从等边三角形开始,多边形包含起始的三个点,三个点构成等边三角形。

下面的思路是伪代码

p = 起始点head;

do {

1每个点p与下一个点p->next构成多边形的一条边,求边长;

2求出两个三等分点q1和q2(求两点构成的线段的距离并进一步求三等分点的方法写成函数,公式不用说了吧);

3按顺序将q1和q2插入p和p->next之间;

4以q1和q2为顶点求向外生长出的三角形的第三个顶点r(求r的坐标比较复杂一些,可以用公式,但我认为按q1q2与x轴的夹角分6种情况可以简化计算);

5将r插入q1和q2之间;

6p = p->next;

} while (p != 起始点head);

// 每完整循环一次增长一轮,考虑一下要循环几轮满足需要,从图看第二个图是循环3轮。

下面p依次遍历多边形每个点画线 drawline(p, p->next)

最后一个点与起始点head之间drawline(p, head)闭合图形。

完毕。

如果会编程序而不会画流程图,建议先把自己的程序研究一遍。

若是画主程序流程图,那就需看懂主函数的程序,按照main()函数中的具体书写过程来画,例如:

程序开始---定义变量---初始化变量---使用选择或者循环或者顺序结构---调用某一个子函数(可以没有)---程序结束

以上是最简单的程序流程图画法。

若你是画某一算法或是某一模块的流程图,就要把相应的算法或是模块看懂。分析算法或是模块的具体走法,根据此走法就可以画出对应的流程图。

如果你是初学者,想根据流程图的画法而去尝试编程,建议就一定要研究清楚每一个使用到的算法,读懂题目再开始编程。

下面是使VISO画流程图的几个要点:

1、选择下载一个合适版本的VISO

2、程序开始结束用胶囊

3、分页用圆圈

4、输入用平行四边形

5、语句用方块

6、判断用菱形

7、打印用波浪

第一个是简单的表结构,可以使用数组或链表来实现。

节点数据:

struct student{

char number[13];

char name[20];

enum gender;

int age;

char address[200];

}

无论数组和链表都可以直接抄书;

第二个问题,是一个树结构

通常二叉树就可以实现该功能,有很多家谱二叉树的实现可以参考。

tc/bc在dos下自带图形驱动,可以使用graphicsh 头文件调用标准C函数,如果坚决不用,请使用系统功能调用,自己编写绘图功能,DOS下使用int86()函数实现功能调用。有,你可以参考:

支持SVGA的高分辨率绘图通过调用中断 10h的4f功能来实现

主要分辨率设置代码

unsigned char set_SVGA_mode(int vmode)

{union REGS r;

rxax=0x4f02;

rxbx=vmode;

int86(0x10,&r,&r);

return(rhah);

}

void hide_text_cursor(void)

{union REGS r;

rhah=1;

rhch=32;

int86(0x10,&r,&r);

}

void selectpage(register char page)

{union REGS r;

rxax=0x4f05;

rxbx=0;

rxdx=page;

int86(0x10,&r,&r);

}

void show_text_cursor(char size)

{union REGS r;

rhah=1;

rhcl=size;

rhch=7;

int86(0x10,&r,&r);

}

unsigned int get_SVGA_mode()

{union REGS r;

rxax=0x4f03;

int86(0x10,&r,&r);

return(rxbx);

}

windows下本来就是图形界面,随便可以画,有关的概念是:Canvas,brush,color等类/参数,DrawLine/DrawArc函数/方法。

首先需要绘图函数的头文件在TC20中是graphicsh

然后需要初始化图形模式

在利用绘图函数

矩形:bar

圆形:circle

直线:line

等等。你可以到graphicsh文件中去看这些函数的参数

举个例子

#include <stdioh>

#include <graphicsh>

int main(void)

{

int gdriver; /图形驱动器/

int gmode; /图形驱动模式/

gdriver = DETECT; /自动检测硬件,已确定图形驱动器/

initgraph(&gdriver,&gmode,\"\");初始化图形设备

setbkcolor(BLUE); /设置屏幕背景颜色为蓝色/

circle(getmaxx() / 2,getmaxy() / 2,100); /在屏幕中间绘制一个半

为100的圆/

closegraph(); /关闭图形模式/

return(0);

}

以下程序已在win-tc和tc20下运行通过,已加详细注释(本人所写)。

/ 数据安全实用程序,加密解密简单程序 /

#include<stdioh>

#include<stdlibh>

#include<conioh>

int flag;

char encrypt(char ch,int key)/加密函数,把字符循环移位/

{

if(ch>='a' && ch<='z') / 如果是小写字母 /

{

ch=(ch-'a'+key%26)%26+'a'; / 字母向后移key%26个位置,超过字母z则再从a开始向后移动 /

}

else if(ch>='A' && ch<='Z') / 如果是大写字母 /

{

ch=(ch-'A'+key%26)%26+'A'; / 字母向后移key%26个位置,超过字母Z则再从A开始向后移动 /

}

return ch;

}

char decrypt(char ch,int key)/解密函数,把字符循环移位/

{

if(ch>='a' && ch<='z') / 如果是小写字母 /

{

ch=(ch-'a'+26-key%26)%26+'a'; / 字母向后移26-key%26个位置,超过字母z则再从a开始向后移动 /

}

else if(ch>='A' && ch<='Z') / 如果是大写字母 /

{

ch=(ch-'A'+26-key%26)%26+'A'; / 字母向后移26-key%26个位置,超过字母Z则再从A开始向后移动 /

}

return ch;

}

void menu()/菜单,1加密,2解密,3显示文本文件内容/

{

clrscr();

printf("\n=======================================================");

printf("\n1Encrypt the text file"); / 加密文件 /

printf("\n2Decrypt the text file"); / 解密文件 /

printf("\n3Display text file contents");/ 显示加密或解密或未加密或解密的文件 /

printf("\n4Quit\n");

printf("=========================================================\n");

printf("Please select a item:"); / 选择一个菜单 /

}

void logo()/显示程序信息/

{

printf("\nwelcome to encrypt program \n ");

return;

}

void encrypt_decrypt_File(char infile,int key, char outfile) / 加密或解密函数 /

{

FILE in,out;

char ch;

clrscr(); / 清屏 /

if((in=fopen(infile,"r"))==NULL) / 打开欲加密或解密的文件/

{

printf("Can not open the infile!\n"); / 如果打开文件失败或文件不存在打印打开失败信息 /

printf("Press any key to exit!\n");

getch(); / 并等待任一按键然后退出程序 /

exit(0);

}

if((out=fopen(outfile,"w"))==NULL) / 打开文件保存加密或解密后的内容/

{

printf("Can not open the outfile!\n"); / 如果打开文件失败或文件不存在打印打开失败信息 /

printf("Press any key to exit!\n"); / 并等待任一按键然后退出程序 /

fclose(in); / 关闭输入文件 /

getch(); / 等待按键,按任一键退出程序 /

exit(0);

}

ch=fgetc(in); /从文本文件中读入字符/

while(ch!=EOF)/加密或解密/

{

/如果是英文字符,则进行加密或解密,否则,不进行加密或解密处理/

if((ch>='a' && ch<='z' ) || (ch>='A' && ch<='Z'))

{ if(flag==1)

fputc(encrypt(ch,key),out);

if(flag==2)

fputc(decrypt(ch,key),out);

}

else

fputc(ch,out);

ch=fgetc(in);

}

/关闭输入及输出文件/

fclose(in);

fclose(out);

}

void displayFile(char infile) /将文本文件的内容显示在屏幕上/

{

FILE fp;

char string[81];

if((fp=fopen(infile,"r"))==NULL) / 以只读方式打开文本文件 /

{

printf("cann't open file");exit(0); / 如果文件不存在或打开失败打印无法打开信息并退出程序 /

}

while(fgets(string,81,fp)!=NULL)

fputs(string,stdout); /把所取字符串送到屏幕显示/

fclose(fp); / 关闭文件 /

}

int main()

{

int i,n;

char ch0,ch1;

char infile[40],outfile[40];

textbackground(LIGHTGRAY); /设置背景颜色为浅灰色/

textcolor(BLACK); /设置文字颜色为黑色/

clrscr();/清除屏幕显示/

logo(); /显示程序信息/

sleep(2); / 延时2秒 /

menu(); /显示屏幕菜单/

ch0=getche();/等待用户从键盘输入,并把输入显示在屏幕上/

while(ch0!='4')

{

clrscr();

if(ch0=='1') /选择加密功能/

{

flag=1;

printf("\nPlease input the infile to be encrypted:"); / 输入要加密的文件名 /

scanf("%s",infile); / 该文件要和本程序放在同一个目录下 /

printf("Please input the encrypt key:");

scanf("%d",&n);/输入加密密码/

printf("Please input the outfile:"); /输入存放加密内容的文件名/

scanf("%s",outfile); / 该文件可以自动创建 /

encrypt_decrypt_File(infile,n,outfile);

printf("\nEncrypt is over!\n");/ 加密成功 /

sleep(1); / 延时1秒 /

}

else if(ch0=='2') /选择解密功能/

{

flag=2;

printf("\nPlease input the infile to be decrypted:"); / 输入要解密的文件名 /

scanf("%s",infile); / 该文件要和本程序放在同一个目录下 /

printf("Please input the decrypt key:");

scanf("%d",&n);/输入解密密码,加密和解密密码应相同/

printf("Please input the outfile:"); /输入存放解密内容的文件名/

scanf("%s",outfile); / 该文件可以自动创建 /

encrypt_decrypt_File(infile,n,outfile);

printf("\nDecrypt is over!\n");

sleep(1); / 延时1秒 /

}

else if(ch0=='3') /选择显示文本文件功能/

{

printf("\nPlease input the infile to be displayed:"); / 输入要显示的文件名 /

scanf("%s",infile);

displayFile(infile);/ 显示文件 /

getch();

}

else

{ /不合法输入/

printf("\nplease input a valid number(1-4)\n");

sleep(1); / 延时1秒 /

}

menu();/显示程序菜单/

ch0=getche(); /等待用户下一次的功能选择/

}

system("cls");/清除屏幕/

logo(); /显示程序信息/

printf("\nGood Bye!\n");

sleep(2);/ 延时2秒 /

system("pause"); / 暂停,按任一键退出程序 /

return 0;

}

可以在C语言中画表格吗?

1、graphicsh里可以画直线,矩形,有了他们,画个表格还不是小意思,矩形函数的表达式吧~记住,在graphicsh头文件里。2、例程:#include<st...
点击下载
热门文章
    确认删除?
    回到顶部