十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
void myPrint(int s[]){ for(int i =0;i25;++i) { printf("字母:%c出现的次数 ",65+i); for(int j=0;js[i];++j) printf("* "); printf("\n"); }}
站在用户的角度思考问题,与客户深入沟通,找到和龙网站设计与和龙网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、空间域名、网页空间、企业邮箱。业务覆盖和龙地区。
你要什么图像 sin 还cos 要不我都给你把!
1、#includestdio.h
#includemath.h
void main()
{
double y;
int i,n;
for(y=1;y=0;y-=0.1)
{n=asin(y)*10;
for(i=1;i=n;i++)
printf(" ");
printf("*");
for(;i=31-n;i++)
printf(" ");
printf("*\n");}
for(y=0;y=1;y+=0.1)
{n=asin(y)*10;
for(i=-1;i=31+n;i++)
printf(" ");
printf("*");
for(;i=62-n;i++)
printf(" ");
printf("*\n");}
}
2、#includestdio.h
#includemath.h
void main()
{
double y;
int x,m;
for(y=1;y=-1;y-=0.1)
{m=acos(y)*10;
for(x=1;xm;x++)
printf(" ");
printf("*");
for(;x62-m;x++)
printf(" ");
printf("*\n");}
}
之后在给你个连个图像相交的把
3、#includestdio.h
#includemath.h
void main()
{
double y;
int n,m,i,j,x,yy;
for(yy=0;yy=20;yy++)
{ y=0.1*yy;
m=acos(1-y)*10;
n=asin(1-y)*10;
i=32+asin(y-1)*10;
j=61-asin(y-1)*10;
for(x=0;x62;x++)
{if((x==n)(x==m)) printf("+");
else if((x==n)||(x==i)||(x==j)) printf("+");
else if((x==m)||(x==62-m)) printf("*");
else printf(" ");}
printf("\n");
}
}
我画了半个正弦函数,其余的你可以照着画,欢迎讨论,
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "graphics.h"
void main()
{
int driver,mode,i;
driver=DETECT;
mode=0;
initgraph(driver,mode,"");
setcolor(15);
for(i=0;i360;i++)
line(i,200*sin(i*3.14/360),i+1,200*sin((i+1)*3.14/360));
getch();
restorecrtmode();
}
先定义好多少个点的距离 代表坐标轴上的“单位长度1”
然后就是 坐标的变换和分析了
首先楼主只用printf或cout函数是不可能画出图的,所以要使用可以画图的函数,GDI就是个函数包,是WIN API函数库中的图形函数部分,能让你在屏幕上画任何图形。
WIN API是C语言函数调用风格的编程方式,为了发挥C++的优势,MFC就是针对C++推出的,功能和WIN API是一样的,就是编程是用C++风格的。
楼主喜欢哪种风格就学哪种,WIN API或MFC,楼主只要学其中的GDI部分就可以了。
还不懂的话按在线交谈
用c++的mfc绘制柱状图的方法如下:
1:取GroupBox的区域,并保存四个值 左,上,右,下
//获取屏幕坐标
((CWnd*)GetDlgItem(IDC_STATIC_CHART))-GetWindowRect(rect);
//计算x轴y轴基本单位
int dx = (rect.right-rect.left)/50;
int dy = (rect.bottom-rect.top)/80;
//转换成对话框坐标
ScreenToClient(rect);
//保存4个值
int L = rect.left,R = rect.right,T = rect.top,B = rect.bottom;
GroupBox的区域我忘记标出来了,就在上面图中柱状图那一块
2:获取DC,这一步没什么好说的
CPaintDC dc(this);
3:画X轴,Y轴
//X
dc.MoveTo(L+dx*2,B-dy*3);
dc.LineTo(L+dx*49,B-dy*3);
//最后的那个箭头
dc.MoveTo(L+dx*49,B-dy*3);
dc.LineTo(L+dx*48,B-dy*2);
dc.MoveTo(L+dx*49,B-dy*3);
dc.LineTo(L+dx*48,B-dy*4);
Y轴同理,但是考虑到dx,dy的值不一样,当画Y轴的箭头时,需要交换dx和dy的位置
//纵坐标线 dc.MoveTo(L+dx*2,B-dy*3);
dc.LineTo(L+dx*2,B-dy*77);
dc.MoveTo(L+dx*2,B-dy*77);
//交换了dx,dy的位置
dc.LineTo(L+dx*2-dy,B-dy*77+dx);
dc.MoveTo(L+dx*2,B-dy*77);
//交换了dx,dy的位置
dc.LineTo(L+dx*2+dy,B-dy*77+dx);
绘制完结果如图:
4:画柱状图,这里主要根据前面计算dx,dy时,划分的数量来计算每个柱的宽度,以及柱间的间隔
//第一个柱状体的左下坐标
int x = L+dx*3;
int y = B-dy*3;
for(int i=0;i
CRect rc;
rc.left=x+i*dx*9;
rc.right=rc.left+dx*7;
rc.bottom=y;
rc.top=rc.bottom-dy*answer[index][i+1];
//这里把柱状图的信息输出,这里输出的是一个数字,因为要转换成字符串,比较麻烦
//处理了一下,肯定有简洁的处理方式,但是我也懒得去想了,我很懒的
dc.SetBkMode(TRANSPARENT);//设置透明背景,要不然输出文字之后会有一块白,难看
char num[10];
sprintf(num,"%d",answer[index][i+1]);
CString strnum(num);
dc.TextOutW((rc.left+rc.right)/2-dx,rc.bottom-dy*(answer[index][i+1]+3),strnum);
//画刷是我之前就定义好的,直接拿来用
dc.FillRect(rc,brushs+i);
}
5:添加控件消息响应函数
维护一个全局变量index来保存当前题号,创建重绘函数updateInfo
void CEnglishReportDlg::updateInfo(){
int count = choose_c[index];
int i;
//选项存在,赋值,L是宏命令与TEXT()相同功能
for(i=0;i
m_strLable[i] = choose[index][i];
}
//无此选项,置空
for(;i5;i++)
m_strLable[i] = L"";
m_strTopic = topics[index];
//获取GroupBox区域,并转换成对话框坐标
CRect rect;
((CWnd*)GetDlgItem(IDC_STATIC_CHART))-GetWindowRect(rect);
ScreenToClient(rect);
//重绘此区域
InvalidateRect(rect);
//将控件变量更新到前台
UpdateData(FALSE);
}
函数1:响应ListBox的SelChange事件
void CEnglishReportDlg::OnLbnSelchangeListTopic()
{
// TODO: 在此添加控件通知处理程序代码
index = m_listtopic.GetCurSel();
updateInfo();
}
函数2:上一页按钮的Click事件
void CEnglishReportDlg::OnBnClickedButtonPre()
{
// TODO: 在此添加控件通知处理程序代码
if(index0)
index--;
updateInfo();
m_listtopic.SetCurSel(index);
}
函数3:下一页按钮的Clicl事件
void CEnglishReportDlg::OnBnClickedButtonNext()
{
// TODO: 在此添加控件通知处理程序代码
if(index19)
index++;
updateInfo();
m_listtopic.SetCurSel(index);
}
至此基本的功能都已经实现了,还差最后一步:
6:初始化对话框
for(int i=0;i20;i++){
m_listtopic.AddString(topics[i]);
}
//index初始化为0,直接刷新
updateInfo();
m_listtopic.SetCurSel(index);
运行结果如下: