正文
scale函数C语言 c语言scanf函数详解
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
利用C语言实现二维图形的变换
你先看看吧,思路大概就是这样,不懂的问我。
#includestdio.h
#includemath.h
#includeiostream
using namespace std;
struct point
{
float x;
float y;
};
void translation(point*pt, float xp,float yp,int num)//num代表点的个数
{
for(int i=0;inum;i++)
{
(pt+i)-x+=xp;
(pt+i)-y+=yp;
}
}
void scale(point *pt,float xs,float ys,int num)
{
for(int i=0;inum;i++)
{
(pt+i)-x*=xs;
(pt+i)-y*=ys;
}
}
void rotation(point *pt,float angle,int num)
{
int a[2][2];
angle=angle/180*3.141592657;
a[0][0]=cos(angle);
a[0][1]=-sin(angle);
a[1][0]=sin(angle);
a[1][1]=cos(angle);
point* temp;
for(int i=0;inum;i++)
{
temp-x=(pt+i)-x;
temp-y=(pt+i)-y;
(pt+i)-x=temp-x*a[0][0]+a[0][1]*temp-y;
(pt+i)-y*=temp-x*a[1][0]+a[1][1]*temp-y;
}
}
int main()
{
int i=0,N,mode,angle,xp,yp,xk,yk,num;
cout"please input the number of point "endl;
scanf("%d",N);
num=N;
point pt[10];
while(N--)
{
printf("please input points(x,y):\n");
scanf("%f%f",pt[i].x,pt[i].y);
i++;
}
printf("please input motions\n");
printf("0 stand for translation:\n");
printf("1 stand for scale:\n");
printf("2 stand for rotation:\n");
scanf("%d",mode);
switch(mode)
{
case 0:
printf("please input the translation in x and y direction respectivly:\n");
cinxpyp;
translation(pt, xp,yp,num);
break;
case 1:
printf("please input the scale in x and y direction respectivly:\n");
scanf("%f%f",xk,yk);
scale(pt, xk,yk,num);
break;
case 2:
printf("please input the angle:\n");
scanf("%f",angle);
rotation(pt, angle,num);
break;
}
printf("after translatiton or scale or rotation:\n");
for(int i=0;inum;i++)
printf("%f %f\n",pt[i].x,pt[i].y);
}
C语言编程,编写一个将十进制数转换成十六进制数的小程序。(请指教,谢谢。)
/* 函数trans将无符号整数n翻译成d(2=d=16)进制表示scale函数C语言的字符串s */
#include stdio.h
#include windows.h
#include conio.h
#define M sizeof(unsigned int)*8
int trans(unsigned n, int d, char s[])
{
static char digits[] ="0123456789ABCDEF"; /* 十六进制数字的字符 */
char buf[M+1];
int j, i = M;
if(d2||d16)
{
s[0]='\0'; /* 不合理的进制scale函数C语言,置s为空字符串 */
return 0; /* 不合理的进制scale函数C语言,函数返回0 */
}
buf[i]='\0';
do
{
buf[--i]=digits[n%d]; /*译出最低位scale函数C语言,对应字符存入对应工作数组中*/
n/=d;
}while(n);
/* 将译出在工作数组中的字符串复制到s */
for(j=0;(s[j]=buf[i])!='\0';j++,i++);
/* 其中控制条件可简写成s[j]=buf[i] */
return j;
}
/* 主函数用于测试函数 trans() */
int main()
{
unsigned int num = 253;
int scale[]={2,3,10,16,1};
char str[33];
int i;
system("cls");
for(i=0;isizeof(scale)/sizeof(scale[0]);i++)
{
if(trans(num,scale[i],str))
printf("%5d = %s(%d)\n",num,str,scale[i]);
else
printf("%5d = (%d) Error! \n",num,scale[i]);
}
printf("\n Press any key to quit...\n");
getch();
return 0;
}
适当修改下
关于C语言中的函数调用问题,出现了以下错误,现贴出程序,请大家帮忙看一看,我是菜鸟....万分感谢!
怀疑你这段代码是不是书上摘来的,连main()函数都没有,修改了下代码,上面四个错误不再出现了,你再把main()函数补上,应该可以运行了。
#include stdio.h
#include "math.h"
#include "stdlib.h"
void iirbcfpass(ns,n,f1,f2,f3,f4,db,b,a)
double b[],a[],f1,f2,f3,f4,db;
int ns,n;
{
int k;
double *d,*c;
double omega,lamda,esslon,fl,fh; //带通不需要omega;lamda;warp();bpsub();omin(),cosh1()
void bwtf();//函数声明
//double cosh1(),warp(),bpsub();omin();
void fblt();//函数声明
fl=f2;
fh=f3;
for (k=0;kns;k++)
{
bwtf(2*ns,k,4,d,c); //求归一化L阶的每一阶的分子、分母系数
fblt(d,c,n,fl,fh,b[k*(n+1)+0],a[k*(n+1)+0]); //计算出低通滤波器系数,然后转化成为带通系数
}
}
static void bwtf(ln,l,k,n,d,c) //求归一化L阶的每一阶的分子、分母系数
int ln,k,n;
double d[],c[];
{
int i;
double pi,tmp;
pi=4.0*atan(1.0);
d[0]=1.0;
c[0]=1.0;
for (i=1;in;i++)
{
d[i]=0.0;
c[i]=0.0;
}
tmp=(k+1)-(ln+1.0)/2.0;
if (tmp==0.0)
{
c[1]=1.0;
}
else
{
c[1]=-2.0*cos((2*(k+1)+ln-1)*pi/(2*ln));
c[2]=1.0;
}
}
static void fblt(d,c,n,fln,fhn,b,a)//计算出低通滤波器系数,然后转化成为带通系数
int n;
double fln,fhn,d[],c[],b[],a[];
{
int i,k,m,n1,n2,ls;
double pi,w,w0,w1,w2,tmp,tmpd,tmpc,*work;
double combin();
void bilinear();
pi=4.0*atan(1.0);
w1=tan(pi*fln);
for (i=n;i=0 ;i-- )
{
if(c[i]!=0.0 || (d[i]!=0.0))
break;
}
m=i; //标示非0值的位置
n2=2*m;
n1=n2+1;
work=malloc(n1*n1*sizeof(double));
w2=tan(pi*fhn);
w=w2-w1;
w0=w1*w2;
for (i=0;i=n2 ;i++ )
{
work[0*n1+i]=0.0; //小心1与l
work[1*n1+i]=0.0;
}
for (i=0;i=m ;i++ )
{
tmpd=d[i]*pow(w,(m-i));
tmpd=c[i]*pow(w,(m-i));
for (k=0;k=i ;k++ )
{
ls=m+i-2*k;
tmp=combin(i,i)/(combin(k,k)*combin(i-k,i-k));
work[0*n1+ls]+=tmpd*pow(w0,k)*tmp;
work[1*n1+ls]+=tmpc*pow(w0,k)*tmp;
}
}
for (i=0;i=n2 ;i++ )
{
d[i]=work[0*n1+i];
c[i]=work[1*n1+i];
}
free(work);
bilinear(d,c,b,a,n);//合并每个级的系数到一个大的传递函数系数集合
}
static double combin(i1,i2)
int i1,i2;
{
int i;
double s;
s=1.0;
if (i2==0) return(s);
for (i=i1;i(i1-i2) ;i-- )
{
s*=i;
}
return(s);
}
static void bilinear(d,c,b,a,n)
int n;
double d[],c[],b[],a[];
{
int i,j,n1;
double sum,atmp,scale,*temp;
n1=n+1;
temp=malloc(n1*n1*sizeof(double));
for (j=0;j=n ;j++ )
{
temp[j*n1+0]=1.0;
}
sum=1.0;
for (i=1;i=n;i++)
{
sum=sum*(double)(n-i-1)/(double)i;
temp[0*n1+i]=sum;
}
for (i=1;i=n ;i++ )
for (j=1;j=n ;j++ )
{
temp[j*n1+i]=temp[(j-1)*n1+i]-temp[j*n1+i-1]-temp[(j-1)*n1+i-1];
}
for (i=n;i=0 ;i-- )
{
b[i]=0.0;
atmp=0.0;
for (j=0;j=n ;j++ )
{
b[i]=b[i]+temp[j*n1+i]*d[j];
atmp=atmp+temp[j*n1+i]*c[j];
}
scale=atmp;
if (i!=0)
{
a[i]=atmp;
}
}
for (i=0;i=n ;i++ )
{
b[i]=b[i]/scale;
a[i]=a[i]/scale;
}
a[0]=1.0;
free(temp);
}
关于scale函数C语言和c语言scanf函数详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。