线性卷积的C语言实现
C默认数组从0开始,对于xl,yl为负值的情况,只要在输出时,进行相应的相移即 可。 includeiostream. h includemath. h ttdefine Long 100 //序列长度 void generatexdouble x[Long], int xl, int x2 { forint i0;i〈Long;i ifixlix2 { x[i]il; } else { x[i]0; } } } void generateydouble y[Long], int yl, int y2 { for int i0;iLong;i ifiyliy2 { y[i]二4; } else { y[i]0; } } int maxint a, int b { ifabreturn a; else return b; } void displayxdouble x[Long] { for int i0;i〈Long;i ifx[i]0 { cout,,x[,,iz/],zx[i] * \t; L else r r L } void displayydouble y[Long] L forint i0;i〈Long;i r ify[i]0 { cout〈〈y[〈〈i”]〈〈y[i]〈 \t; } else L L L } void displayrdouble r[Long] L forint i0;i〈Long;i L ifr[i] 0 { cout〈〈r[〈〈i”]〈〈r[i]〈〈 \t; r else { L } L void juanjidouble x[Long], double y[Long], double r[Long] r forint i0;i〈Long;i { forint j0;j〈Long;j r[i]x[j]*y[i-j]; } } void initializedouble c[Long] forint i0;iLong;i { c[i]0; } } void main { static xl0; static x20; static yl0; static y20; static Long10; cout〈〈〃读入xn的序列范围xl〃; cinxl; cout〈〈〃读入xn的序列范围x2/z; cinx2; cout,z读入y n的序列范围yl”; cinyl; cout,z读入yn的序列范围y2二〃; ciny2; Longlmaxmaxxl, x2, maxyl, y2; double x[Long]; double y[Long]; double r[Long]; cout〈〈”正在初始化xn,请等待\n”; initializex ; //初始化序列 xn cout〈〈”正在初始化yn,请等待\n”; initializey ; //初始化序列 yn cout,z正在初始化rn,请等待\n〃; initialize r ; //初始化序列 r n cout,,正在产生序列x n,请等待\n〃; generatex x, xl, x2; 〃产生序列 xn cout〈〈”正在产生序列y n,请等待\n〃; generatey y, yl, y2 ; //产生序列 yn // cout〈〃\n******************\n 初始化、产生后结果\n******************\n〃; cout,,正在显示序列x n,请等待\n〃; displayxx; //displayx n cout2\n正在显示序列y n,请等待\n〃; displayyy; //displayy n cout2\n正在进行线性卷积,请等待\n〃; juanji x, y, r ; //进行线性卷积 cout,,\n正在显示线性卷积结果r n,请等待 displayrr; //displayrn coutendl;