按照题目要求写如下代码,后面附结果,如果满意,望采纳!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double A[3][16] = {160,163,167,80,83,85,155,158,159,20,22,23,170,173,176,179,
159,158,155,75,78,80,156,159,153,25,23,21,167,168,166,164,
153,155,157,81,84,82,154,153,158,27,25,24,168,172,171,170};
double mask[3][3] = {1,2,1,
2,4,2,
1,2,1};
void myfilter(double* p)
{
int i,j;
for (i = 1; i <= 14; ++i)
{
/* code */
double sum = 0;
for(j=0;j<3;++j)
{
sum += A[j][i-1]*mask[j][0] + A[j][i]*mask[j][1] + A[j][i+1]*mask[j][2];
}
// printf("sum=%lf\n", sum);
*p++ = sum/16;
}
return;
}
int main(int argc, char const *argv[])
{
/* code */
double ans[14];
double * p = ans;
myfilter(p);
int i;
for(i=0;i<14;++i)
{
printf("%.4lf\n", ans[i]);
}
printf("\n");
system("pause");
return 0;
}
追问谢谢,同时想请问一下怎样使最后输出时是一个整数?
%.4lf中的.4是什么意思啊?这句*p++ = sum/16;是在哪个for循环后面运行的呀,还是说两个for循环结束后再运行?为什么要++的?
追答计算的时候用的是double,如果要输出整型的话,需要转换为整型,比如答案
for(i=0;i<14;++i)
{
printf("%d\n",(int)floor(ans[i]+0.5));//floor()向下取整,+0.5实现四舍五入
}
%.4lf中4是输出小数精度为4位
*p++ 当然是在外层for里面,内存for外面运行的
++是为了移动指针位置,从而将每次运算的结果保存到数组ans的对应单元里,相当于直接传入数组ans,然后那一句替换为: ans[i-1] = sum/16; 注意下标是从0开始的
追问可是改成 ans[i-1] = sum/16 ,ans数组不是还没有申明吗,不能使用的呀?此外大神你用的是6.0吗,有的我在vs2010都运行不了啊~~
追答我只是说相当于,如果你真要改的话,肯定要把ans数组声明在前面或者作为参数传到函数myfilter里面
我用的GCC
VC6.0是刚试过也可以运行的啊
不能运行是什么错误,你贴出来看看。
追问噢,木有事了,是我自己的粘贴失误,真的很感谢你那么认真的回答,谢谢你^@^